;**************************************************************************** ; RUTINAS DE COMUNICACION SERIE RECEPCION * ; * ; Se trata de comunicar un PIC16f84 con un PC. El pic * ; Esta rutina recibe caracteres y los imprime en un LCD version 01. * ; RS232. LCD hitachi 14 pines RA3=Entrada serie,RA2=E(LCD),RA1= R/W(LCD), * ; RA0=RS (LCD).Comunicacion a 1200 baudios.RB0-RB7=DATOS (LCD). * ;**************************************************************************** list p=16c84 ;Tipo de procesador STATUS equ 0x03 ;Registro de estado TRISA equ 0x05 ;Registro de direci¢n de la puerta A PORTA equ 0x05 ;Puerta A TRISB equ 0x06 ;Registro de direcci¢n de la puerta B PORTB equ 0x06 ;Puerta B w equ 0 f equ 1 c equ 0 z equ 2 cuenta EQU 0X14 ;Variable para el retardo byte EQU 0X15 ;dato recibido cuenta2 EQU 0x17 ;2ª variable para el retardo #DEFINE BANCO1 bsf STATUS,5 #DEFINE BANCO0 bcf STATUS,5 org 0 iniciar movlw 0x0f BANCO1 movwf TRISA;Puerto A como entrada BANCO0 no_ini btfsc PORTA,3;espera bit inicio goto no_ini call retardo CALL retardo;nos deshacemos del bitini clrf PORTA btfsc PORTA,3 bsf byte,0 btfss PORTA,3 bcf byte,0 call retardo btfsc PORTA,3 bsf byte,1 btfss PORTA,3 bcf byte,1 call retardo btfsc PORTA,3 bsf byte,2 btfss PORTA,3 bcf byte,2 call retardo btfsc PORTA,3 bsf byte,3 btfss PORTA,3 bcf byte,3 call retardo btfsc PORTA,3 bsf byte,4 btfss PORTA,3 bcf byte,4 call retardo btfsc PORTA,3 bsf byte,5 btfss PORTA,3 bcf byte,5 call retardo btfsc PORTA,3 bsf byte,6 btfss PORTA,3 bcf byte,6 call retardo btfsc PORTA,3 bsf byte,7 btfss PORTA,3 bcf byte,7 call retardo;fuera el bit de paro btfsc PORTA,3 nop btfss PORTA,3 nop goto UP_LCD retardo movlw 0xff movwf cuenta retado decfsz cuenta,f goto retado return ;-------------------------------------------------------------------------- ; Rutinas de presentaci¢n de mensajes en LCD ;-------------------------------------------------------------------------- ;El conjunto de rutinas que se presentan a continuaci¢n permiten realizar ;las tareas b sicas de control del m¢dulo de visualizaci¢n LCD ;------------------------------------------------------------------------ ;LCD_BUSY: Lectura del Flag busy & direcci¢n. ; LCD_BUSY bsf RA,1 ;Pone el LCD en modo lectura bsf STATUS,5 ;Selecciona el banco 1 movlw 0xff movwf TRISB ;Puerta B como entrada bcf STATUS,5 ;Selecciona el banco 0 bsf RA,2 ;Activa el LCD nop L_BUSY btfsc RB,7 ;Chequea bit de Busy goto L_BUSY bcf RA,2 ;Desactiva LCD bsf STATUS,5 ;Selecciona banco 1 clrf TRISB ;Puerta B salida bcf STATUS,5 ;Selecciona el banco 0 bcf RA,1 ;Pone LCD en modo WR return ;------------------------------------------------------------------------- ;LCD_E: Pulso de Enable ; LCD_E bsf RA,2 ;Activa se¤al E nop ;Espera 1 uS bcf RA,2 ;Desactiva se¤al E return ; ;------------------------------------------------------------------------- ;LCD_DATO: Escritura de datos en DDRAM o CGRAM ; LCD_DATOS bcf RA,0 ;Desactiva RS (modo comando) movwf RB ;Valor ASCII a sacar por RB call LCD_BUSY ;Espera a que se libere el LCD bsf RA,0 ;Activa RS (modo dato). goto LCD_E ;Genera pulso en la se¤al E ;------------------------------------------------------------------------ ;LCD_REG: Escritura de comandos en el LCD ; LCD_REG bcf RA,0 ;Desactiva RS (modo comando) movwf RB ;Saca el c¢digo de la instrucci¢n call LCD_BUSY ;Espera se libere el LCD goto LCD_E ;Genera pulso en la se¤al E ; ;------------------------------------------------------------------------ ;LCD_INI: Inicializaci¢n del LCD ; LCD_INI movlw b'00101000' ;Caracteres 5-7,datos de 8 bits. call LCD_REG ;C¢digo de instrucci¢n call DELAY_5MS ;5ms.(Especificaci¢n de Fabricante) movlw b'00111000' call LCD_REG ;C¢digo de instrucci¢n call DELAY_5MS ;5ms.(Especificaci¢n de Fabricante) movlw b'00111000' call LCD_REG ;C¢digo de instrucci¢n call DELAY_5MS ;5ms.(Especificaci¢n de Fabricante) return ;------------------------------------------------------------------------ ;DELAY_5MS: Genera una temporizaci¢n de 5 mS ; DELAY_5MS movlw 0x1a movwf DATO_B ;Carga la variable DATO_B clrf DATO_A ;Carga la variable DATO_A DELAY_1 decfsz DATO_A,1 ;Decrementa la variable DATO_A goto DELAY_1 decfsz DATO_B,1 ;Decrementa la variable DATO_B goto DELAY_1 return ;------------------------------------------------------------------------ ;UP_LCD: Configuraci¢n PIC para el LCD. ; UP_LCD bsf STATUS,5 ;Banco 1 clrf TRISB ;Puerta B salida clrf TRISA ;Puerta A salida bcf STATUS,5 ;Banco 0 clrf INTCON ;Desactivar interrupciones. bcf RA,0 ;RS=0 bcf RA,2 ;E=0 Desactiva LCD call LCD_INI ;Inicia el m¢dulo LCD movlw b'00001100' call LCD_REG ;LCD On y Cursor Off movlw b'00000001' call LCD_REG ;Borra display movf byte,w call LCD_DATOS goto iniciar end