关于16F716的AD转换不能进行的问题(已解决) 16F716启动A/D转换命令为:GODONE=1;

2020-02-09 11:41发布

初学PIC,编了个AD转换试验程序,在Proteus中仿真通过,但烧入16F716后总也不行,开始以为不能进中断程序,就加上了定时中断,结果定时中断在16F716上正常,就是AD转换部分不工作,请大家给诊断诊断,源程序如下:

#include <pic.h>
unsigned  int k,ad,i;

//A/D转化初始化子程序
void     adinitial()
{
ADCON0=0x95;   //选择 A/D通道为 RA2,打开 A/D转换器,且使 A/D转换时钟为 tosc/32
ADCON1=0X0;    //设参考电压为VDD RA0-RA3口设置为模拟量输入方式
ADIE=1;        //A/D转换中断允许
PEIE=1;        //外围中断允许
TRISA2=1;      //置RA2为输入状态
}

//TMR0 初始化子程序
void   tmint()
{
T0CS=0;    //TMR0 工作于定时器方式
PSA=0;     //TMR0 不用分频
PS2=0;
PS1=1;
PS0=1;
T0IF=0;     //清除 TMR0 的中断标志
T0IE=1;     //TMR0 中断允许
RBIE=1;
}

//系统其它部分初始化子程序
void   initial()
{
TRISB=0x00;
PORTB=0xf;
k=0;
}

//中断服务程序
void interrupt AD(void)
{
RB6=1;
if(ADIF==1)
{
        RB5=1;
        ADIF=0;
        ad=ADRES;
        if(ad>50)
        {
                RB7=1;
        }
        else
        {
                RB7=0;
        }
        ADCON0=0x95;   //启动A/D转换
}
if(T0IF==1){
        k=k^0X1;
        RB4=k;
        T0IF=0;
  }
CLRWDT();
}
//主程序
main()
{
GIE=0;                     //总中断禁止
tmint();
adinitial();
initial();
ei();                    //总中断允许
while(1)
{   
;
}
}

程序烧入片子加电后B0-B4和B6口能输出高电平,B5和B7口没反应,说明没能进if(ADIF==1),请高手指点一二。不胜感激!
0条回答

一周热门 更多>