【问题标题】:Binary timer in Assembly/Assembler language. Need some code improvement汇编/汇编语言中的二进制计时器。需要一些代码改进
【发布时间】: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 上并行运行...
  • “代码很清晰”我强烈反对。阅读别人的未格式化程序集非常困难。我可以弄清楚发生了什么,但我不愿意将多余的时间投入到这样做。

标签: assembly pic


【解决方案1】:

此代码执行原始海报所要求的。

此示例使用与原始海报相同级别的 cmets 制作。

    LIST    p=16F84a

#INCLUDE <p16F84a.inc>

    __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

Kint1: EQU  0Ch

    ORG     0x000
    clrw
    tris    PORTA
    tris    PORTB
    movlw   0x07
    option
    clrf    PORTA
    clrf    PORTB
CountLoop:
    movlw   0x80
    movwf   Kint1
WaitLoop:
    movlw   0x0b
    movwf   TMR0
    bcf     INTCON,TMR0IF
WaitTMR0:
    btfss   INTCON,TMR0IF
    goto    WaitTMR0
    decfsz  Kint1,F
    goto    WaitLoop
    incfsz  PORTB,F
    goto    CountLoop
    incf    PORTA,F
    goto    CountLoop

    END

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2020-01-16
    • 1970-01-01
    • 2017-05-18
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多