Programación Específica > Microcontroladores
Problemas Con El 16f87
karen81:
:hitcomp: Estoy desesperada, no puedo hacer que el PIC 16F87 reciba y transmita datos, inicialmente estoy probando con el siguiente programa de envio:
--- Código: Text --- LIST p=16F87 ;indica el modelo del pic #include "P16F87.INC" ;se incluye la definicion de los registros internos AUXI EQU 0x68;variable auxiliar ORG 0 goto INITVAR ORG 5;--------------------------------------------------------------------------------------;Esta rutina inicializa las variables a utilizar;--------------------------------------------------------------------------------------- INITVAR clrf PORTA;Limpia la salida bsf RCSTA,SPEN;configura la USART para recepcion continua bsf STATUS,RP0;cambia al banco 1 clrf TRISA;Puerta A como salida movlw b'11011111' movwf TRISB movlw b'00100100' movwf TXSTA movlw .25 ;Baud Rate = Fosc/(16(X+1))= 9600 baudios, X=(Fosc/((Baud rate)x16))-1 movwf SPBRG; X=(4MHz/(9600x16))-1 = 25 bcf STATUS,RP0;cambia al banco 0 bsf RCSTA,SPEN;configura la USART para recepcion continua;""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" bsf STATUS,RP0;cambia al banco 1 bcf STATUS,RP1;cambia al banco 1 bsf TXSTA,TXEN bcf STATUS,RP0;cambia al banco 0 movlw 0x42 ;UNA B movwf AUXI call ENVIAR ESPERA clrwdt goto ESPERA ENVIAR movf AUXI,W movwf TXREG bsf STATUS,RP0;cambia al banco 1COMPTX btfss TXSTA,TRMT;comprueba si acabo de transmitir goto COMPTX bcf STATUS,RP0;cambia al banco 0 movlw 0x02 movwf PORTA return END
el problema que tengo es que supuestamente si no leo el dato, no tendria que sacar ese dos por el puerto A ¿verdad?, pero solo enciendo el pic y me muestra ese dos ¿en que me he equivocado?, me he basado en programas del pic 16f873 que esta aqui en este foro, y para comunicarme estoy usando un circuito alterno al del MAX232 que esta en la pagina http://www.pablin.com.ar/electron/circuito/mc/ttl232/
¿sera que no funciona? o ¿se me habra arruinado la parte rs232 del pic? porque lo he probado con programas que no la usan y si funcionan.
:ayuda: porfavor
cualquier ayuda sera bienvenida
lalo_soft:
--- Citar ---ENVIAR
movf AUXI,W
movwf TXREG
bsf STATUS,RP0;cambia al banco 1
COMPTX btfss TXSTA,TRMT;comprueba si acabo de transmitir
goto COMPTX
bcf STATUS,RP0;cambia al banco 0
movlw 0x02
movwf PORTA
return
--- Fin de la cita ---
Pero si transmites ,espera fin de transmicion y luego le ordenas escribir el 2.¿Cual es el problema? explicanos el contexto para poder ayudarte mejor por que hasta ahora no veo el problema.
Otra cosa:
--- Citar ---ESPERA clrwdt
goto ESPERA
--- Fin de la cita ---
Si tienes encendido el WatchDog mejor apagalo en el inicio de tu programa por que si no tienes bien calculado el tiempo que tardan de las instruciones que usas sera facil que te resete
el micro en medio de cualquier parte en tu programa.
karen81:
el problema es que no funciona ;), no se si el programa tiene un error o que? , y le puse lo del watchdog por que se me reseteaba, pero eso es lo de menos, se lo quito y ya pero ya lo hice y nada.
cualquier ayuda sera bienvenida
Huguen_aus_Tirol:
Hola Karen! No verifiqué que estén bien cada uno de los bits de configuración en tu programa, pero aparentemente estan en orden...
Bien, arrancas el PIC, configuras los registros, llamas a la rutina ENVIAR: escribes un byte en el registro TXREG (la transmisión se inicia automáticamente), verificas que se termine de transmitir (polling), escribes el 2, y return :)
Y entonces quedas en un lazo infinito.
Asi como está el programa, no recibes nada; o mejor dicho, no tienes una rutina para la recepción.
La transmisión la realizas una sola vez, y luega quedas en un lazo.
Bueno, espero ayudar un poquito...
Saludos :hola:
lalo_soft:
--- Citar ---el problema que tengo es que supuestamente si no leo el dato, no tendria que sacar ese dos por el puerto A
--- Fin de la cita ---
Insisto todo lo que haces es transmitir y colocar el dos.
Tirol tiene razon donde esta la rutina de recepcion.
Navegación
[#] Página Siguiente
Ir a la versión completa