您的位置:控制工程论坛网论坛 » 嵌入式系统 » 51中断实验

mcumao

mcumao   |   当前状态:离线

总积分:1503  2025年可用积分:0

注册时间: 2006-01-20

最后登录时间: 2007-06-11

空间 发短消息加为好友

51中断实验

mcumao  发表于 2006/7/11 17:50:56      1136 查看 0 回复  [上一主题]  [下一主题]

手机阅读

功能说明:

主程序将P1的8个LED作左移右移,中断时(按INT0时)使P1的8个LED闪烁5次。

硬件原理图


**********************外部中断(INT0/INT1)实验源程序**********************

 ORG 0000H;起始地址
 JMP START;跳到主程序START
 ORG 0003H;INT0中断子程序起始地址
 JMP EXT0;中断子程序
START:MOV IE,#10000001B;INT0中断使能
 MOV IP,#00000001B;INT0中断优先
 MOV TCON,#00000000B;INT0为电平触发
 MOV SP,#70H ;;设定堆栈指针
LOOP:MOV A,#0FFH;左移初值
 CLR C;C=0
 MOV R2,#08;设定左移8次
LOOP1:RLC A;含C左移一位
 MOV P1,A;输出至P1
 CALL DELAY;延时0.2秒
 DJNZ R2,LOOP1;左移8次
 MOV R2,#07;设定右移7次
LOOP2:RRC A;含C右移一位
 MOV P1,A;输出至P1
 CALL DELAY;延时0.2秒
 DJNZ R2,LOOP2;左移7次
 JMP LOOP;重复
EXT0:PUSH ACC;将累加器的值压入堆栈保存
 PUSH PSW;将PSW的值压入堆栈保存
 SETB RS0;设定工作寄存器组1
 CLR RS1 
 MOV A,#00
;为使P1全亮
 MOV R2,#10;闪烁5次(全亮,全减10次)
LOOP3:MOV P1,A;将A输出至P1
 CALL DELAY;延时0.2秒
 CPL A;将A的值取反
 DJNZ R2,LOOP3;闪烁5次(亮减10次)?
 POP PSW;从堆栈取回PSW的值
 POP ACC;从堆栈取回A的值
 RETI;返回主程序
DELAY:MOV R5,#20;0.2秒
D1:MOV R6,#20;10毫秒
D2:MOV R7,#248;0.5毫秒
 DJNZ R7,$ 
 DJNZ R6,D2 
 DJNZ R5,D1 
 RET 
 END
1楼 0 0 回复