在参考程序中,单片机使用12MHz晶体,每一个LED点亮时间为s。根据下表中的问题,修改程序、用 Proteus 软件仿真验证,并将回答的问题填入表1中,交指导教师检查。1.流水灯每次点亮2个LED,赋给累加器A 的初值为多少? 2.每次点亮两个,每次跳两个 LED,程序如何修改? 3.将延时程序修改为600ms,程序如何修改? 4.如果单片机石英晶体从12MHz改为6MH,流水灯移动速度仍为1s,程序如何修改? 5.LED连接到P2口,其它功能不变,程序如何修改? 6.子程序返回后,单片机执行哪条指令? 7*如何实现LED各闪5次再移位功能?
时间: 2024-03-14 14:49:56 浏览: 47
1. 如果流水灯每次点亮2个LED,则赋给累加器A的初值为0x03。
2. 程序修改如下:
```
ORG 0000H
MOV P1, #0FFH
MOV A, #0H
AGAIN: MOV P1, A
ACALL DELAY
RRC A ; 每次移两位
RRC A
CPL A ; 取反,点亮两个LED
SJMP AGAIN
DELAY: MOV R7, #50
DLOOP: MOV R6, #250
DLOOP1: DJNZ R6, DLOOP1
DJNZ R7, DLOOP
RET
```
3. 将延时程序修改为600ms,程序修改如下:
```
ORG 0000H
MOV P1, #0FFH
MOV A, #0H
AGAIN: MOV P1, A
ACALL DELAY
RRC A
RRC A
CPL A
SJMP AGAIN
DELAY: MOV R7, #60
DLOOP: MOV R6, #250
DLOOP1: DJNZ R6, DLOOP1
DJNZ R7, DLOOP
RET
```
4. 如果单片机石英晶体从12MHz改为6MHz,流水灯移动速度仍为1s,程序需要修改延时程序的计数器值。修改后的程序如下:
```
ORG 0000H
MOV P1, #0FFH
MOV A, #0H
AGAIN: MOV P1, A
ACALL DELAY
RRC A
RRC A
CPL A
SJMP AGAIN
DELAY: MOV R7, #30
DLOOP: MOV R6, #250
DLOOP1: DJNZ R6, DLOOP1
DJNZ R7, DLOOP
RET
```
5. 如果LED连接到P2口,程序需要修改P1为P2。修改后的程序如下:
```
ORG 0000H
MOV P2, #0FFH
MOV A, #0H
AGAIN: MOV P2, A
ACALL DELAY
RRC A
RRC A
CPL A
SJMP AGAIN
DELAY: MOV R7, #50
DLOOP: MOV R6, #250
DLOOP1: DJNZ R6, DLOOP1
DJNZ R7, DLOOP
RET
```
6. 子程序返回后,单片机会执行跳转指令的下一条指令。
7. 实现LED各闪5次再移位功能,程序需要在每次移位之前加入一个循环,使LED闪烁5次。修改后的程序如下:
```
ORG 0000H
MOV P1, #0FFH
MOV A, #0H
AGAIN: MOV P1, A
ACALL DELAY
MOV R5, #0H ; 闪烁计数器清零
AGAIN1: MOV P1, A
ACALL DELAY1
CPL A
DJNZ R5, AGAIN1 ; 闪烁5次
RRC A
RRC A
SJMP AGAIN
DELAY: MOV R7, #50
DLOOP: MOV R6, #250
DLOOP1: DJNZ R6, DLOOP1
DJNZ R7, DLOOP
RET
DELAY1: MOV R7, #10
DLOOP2: MOV R6, #250
DLOOP3: DJNZ R6, DLOOP3
DJNZ R7, DLOOP2
RET
```