MPLAB código extraño salta

0

Estoy escribiendo el código de ensamblaje para el microcontrolador 16F84A y he tenido algunos problemas. He implementado un código de retardo de 1 segundo que se repite consecutivamente por un total de 3 segundos, en lugar de volver al programa, en su lugar vuelve a "comenzar". Ya he intentado el mismo código con un retraso de 3 segundos y me he encontrado con problemas similares, no parece querer ejecutar un retraso de tiempo superior a 2 segundos.

Entonces pensé que iría aquí y vería si alguien tiene una idea de por qué esto sigue sucediendo. Me doy cuenta de que mi código no es el mejor y podría mejorar mucho, así que me disculpo por eso.

¡Gracias!

;Register Label Equates
PCL     EQU 02  ;Program Counter Low
PORTB   EQU 06  ;Port B Data Register
TRISB   EQU 86  ;Port B Data direction register
STATUS  EQU 03  ;Status register
RP0     EQU 05  ;Bank select bit
point   EQU 0D  ;GPR2 used as table pointer

;Variable definitions 
        UDATA_SHR
COUNT_1 RES 1   ;
COUNT_2 RES 1   ;

;*******************************************************
ORG 000
GOTO    start   ;Goto main program

;1 second delay subroutine.............................

delay   MOVLW   H'32'       ;(1 cycle)
        MOVWF   COUNT_1     ;(1 cycle)
        NOP
OLOOP   MOVLW   H'7C'       ;(1 cycle)
        MOVWF   COUNT_2     ;(1 cycle)
ILOOP   NOP                 ;(1 cycle)
        DECFSZ  COUNT_2,F   ;(1 cycle) 
        GOTO    ILOOP       ;(2 cycles)
        DECFSZ  COUNT_1,F   ;(1 cycle)
        GOTO    OLOOP       ;(2 cycles)
        RETURN              ;return to main program

;Table of Output Code.......................

table   ADDWF   PCL     ;Add pointer to PCL
        RETLW   D'0'    ;Decimal 0

;Initialise Port B...................................
start   bcf     STATUS,RP0  ;Bank select 0
        clrf    PORTB       ;Clear Port B data latches
        bsf     STATUS,RP0  ;Bank select 1
        movlw   0x00        ;
        movwf   TRISB       ;Set port B lines to output
        bcf     STATUS,RP0  ;Bank select 0

;Main loop...........................................

        CLRF    point       ;Reset pointer
        MOVLW   D'0'        ;Point to ASCII 2
        CALL    table       ;access table...
        MOVWF   PORTB       ;and output to LEDs
        CALL    delay       ;Call 1 second delay
        CALL    delay       ;Call 1 second delay
        CALL    delay       ;Call 1 second delay
        END                 ;Terminate source code
    
pregunta John

0 respuestas

Lea otras preguntas en las etiquetas