Problemas para encender un led con el PIC16f877

Hola, estoy tratando de aprender a trabajar con el PIC16f877, realize un programa de prueba que enciende y apaga un led, pero si utilizo un cristal de 20Mhz el pic actua como si no estuviese programado al intentarlo con un cristal de 4Mhz (realizando los cambios requeridos al codigo) el led enciende, pero en vez de apagarse y encenderse, comienza a haber una caida de voltaje hasta que el led se apaga. No se cual es el error, espero puedan ayudarme.
aqui esta el codigo:

__CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF ; Configuración para el programador

LIST p=16F877A
INCLUDE <P16F877A.INC>

N EQU 0x00
cont1 EQU 0x20
cont2 EQU 0x21

ORG 0x00 ; Inicio de programa

BCF STATUS,RP0 ; Accede a banco 0
BCF STATUS,RP1
CLRF PORTA ; Limpia PORTA
BSF STATUS,RP0 ; Accede a banco 1
CLRF TRISA ; Configura todos las patitas de PORTA como salidas
BCF STATUS,RP0 ; Regresa a banco 0

Encled
BSF PORTA,0 ; La línea RA0 de PORTA toma el valor de 1, se enciende el LED
CALL Retardo ; Llamada a la rutina de retardo
BCF PORTA,0 ; La línea RA0 de PORTA toma el valor de 0, se apaga el LED
CALL Retardo ; Llamada a la rutina de retardo
GOTO Encled ; Va a la etiqueta Encled

Retardo ;Rutina de retardo
MOVLW N
MOVWF cont1
Rep1
MOVLW N
MOVWF cont2
Rep2
DECFSZ cont2,1
GOTO Rep2
DECFSZ cont1,1
GOTO Rep1
RETURN ;Retorno a la llamada de rutina de retardo.

END ;Fin de programa
 
Última edición:
Error 1. No puedes definir una variable en la localidad 0x00, debe ser a partir de la 0x20. Si deseas usar N como constante de valor 0 para reiniciar los registros cont1 y cont2 te sera mas facil usar la instruccion CLRF cont1 o CLRF cont2.

Si el pic no trabaja a 20MHz verifica que el numero de parte realmente coincide con un pic16f877 cuyo rango de operacion sea hasta los 20MHz (ve el numero de parte y la hoja de datos)
 
Error 1. No puedes definir una variable en la localidad 0x00, debe ser a partir de la 0x20. Si deseas usar N como constante de valor 0 para reiniciar los registros cont1 y cont2 te sera mas facil usar la instruccion CLRF cont1 o CLRF cont2.

Si el pic no trabaja a 20MHz verifica que el numero de parte realmente coincide con un pic16f877 cuyo rango de operacion sea hasta los 20MHz (ve el numero de parte y la hoja de datos)


Bueno ante todo muchas gracias por responder tan pronto, revisare mi código en relacion a lo que comentaste; con respecto a lo del pic ya revise el datasheet que nos da el fabricante( Microchip) y no comenta en ninguna parte que al pic16f877 no trabaje a 20Mhz, dice que su funcionamiento es con cristales entre 4Mhz y 20Mhz como maximo, con respecto a lo que dijo tiopepe123, en el datasheet me dice que para configuraciones de 20Mhz el rango de los capacitores esta entre 15pF-30pF, bueno eso es lo que dice el datasheet, seguiré intentando a ver si funciona
 
Hola otro error que tienes es q estas utilizando el puerto A del micro como salida de señales digitales (1y0) y no le estas diciendo al micro q quieres hacer eso... como ese puerto se usa tambien como conversor A/D ahi q programarlo para lo q lo necesitas, ahora no recuerdo las lineas de codigo pra eso, pero bscalas o cabia de puerto, Salu2
 
Hola otro error que tienes es q estas utilizando el puerto A del micro como salida de señales digitales (1y0) y no le estas diciendo al micro q quieres hacer eso... como ese puerto se usa tambien como conversor A/D ahi q programarlo para lo q lo necesitas, ahora no recuerdo las lineas de codigo pra eso, pero bscalas o cabia de puerto, Salu2

Hola busque la configuración de puertos en el datasheet y con hacerle clr a TRISA es suficiente para colocar el puerto A como salida.
 
si claro tienes razón pero con eso no es suficiente, pues el micro debe saber que tu quieres trabajar con el puerto A en forma DIGITAL no análoga como viene "preestablecido...por eso debes manipular algunos registros relacionados con el PORTA del conversor A/D y ahi si prenderá tu led, buscalas o sino te repito cambia de puerto, ese micro tiene 4 mas y no hay que hacerles eso.... Salu2
 
si claro tienes razón pero con eso no es suficiente, pues el micro debe saber que tu quieres trabajar con el puerto A en forma DIGITAL no análoga como viene "preestablecido...por eso debes manipular algunos registros relacionados con el PORTA del conversor A/D y ahi si prenderá tu led, buscalas o sino te repito cambia de puerto, ese micro tiene 4 mas y no hay que hacerles eso.... Salu2

ok muchas gracias a todos por sus recomendaciones y respuestas, ya logre que me funcionará con el reloj de 20Mhz, lo unico extraño ahora es que el voltaje que sale del pic para encender el led es de 2.4 voltios, si alguien sabe porque sucede eso, segun creo deberia salir de 5 a 4.5 volt, si alguien puede darme alguna idea de porque sucede eso se lo agradecería mucho!!:)
 
Hola a todos tengo un problema con un circuito que arme con el 16F877A, la simulacion funciona perfectemente (Proteus) pero al montarlo no funciona como deberia, sucede lo siguiente:
- En la matriz no se visualiza nada, hasta que descubri que al tocar el cristal recien comienza a funcionar de la siguiente manera: si apenas lo toco funciona lentamente, si lo presiono mas va mas rapido :confused: porq sucede esto???.
lo probe con un cristal de 4 Mhz y con uno de 7.32Mhz. Adjunto el archivo (codigo y simulacion).Si alguien me pudiera colaborar se lo agradeceria mucho
Gracias.
 

Adjuntos

  • Matriz5x7.rar
    28.4 KB · Visitas: 66
Hola a todos tengo un problema con un circuito que arme con el 16F877A, la simulacion funciona perfectemente (Proteus) pero al montarlo no funciona como deberia, sucede lo siguiente:
- En la matriz no se visualiza nada, hasta que descubri que al tocar el cristal recien comienza a funcionar de la siguiente manera: si apenas lo toco funciona lentamente, si lo presiono mas va mas rapido :confused: porq sucede esto???.
lo probe con un cristal de 4 Mhz y con uno de 7.32Mhz. Adjunto el archivo (codigo y simulacion).Si alguien me pudiera colaborar se lo agradeceria mucho
Gracias.


1. puede ser que el cristal este dañado.
2. revisa si los nodos o puntos de conexión tengan continuidad.
3. revisa tener conectado el MCLR.

saludos..:)

yo aun no se porque mis salidas del pic son 2.4volt en lugar de 4volt o 5volt si alguien sabe porque agradecería su ayuda
 
Hola tengo el mismo problema que vos has podido solucionar el problema del bajo voltaje de salida?
Si es así me podrías decir como lo has hecho?

Desde ya mucha gracias.
 
Hola tengo el mismo problema que vos has podido solucionar el problema del bajo voltaje de salida?
Si es así me podrías decir como lo has hecho?

Desde ya mucha gracias.


la verdad es que no he podido solucionar ese problema
todavía me sigue dando 2.5 voltios en la salida cada vez que mando a escribir un 1 lógico en la salida nisiquiera porque le coloque el MCLR, lo unico es pasarlo por un buffer o trabajar con esos niveles de voltaje igual las pastillas lo reconocen como un 1 logico, saludos..
 
ok muchas gracias a todos por sus recomendaciones y respuestas, ya logre que me funcionará con el reloj de 20Mhz, lo unico extraño ahora es que el voltaje que sale del pic para encender el led es de 2.4 voltios, si alguien sabe porque sucede eso, segun creo deberia salir de 5 a 4.5 volt, si alguien puede darme alguna idea de porque sucede eso se lo agradecería mucho!!:)
Podrias decir como lograste que funcionara
gracias
 
Atrás
Arriba