Hola
Un saludo a todos! soy nuevo aca y tambien nuevo usando el PIC16F819, para comenzar diseñe un programa en asm que realiza la cuenta de un digito por pulsación de un pulsador.
Este programa lo tenía hecho para un 16F84A en este me corre sin ningun problema, me da la impresion que el problema pasa por el oscilador interno pues el micro no hace nada.
La configuración la he realizado asignando la palabra de configuración al registro OSCCON para 4 Mhz, pero sin ningun resultado.
Por favor si alguien me puede ayudar viendo el programa.
Gracias.
;Programa que cuenta el número de veces que se oprime un pulsador indicando en un display
list p=pic16f819 ; Pic a utilizar 16F819
status equ 03h ;registro de estados
porta equ 05h ;puerto A en la dirección 5h de la RAM
portb equ 06h ;puerto B en la dirección 6h de la RAM
trisa equ 85h ;dirección de configuración puerto A
trisb equ 86h ;dirección de configuración puerto B
osccon equ 8fh ;dirección de registro del reloj
conta equ 0ch ;dirección de configuración registro conta
lazo1 equ 0dh ;dirección de configuración registro lazo1
lazo2 equ 0eh ;dirección de configuración registro lazo2
z equ 02h ;bandera de 0 del registro de estados
;
;
;
reset org 00h ;el vector reset esta en la posicion 00
goto inicio ;se salta al programa principal
;
org 05h ;el programa empieza en la posicion de memoria 0
;
;----- SUBRUTINA de retardo de 100 milisegundos ----
;
retardo movlw d'100' ;registro W contiene 100 decimal
movwf lazo1 ;registro lazo1 contiene cantidad de milisegundos
ciclo1 movlw d'110' ;registro W contiene 110 decimal
movwf lazo2 ;carga numero de milisegundos en lazo2
ciclo2 nop
nop
nop
nop
nop
nop
decfsz lazo2 ;pregunta si termino 1 ms
goto ciclo2
decfsz lazo1 ;pregunta si termino el retardo
goto ciclo1
retlw 00h ;salta instruccion despues de call
inicio bsf status,5 ;se ubica en el segundo banco de memoria RAM
movlw b'1100000' ;se guarda en W el valor a usar del reloj en binario 110
movwf osccon ;se configura el reloj interno a 4Mhz
movlw 0f0h ;carga el literal 0f0h (11110000)al registro W
movwf trisa ;activa como salidas el puerto A
movlw 0ffh ;carga el literal 0ffh (11111111) al registro W
movwf trisb ;activa como entradas el puerto B
bcf status,5 ;se ubica en el primer banco de memoria RAM limpiando
clrf conta ;limpia conta iniciando contador en 0
ciclo movf conta,w ;pone valor de conta en W
movwf porta ;pone valor de W en puerto A
call retardo ;salta a subrutina retardo
pulsa btfsc portb,0 ;pregunta si puerto b0 esta oprimido
goto pulsa ;sino esta oprimido vuelve a preguntar
call retardo ;si esta oprimido retarda 100 ms
btfsc portb,0 ;confirma si sigue oprimido
goto pulsa ;sino esta oprimido retorna a preguntar por primera vez
incf conta ;incrementa registro conta en 1
movf conta,w ;carga el registro W con el valor de conteo
xorlw 0ah ;hace operacion XOR para ver si es igual a 0ah (si llego a 10 decimal)
btfsc status,z ;prueba si el contador llego a 0ah (10 decimal)
goto inicio ;si llega a 10 reinicia
goto ciclo ;sino ha llegado a 10 sigue contando
end