TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: s11o en 31 de Agosto de 2021, 23:21:50
-
Hola. Este programa ya compila, pero no funciona en la práctica. Porque por alguna razón, se queda atorado en el call. Estoy migrando de MPASM a Pic assembler, ya cheque la guía de microchip y no encontré algún cambio con esta instrucción. Espero puedan ayudarme, gracias
Este es el código.
PROCESSOR 18F4685
#include <xc.inc>
CONFIG OSC = XT
CONFIG PWRT = ON
CONFIG WDT = OFF
CONFIG LVP = OFF
CONFIG CP0 = OFF
CONFIG CP1 = OFF
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = OFF
//----------------vector reset---------------
PSECT resetVec,class=CODE,reloc=2
resetVec:
PAGESEL main
goto main
PSECT code
main:
//Zona de declaracion de registros || constantes
/*
CBLOCK
display
ENDC
*/
display EQU 0x00
PAGESEL no_8
ORG 0x000
movlw 0x0f
movwf ADCON1
clrf TRISA
clrf TRISB
clrf TRISC
clrf TRISD
clrf TRISE
//Input PORTE
bsf TRISE, 0
bsf TRISE, 1
bsf TRISE, 2
//Input PORTB
bsf TRISB, 0
bsf TRISB, 1
bsf TRISB, 2
bsf TRISB, 3
//Input PORTA
bsf TRISA, 0
bsf TRISA, 1
bsf TRISA, 2
bsf TRISA, 3
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
bsf PORTA, 5; Pin de testeo
clrf display; limpio la variable
goto no_8
loop:
btfss PORTE, 0
goto loop
esp:
btfsc PORTE, 0
goto esp
incf display, 1
incf display, 1
btfss display, 3
goto no_8
clrf display
no_8:
movf display, 0 //mueve display al acumulador ("w")
call Tabla
bsf PORTC, 0; enciendo este led para saber si sale de "tabla"..., y no lo hace
movwf PORTD
goto loop
Tabla:
addwf PCL, 1
retlw 0x76;0
retlw 0x3F;2
retlw 0x38;4
retlw 0x77;6
END resetVec
-
¿No será que estás intentando recuperar un valor más allá del máximo de la tabla?
¿Puedes debugar y ver que valor tiene el acumulador antes de llamar a Tabla?
-
Asegurate que el led esté bien poralizado y ande.
-
En primera ese programa está MAL ESCRITO, por decirlo de manera políticamente correcta...
En segunda, estas usando un PIC serie 18, y quieres hacer los retornos de tabla como si se tratara de una serie 16, lo cual NO es así (PCL es PAR, no es NON)
En tercera, escribes código que da migraña nada más de verlo, porque las variables NO se declaran en la zona de código, NO estas respetando ninguna de las localidades asignadas a los vectores de interrupciones y un largo etc etc etc...
De hecho más bien, sería sorprendente que funcionara ese código
-
Asegurate que el led esté bien poralizado y ande.
El led no es. eso ya lo había checado. pero gracias
-
Asegurate que el led esté bien poralizado y ande.
El led no es. eso ya lo había checado. pero gracias
¿Por qué no debugas y pones un punto de ruptura antes de llamar a tabla y ver que tiene el acumulador?
¿O no sabes como debugar?
Lo que posiblemente pase es que w tenga un valor mayor que cuatro y al llamar a tabla salta a una localidad de la memoria flash vacía y ahi se queda en contador de programa.
-
Que tal, en efecto es pic 18. No 16F y son diferentes. Te comparto este video donde explican el uso de tablas en PIC18F:
-
Deberías darle un delay después de encender el led, por si el puerto C,0 se borra
de alguna manera ... al menos sabrías si va a la tabla y regresa.