rx tx pic16f877
/////////codigo transmisor by luis portilla
//////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
#device ADC=8 // usaremos conversor A/D con 10 bits de resolución
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C7,timeout=30)
int8 DatoTX, DatoRX,a,b;
#include <lcd.c>
#use fast_io(A) // Para configurar manualmente el puerto como entrada o salida
#use fast_io (B)
//////////////////////////////////////////////////////////////////////////////////////
int16 Voltaje,bina;
int8 Dig1,Dig2,Dig3,Dig4,Dig5;
float Valor;
//////////////////////////////////////////////////////////////////////////////////////
void IniConversorAD(){
setup_adc(ADC_CLOCK_INTERNAL); // Configura el conversor
setup_adc_ports(AN0); // Entrada RA0 como analógica
set_tris_A(0xFF); // Todo el PortA como entrada
}
void LeerSenal(){
set_adc_channel(0); // Seleccionar un canal (en este caso Canal 0)
delay_us(10); // Retardo necesario entre la selección de canal y la adquisición.
Valor=read_adc(); // Adquisición de la señal.
bina=read_adc();
}
void DescomponerEnDigitos(){
int16 aux;
int16 Dato;
int16 bitdec;
Valor= (Valor*5)/255;
Valor=Valor*1000;
Dato=Valor;
Dig1= Dato/1000;
aux= Dato% 1000;
Dig2= aux/100;
aux%= 100;
Dig3= aux/10;
Dig4= aux%10;
Dig1+= '0'; // Convierte los dígitos a código ASCII
Dig2+= '0';
Dig3+= '0';
Dig4+= '0';
if (Dig1== '0'){
Dig1= " ";
}
}
void IniPantallaLCD(){
lcd_init();
lcd_putc("\f"); // Borrar Pantalla
}
void VisualizaLCD(){
lcd_gotoxy(1,1); // Direccionamos la RAM de la LCD
lcd_putc( Dig1);
lcd_putc( Dig2);
lcd_putc( Dig3);
}
//////////////////////////////////////////////////////////////////////////////////////
// PROGRAMA PRINCIPAL //
//////////////////////////////////////////////////////////////////////////////////////
void main() {
IniConversorAD();
IniPantallaLCD();
while (true){
LeerSenal();
DescomponerEnDigitos();
VisualizaLCD();
putc(Dig1);
delay_ms(10);
putc(46); //es un punto
delay_ms(10);
putc(Dig2);
delay_ms(10);
putc(Dig3);
delay_ms(10);
putc(Dig4);
delay_ms(50);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// codigo receptor
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
#device ADC=10 // usaremos conversor A/D con 10 bits de resolución
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C7,timeout=30)
int8 DatoTX, DatoRX,a,b;
#include <lcd.c>
#use fast_io(A) // Para configurar manualmente el puerto como entrada o salida
#use fast_io (B)
//////////////////////////////////////////////////////////////////////////////////////
int16 Valor,Voltaje;
int8 Dig1,Dig2,Dig3,Dig4,Dig5,sumar1;
//////////////////////////////////////////////////////////////////////////////////////
void IniPantallaLCD(){
lcd_init();
lcd_putc("\f"); // Borrar Pantalla
}
//!void VisualizaLCD(){
//! lcd_gotoxy(a,1); // Direccionamos la RAM de la LCD
//! lcd_putc(DatoRX);
//!if(a>16){
//!lcd_gotoxy(b,2);
//!lcd_putc(DatoRX);
//!}
//!}
void VisualizaLCD(){
lcd_gotoxy(1,1); // Direccionamos la RAM de la LCD
lcd_putc( Dig1);
lcd_putc( Dig2);
lcd_putc( Dig3);
lcd_putc( Dig4);
lcd_putc( Dig5);
}
//////////////////////////////////////////////////////////////////////////////////////
// PROGRAMA PRINCIPAL //
//////////////////////////////////////////////////////////////////////////////////////
void main() {
IniPantallaLCD();
while (true){
delay_ms(5);
VisualizaLCD();
if (kbhit()){
Dig1=getc();
delay_ms(15);
Dig2=getc();
delay_ms(15);
Dig3=getc();
delay_ms(15);
Dig4=getc();
delay_ms(15);
Dig5=getc();
delay_ms(15);
//lcd_putc(DatoRX);
//if(a==16){
// lcd_gotoxy(1,2);
//}else if(a==33){
// lcd_init();
// lcd_putc("\f");
// a=0;
}
}
}
rx tx pic16f877
Reviewed by libros google
on
octubre 17, 2012
Rating:
Post a Comment