基本要求:模拟汽车转弯灯功能。当按键KY1(P3.2/INT0#)按住时,P0.0口的LD1灯闪烁,当KY2(P3.3/INT1#)按住时,P0.1口的LD2灯闪烁。两个键都同时按下或者都没有按下则所有灯都不亮。灯闪烁间隔不小于0.5s。要求使用8051单片机的汇编代码实现
时间: 2024-05-16 16:13:57 浏览: 23
以下是基于8051单片机的汇编代码实现:
```
ORG 0H ; 程序起始地址
MOV P0, #0H ; 将P0口初始值设为0
MOV TMOD, #01H ; 设置定时器0为模式1
MOV TH0, #0FEH ; 设置定时器0高8位初值
MOV TL0, #0CCH ; 设置定时器0低8位初值
SETB TR0 ; 启动定时器0
SETB IT0 ; 设置INT0#为下降沿触发
SETB IT1 ; 设置INT1#为下降沿触发
SETB EA ; 允许中断
MAIN:
SJMP MAIN ; 程序循环
INT0_ISR: ; INT0#中断服务程序
CLR LED2 ; 关闭LD2
SETB LED1 ; 打开LD1
RETI
INT1_ISR: ; INT1#中断服务程序
CLR LED1 ; 关闭LD1
SETB LED2 ; 打开LD2
RETI
TIMER0_ISR: ; 定时器0中断服务程序
CPL P0.0 ; 翻转P0.0口
CPL P0.1 ; 翻转P0.1口
RETI
; 定义常量
LED1 EQU P0.0 ; LD1连接的P0.0口
LED2 EQU P0.1 ; LD2连接的P0.1口
END
```
以上代码中,INT0_ISR和INT1_ISR分别是INT0#和INT1#的中断服务程序,TIMER0_ISR是定时器0的中断服务程序。当按下KY1时,INT0#引脚会变为低电平触发中断,此时程序跳转到INT0_ISR中断服务程序,关闭LD2,打开LD1;当按下KY2时,INT1#引脚会变为低电平触发中断,此时程序跳转到INT1_ISR中断服务程序,关闭LD1,打开LD2。定时器0的中断服务程序TIMER0_ISR会定时翻转P0.0和P0.1口的电平,从而使得LD1和LD2灯闪烁。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)