Me he fijado en temas anteriores pero ningun responde a mi problema.
Estoy armando un programa en un PIC 16F84A, use el MPLAB para eso. El programa es este
Notaran que soy un poco ordenado
El tema es que queria hacer una simulación y estoy usando el Proteus, ya que no tengo materiales para poder hacerlo (Me gusta hacer pruebas en vivo y en directo ^^, si explotan, bueno).
Lo que estoy armando es un Contador Ascendente y Descendente controlado por el pic en el 7 segmentos. El problema es que no recibo ningun dato, ni siquiera un parpadeo. Dejo una imagen mas abajo del circuito.
Me gustaria que me digan que estoy haciendo mal :S
Gracias!
Estoy armando un programa en un PIC 16F84A, use el MPLAB para eso. El programa es este
Código:
;Integradora de Digitales II
;Rodriguez Javier 5° 2°
list p=16f84a
;Etiquetas
portb equ 0x06 ;Puerto B = 0x06
trisb equ 0x06 ;Tris B = 0x06
sta equ 0x03 ;Estado = 0x03
PDel0 equ 0x0c ;PDel0 = 0x0c
PDel1 equ 0x0d ;PDel1 = 0x0d
;Programación de Puertos
bsf sta,5 ;Voy al Banco 1
movlw 0x10 ;Configuro Bits del Puerto B como entrada y salida
movwf portb ;Lo ingreso en Puerto B
bcf sta,5 ;Voy al Banco 0
;Programa
org 0x05 ;Indico en donde origina el programa
clrf portb ;Limpio Puerto B
;-Encendido del programa-
btfss portb,4 ;Pregunto si hay un 1 en el Bit 4
goto bit2 ;Voy a bit2
goto bit1 ;Voy a bit1
;--Si en el Bit 4 es 1, hacer--
bit1 btfsc portb,4 ;Pregunto si hay un 0 en el Bit 4
goto bit1 ;Vuelvo a bit1
goto presentacion ;Empiezo el programa
;--Si en el Bit 4 es 0, hacer--
bit2 btfss portb,4 ;Pregunto si hay un 1 en el Bit 4
goto bit2 ;Vuelvo a bit2
goto presentacion ;Empiezo el programa
;-Presentación-
presentacion
clrf portb ;Limpio el Puerto B
movlw b'0110111' ;Ingreso la letra H
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'1111110' ;Ingreso la letra O
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'0001110' ;Ingreso la letra L
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'1110111' ;Ingreso la letra A
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'0000000' ;Ingreso un espacio
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'1011011' ;Ingreso la letra S
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'1111110' ;Ingreso la letra O
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'0111011' ;Ingreso la letra Y
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'0000000' ;Ingreso un espacio
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'0111011' ;Ingreso la letra Y
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'1111110' ;Ingreso la letra O
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'1011111' ;Ingreso la letra G
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'0110000' ;Ingreso la letra I
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
movlw b'0000000' ;Ingreso un espacio
movwf portb ;Lo muevo a Puerto B
call retardo ;Retardo
;-Llave de Selección-
key btfss portb,4 ;Pregunto si hay un 1 en el Bit 4 del Puerto B
goto dec ;Si Bit 4 = 0, Decrementa
goto inc ;Si Bit 4 = 1, Incrementa
;-Incrementador-
inc
call retardo ;Realizo retardo de 0,5 seg.
incf portb,1 ;Puerto B + 1
movlw 0x19 ;Ingreso un literal 9 en W
xorwf portb,0 ;Verifico si hay una igualdad en Puerto B y W
btfss sta,2 ;Verifico si el Bit Z es 1
goto key ;Si Bit Z = 0, voy a key
goto clear ;Si Bit Z = 1, voy a clear
;-Decrementador-
dec
call retardo ;Realizo retardo de 0,5 seg.
movlw 0x00 ;Ingreso un literal 0 en W
xorwf portb,0 ;Verifico si hay una igualdad en Puerto B y W
btfsc sta,2 ;Verifico si el Bit Z es 0
goto dato ;Si Bit Z = 1, voy a dato
decf portb,1 ;Si Bit Z = 0, hago Puerto B - 1
goto key ;y voy a key
;-Limpieza de Puerto (Incrementador)-
clear
call retardo ;Realizo retardo de 0,5 seg.
clrf portb ;Limpio Puerto B
goto key ;Voy a key
;-Ingreso de Literal (Decrementador)-
dato
call retardo ;Realizo retardo de 0,5 seg.
movlw 0x09 ;Ingreso un literal 9 en W
movwf portb ;Lo muevo a Puerto B
goto key ;Voy a key
;-Retardo 0,5 seg.-
retardo movlw .239 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-Fin-
end
Notaran que soy un poco ordenado
El tema es que queria hacer una simulación y estoy usando el Proteus, ya que no tengo materiales para poder hacerlo (Me gusta hacer pruebas en vivo y en directo ^^, si explotan, bueno).
Lo que estoy armando es un Contador Ascendente y Descendente controlado por el pic en el 7 segmentos. El problema es que no recibo ningun dato, ni siquiera un parpadeo. Dejo una imagen mas abajo del circuito.
Me gustaria que me digan que estoy haciendo mal :S
Gracias!