Error al simular con PIC 18F4620 proteus *.asm

Buenas noches !!

Estoy simulando un sencillo circuito en proteus, pero no hay manera, alguien podria hecharme un cable en donde puede estar el error ?

La idea es sencilla,
si RA3=1, RB7 y RB6 = 1
si RA3=0, RB7 y RB5 = 1

pero al darle al interruptor de RA3, veo la luz roja o azul (1 o 0) pero no cambia las salidas, siempre tengo RB6 y 7 a 1.

; LEDS.ASM
;REGISTROS DEL SISTEMA
#INCLUDE P18F4620.INC
LIST P=PIC18F4620
;INICIO DE PROGRAMA
ORG 0X0000
GOTO INICIO
;PROGRAMAMOS PUERTOS
INICIO BSF STATUS,5 ;Ir a Banco 1
BSF TRISA,RA3 ;RA3 se configura como entrada
CLRF TRISB ;RB0 a RB7 se configura como salida
BCF STATUS,5 ;Regresar al Banco 0
EXPLORA BTFSS PORTA,RA3 ;RA3 = 1 ? si es 1, salta 1 paso, vamos a 5
GOTO TRES ;RA3=0 Mostrar 3 en display
GOTO CINCO ;paso obvio, va cinco
CINCO movlw B'10100000' ;RA3=1, Mostrar 5 en display
movwf PORTB ;Mostramos 5 en display
GOTO EXPLORA ;seguimos explorando el BIT RA3
TRES movlw B'11000000' ;RA3=0, Mostrar 3 en display
movwf PORTB ;Mostramos 3 en display
GOTO EXPLORA ;seguimos explorando el BIT RA3
END

3af7c184932434a61b7379ebd7a9f26fo.png


Muchas gracias de antemano
 
Hola:
Me parece que es tu primer programa con un PIC18F... revisa su hoja de datos, revisa los registros de los 18F que tienen 15 en total (no 4 como los 16F) y además algo que me sorprende, es que lo estás programando como un 16F...
Otra cosa que generalmente el PORTA está asignado al módulo ADC y no veo que lo configures.

Un saludo.
 
quizas quiero correr demasiado, nose, pero creo que la mejor manera de aprender es probar probar y probar.... todo teoria no puede ser, asi que por eso me he metido a simular.

Practicamente no he entendido nada de lo que has dicho.

El programa es mas que posible que sea para 16, pero aun siendo para 16, creia que se escribia = y luego el hex ya hacia lo suyo para cada uno.

Entiendo lo del BTFSS... que salta uno si es 1 pero no funciona la vuela a EXPLORE, seguro que será por lo que comentas que es para 16, pero vaya que ni idea... gracias !

Por cierto, si es mas o menos mi primer programa. ;-)
 
Hola.
Si perdón me apresuré un poco. El echo de ver la teoria es porque estás pasando de una gama a otra y pues hay varias diferencias con respecto a los 16F.

- En los 18F hay unos 15 bancos con registros de configuración y de usuario, el acceso a estos de más directo; por ejemplo para configurar el PORTA es simplemente escribir un valor en el registro TRISA sin cambiar de banco. Este ejemplo es de la misma hoja de datos del PIC18 que mencionas.
CLRF PORTA ; Initialize PORTA by
; clearing output
; data latches
CLRF LATA ; Alternate method
; to clear output
; data latches
MOVLW 07h ; Configure A/D
MOVWF ADCON1 ; for digital inputs
MOVWF 07h ; Configure comparators
MOVWF CMCON ; for digital input
MOVLW 0CFh ; Value used to
; initialize data
; direction
MOVWF TRISA ; Set RA<7:6,3:0> as inputs
; RA<5:4> as outputs

Según veo en el código que pones no estás configurando el PORTA como IO digital, recuerda que este puerto comparte sus pines con el módulo ADC del PIC y por defecto está comfigurado para este, así que hace falta configurar el registro ADCON1 y CMCON como en el ejemplo.

- El set de instrucciones para los 18F es más amplio.

pero aun siendo para 16, creia que se escribia = y luego el hex ya hacia lo suyo para cada uno.
- Hay muchas difrencias de una gama a otra de PICs.
- Generalmente otros pasan a los 18F o mayores programando en lenguaje C por ser más portable, es decir que prácticamente va a funcionar para cualquier PIC de cualquier gama sin tantos cambios (claro que a veces no se cumple), por eso felicitaciones por entrar a los 18F en asm... jeje.

- Por último, configurar los Fuses son muy importantes, de otro modo nada va a funcionar como se debe... te recomiendo ver un poco la hoja de datos http://ww1.microchip.com/downloads/en/devicedoc/39626b.pdf del PIC18 con el que estes practicando y busca ejemplos en asm dentro del foro que hay varios.

Saludos.
 
Gracias, he buscado varios ejemplos y no he encontrado ninguno para pic18f en asm, todo en c o para 16f a patadas, tanto here como google.

el data del 4620 ya lo tengo, 390 páginas de un precioso inglés jeje.

la idea es partir de algo que pueda simular en proteus, una vez hecho esto, agregar, modificar, quitar o ir agregando cositas poco a poco, pero esk ni tengo ni eso, ni un triste programa que pueda simular en proteus con el 18f4620.

si pudieras hecharme un cable seria de gran ayuda.

p.d. tal como dices te paso un programa que nos ha pasado el profe, que por lo visto, por lo que dices no es muy correcto creo, corrijeme si me equivoco:

; LEDS.ASM
;REGISTROS DEL SISTEMA
#INCLUDE P18F4620.INC
LIST P=PIC18F4620

;REGISTROS DEL USUARIO
TIEMPO EQU 0X10
TIEMPO_1 EQU 0X11
TIEMPO_2 EQU 0X12
;VECTOR DE RESET
ORG 0X0000
GOTO INICIO_PROGRAMA
;INICIO DE PROGRAMA
ORG 0X0100

INICIO_PROGRAMA
REPITE
;PROGRAMAMOS PUERTOS
BCF TRISB,RB0 ;Salida puesta a 0 (C=clear), cada bit del tris li
BCF TRISB,RB1 ;SALIDA diu al bit port com te que funcionar
BCF TRISB,RB2 ;SALIDA
BCF TRISB,RB3 ;SALIDA

BSF TRISB,RD0 ;ENTRADA puesta a 1 (S=set)

;DESACTIVAMOS SALIDAS

BSF PORTB,RB0 ;Pone en 1 (Set) RB0
BSF PORTB,RB1
BSF PORTB,RB2
BSF PORTB,RB3

;INICIALIZAMOS REGISTROS USUARIO
CLRF TIEMPO ;Pone a 0 los 8 bits de tiempo ?
CLRF TIEMPO_1
CLRF TIEMPO_2

;SALTAMOS A PROGRAMA PRINCIPAL
PROGRAMA_PRINCIPAL

BCF PORTB,RB0
BSF PORTB,RB1
BSF PORTB,RB2
BSF PORTB,RB3

CALL TEMPORIZA

BSF PORTB,RB0
BCF PORTB,RB1
BSF PORTB,RB2
BSF PORTB,RB3

CALL TEMPORIZA

BSF PORTB,RB0
BSF PORTB,RB1
BCF PORTB,RB2
BSF PORTB,RB3

CALL TEMPORIZA

BSF PORTB,RB0
BSF PORTB,RB1
BSF PORTB,RB2
BCF PORTB,RB3

CALL TEMPORIZA


BSF PORTB,RB0
BSF PORTB,RB1
BCF PORTB,RB2
BSF PORTB,RB3

CALL TEMPORIZA

BSF PORTB,RB0
BCF PORTB,RB1
BSF PORTB,RB2
BSF PORTB,RB3

CALL TEMPORIZA

GOTO REPITE

;TEMPORIZADOR
TEMPORIZA
CLRF TIEMPO
CLRF TIEMPO_1
MOVLW 0X08
MOVFF WREG,TIEMPO_2

TEMPORIZA_1
DECFSZ TIEMPO,F
GOTO TEMPORIZA_1
DECFSZ TIEMPO_1,F
GOTO TEMPORIZA_1
DECFSZ TIEMPO_2,F
GOTO TEMPORIZA_1

RETURN
END
 
Hola:
Ya lo pruebo.
- El asm es el mismo que para los 16F pero son más intrucciones que soporta los P18 ya que su arquitectura lo permite; te adjunto un pequeño manual.

- Para todo lo principal es la configuración del PIC y básicamente es lo mismo, por ejemplo.
Código:
List p=18f452
    #include <p18f452.inc>
    
CONFIG OSC = XT
CONFIG OSCS = OFF
CONFIG BOR = OFF
CONFIG BORV = 25
CONFIG WDT = OFF
CONFIG CCP2MUX = OFF
CONFIG STVR = OFF
CONFIG LVP = OFF
CONFIG DEBUG = OFF
 

COUNT1 equ 0x01
COUNT2 equ 0x02
- Según la hoja de datos, el registro STATUS ya no contiene los bits para pasar de banco como los P16; la arquitectura de los P18 lo controla de otra manera; a grandes razgos todo es directo.

Código:
org 0x0000

clrf TRISC
clrf LATC
- Además hay nuevas instrucciones que es necesario conocer.

Código:
Main bsf LATC,4
    rcall Pausa200ms
    bcf LATC,4
   rcall Pausa200ms
    bra Main
Si, generalmente la información es poca y en ingles para el asm de los P18, pero solo es necesario conocer las instrucciones y parte de su arquitectura para poder volar...

Un saludo
 

Adjuntos

  • PIC18F asm 1.rar
    148.8 KB · Visitas: 55
Atrás
Arriba