可以用汇编语言编写程序完成以下要求编译器是keil,电路搭建使用的是Proteus软件,基于80c51单片机 满足以下要求:程序应实现以下功能: 功能1:若开关闭合,相应的LED点亮,反之则熄灭。 功能2:开关接p1口,LED灯接p2口先整体闪烁5次(间隔约0.5秒),然后再根据开关状态亮灭。 实验要求: 1、功能2要求采用循环计数和延时子程序实现。
时间: 2023-05-29 16:02:58 浏览: 323
以下是基于80c51单片机的汇编语言程序,实现上述两个功能:
```
ORG 0000H ;程序入口地址为0000H
;定义端口地址
P1 EQU 90H ;开关接口
P2 EQU A0H ;LED灯接口
;定义延时计数器
DELAY_CNT EQU 30H
;定义常量
DELAY_TIME EQU 8000H ;延时时间,约为0.5秒
;定义中断服务子程序
ORG 0023H
JMP ISR
;定义延时子程序
DELAY:
MOV DELAY_CNT, #0FFH ;设置延时计数器初始值
WAIT:
DJNZ DELAY_CNT, WAIT ;计数器减1,等待
RET
;定义中断服务子程序
ISR:
RETI ;中断服务子程序为空
;定义主程序
MAIN:
MOV P1, #0FFH ;将P1口设为输入,开关置高电平
MOV P2, #00H ;将P2口设为输出,LED灯置低电平
;功能1:开关控制LED灯
LOOP1:
MOV A, P1 ;读取开关状态
CPL A ;取反
ANL A, #01H ;只保留最低位
MOV P2, A ;控制LED灯亮灭
SJMP LOOP1 ;循环等待
;功能2:先整体闪烁5次,再根据开关状态控制LED灯
MOV A, #05H ;设置闪烁次数为5
LOOP2:
;LED灯全部亮
MOV P2, #0FFH ;控制LED灯亮
CALL DELAY ;延时一段时间
;LED灯全部灭
MOV P2, #00H ;控制LED灯灭
CALL DELAY ;延时一段时间
DJNZ A, LOOP2 ;循环闪烁5次
;根据开关状态控制LED灯
LOOP3:
MOV A, P1 ;读取开关状态
CPL A ;取反
ANL A, #01H ;只保留最低位
MOV P2, A ;控制LED灯亮灭
SJMP LOOP3 ;循环等待
END ;程序结束
```
在Proteus软件中,搭建电路如下:
![image](https://user-images.githubusercontent.com/50543015/138205507-882c4b4b-5a7d-4b33-bc7a-9c55d7e8c499.png)
其中,开关SW1连接到P1.0口,LED灯D1连接到P2.0口。
编译并下载程序后,可以通过开关控制LED灯的亮灭,也可以先闪烁5次,再根据开关状态控制LED灯的亮灭。
阅读全文