一、实验目的
- 掌握中断控制原理;
- 掌握中断处理程序的编程方法。
二、知识要点
(1)8051内部有5个中断源,其中两个为外部中断源/INT0、/INT1,两个定时器T0、T1的溢出请求中断,1个片内串行口发送或接收中断源TI和RI。
(2)8051的5个中断源的优先次序已由硬件结构决定,由高到低顺序:
/INT0→T0→/INT1→T1→RI或TI
(3)C51编译器支持51单片机的中断服务程序。用C语言编写中断服务函数的格式为:
函数类型 函数名(形式参数列表)[interrupt n][using m]
其中,interrupt后面的n是中断编号,取值范围为0~4。using中的m表示使用的工作寄存器组号(如不声明,取默认值第0组)
三、实验步骤与要求
- 使用Proteus画出电路原理图。
- 使用Keil C51编写源程序,编译,生成Hex文件。
- 运行程序,观察并分析实验结果。
- 写实验报告。
四、实验内容
(1)利用外中断/INT0,控制P1口所接LED花样闪烁。
(2)利用外中断/INT1,统计中断次数,并将统计结果送P1口的8位LED显示。
1.代码
下面的代码将(1)、(2)合为一段代码,利用外中断/INT0,控制P1口所接LED花样闪烁。利用外中断/INT1,统计外中断/INT0中断次数
#include<reg51.h>
char led[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
bit dir=0,run=0;
void delay(unsigned int time);
int num=0;
key() interrupt 0{
char i;
for(i=0;i<=7;i++){
P1=led[i];
delay(200);
}
P1=0xff;
num++;
}
key1() interrupt 2{
P1=~num;
}
void main(){
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
while(1){
}
}
void delay(unsigned int time){
unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}