- 打卡等级:偶尔看看III
- 打卡总天数:54
- 最近打卡:2025-05-01 09:07:55
管理员
- 积分
- 15609
|
发表于 2025-4-11 19:45:30
|
显示全部楼层
汇编语言 实验
14.14 深圳大学 I/O 口实验--位操作模式读取按键状态并点灯
14.14.6 实验1: 位操作,用USB直接仿真来调试
;IO模式读取按键状态并点灯(位操作)
$INCLUDE(AI8051U.INC) ;包含AI8051U的头文件
;------------------------------------------------
ORG 0000H ;程序复位地址
RESET:
SETB EAXFR ;允许访问扩展的特殊寄存器,XFR
MOV WTST,#00H ;设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
MOV CKCON,#00H ;设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
MOV P0M0,#38H ;设置P03、P04为推挽输出,P05为开漏输出,其余为准双向口模式
MOV P0M1,#20H
MOV P1M0,#00H ;设置 P1 口为准双向口模式
MOV P1M1,#00H
MOV P2M0,#00H ;设置 P2 口为准双向口模式
MOV P2M1,#00H
MOV P3M0,#30H ;P30、P31为高阻输入,P32为准双向口、P33为高阻输入、P34和P35为开漏输出
MOV P3M1,#3BH
MOV P4M0,#00H ;设置 P4 口为准双向口模式
MOV P4M1,#00H
MOV P5M0,#00H ;设置 P5 口为准双向口模式
MOV P5M1,#00H
MOV P6M0,#00H ;设置 P6 口为准双向口模式
MOV P6M1,#00H
MOV P7M0,#00H ;设置 P7 口为准双向口模式
MOV P7M1,#00H
MOV WR0,#WORD2 P3PU ;打开P33、P34、P35的内部上拉电阻,并且仅修改这三个I/O的上拉电阻打开状态
MOV WR2,#WORD0 P3PU
MOV A,#38H
MOV @DR0,R11
LCALL DELAY1MS ;延时1ms,等待IO口电平稳定,因为前面刚改变了模式
;立刻读可能会读到错误的电平,所以需要先等待电平变化稳定后再读
CLR P40 ;打开LED部分的供电
;------------------------------------------------
MAINLOOP:
JNB P3.2,P32ISLOW ;判断P32的电平
P32ISHIGH:
SETB P0.2 ;P32为高电平,则LED02灭
SJMP CHECKP33 ;跳转到判断P33
P32ISLOW:
CLR P0.2 ;P32为低电平,则LED02亮
CHECKP33:
JNB P3.3,P33ISLOW ;判断P33的电平
P33ISHIGH:
SETB P0.3 ;P33为高电平,则LED03灭
SJMP CHECKP34 ;跳转到判断P34
P33ISLOW:
CLR P0.3 ;P33为低电平,则LED03亮
CHECKP34:
JNB P3.4,P34ISLOW ;判断P34的电平
P34ISHIGH:
SETB P0.4 ;P34为高电平,则LED04灭
SJMP CHECKP35 ;跳转到判断P35
P34ISLOW:
CLR P0.4 ;P34为低电平,则LED04亮
CHECKP35:
JNB P3.5,P35ISLOW ;判断P35的电平
P35ISHIGH:
SETB P0.5 ;P35为高电平,则LED05灭
SJMP MAINLOOP ;跳回到主循环开始的地方继续运行程序
P35ISLOW:
CLR P0.5 ;P35为低电平,则LED05亮
SJMP MAINLOOP ;跳回到主循环开始的地方继续运行程序
;------------------------------------------------
DELAY1MS: ;@40.000MHz
PUSH DR0
MOV WR0,#0
MOV WR2,#9998
NEXT:
DEC DR0,#1
JNE NEXT
POP DR0
RET
;------------------------------------------------
END
|
|