Problema Simula poro no funciona Micro 16F819

Hola, bueno pues la cuestion es esta, estoy trabajando con el Pic 16F819, hice el programa que les adjunto (un contador de cero a 99 con un botón de RESET y un switch para que cuente de forma regresiva), y lo simula muy bien, el problema es que al quemar el PIC, y ponerlo a funcionar este simplemente no hace nada.

Ya cheque la configuración con el MPLab, y todo bien.
Tambien probe las conexióne al display de 7 segmentos (use el de catodo común) y todo bien.
No se que podria ser, apenas estoy aprendiendo a usar los micros.
ojala alguien me pueda ayudar.

Adjunto el programa en .asm
PHP:
#include    p16F819.inc
errorlevel    2
__CONFIG    3F18H

INICIO
C1        equ        20H
UNI        equ        21H
DEC        equ        22H
bsf        STATUS,5
bcf        STATUS,6
movlw    d'7'
movwf    ADCON1
movlw    b'10000111'
movwf    OPTION_REG
movlw    b'01110100'
movwf    OSCCON
movlw    b'00100000'
movwf    TRISA
movlw    b'00100000'
movwf    TRISB
bcf        STATUS,5
goto     PROGRAMA

PROGRAMA
btfss    TRISA,5            ;    Compara si RB5 está activado para reiniciar o no la cuenta
goto    REVERSA        ;
goto    REINICIAR            ;ACTIVADO

REINICIAR
clrf    UNI
clrf    DEC
call     CONTINUAR
goto    PROGRAMA

REVERSA                    ; Compara si RA5 está activado para sumar o restar
btfss    TRISB,5
goto    SUMADOR
goto    RESTADOR

RESTADOR
call    TIMER
clrf    C1
movlw     d'0'
subwf    UNI,w
btfss    STATUS,Z
goto     LINEA
goto    SIGUIENTE
LINEA
decf    UNI
call    CONTINUAR
goto    PROGRAMA

SIGUIENTE
movlw    d'9'
movwf    UNI
movlw    d'0'
subwf    DEC,w
btfss    STATUS,Z
goto    LINEA2
goto     SIGUIENTE2
LINEA2
decf    DEC
call    CONTINUAR
goto    PROGRAMA

SIGUIENTE2
movlw    d'9'
movwf    DEC
call    CONTINUAR
goto    PROGRAMA

SUMADOR
call     TIMER
clrf     C1
movlw    d'10'
subwf    UNI,w
btfss    STATUS,Z
goto    LABEL
goto    LABEL2
LABEL
call     CONTINUAR
incf    UNI
goto    PROGRAMA
LABEL2
call    DECIMALES
call    CONTINUAR
goto    PROGRAMA

CONTINUAR
movf    UNI,w
call     COMPARADOR
call    IMPRIMIRA
movf    DEC,w
call    COMPARADOR
call    IMPRIMIRB
return


DECIMALES
incf    DEC
clrf    UNI
movlw    d'10'
subwf    DEC,w
btfss    STATUS,Z
goto     NEXT
clrf    DEC
NEXT
return

IMPRIMIRA
movwf    PORTB
return

IMPRIMIRB
movwf    PORTA
return

COMPARADOR
addwf    PCL,f
goto    CERO    
goto    UNO    
goto    DOS
goto    TRES
goto    CUATRO
goto    CINCO
goto    SEIS
goto    SIETE
goto    OCHO
goto    NUEVE

CERO
movlw    b'01011111'
return

UNO

movlw    b'00000110'
return

DOS
movlw    b'10011011'
return

TRES
movlw    b'10001111'
return

CUATRO
movlw    b'11000110'
return

CINCO
movlw    b'11001101'
return

SEIS
movlw    b'11011101'
return

SIETE
movlw    b'00000111'
return

OCHO
movlw    b'11011111'
return

NUEVE
movlw    b'11001111'
return

TIMER
BTFSS    TMR0,7
GOTO    TIMER
INCF    C1
CLRF    TMR0
BTFSS    C1,6
GOTO    TIMER
RETURN

END
 

Adjuntos

  • Contador.zip
    880 bytes · Visitas: 10
Me parece que el problema esta en la palabra de configuración.
Como esta escrita en HEX para ahorrarse lo largo de escribirla no se puede definir exactamente
el tipo de oscilador que se esta usando, probe varios tipos para ver si alguna configuración
me daba el 3F18 (1652) en decimal, pero no me sale ninguna que me de 3F18
que tipo de oscilador estas usando? :apreton:
 
Saludos.
Con la configuración que mandas a mi me da este valor.
Config.gif
__CONFIG 3FB8H
Si se escribiera en código ASM quedaria así:
__CONFIG _CP_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _CCP1_RB2 & _DEBUG_OFF & _LVP_ON & _BODEN_OFF & _MCLR_ON & _WDT_OFF & _PWRTE_OFF & _INTRC_IO
Prueba cambiandola por ese valor o código y a ver que pasa.
Ya que en la simulación no importa la configuración solo la frecuencia del Xtal.
Puedes simular un programa configurado para trabajar con Xtal y no ponerlo
en el diseño del simulador y funcionara de todos modos.
Esperemos que sea solo la palabra de configuración,
y que también cheques lo que te dice Chico3001. :apreton:
 
Última edición:
Hola, de antemano muchas gracias por su ayuda. Intentaré con esa configuración a ver si funciona, no estoy usando ningun capacitor, pues utilizo esos pines para salidas :S, ¿deberia usarlo?.

Otra cosa, ¿Con que programa saca la configuración que me proporciona? y ha que se deberá que MPlab, me genera otra diferente.

Muchas gracias por sus respuestas, en cuanto tenga el pic de nuevo, lo probaré y comentaré.
 
Hola, de antemano muchas gracias por su ayuda. Intentaré con esa configuración a ver si funciona, no estoy usando ningun capacitor, pues utilizo esos pines para salidas :S, ¿deberia usarlo?.

Otra cosa, ¿Con que programa saca la configuración que me proporciona? y ha que se deberá que MPlab, me genera otra diferente.

Muchas gracias por sus respuestas, en cuanto tenga el pic de nuevo, lo probaré y comentaré.
Saludos.
Ok, Bien, Si usas el oscilador interno los pin's del oscilador ya los puedes manejar como entradas o salidas,
así que obvio ya te olvidas de los capacitores.
Y para sacar el valor HEX de la palabra de configuración uso el WinPic800 (Gratuito)
Hay otros que también lo hacen, pero en particular me gusta ese software programador.
Al ir seleccionando cada bit de configuración veras que va cambiando el valor
que te mostre en la foto anterior, ese truco por así decirlo, lo uso desde que me inicie
en esto de los PIC, por que te ahorras el escribirla en ASM que como ves es muy larga.
Y aparte te evitas estar recordando como se escribe cada palabra,
ya que cada lenguaje tiene diferentes tipos de escribir la palabra de configuración.
Pero todos los editores de todos los lenguajes reconocen el hexadecimal.
Y en cuanto a por que el MPLAB da otro valor con esa configuración puede ser
porque realmente ese sea el valor correcto y que el WinPic800 se equivoque.
Todo es cosa de probar tu diseño con los dos valores y ver cúal es el que funciona.
Porque no se podria contradecir a los creadores del PIC con respecto al valor que
el MPLAB esta generando para el tipo de configuración que se esta usando.
Esperamos tus resultados para determinar en donde esta el error.
Bien, espero haberte servido. :apreton:
 
Última edición:
Pues use la config anterior (3F18), la que ya tenia y solo le di un botonazo al RA5 y empezo a contar, todo perfectooo!!!, perooo :S al apagarlo y encenderlo de nuevo, se queda trabado y ya no hace nada, a que se debera esto? hay alguna configuracion para que el micro se reinicie al apagarlo automaticamente??

Muchas gracias de antemano

Tambien en los displays me muestra ciertos leds prendidos, pero sin ningun sentido estos y al leerlo con el programador aparece aveces CP/CPD: Proteger EPPROM datos, cuando esto no decia nada al programarlo. (quiza esto no tenga importancia, pero se me hace extraño)

Edito: Aveces funciona y aveces no, siempre al apagarlo y volverlo a encender se traba, borro el programa y lo vuelvo a escribir y nada, y luego, de repente despues de repetir estó, de nuevo vuelve a funcionar, y al apagarlo y encenderlo de nuevo, pff! de nuevo se traba :S... que lío con ésto XD
 
Última edición:
Ok. Saludos.
Púes si, el Watch Dog Timer lo auto resetea como querias.
Lo extraño de tu código es la parte donde comparas si RA5 esta activada.
Siendo que RA5 es el master reset general del PIC y lo tienes configurado como activo.
En fin. BYE4NOW :apreton:
 
Atrás
Arriba