控制led灯左右移动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
; -----主程序-------
ORG 0000H
JMP START
ORG 0003H ;定义外部中断INT0入口
JMP EX0IN
ORG 0013H ;定义外部中断INT1入口
JMP EX1IN
ORG 000BH ;定义定时/计数器T0中断入口
JMP T0IN
ORG 0030H
START:
MOV TMOD,#01H ;初始化TMOD,T0工作于方式1
MOV TH0,#3CH ;装载T0计数初值,6MHZ时钟,定时100ms
MOV TL0,#0B0H
MOV A ,#0FEH ;初始化点亮发光二极管的数据
MOV R0 , #10 ;将R0作为T0溢出次数计数变量,10次溢出为1秒CLR F0 ;将F0作为移动方向标志,F0=0下移;F0=1,上移SETB EA ;开启总中断
SETB ET0 ;开启T0中断
SETB EX0 ;开启外部中断INT0
SETB EX1 ;开启外部中断INT1
SETB PT0 ;将TO中断设置为高优先级
SETB IT0 ;将外部中断INT0设置为下降沿触发方式
SETB IT1 ;将外部中断INT1设置为下降沿触发方式
SETB TR0 ;启动T0
LOOP: MOV P2, A ;A送P2口
JMP LOOP ;循环等待中断
;-----INT0中断服务程序-------
EX0IN:
mov r1,a
MOV A, P3
ANL A,#04H
MOV 20H,A
CALL DELAY
MOV A, P3
ANL A,#04H
CJNE A,20H,LL1
CPL TR0 ;将TR0取反,实现暂停/重启切换
LL2:
SETB P3.2
MOV A,P3
JNB ACC.3 ,LL2
LL1: mov a,r1
RETI
;-----INT1中断服务程序-------
EX1IN: CPL F0 ;将F0取反,切换上、下移方向RETI
;-----T0中断服务程序-------
T0IN:
MOV TH0,#3CH ;重装计数初值
MOV TL0,#0B0H
DJNZ R0 , L2 ;是否有10次溢出
MOV R0 , #10
JB F0,L1 ;F0=1?
RL A ;F0=0,下移
JMP L2
L1: RR A ;F0=1,上移
L2: RETI ;中断返回
DELAY:MOV R6,#0FFH
M2:MOV R7,#0FFH
M1:DJNZ R7,M1
DJNZ R6,M2
RET
END