Sie sind auf Seite 1von 10

Hola me gustara que alguien me explicase o me facilitara algn doc sobre comunicaciones rs232 en los pic la finalidad que

estoy buscando es poder comunicarme con una aplicacin propia de forma que cuando se produzcan cosas en el pic este enva churros a mi programa y este acta en consecuencia enviando otro churro al pic.

El tema de la comunicacin serial rs232 es uno de los temas ms interesantes para el control de dispositivos con el PC Para la comunicacin serie RS232 asncrona se puede implementar por software o por hardware segn el PIC que poseas. La ventaja de usar el pic 16f877 es debido a que implementa intermamente registros especializados para la comunicacin es decir posee un modulo usart para transmisin y recepcin que puede trabajar de tres maneras diferentes: 1.Asncrona rs232 2.Sncrona maestro esclavo 3.Sncrona esclavo Una de las formas ms usadas es la asincona rs232 en este protocolo cada palabra de informacin o dato se enva independiente de los dems. Suele constar de 8 o 9 bits y van precedidos por un bit de inicio y al final un bit de parada de acuerdo con las normas del formato NRZ ( no retorno a zero), los bits se transmiten a una frecuencia fija y normalizada La arquitectura bsica interna del modulo usart del pic 16f877 la componen: A)Un circuito de muestreo: Acta sobre el pin RC7/RX/DT que es por donde recibe el bit de informacin o control y se encarga de muestrear tres veces su valor para decidir este por mayora B)Un generador de baudios:genera la frecuencia en baudios para la transferencia de los datos a valores normalizados 300, 600, 1200, 2400, 4800, 9600, 19200, 38400 etc para generar esta frecuencia el generador de baudios se carga con uno de estos valores el registro SPBRG ver manual del pic 16f877 la descripcin de bits y constantes usadas. C)Un transmisor asncrono: el dato que se desea transmitir por el modulo usart se deposita en el registro TXREG y a continuacin se pasa al registro de despalzamiento interno TSR que saca los bits secuencialmente a la frecuencia establecida D)recepector asncrono: los datos se reciben en serie bit a bit por el pin RC7/RX y se van introduciendo secuencialmente El siguiente ejemplo ilustra una rutina que usa el modulo usart del pic 16f877 para la comunicacin serie rs232 ;-----PALABRA DE CONFIGURACION---RADIX HEX ; Sistema de numeracin hexadecimal processor 16F877 include <p16F877.inc>

__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC __IDLOCS H'0000' ;-----REGISTROS INTERNOS-------STATUS EQU 0x03 ;registro de estado PORTA EQU 0x05 ;puertoa PORTB EQU 0x06 PORTC EQU 0x07 PORTD EQU 0x08 PORTE EQU 0x09 ;puertob RAM EQU 0X20 ;direccion de inicio de la tabla en RAM INDF EQU 0x00 FSR EQU 0x04 PC EQU 0x02 RP0 EQU 5 RP1 EQU 6 PIR1 EQU H'000C' PIR2 EQU H'000D' ;CONTIENE BANDERAS PARA INTERRUPCIONES DE PERIFRICOS PCLATH EQU 0x0A TXREG EQU H'0019' ;registro de control y status de transmision RCREG EQU H'001A' ;registro de control y status de recepcion RCSTA EQU H'0018' SPBRG EQU 0x99 TXSTA EQU H'0098' SPBRG EQU H'0099' PIE1 EQU 0x8C RP0 EQU 5 RP1 EQU 6 irp equ 7 Z EQU 2 C EQU 0 TXIF EQU 4 ;bandera de transmision usart 1=vacio 0= lleno ADCON1 EQU 0x9F OPTION_REG EQU 0x81 ADCON0 EQU 0x1F TMRO EQU 0x1 INTCON EQU 0x0B ;--------REGISTROS DEFINIDOS EN RAM ORG RAM ;Inicio de los registros de Uso general RAM CONTADOR_ERROR RES 1 BYTE1_ALTO RES 1 BYTE_CONTROL RES 1 BYTE_DIRECCION RES 1

BYTE_DATA RES 1 BYTE1 RES 1 BYTE1_BAJO RES 1 BYTE2 RES 1 BYTE3 RES 1 BYTE4 RES 1 CONTROL RES 1 ;Reserva un Byte para palabra de control de la tarjeta ADRESS RES 1 ;Reserva un Byte para direccin de la tarjeta BYTE RES 1 ; BIT RES 1 ; NUM RES 1 ; VALOR RES 1 ;registro temporal donde se almacenan los datos que vienen de la tarjeta TEMPORAL1 RES 1 ;contador para almacenar variables temporales BANDERAS RES 1 OutputReg res 1 CounterReg res 1 cont1 res 1 BYTE2_BAJO RES 1 BYTE2_ALTO RES 1 BYTE3_BAJO RES 1 BYTE3_ALTO RES 1 BYTE4_BAJO RES 1 BYTE4_ALTO RES 1 LOOPS RES 1 LOOPS2 RES 1 contador4 res 1 contador3 res 1 contador5 res 1 Contador res 1 ;variables para subrutina retardos CONTADOR2 RES 1 CONTADOR1 RES 1 ;------------------------------------------------VARIABLES DEL TECLADO TEMP_1 RES 1 DELAY_1 RES 1 DELAY_2 RES 1 DELAY_3 RES 1 LCD_VAR RES 1 KEY_VAR RES 1 KEY_DELAY_1 RES 1 ;Variable de temporizacin KEY_DELAY_2 RES 1 ;Variable de temporizacin TECLADO RES 1 ;---------BITS ESPECIALES-----CLK EQU 1 RST EQU 0 ;bit para control y datos del LCD

IO EQU 2 ;bit de enable para LCD SWITCH EQU 6 ;SWITCH DE ENCENDIDO DE LA TARJETA DI EQU 7 ;bit de entrada desde eeprom DO EQU 6 ;bit de salida para eeprom TR EQU 6 RBPU EQU 7 TRMT EQU 1 RCIE EQU 5 ;-----REGISTROS LCD------; Bits del puerto B para controlar la Pantalla LCD_RS EQU 5 LCD_E EQU 4 ;Bancos 0-1-2-3 16 bytes comunes a los 4 bancos (sharebank) CBLOCK H'070' RXBUF COUNT2 count Eeprom TRANS ;REGISTRO QUE SE TRANSMITE RS 232 AL PC R0D ;CONTADOR 8 PARA RS232 R0E CONT1 ;CONTADOR carga para 833us PARA RS232 CONT CONT2 ncount mcount TXBUF TECLA ;Retorno del cdigo de tecla KEY_1 ;No de filas a explorar KEY_2 ENDC ;**************************************************************** ;PROGRAMA PRINCIPAL ;***************************************************************** ORG 0X00 GOTO INICIO ORG 0x04

;TRATAMIENTO DE INTERRUPCIONES

INTER BTFSS PIR1,RCIF ;INTERRUPCION POR RECEPCION? GOTO VOLVER ;FALSA ALARMA BCF PIR1, RCIF ;SI REPONER FLAG movf rcreg, w ;lectura del dato recibido movwf teclado CLRF RCREG ;CALL LCDC MOVLW 'F' SUBWF TECLADO, W BTFSC STATUS, Z GOTO LECTURA

CALL TX_DATO2 BSF STATUS, 5 CLRF RCSTA ;-->OJO ES TXSTA PORQUE ESTA EN BANCO 1 BCF STATUS, 5 ;MOVLW B'11000000' ;MOVWF INTCON VOLVER RETFIE TX_DATO2 BCF PIR1,TXIF ;RESTAURA EL FLAG DEL SEALIZADOR MOVLW 'N' movwf txreg ;muevele byte a transmitir al registro de transmisin BSF STATUS, 5 BCF STATUS, 6 TX_dat_w2 btfss rcsta,trmt ;fue transmitido el byte? Ojo es el registro TXsta porque esta en el banco 1 GOTO TX_DAT_W2 BCF STATUS,5 RETURN Inicio clrf portc BSF STATUS, 5 ;Cambio al banco 1 BCF STATUS, RP1 BCF STATUS, IRP MOVLW b'0000000' MOVWF PORTD ;Configura todo el puerto d como salida. MOVLW b'11110000' ;CONFIGURO TECLADO MOVWF PORTB

MOVLW b'10001000' ;CONFIGURO BANDERAS DE CONTROL LCD Y LED INSERT Y TX RS232 MOVWF PORTC movlw b'11000100' ;configuro i/o para reset de tarjeta MOVWF PORTA MOVLW b'00000110' movwf adcon0 ; deshabilito conversor a/d entradas digitales MOVLW B'00100100' ;CONFIGURACIN DE USART BSF STATUS, 5 movwf rcsta ;activacin de transmisin ojo es txsta porque estoy en banco 1 BCF STATUS, 5 ;9600 BAUDIOS BSF STATUS, 5 MOVLW . 25 MOVWF TXREG ;OJO ES SPBRG PORQUE ESTOY EN BANCO 1 BCF STATUS, 5 BSF STATUS, 5 bsf pir1, rcie ;habilita interrupcin en recepcin ojo es pie estoy en banco 1 BCF STATUS, 5 ;Cambio al banco 0 CALL CONFI_LCD

movlw b'10010000' ;configuracin USART para recepcin continua MOVWF RCSTA MOVLW B'11000000' movwf intcon ;habilitacin de las interrupciones en general

BUCLE GOTO BUCLE ;********** ;LECTURA ;********* LECTURA MOVLW 0x01 CALL LCDI CALL TEMPO2 MOVLW 'L' CALL LCDC MOVLW 'E' CALL LCDC MOVLW 'Y' CALL LCDC

MOVLW 'E' CALL LCDC MOVLW 'N' CALL LCDC MOVLW 'D' CALL LCDC MOVLW 'O' CALL LCDC CALL TX_DATO

CLRF TXREG ;MOVLW B'11000000' ;MOVWF INTCON RETFIE TX_DATO BCF PIR1,TXIF ;RESTAURA EL FLAG DEL SEALIZADOR MOVLW .3 MOVWF COUNT SIGUE2 MOVLW 'R' movwf txreg ;muevele byte a transmitir al registro de transmisin BSF STATUS, 5 BCF STATUS, 6 BSF STATUS, 5 TX_DAT_W BTFSS RCSTA,TRMT ;FUE TRANSMITIDO EL BYTE? Ojo es txsta estoy en banco 1 GOTO TX_DAT_W BCF STATUS,5 ;

BSF STATUS, 5 CLRF RCSTA ;OJO ES TXSTA ESTOY EN BANCO 1 BCF STATUS, 5 DECFSZ COUNT, 1 GOTO SIGUE2 BCF STATUS,5 RETURN

;***********************************

;COMANDOS DE CONTROL DE LCD ;************************************

;---RESET LCD----CONFI_LCD CALL TEMPO2 ;RETARDO DE POWER ON CALL de10ms ; wait for nice LCD startup! (>2mSec) MOVLW b'00110000' CALL de58us ;RETARDO DE 58us activa banderas E,RS.RW CALL TEMPO1 ;wait for nice LCD startup! (>2mSec) MOVLW b'00110000' ;A 8 BITS LCD CALL LCDI ;HABILITACION DE COMANDO MOVLW b'00111000' ;LCD PARA TRABAJAR CON 2 LINEAS CALL LCDI ;HABILITACION DE COMANDO MOVLW b'00000110' ;CURSOR A LA DERECHA CALL LCDI ;HABILITACION DE COMANDO MOVLW b'00001100' ;ACTIVA O DESACTIVA AL DISPLAY Y AL ;CURSOR Y DETERMINA SI PARPADEA O NO CALL LCDI ;HABILITACION DE COMANDO RETURN ;-------RUTINA PARA ENVIO DE COMANDOS DE CONTROL AL LCD----LCDI BCF STATUS,5 BCF STATUS,6 BCF STATUS,7 BCF PORTC,LCD_RS ;HABILITA COMANDO BSF PORTC,LCD_E MOVWF PORTD BCF PORTC,LCD_E CALL TEMPO1 ;RETARDO RETURN ;-------RUTINA PARA ENVIO DE DATOS AL LCD----LCDC BCF STATUS,5 BCF STATUS,6 BCF STATUS,7 BSF PORTC,LCD_RS ;HABILITA ENVIO DE DATOS AL LCD BSF PORTC,LCD_E

MOVWF PORTD BCF PORTC,LCD_E CALL TEMPO1 RETURN

TEMPO1 MOVLW 0x0D ;RETARDO1 ;UN PEQUEO RETARDO PARA LCD MOVWF CONT1 CICLOT1 NOP DECFSZ CONT1,1 GOTO CICLOT1 RETURN ;----------

TEMPO2 MOVLW 0x00 ;RETARDO2 ;UN PEQUEO RETARDO PARA LCD MOVWF CONT2 CICLOT2 CALL TEMPO1 DECFSZ CONT2,1 GOTO CICLOT2 RETURN

;-------------------------------de10ms ; SUBRUTINA PARA INICIAR SECUENCIA RESET EN LCD BCF PORTC,LCD_RS BSF PORTC,LCD_E MOVWF PORTD BCF PORTC,LCD_E

movlw 0x3a movwf mcount loadn movlw 0x3a movwf ncount decn decfsz ncount,f goto decn decfsz mcount,f goto loadn return ;--------------------------------de58us ; SUBRUTINA PARA INICIAR SECUENCIA RESET EN LCD

BCF PORTC,LCD_RS BSF PORTC,LCD_E MOVWF PORTD BCF PORTC,LCD_E CALL TEMPO1 RETURN END

Das könnte Ihnen auch gefallen