;************************************************************************* ; ; LE_RS232-TR.ASM ; ; LEITOR DE DB9 (RS232) VISUALIZANDO EM LCD ; O QUE FOI TRANSMITIDO ; ESCOLHA DE VELOCIDADES POR JUMPS ; OPÇÕES PARA: 1200,2400,4800,9600 E 19200 BAUDS. ; ; MICROCONTROLADOR : PIC16F628A ; ; AUTOR: CLÁUDIO LÁRIOS ; DATA DE INICIO: 20-03-2013 TÉRMINO: 21-03-2013 ; ; USO: TESTE DE TERMINAIS RS232 E OUTROS EQUIPAMENTOS ; USE CRISTAL DE : 20MHZ ;************************************************************************* LIST P=16f628A , R=DEC INCLUDE "P16F628A.INC" ;-------------------------- ;ELIMINA MENSAGEM DE ERRO ERRORLEVEL -302 ;PALAVRA DE CONFIGURAÇÃO __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF TEMP EQU 20H FLAGS EQU 21H ; FLAGS LC EQU 22H LC1 EQU 23H CONT_LINHAS EQU 24H AUX EQU 25H TR EQU 26H V_BAUD EQU 27H ;DEFINIÇÕES DA PORTAS E FLAGS ;=============================================================================== #DEFINE R_232 PORTB,1 ;PINO 7 IN RS232 #DEFINE LCD_DB7 PORTA,4 ;PINO 3 - DISPLAYS #DEFINE LCD_DB6 PORTA,3 ;PINO 2 - DISPLAY #DEFINE LCD_DB5 PORTA,2 ;PINO 1 - DISPLAYS #DEFINE LCD_DB4 PORTA,1 ;PINO 18 - DISPLAY #DEFINE LCD_RS PORTA,0 ;PINO 17 - DISPLAY #DEFINE LCD_E PORTB,0 ;PINO 6 - DISPLAY ;BANCOS #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 ;FLAGS #DEFINE FLAG_L FLAGS,0 ;FLAG DE LINHA ;MACROS ;------------------------------------------------------------------------------ LIMPA MACRO CALL LcdClear ENDM LINHA1 MACRO CALL LINE1 ENDM LINHA2 MACRO CALL LINE2 ENDM ;=============================================================================== ;ENDERÊÇO DE 'RESET' ORG 00H GOTO RESET ;=============================================================================== ;ROTINA DE ENVIO DE FRASES PARA O LCD ENV_LCD MOVWF AUX RT1 CALL PEGA_M ADDLW .0 BTFSC STATUS,Z RETURN CALL ED INCF AUX,F MOVFW AUX GOTO RT1 PEGA_M MOVWF PCL ;============================================================================== ;FRASES MSG1: DT " LE_RS_232_TR ",0 MSG2: DT "LARIOS.TECNOL.WS",0 MSG1200: DT " 1200 BAUDS",0 MSG2400: DT " 2400 BAUDS",0 MSG4800: DT " 4800 BAUDS",0 MSG9600: DT " 9600 BAUDS",0 MSG19200: DT " 19200 BAUDS",0 ;============================================================================ ;CONFIGURAÇÕES DE PORTAS E INICIALIZAÇÃO DO LCD RESET: MOVLW .7 MOVWF CMCON ;DESLIGA COMPARADORES BANK1 MOVLW .0 MOVWF TRISA MOVLW B'11111110' MOVWF TRISB CLRF OPTION_REG ;LIGA PULL UPS BANK0 CLRF PORTA ; RESET PORTA MOVLW .10 CALL DELAYW CALL LcdInit ;INICIALIZAÇÃO DO LCD MOVLW .10 CALL DELAYW MOVLW MSG1 CALL ENV_LCD CALL LINE2 MOVLW MSG2 CALL ENV_LCD MOVLW .40 CALL DELAYW LIMPA LINHA1 ;================================================================================= ;INICIALIZAÇAO DA SERIAL ;VERIFICAÇÃO DE JUMP COLOCADO PARA DETERMINAR A VELOCIDADE DE RECEPÇÃO ;VALORES CALCULADOS PARA XTAL DE 20MHZ E BIT 'BRGH'=0 BTFSC PORTB,7 ;TESTA JUMP PINO 13 AO GND GOTO P111 MOVLW .255 ; 255 (BAUD RATE 1200 BIT HIGH=0) MOVWF V_BAUD MOVLW MSG1200 ENV_J CALL ENV_LCD GOTO CARGA_BAUD P111 BTFSC PORTB,6 ;TESTA JUMP PINO 12 AO GND GOTO P112 MOVLW .129 ;129 (BAUD RATE 2400 BIT HIGH=0 MOVWF V_BAUD MOVLW MSG2400 GOTO ENV_J P112 BTFSC PORTB,5 ;TESTA JUMP PINO 11 AO GND GOTO P113 MOVLW .64 ; 64 (BAUD RATE 4800 BIT HIGH=0) MOVWF V_BAUD MOVLW MSG4800 GOTO ENV_J P113 BTFSC PORTB,4 ;TESTA JUMP PINO 10 AO GND GOTO P114 MOVLW .32 ; 32 (BAUD RATE 9600 BIT HIGH=0) MOVWF V_BAUD MOVLW MSG9600 GOTO ENV_J P114 BTFSC PORTB,3 ;TESTA JUMP PINO 9 AO GND GOTO P115 MOVLW .15 ; 15 (BAUD RATE 19200 BIT HIGH=0) MOVWF V_BAUD MOVLW MSG19200 GOTO ENV_J P115 ; VALOR DEFAULT (SEM NENHUM JUMP COLOCADO) MOVLW .64 ; 64 (BAUD RATE 4800 BIT HIGH=0) MOVWF V_BAUD MOVLW MSG4800 GOTO ENV_J CARGA_BAUD MOVFW V_BAUD BANK1 MOVWF SPBRG ;CARREGA REGISTRADOR DO GERADOR DE BAUD RATE BANK0 MOVLW B'10010000' ;LIGA SERIAL MOVWF RCSTA BANK1 CLRF TXSTA BANK0 CLRF FLAGS CLRF CONT_LINHAS BSF FLAG_L MOVLW .40 CALL DELAYW LIMPA LINHA1 ;========================================================================= ;LOOP PRINCIPAL MAIN: BTFSS PIR1,5 ;FLAG DE RECEPÇAO GOTO MAIN BCF PIR1,5 ;APAGA FLAG INCF CONT_LINHAS,F MOVFW CONT_LINHAS XORLW .15 BTFSS STATUS,Z GOTO ENVIA CLRF CONT_LINHAS BTFSS FLAG_L GOTO VAI_LINHA1 LINHA2 LINHA2 BCF FLAG_L GOTO ENVIA VAI_LINHA1 BSF FLAG_L LINHA1 ENVIA MOVFW RCREG ;PEGA DADO RECEBIDO DA SERIAL E COLOCA NO LCD CALL ED GOTO MAIN ;================================================================================= ; SUB-ROTINAS ;================================================================================= ; DELAYS ;================================================================================= DELAYW MOVWF TEMP VJ1 call DELAY1 DECFSZ TEMP,F GOTO VJ1 DELAY1 MOVLW .255 ;DELAY PARA VISUALIZAÇAO DELAY goto $+1 movwf LC1 ;duas variáveis em uma LOOP1 decfsz LC,F ;dec. o prim. cont. goto LOOP1 decfsz LC1,F ;dec. o seg. cont. goto LOOP1 return ;================================================================================= ;ROTINAS DO LCD ;================================================================================= ;INICIALIZAÇÃO DO LCD LcdInit movlw .30 * 5 ;Wait 30 ms call DELAY bcf LCD_RS ;Set LCD command mode bsf LCD_DB4 ;0011->48 bsf LCD_DB5 bcf LCD_DB6 bcf LCD_DB7 call LcdPulse_E ;sequência de reset call LcdPulse_E call LcdPulse_E bcf LCD_DB4 bcf LCD_DB6 bcf LCD_DB7 bsf LCD_DB5 call LcdPulse_E movlw 28H ;Set 4 bit data bus length call EC movlw 06H ;Entry mode set, increment, no shift call EC ; movlw 0DH ;Display ON, Cursor ON, Blink ON ; movlw 0FH ;Display ON, Cursor ALTERADO ON, Blink ON movlw 0EH ;Display ON, Cursor ON, Blink OFF ; movlw 0CH ;Display ON, Cursor OFF, Blink OFF call EC LcdClear movlw 01H ;clear display call EC movlw .2 * 5 ;Wait 2 ms call DELAY return ;========================================================================== ;ENVIAR 'DADOS' ED bsf LCD_RS GOTO XENV LINE1 MOVLW 0X80 GOTO EC LINE2 MOVLW 0XC0 ;========================================================================= ;ENVIAR 'COMANDOS' EC bcf LCD_RS XENV LcdSendByte movwf TR ;Send a byte to LCD by 4 bit data bus bcf LCD_DB4 bcf LCD_DB5 bcf LCD_DB6 bcf LCD_DB7 btfsc TR,4 bsf LCD_DB4 btfsc TR,5 bsf LCD_DB5 btfsc TR,6 bsf LCD_DB6 btfsc TR,7 bsf LCD_DB7 call LcdPulse_E bcf LCD_DB4 bcf LCD_DB5 bcf LCD_DB6 bcf LCD_DB7 btfsc TR,0 bsf LCD_DB4 btfsc TR,1 bsf LCD_DB5 btfsc TR,2 bsf LCD_DB6 btfsc TR,3 bsf LCD_DB7 call LcdPulse_E return ;LcdPulse_E bsf LCD_E ;Enables LCD NOP NOP NOP NOP bcf LCD_E ;Disabled LCD return LcdPulse_E bsf LCD_E ;Enables LCD movlw 1 * 5 ;Wait 1ms call DELAY bcf LCD_E ;Disabled LCD movlw 1 * 5 ;Wait 1ms call DELAY return end