Estos dos programas cumplen la misma función que los publicados anteriormente. La diferencia es que se aprovecha la comunicación USART de la que dispone el pic16f877a.
Envio de caracter y visualización en Leds (ASCII)
Funcionamiento
El caracter se recibe en el registro RCREG, se mueve al acumulador y se envia al Puerto D para la visualización.
Envio de una cadena de 16 caracteres
Funcionamiento
- Se genera una interrupción cada vez que se recibe un caracter.
- La rutina de interrupción guarda los caracteres recibidos en posiciones de memoria sucesivas, mediante direccionamiento indirecto, hasta que se reciben 16 caracteres.
- Una vez recibidos 16 caracteres se pasa a la rutina de visualización en LCD, finalizada ésta se reinicia el programa a la espera de una nueva cadena.
Envio de caracter
Envio de cadena
Programa para hp50g:
<< 'a' PURGE
1 10
FOR j
"CADENA A ENVIAR"
{":a:" {0 0} V}
INPUT
OBJ→ 'a' STO a
9600 BAUD
XMIT
DROP
NEXT
'a' PURGE >>
****Programa en Pic Basic (Microcode)****
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : LONELY113 *
'* Notice : Copyright (c) 2011 LONELY113 *
'* : All Rights Reserved *
'* Date : 12/05/2011 *
'* Version : 1.0 *
'* Notes : PIC16F877a *
'* : Pines de LCD: RD7-RD4=D7-D4 (Modo de 4 bits) *
'* : RB0=RS, RB1=RW, RB2=E *
'* : Pin RC7/Rx=TxD de Hp50g *
'* : unir GND de Hp50g a GND de circuito *
'* : Requiere adaptador de nivel 5V a 3.3V *
'****************************************************************
@ __CONFIG _WDT_OFF & _PWRTE_OFF & _CP_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF
DEFINE OSC 10 '10 MHz
'Definiciones para módulo LCD
DEFINE LCD_BITS 4 'Bus de 4 bits
DEFINE LCD_LINES 2 'LCD de 2 filas
DEFINE LCD_DREG PORTD 'Puerto de datos a LCD
DEFINE LCD_DBIT 4 'Bits 4 a 7 de PORTD
DEFINE LCD_RSREG PORTB 'Puerto B seleccion de registro
DEFINE LCD_RSBIT 0 'RB0=RS de LCD
DEFINE LCD_RWREG PORTB 'Puerto B Lectura/Escritura
DEFINE LCD_RWBIT 1 'RB1=RW de LCD
DEFINE LCD_EREG PORTB 'Puerto B Habilitacionde LCD
DEFINE LCD_EBIT 2 'RB2=E de LCD
DEFINE LCD_COMMANDUS 2000 'Retardo ente comandos en us
DEFINE LCD_DATAUS 50 'Retardo entre datos en us
'Definiciones USART
DEFINE HSER_RCSTA 90h 'Habilitar registro de recepción
DEFINE HSER_TXSTA 20h 'Habilitar registro de transmisión
DEFINE HSER_BAUD 9600 '9600 baudios
dato VAR BYTE[16]
i VAR BYTE
loop1:
HSERIN [sTR dato\16] 'Espera 16 caracteres y guarda en dato
LCDOUT $FE,1 'Borrar LCD
LCDOUT $FE, $0C 'Primera fila, cursor off
FOR i=0 TO 15
LCDOUT dato[i] 'Enviar 16 caracteres ( en ASCII)
NEXT i
GOTO loop1
END
No hay comentarios:
Publicar un comentario