89C51的P1.0接有发光二极管(低电平有效),要求每500ms闪烁一次,用中断和查询两种方法编写汇编语言源程序

2025-03-17 16:59:10
推荐回答(1个)
回答1:

LED BIT P1.0 ;LED 赋于 P1.0
ORG 00H ;下一条指令地址
AJMP MAIN ;转主程序MIAN
ORG 0BH ;定时中断T0入口地址
AJMP T0INT ;转定时子程序
ORG 30H ;MAIN标号地址
MAIN:
MOV TMOD,#01H ;定时器工作方式1,16位计数器
MOV TH0,#3CH ;定时常数初值3CB0H,为50ms
MOV TL0,#0B0H
SETB EA ;开总中断
SETB ET0 ;允许定时器T0中断
SETB TR0 ;允许定时器T0计数
MOV R0,#10 ;中断次数
AJMP $ ;原地踏步,等待中断到来

T0INT: ;T0中断子程序
MOV TH0,#3CH ;重赋初值
MOV TL0,#0B0H
DJNZ R0,RTI ;R0减1,未到0 ,转到RTI: RETI 。
MOV R0,#10 ;R0为0,重新赋值10 。此时时间刚好为50msX10=0.5s
CPL LED ;P1.0取反。即LED每0.5秒亮或灭一次。
RTI:
RETI ;跳出中断子程序 ,返回AJMP $继续等待下一次中断。

END ;程序结束