TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jca en 22 de Abril de 2004, 15:05:00
-
Hola a todos toy ya desesperao, estoy intentando comunicar el ordenador con el 16f876 através del puerto serie, bueno comunicar...solo intento que el dato que le envío lo coja y me lo
muestre por el puerto B, pero es imposible, ALGUIEN ES TAN AMABLE O TIENE POR AHI UNA RUTINA (QUE FUNCIONE!!) QUE RECOJA EL DATO DEL PUERTO SERIE DEL ORDENADOR???.
He hecho un programilla en Visual Basic el cual manda un dato por el puerto serie con esta configuración de este el 8N1 a 9600bps, de todas formas tb os adjunto los programas con los que
estoy intentando recoger el dato, uno supuestamente funciona por interrupción y el otro esta hecho sin ella, tb adjunto el programa con el que le envio el dato al puerto.
Con el de interrupción como la pata 3 del puerto serie es la que manda los datos, esta está siempre a -10V o así entonces el max232 lo cambia a 5V a la salida, con esto lo que pasa es que siempre entra en la interrupción y cuando mando el dato desde el ordenador este cambia la tensión cambiando así la salida del max232 y poniendola a 0V a si que no hace nada pero en fin que ya no se que hacer.
Si hay algun alma caritativa por ahi que me heche una manilla....
Gracias a todos!!!
Bueno pongo aqui el programa pq no me deja subir el adjunto...
CON INTERRUPCIÓN
-------------------------------------------------------------------------------------
;*****************************************************
; PROGRAMA : cabina rayos U_V_A.asm
; Funcion : Escucha puerto serie rs232 y cuando recibe un dato
;salta la interrupcion y lo muestra en el PuertoB.
;
;Configuración puerto Serie: 9600 baudios,8 bits,paridad = none
; Programa para : PIC16F876
; CPU Clock : 4 MHz
; WDT : Deshabilitado
; Reloj instruccion : 1 MHz = 1 us
; Tipo de reloj : XT
;*****************************************************
LIST P=16F876
#include "p16f876.inc"
;---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 0x00
;Inicio en el Vector de Reset
goto INICIO ;Va a la primera instruccion del programa
;------------------- VECTOR DE INTERRUPCION -------------------->>>>>
ORG 0x04
INTER
btfss PIR1,RCIF ;¿Interrupcion por recepcion?
goto VOLVER ;No. Falsa interrupcion
bcf PIR1,RCIF
;Si. Reponer Flag
movf RCREG,W ;Lectura dato recibido
movwf PORTB
;Visualiza dato recibido
VOLVER
retfie ;retorna de la interrupcion.
;----------------- PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO
clrf PORTB
clrf PORTC
bsf STATUS,5 ;Cambio al banco 1
clrf ADCON0
movlw 0x07
movwf ADCON1
clrf TRISA ;Puerto A como salida
clrf TRISB ;Puerto B como salida
movlw b"10111111" ;RC7/Rx entrada
movwf TRISC ;RC6/Tx salida
movlw b"10010000" ;Configuracion USART
movwf TXSTA ;y activacion de transmision
movlw .25 ;9600 baudios
movwf SPBRG
movlw b"00100000"
movwf PIE1 ;Habilitacion interrupcion RX
movlw b"11000000" ;Habilitacion para las
movwf INTCON ;interrupciones generales
bcf STATUS,5 ;Cambio al banco 0
movlw b"10010000" ;Configuracion de la usart
movwf RCSTA ;para recepcion continua
BUCLE
goto BUCLE ;espera aqui hasta que salte la int.
END
-
Hola compañero:


Mira he revisado un poco el código que pones y te adjunto la parte del programa principal que yo utilizo y que me funciona correctamente con 16F876. Difiere un poco de la tuya(configuracion de USART y estructura de colocacion de bancos de memoria) aunque pienso que deberia funcionar. Lo dicho ahí va:
INICIO clrf PORTC
clrf PORTB
bsf STATUS,RP0 ;Selecciona banco 1
clrf PORTB ;Puerta B salida
movlw b"10111111"
movwf TRISC ;RC7/Rx entrada, RC6/Tx salida
movlw b"00100100"
movwf TXSTA ;TX en On, asíncrono 8 bits, alta velocidad
movlw .25
movwf SPBRG ;9600 baudios con Fosc=4MHz
bsf PIE1,RCIE ;Habilita interrupción en la recepción
bcf STATUS,RP0 ;Selecciona banco 0
movlw b"10010000"
movwf RCSTA ;USART en On, recepción contínua
bsf INTCON,PEIE ;Activa interrupción de periféricos
bsf INTCON,GIE ;Activa interrupciones


Saludos fermin
-
Hola de nuevo gracias por tu interés pero esto sigue sin funcionar!!
He puesto la configuración que me as mandado pero nada cuando mando un dato por el puerto serie me pone siempre lo mismo, te puedo pedir un favor???me podrías mandar tu programa para probarle???
GRacias de ante mano!!
Saludos.
-
Perdón se me olvidó poner que ya funciona todo, gracias a todos los que me han ayudado y bueno por mi parte ya se puede cerrar este hilo, a si que a otra cosa!! jeje.
Gracias a todos 1 Saludo.