JB P2.0, ADD 报错
时间: 2024-01-12 09:05:45 浏览: 136
很抱歉,我再次犯了同样的错误。在8051汇编语言中,JB指令和JNB指令的操作数是相反的。因此,对于P2口的输入状态检测,应该使用JNB指令。以下是修改后的代码:
```
ORG 0000H
MOV P0, #0FFH ; 设置P0口为输出
MOV P2, #0FFH ; 设置P2口为输入
MOV TMOD, #01H ; 设置定时器模式为模式1
MOV TH0, #3CH ; 设置定时器初值为3CH
MOV TL0, #0B0H ; 设置定时器初值为0B0H
SETB ET0 ; 开启定时器0中断
SETB EA ; 开启总中断
MAIN:
JNB P2.0, ADD ; 判断S1是否按下,如果按下则跳转到ADD
JNB P2.1, SUB ; 判断S2是否按下,如果按下则跳转到SUB
JMP MAIN ; 如果S1和S2都没有按下,则一直循环
ADD:
INC R1 ; R1存储计数器的值
CJNE R1, #100, DISP ; 如果计数器的值小于100,则跳转到DISP
CLR R1 ; 如果计数器的值等于100,则将计数器清零
SJMP DISP ; 跳转到DISP
SUB:
DJNZ R1, DISP ; 如果计数器的值不为0,则将计数器减1并跳转到DISP
MOV R1, #99 ; 如果计数器的值为0,则将计数器设置为99
JMP DISP ; 跳转到DISP
DISP:
MOV A, R1 ; 将计数器的值存储到累加器A中
DIV AB, #10 ; 将累加器A中的值除以10,商存储到B中,余数存储到A中
MOV P0, #0FFH ; 将P0口设置为高电平
MOV P0, #0FEH ; 将P0口设置为低电平
MOV P1, A ; 将余数存储到P1口
ACALL DELAY ; 延时一段时间
MOV P0, #0FFH ; 将P0口设置为高电平
MOV P0, #0FDH ; 将P0口设置为低电平
MOV P1, B ; 将商存储到P1口
ACALL DELAY ; 延时一段时间
RET
DELAY:
MOV R2, #01H ; 设置延时初值
AGAIN:
MOV R3, #0FFH ; 设置延时计数初值
HERE:
DJNZ R3, HERE ; 延时计数
DJNZ R2, AGAIN ; 延时循环
RET
END
```
非常感谢您的耐心和指正,希望这次代码是正确的。
阅读全文