一、说明
单片机中“中断”处理主要是指单片机暂停当前主程序的执行,而去执行更重要或需急迫处理的事件请求的处理程序,处理完成后,再回到主程序暂停处继续执行。这个事件叫“中断源”,发出的中断信号叫“中断请求”,事件处理程序叫“中断处理程序”或“中断服务程序”,暂停主程序的程序位置叫“断点”。
中断技术主要用于实时监测与控制,避免单片机CPU花大量的时间去查询和判断需要处理的事件是否发生。有了中断系统,CPU就可以减少大量的查询时间而去处理其他工作,当事件发生提出处理要求,单片机能及时地响应中断请求源提出的服务请求,并快速响应与及时处理。
单片机对于中断的处理是由中断响应和中断服务二个部分组成。中断响应主要由单片机硬件实现,中断服务主要由软件(中断服务程序)完成。
一个中断源中断请求被响应,须满足以下必要条件:
- (1)总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。
- (2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。
- (3)该中断的中断允许位=1,即该中断被允许。
- (4)无同级或更高级中断正在被服务。
中断响应就是CPU对中断源提出的中断请求的判断和处理,只有满足上述条件时,就进行中断响应。
利用C51设计2个基本的I/O控制程序,编程实现以下功能:
- 对外部按键的状态读取
- 对多个按键的判断处理
- 根据按键进行不同的输出控制LED显示
- 8个LED的4-6种“花样”显示控制
二、重点
- 51系列单片机的基本结构特点、引脚功能及其使用的基本方法
- 掌握keil c51的程序设计特点及方法
三、实现
#include <reg52.h> sbit INT_0 = P3^2; sbit P26 = P2^6; unsigned int i=0,count=0; unsigned char kc1=0x01,kc2=0x0f,kc3=0x03,kc4=0; //不同中断次数下LED显示的初值 void delay10ms(void) //约10ms延时子程序(12MHZ),用于防键抖动 { unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--); } void delay500ms(void) //约500ms延时子程序(12MHZ),用于显示变化的间隔 { unsigned char i,j,k; for(i=10;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--); } void main() { EA=1; EX0=1; IT0=1; //允许/INT0中断,IT0=1为边沿触发 while(1) { switch (count) { case 0:P0=kc1; P26=1;P26=0; kc1<<=1;delay500ms();if (kc1==0) kc1=0x01;break; //0次 case 1: P0=kc2; P26=1;P26=0;kc2=~kc2;delay500ms(); break; //1次 case 2: P0=kc3;P26=1;P26=0;kc3<<=1; kc3<<=1;delay500ms(); //2次 if (kc3==0x00) kc3=0x03; break; case 3: P0=kc4; P26=1;P26=0; delay500ms();kc4++; break; //3次 } } } void int0(void) interrupt 0 ///INT0中断服务函数 { delay10ms(); //防按钮抖动,可根据实际情况调整 if (INT_0==0) { count++; if (count==4) count=0; } }
四、下载