【发布时间】:2020-11-17 12:28:49
【问题描述】:
我正在尝试使用汇编语言创建二进制计时器。 PORTA 中有 5 个 LED,PORTB 中有 8 个 LED。我编写了一个代码,在 PORTB 中输出二进制时间,当寄存器满时,程序重新开始。如何改进我的代码,在 PORTB 使所有 8 个 LED 都亮起(寄存器已满)后,程序继续计数到 A 寄存器(点亮 PORTA 中的 LED),并且在所有 13 个 LED 都亮起之后,程序重新开始?
LIST p=16F84
#INCLUDE <p16F84a.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
Kint1 EQU 0Ch
ORG 0x000
clrf PORTA
clrf PORTB
bsf STATUS, 5
movlw b'00000000'
movwf TRISB
movlw b'00000'
movwf TRISA
movlw b'00000111'
movwf OPTION_REG
bcf STATUS, 5
;movlw d'16'
;movlw d'2'
movlw d'80'
movwf Kint1
Start1 movlw d'11'
movwf TMR0
Start2 btfss INTCON,2
goto Start2
bcf INTCON,2
decfsz Kint1,1
goto Start1
incf PORTB
;movlw d'16'
;movlw d'2'
movlw d'80'
movwf Kint1
goto Start1
END
【问题讨论】:
-
事实上,阅读您的代码非常困难。要获得有用的帮助,您应该使其具有可读性。一些行距、适当的缩进和 cmets 将大大帮助您获得答案。在没有花太多时间阅读代码的情况下,我不清楚您是否已经尝试将计数扩展到其他 LED。
-
这段代码很清晰,我没有做任何改动。我尝试的是创建具有相似内容的新循环 start3 并在 PORTB 已满后对 start3 进行 goto 操作。但我不知道我做错了什么,时间在 PORTA 和 PORTB 上并行运行...
-
“代码很清晰”我强烈反对。阅读别人的未格式化程序集非常困难。我可以弄清楚发生了什么,但我不愿意将多余的时间投入到这样做。