No me funciona PIC16F873A

#1
Buen día. He tenido un problema con mi PIC16F873A.

Desarrollé un programa muy simple en MPLAB y a la hora de simularlo en proteus funciona perfectamente.
Cuando lo grabo lo hace perfectamente, pero en protoboard no funciona.

Las tensiones que llegan a VDD y MCLR son perfectas, pero las salidas están constantemente apagadas.

Probé con otro PIC completamente igual para probar que el mío no esté quemado y el problema persiste.
De hardware creo que no hay problema. Me queda que tenga un problema de software.

Lo adjunto a continuación.

Desde ya, muchísimas gracias.
PHP:
org 0x000 ; processor reset vector
movlw b'00010000'
movwf porta
clrf portb
clrf portc
bsf status,5
movlw b'00000000'
movwf trisa
movlw b'00000000'
movwf trisb
movlw b'00000000'
movwf trisc
movlw b'00000110'
movwf adcon1
bcf status,5

;***** arranco el programa *****
again movlw b'11111111'
movwf porta
call timer
clrf porta
movlw b'11111111'
movwf portb
call timer
clrf portb
movlw b'11111111'
movwf portc
call timer
clrf portc
goto again 

timer
movlw h'30' ; seteo de prescaler a 8
movwf t1con
bcf pir1,0
movlw h'dc' ;valor a usar
movwf tmr1l 
movlw h'0b' ;valor a usar
movwf tmr1h
bsf t1con,0
otra 
btfss pir1,0
goto otra
bcf t1con,0
bcf pir1,0 
return 

end ; directive 'end of program'
 
Última edición por un moderador:
#2
Buen dia! He tenido un problema con mi pic 16f873a

desarrolle un programa muy simple en mplab. A la hora de simularlo en proteus funciona perfectamente! Cuando lo grabo lo hace perfectamente! Pero en proto no funciona.

Las tensiones que llegan a vdd y mrcl son perfectas! Pero las salidas estan constantemente apagadas!

Probe con otro pic completamente igual para probar que el mio no este quemado y el problema persiste... De hardware creo que no hay problema. Me queda que tenga un problema de software.!

Lo adjunto a continuacion.

Desde ya, muchisimas gracias.


org 0x000 ; processor reset vector
movlw b\\\'00010000\\\'
movwf porta
clrf portb
clrf portc
bsf status,5
movlw b\\\'00000000\\\'
movwf trisa
movlw b\\\'00000000\\\'
movwf trisb
movlw b\\\'00000000\\\'
movwf trisc
movlw b\\\'00000110\\\'
movwf adcon1
bcf status,5

;***** arranco el programa *****
again movlw b\\\'11111111\\\'
movwf porta
call timer
clrf porta
movlw b\\\'11111111\\\'
movwf portb
call timer
clrf portb
movlw b\\\'11111111\\\'
movwf portc
call timer
clrf portc
goto again

timer
movlw h\\\'30\\\' ; seteo de prescaler a 8
movwf t1con
bcf pir1,0
movlw h\\\'dc\\\' ;valor a usar
movwf tmr1l
movlw h\\\'0b\\\' ;valor a usar
movwf tmr1h
bsf t1con,0
otra
btfss pir1,0
goto otra
bcf t1con,0
bcf pir1,0
return

end ; directive \\\'end of program\\\' ...

Las \\\ no están escritas en el programa, fue un error de tipeo cuando desarrolle la pregunta.
Hola...¿configuraste los fusibles del micro-controlador al compilar o grabar informándole el tipo de oscilador que usas, la frecuencia del mismo, etc? Pregunto por que ni lo mencionas, ni esta en el programa que adjuntaste. El simulador pone por defecto cierta configuración.
Saludos.

Ric.
 
#3
list p=16f873A ; list directive to define processor
#include <p16f873A.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF


esto es lo que antecede al programa... Sin dudas que no he declardo el tipo de oscilador y la f. Es un Crystal de 4MHz... Como debería quedar mi programa..? desde ya muchisimas gracias!

Saludos!
 
#4
Esa configuración es para usar un oscilador RC y necesitas usar oscilador a cristal.

También tienes mal la configuración de ADCON1 para que los pines análogos sean digital I/O

Prueba de esta manera con los cambios que realicé a tu programa y ya debe funcionar físicamente:
PHP:
    list     p=16f873a
    include    p16f873a.inc
    
    __config    _XT_OSC & _PWRTE_ON & _WDTE_OFF & _LVP_OFF
    

    org 0x000 ; processor reset vector

    movlw    b'00010000'
    movwf    PORTA
    clrf    PORTB
    clrf    PORTC
    bsf        STATUS,RP0
    movlw    b'00000000'
    movwf    TRISA
    movlw    b'00000000'
    movwf    TRISB
    movlw    b'00000000'
    movwf    TRISC
    movlw    b'00000111'
    movwf    ADCON1
    bcf        STATUS,RP0

;***** arranco el programa *****
again
    movlw    b'11111111'
    movwf    PORTA
    call    timer
    clrf    PORTA
    movlw    b'11111111'
    movwf    PORTB
    call    timer
    clrf    PORTB
    movlw    b'11111111'
    movwf    PORTC
    call    timer
    clrf    PORTC
    goto    again 

timer
    movlw    h'30' ; seteo de prescaler a 8
    movwf    T1CON
    bcf        PIR1,0
    movlw    h'dc' ;valor a usar
    movwf    TMR1L
    movlw    h'0b' ;valor a usar
    movwf    TMR1H
    bsf        T1CON,0
otra 
    btfss    PIR1,0
    goto    otra
    bcf        T1CON,0
    bcf        PIR1,0 
    return 

    end ; directive 'end of program'
 
Arriba