单片机中的中断服务程序是干嘛的?里面写些什么?
时间:10-02
整理:3721RD
点击:
单片机中的中断服务程序是写中断响应(比如说一个按键接P1.0口,按下按键,点亮一个LED灯,停止定时器1代码能这么写吗?)
void timer()interrupt3
{
if(P1^0==0)
{
TR1=0;
LED0=0;
delay(255);
}
TH1=0xd8;
TL1=0xf0;
TR1=1;
}
这样对吗?就是说中断服务程序里面是写中断后该做的事,那如果不用中断服务程序写,直接用普通的函数void zhongduan()来代替不行吗?求解,谢谢。
void timer()interrupt3
{
if(P1^0==0)
{
TR1=0;
LED0=0;
delay(255);
}
TH1=0xd8;
TL1=0xf0;
TR1=1;
}
这样对吗?就是说中断服务程序里面是写中断后该做的事,那如果不用中断服务程序写,直接用普通的函数void zhongduan()来代替不行吗?求解,谢谢。
不能代替,void zhongduan()只是普通的函数;中断函数具有优先级。
就拿计数来说,比如利用下降沿进入中断计数++。如果不用中断的话需要执行完一圈再来判断电平状态,很容易就漏掉一些下降沿。
单片机会判断中断源的状态位,如果某个中断状态为置1,硬件LCALL指令会找到中断处理函数的地址去执行,所以必须按照中断处理函数的写法来写(void timer()interrupt3),要不然找不到的。
单片机会判断中断源的状态位,如果某个中断状态为置1,硬件LCALL指令会找到中断处理函数的地址去执行,所以必须按照中断处理函数的写法来写(void timer()interrupt3),要不然找不到的。