所有中断程序需要完成的步骤
中断响应条件
以上三条同时满足时,CPU才有可能响应中断。因为串口中断和定时器中断还需要其他设置条件,即这个条件只是说明了第一张图中IE需要设置,中断条件完整还需要设置TCON,SCON,定时器中断及串口中断还要加上TMOD的设置以及TH0和TL0初值问题。
对应代码:蓝色是外加条件,红色任何中断的必要条件,任何中断条件所必须设置的
1 void Int0Init() //外部中断的条件设置 2 { 3 //设置 INT0 4 IT0=1;//跳变沿出发方式(下降沿) 5 EX0=1;//打开 INT0 的中断允许。 6 EA=1;//打开总中断 7 } 8 9 10 void Int0() interrupt 0 //外部中断 0 的中断函数 11 { 12 //写入要完成的任务 13 }
初始化程序应完成如下工作:
对应代码:蓝色是外加条件,红色任何中断的必要条件,任何中断条件所必须设置的
1 void Timer0Init() 2 { 3 TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。 4 TH0=0XFC; //给定时器赋初值,定时1ms 5 TL0=0X18; 6 ET0=1;//打开定时器0中断允许 7 EA=1;//打开总中断 8 TR0=1;//打开定时器 9 } 10 11 void Timer0() interrupt 1 12 { 13 //发生定时器中断索要完成的任务 14 }
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:
●确定串行口控制(编程SCON寄存器确定串口工作方式SM0,SM1,允许串口接受REN);
●确定T1(定时器)的工作方式(编程TMOD寄存器);
●计算T1的初值,装载TH1、TL1;
●串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。中断源的中断允许 打开总中断CPU开中断
——打开允许中断,依次打开串口允许中断位ES,总中断允许位EA(=1,允许)
●启动T1(编程TCON中的TR1位);
●当串口有中断请求时(串口有数据传输时)即中断源发生响应,开始进入中断程序
对应代码:蓝色是外加条件,红色任何中断的必要条件,任何中断条件所必须设置的
1 void UsartInit() 2 { 3 SCON=0X50; //设置为工作方式1 4 TMOD=0X20; //设置计数器工作方式2 5 PCON=0X80; //波特率加倍 6 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 7 TL1=0XF3; 8 ES=1; //打开接收中断 9 EA=1; //打开总中断 10 TR1=1; //打开计数器 11 } 12 13 void Usart() interrupt 4 14 { 15 u8 receiveData; 16 17 receiveData=SBUF;//出去接收到的数据 18 RI = 0;//清除接收中断标志位 19 SBUF=receiveData;//将接收到的数据放入到发送寄存器 20 while(!TI); //等待发送数据完成 21 TI=0; //清除发送完成标志位 22 }
原文:https://www.cnblogs.com/zhj868/p/12513768.html