『壹』 pic单片机 C语言中断程序不能返回主程序
程序不可能一直在中断内循环,如果硬件允许你可以设置一个小灯点亮程序,放在总循环中进行检验,这样程序是否死掉在中断内就一目了然了。
此外你的程序编写有错误,这个错误至少会导致你定时器函数是不可能执行的。错误点“tmr1_flg==1;”,双等号应该为单等号。
『贰』 pic单片机的中断处理函数是怎么回事,c语言代码怎么写
首先,在初始化中设置好I/O口功能。开中断,初始化串口。
然后写个余枝串口中断函数,例如:
void interrupt isr(void)
if(RCIE&&RCIF) //串口接收中断
{
while(!RCIF);
NOP();NOP();NOP();
recive_dat[1]=RCREG; //接收1位数据
NOP();NOP();NOP();
CREN=0;
NOP();NOP();NOP();
CREN=1;
}
当然,你把括号中加上你的函数就好了。
本人建议不要在中断中处理函数,最好在中断中返回个标志位竖芹敏,然后在主函数中执行函数。
如果一定要在中断中执行函数,这个函数最好在其他地方不使用,否则容易出错首春哦。
你说的RXIF我不知道,我只知道RCIF。
『叁』 单片机定时器中断程序,C语言程序设计
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar keyval;
uchar led1=0xfe,led2=0x55,led3=0x0f;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
switch(keyval)
{
case 1:
P0=led1;
led1=_crol_(led1,1)
break;
case 2:
P0=led2;
led2=~led2;
break;
case 3:
P0=led3;
led3=~led3;
break;
default:break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
keyval++;
keyval%=4;
}
}
}
『肆』 c语言怎么编写单片机的中断
标准c语言没有中断调用机制,但是不同编译器都有相应的中断处理方式,可以使用户实现中断功能。
解决方案:
1、采取轮询的方式解决,就是每10毫秒检查一下是否有键盘请求,总的来说,这样基本上可以解决问题,而且简单易行,但每10毫秒都要检查,系统消耗太大。
2、采取中断的方式:
(1)用高级语言调用中断来处理问题。中断是cpu响应一个中断外围设备8259A的一个过程,当键盘敲击,cpu保存断点暂停执行并且跳到相应的中断处理程序继续执行,结束后根据断点再跳回来。通过这种方式可以轻松+愉快地解决这个问题。但是需要用到高级语言调用汇编,根据编译器的不同而有所差别。
(2)自己模拟中断。可以另外建立一个线程专门响应键盘的敲击,如果有敲击则打断主线程。这样做实现起来很复杂,而且涉及到不少复杂的关键技术,比如信号量之类的东西。
3、强大的vc
vc采取了消息映射的机制来处理外部设备的请求,比如时钟中断、键盘中断等等。通过此可以灰常灰常容易的处理外部中断。