初学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),请高手指点一二。不胜感激!
一周热门 更多>