viernes, 8 de abril de 2011

Envio de cadena de caracteres de hp50g a PIC16F877A

Programa para PIC16F877A

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.
Archivos .ASM y HEX

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