单片机用C语言编写中断的范例?

单片机用C语言编写中断的范例?,第1张

定时器溢出中断:

#include<reg51.h>

void timer0(void) //函数声明

void main()

{

P1^1 = 0

TMOD = 0x01 //定时模式

THO = 0xEE

TL0 = 0xFF //定时时间

ET0 = 1//中断允许

EA = 1//总中断使能

TR0 = 1 //开始计时

while(1) //等待中断

}

void timer0(void) interrupt 1 using 0 //定时器0溢出中断

{

TR0 = 0//停止计时

P1^1 = ~P1^1 //取反输出

THO = 0xEE

TL0 = 0xFF//重载定时时间

TR0 = 1 //开始计时

}

外部中断:

#include<reg51.h>

void it0(void)

void main()

{

P^1.1 = 0

IT0 = 0 //触发方式

EX0 =1//中断允许

EA = 1 //中断使能

while(1) //等待中断

}

void it0(void) interrupt 0 using 1 //外部中断0中断处理程序

{

P1^1 = ~P1^1 //取反输出

}

串口中断:

#include<reg51.h>

void suart(void)

void main()

{

P1 = 0xAA

TMOD = 0x20//设置定时器1为自动重载模式,作为波特率发生器

TH1 = 0xXX //由波特率计算出来的定时值

TL1 = 0xXX //

SCON = 0x50 //串口模式

ES = 1//开放串口中断

EA = 1//总中断使能

TR1 = 1 //

while(1) //等待中断

{

if(XXXX)

{

SBUF = 0xAA //发送

}

}

}

void suart(void) interrupt 4 using 0

{

if(RI)//接受完臂

{

XXXXX

}

if(TI) //发送完毕

{

XXXXX

}

}

中断矢量程序入口: void 函数名(形参) interrupt 中断矢量 [using 寄存器]

就是计数器溢出

出现中断标志才产生中断 当然前提是你必须打开中断控制位和总中断

有的好一点的单片机进入中断会自动执行关闭总中断 和清除标志

中断返回自动打开总中断.

中断连接指令(ATCH)使中断事件(EVNT)与中断程序号码(INT)相联系,并启动中断事件。根据指定事件优先级组,PLC按照先来先服务的顺序对中断提供服务。

任何时刻只能激活一个用户中断。其它中断处于激活状态时,CPU发出中断暂时入队,等待以后处理。如果发生的中断数目过多,队列无法处理,则设定队列溢出状态位。当队空时,重置这些位。

中断程序必须由三部分构成:中断程序标号(即中断事件的编号)、中断程序指令和无条件返回指令。在中断程序中不能使用DISI、ENI、HDEF、L SCR和END指令。

扩展资料:

中断优先级

给中断源指定处理的次序就是给中断源确定中断优先级。中断按以下固定的优先级顺序执行:通信(最高优先级)、I/O中断和定时中断(最低优先级)。在上述3个优先级范围内,CPU按照先来先服务的原则处理中断,任何时刻只能执行一个用户中断程序。

如果发生中断过于频繁,使中断产生的速率比可处理的速率快,或中断被DISI指令禁止,中断队列溢出状态位被置1。只应在中断程序中使用这些位,因为当队列变空或返回主程序时,这些位会被复位。

参考资料:百度百科-中断指令


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8041893.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存