Saltos de código de problema de ensamblaje de MPLAB

Tengo algunos problemas con lo que creo que es un buen código. Esto es para una tarea de la universidad, pero este no es el código que estoy enviando. Este es un archivo de prueba para entender cómo funciona todo. Parte de este código se proporcionó en la tarea: las secciones snum y binary.

Necesito obtener cada número en snum por turno y mostrar el número binario equivalente en un segmento de 7 durante unos segundos. Se ejecuta en el depurador hasta que 'llama binario', luego vuelve a comenzar (después de ese instructino).

No sé qué estoy haciendo mal. ¿Algunas ideas?

; Directive sets processor type .............................

        list  p=16F84A
        #include "P16F84A.INC"

; Set configuration fuses ...................................

        __CONFIG _CP_OFF & _WDT_OFF &_PWRTE_ON & _RC_OSC

; Code protection off, watchdog timer off, power up timer on, RC Clock

        errorlevel  -302        ;No warnings, register not in Bank 0
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
timer       EQU     0C  ; GPR1 used as delay counter
point       EQU     0D  ; GPR2 used as table pointer

    org 000
    goto    start

snum    addwf   PCL,F
    dt  "0001035020"    ;Substitute your student number
                        ;(10 ASCII digits)

;       Pattern table for seven segment display on Port B ..

binary  addwf   PCL,F
    retlw   b'00111111' ;Set display to 0
    retlw   b'00000110' ;Set display to 1
    retlw   b'01011011' ;Set display to 2
    retlw   b'01001111' ;Set display to 3
    retlw   b'01100110' ;Set display to 4
    retlw   b'01101101' ;Set display to 5
    retlw   b'01111111' ;Set display to 6
    retlw   b'00000111' ;Set display to 7
    retlw   b'01111111' ;Set display to 8
    retlw   b'01101111' ;Set display to 9

; Initialise Port B (Port A defaults to inputs)........

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
nextdigit   movlw   d'10'
    subwf   point,W
    btfsc   3,2
    goto    nextdigit
    movf    point,W
    call    snum
    call    binary
    movwf   PORTB
    NOP
    NOP
    incf    point
    goto    nextdigit

    end
En lugar de usar números para los registros ( btfsc 3,2), le recomiendo que use los nombres de los registros ( btfsc STATUS, Z) para facilitar la lectura.
Y use banksel para cambiar de banco, en lugar de jugar con los bits de estado.
Tengo que manipular parte del aprendizaje de tareas, etc. Gracias por las cosas 3 y 2. Tengo el estado y la configuración Z en el archivo más grande, pero no funcionaba. Lo anterior se combinó desde muchos archivos.
Se podría decir mucho más sobre su código, mucho de lo cual no le gustará, pero dado que ya ha aceptado una respuesta, no tiene sentido de todos modos.

Respuestas (1)

No inicializas el pointregistro. ¡Eso significa que puede contener cualquier valor cuando comienzas a hacer un nextdigitbucle! Intente agregar un clrf pointdebajo de la startetiqueta.

Para la depuración: en MPLAB -> Ver -> Registros de archivos, puede ver el valor de pointdurante el tiempo de ejecución.