
#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。只应在中断程序中使用这些位,因为当队列变空或返回主程序时,这些位会被复位。
参考资料:百度百科-中断指令
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)