一. 实验要求
1. 了解中断原理及51中断编程。
2. 了解51单片机的定时器及其工作模式。
电路结构如上图所示,两个按钮分别接外部中断1和2。当按下按钮1时,流水灯以间隔时间500ms为单位,依次流水点亮(即按下按钮1后,灯1点亮500ms,其余灯熄灭。随后灯2点亮500ms, 其余灯熄灭. 随后灯3点亮500ms, 其余灯熄灭……).任意时刻,当按钮2按下时,流水灯停止,并保持当前状态。 二. 硬件分析
三. 实验流程图
开始 定时/计数器初始值设置 启动定时/计数器 定时/计数器是否延时50ms? 定时/计数器重新赋值 是否循环10次(延时500ms) 按键2按下暂停
四.程序分析 #include ucharcodeALLNum[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void exter0(); void exter1(); void exter2(); void exter0()interrupt 0 //外部中断0处理函数 { ET0=0; } void exter1()interrupt 1 //定时器0中断处理函数 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; { if(num==10) //定时器中断执行10次,每次50ms共500ms num=0; //将num值重置为零,进行下一次中断 使之达到500ms i++; EX0=1; IT0=1; } void exter2()interrupt 2 //外部中断1中断处理函数 { i=0; P0=0xfe; //给P0一个初值使一个灯亮 ET0=1; //开定时器中断 } void main() { TMOD=0x01; //使定时器的工作方式为1 TH0=(65536-50000)/256; //对定时器高、低8位赋值 TL0=(65536-50000)%256; TR0=1; //启动定时器0 } if(i==8) i=0; P0=ALLNum[i]; EA=1; EX1=1; IT1=0; IT0=1; while(1); } //无限循环 作者:杨丹班级:学号: 1207 20121885 因篇幅问题不能全部显示,请点此查看更多更全内容