在89c51单片机中用汇编语言编程,程序启动,正常运行状态流水灯无线循环。同时,两个LED数码管显示 FO字符KEY1按一下:显示”54“两个数字。KEY2按一下:D4和D5闪烁6次。其中第一个LED数码管接口为P0.0到P0.7,第二个LED数码管接口为P2.0到P2.7。KEY1接INT0,KEY2接INT1。
时间: 2024-03-25 14:35:29 浏览: 62
好的,这是一个典型的单片机应用程序。以下是该程序的汇编代码实现:
```
; 定义端口地址
P0 equ 80h
P2 equ A0h
; 定义常量
DelayTime equ 1000 ; 延时时间
; 定义变量
Count1 db 0 ; 计数器1
Count2 db 0 ; 计数器2
; 初始化程序
Init:
mov P0, #0FFh ; P0端口设置为输出
mov P2, #0FFh ; P2端口设置为输出
mov TMOD, #01h ; 定时器0工作在模式1
mov TH0, #0 ; 定时器0高8位清零
mov TL0, #0 ; 定时器0低8位清零
setb TR0 ; 启动定时器0
setb EA ; 允许中断
setb EX0 ; INT0外部中断打开
setb EX1 ; INT1外部中断打开
setb IT0 ; INT0外部中断下降沿触发
setb IT1 ; INT1外部中断下降沿触发
setb P3.2 ; INT0、INT1端口上拉
; 主程序
Main:
mov P0, #FEh ; 第一个LED数码管显示0
mov P2, #FEh ; 第二个LED数码管显示0
sjmp $
; INT0外部中断服务程序
INT0_Service:
mov A, #54h ; A寄存器存放FO字符的ASCII码
mov P0, A ; 第一个LED数码管显示F
mov P2, A ; 第二个LED数码管显示F
inc A ; A寄存器加1,存放O字符的ASCII码
mov P0, A ; 第一个LED数码管显示O
mov P2, A ; 第二个LED数码管显示O
acall Delay ; 延时
mov P0, #0FEh ; 第一个LED数码管显示5
mov P2, #0FEh ; 第二个LED数码管显示5
acall Delay ; 延时
mov P0, #04h ; 第一个LED数码管显示4
mov P2, #04h ; 第二个LED数码管显示4
acall Delay ; 延时
mov P0, #0Fh ; 第一个LED数码管关闭
mov P2, #0Fh ; 第二个LED数码管关闭
ret
; INT1外部中断服务程序
INT1_Service:
mov Count1, #6 ; 计数器1赋初值
mov Count2, #6 ; 计数器2赋初值
clr P3.6 ; D4LED亮
clr P3.7 ; D5LED亮
acall Delay ; 延时
setb P3.6 ; D4LED灭
setb P3.7 ; D5LED灭
acall Delay ; 延时
sjmp $
; 延时函数
Delay:
mov R7, #DelayTime
DelayLoop:
djnz R7, DelayLoop
ret
; 中断向量表
org 0000h
jmp INT0_Service ; INT0外部中断服务程序入口
jmp INT1_Service ; INT1外部中断服务程序入口
```
阅读全文