中断控制LED流水灯

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名:杨凡 学号:10030208

实验效果:LED先自高位向低位依次亮。
中断效果:按键一次会中断当前效果,执 行反效果

定时和按键,都采用了中断方式。即采用 定时器0中断来控制延时时间,用外部中断 0进行方向控制;
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17

void main(void) { TMOD = 0x01; TH0 = (65536 - 10000) / 256; TL0 = (65536 - 10000) % 256; TR0 = 1; ET0 = 1; PT0 = 1; IT0 = 1; EX0 = 1; EA = 1; temp = 0xfe; P1 = temp; while(1); }

谢谢大家!




IT0 = 1; EX0 = 1; EA = 1;
//外部中断输入下降沿有效 //允许X0中断 //开放总中断

temp = 0xfe; P1 = temp; while(1);
} void T0_int(void) interrupt 1 //每隔10ms执行一次 { TH0 = (65536 - 10000) / 256; //定时10ms@12MHz TL0 = (65536 - 10000) % 256; i++;
什么 是中 断 事件B的 ? 处理过程

80C51单片机有5个中断源。见下表
说明 从P3.2引脚引入的外部中断申请
中断源 外部中断 INT 0 定时器T0中断
定时器T0溢出时引发中断申请 从P3.3引脚引入的外部中断申请
定时器T1溢出时引发中断申请 一次串行发送或接收完成后,发出中断申 请
外部中断
INT1
定时器T1中断 串行口中断
KEIL的使用 画仿真硬件图 KEIL与proutes联机调试


由于时间仓促,知识使用能力范围有限,对 中断理解不够,此次PPT效果不是很好,但 还是自己课后时间做出来的,实训过程中, 多次出现错误调试不出来也很着急,着急是 没用的,于是请教了同学,看了上学期的中 断内容,自己运用的是外部中断利用按键的, 首先确定INT0是P3.2口,还有就是延时时间 用计数次数乘上定时时间。如延时0.5S=50 次*10000次*1uS,这些设定好了还有注意的 是要去除按键的消抖。

硬件消抖用RS触发器 软件消抖

如果按键较多,常用软件方法去抖,即检 测出键闭合后执行一个延时程序,5ms~ 10ms的延时,让前沿抖动消失后再一次检 测键的状态,如果仍保持闭合状态电平, 则确认为真正有键按下。当检测到按键释 放后,也要给5ms~10ms的延时,待后沿抖 动消失后才能转入该键的处理程序。
//设定T0定时方式1 //定时10ms@12MHz
//允许T0中断 //设定T0为高优先级 //外部中断输入下降沿有效 //允许X0中断 //开放总中断





void X0_int(void) interrupt 0 using 1பைடு நூலகம்{ unsigned char k; j0 = ~j0; //改变运动方向 for(k = 200; k > 0; k--); //延时一会再退出,以避免抖动 }
D1
D2
D3
D4
D5
D6
D7
D8
18
XTAL2
LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW 9 RST
29 30 31
PSEN ALE EA
R1
PULLUP
RN1
1 2 3 4 5 6 7 8 300 16 15 14 13 12 11 10 9 1 2 3 4 5 6 7 8 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51

抖动时间的长短由按键的机械特性决定, 一般为5ms~10ms。这是一个很重要的时间 参数,在很多场合都要用到。 按键 按键稳定闭合时间的长短则是由操作人员 的按键动作决定的,一般为零点几秒至数 秒。键抖动会引起一次按键被误读多次。 为确保CPU对键的一次闭合仅作一次处理 ,必须去除键抖动。在键闭合稳定时读取 键的状态,并且必须判别到键释放稳定后 再作处理。

#include <reg52.h> #include <intrins.h> unsigned char i = 0, temp; unsigned char bdata j; //在位寻址区定义字节变量 sbit j0 = j ^ 0; //定义位变量 //------------------------------------------void main(void) { TMOD = 0x01; //设定T0定时方式1 TH0 = (65536 - 10000) / 256; //定时10ms@12MHz TL0 = (65536 - 10000) % 256; TR0 = 1; ET0 = 1; //允许T0中断 PT0 = 1; //设定T0为高优先级



CPU在处理某一事件A时,发生了另一事件B请求 CPU迅速去处理(中断发生或中断请求); CPU暂时中断当前的工作,转去处理事件B(中断响 应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中 断的地方继续处理事件A(中断返回)。 事件A
中断过程
事件B
中断请求→中断响应→中断服务→中断返回


if(i >= 100) {

i = 0; if(j0 == 0) temp = _c rol_(temp, 1); if(j0 == 1) temp = _c ror_(temp, 1); P1 = temp;
} } //------------------------------------------void X0_int(void) interrupt 0 using 1 { unsigned char k; j0 = ~j0; //改变运动方向 for(k = 200; k > 0; k- -); //延时一会再退出,以避免抖动 }
相关文档
最新文档