
程序不可能一直在中断内循环,如果硬件允许你可以设置一个小灯点亮程序,放在总循环中进行检验,这样程序是否死掉在中断内就一目了然了。
此外你的程序编写有错误,这个错误至少会导致你定时器函数是不可能执行的。错误点“tmr1_flg==1;”,双等号应该为单等号。
肯定是设置trisC,况且你trisa和b都好使,c就不好使了这也太奇怪了吧。它说不识别,那就是你头文件定义错了。请检查头文件是否和芯片型号匹配。有可能头文件里没有#define trisc吧。
bittest应该是一个函数,不是一个宏。不要用define来定义。要用函数的方法来定义。你这个算是编程的基础错误吧。
首先,你porta的0~3已经设置为analog了(在cmcon里)。设置成analog的话是没法读取digital信号的。这4个口永远都是读0的。所以你编的肯定不能用。
需要设置ADC。一般用默认设置就好了,额外的配置就是porta的那些端口需要对应到ADC上。然后配置ADC的开始方式。定义好之后,在程序里只要ADC_GO(不知道你那里是什么命令)就可以了。然后读取的数值自动存储到ADC的一个寄存器里。
具体的你要看对应芯片的datasheet了,每款芯片的adc都不一样。不过相差不多。
这个你可以参考北航的《PIC16系列单片机C程序设计与PROTEUS仿真》一书。
这里简单说一下:
__COHFIG(0x3F39);
或:
__CONFIG (XT & WDTDIS & PWRTEN & BOREN & WDTDIS);
这二种都可以。具体见参考文献。
现在手头没有东西,不知道这样子行不行,这里是C做的;假设是PORTB口做输出,下面的一段可能会帮助:初始化中PORT_B=0B1000 0000;PORTB_BUFF=0B0100 0000;
void your_PROGRAM(void)
{
PORTB_BUFF=PORTB_BUFF/2;
if(PORTB_BUFF==0) PORTB_BUFF=0B0100 0000;
PORTB=PORT_B&PORTB_BUFF;
}
/ MEGA8_485_EEPROM_817_ADC_WDTc Created: 2013-8-8 16:52:15 Author: Administrator / #define F_CPU 4000000UL #include #include #include #include #include //看门狗相关头文件 #include #define INT8U unsigned char #define 5121
以上就是关于pic单片机 C语言中断程序不能返回主程序全部的内容,包括:pic单片机 C语言中断程序不能返回主程序、PIC单片机C语言编程,端口设置问题,if语句条件设置问题,AD转换问题。、PIC单片机如需要使用外部晶振,则用C语言在程序中该如何配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)