Hola Pocher, si claro, lo colocaré... Le hice algunas modificaciones!!!!! También posee una modificación realizada por e amigo micro_cadaver
Palitroquez, porque rezas para ue no salga esa advertencia?? hablame más de eso si puedes por favor!!!!!
#include <18f4550.h>
#DEVICE ADC=8
#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT,MCLR
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use delay(clock=4000000)
#include <LCD16.c> // Libreria que controla los comandos de la LCD
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Habilita las funciones RS232, velocidad a 9600 baudios
#byte RCON=0xFD0 // Registro que controla el reset por POR (POWER ON RESET)
#bit POR=RCON.1 // Bit de la bandera del Power On Reset
#bit IPEN=RCON.7 // Habilita la prioridad de las interrupciones
#byte PIR2=0xFA1 // Registro de control de las interrupciones
#byte INTCON1=0xFF2 // Registro de control de las interrupciones
#bit RBIF=INTCON1.0 // Bit de Interrupción por cambio en el puerto B (RB4-RB7).
#byte INTCON3=0xFF2 // Registro de control de interrupciones
#byte PIE1=0xF9D // Registro de habilitación de interrupciones perifericas
#byte PIE2=0xFA0 // Registro de habilitación de interrupciones perifericas
#zero_ram
//::::::::::::::::::::::::::Declaración de variables:::::::::::::::::::::::::::::::::::::
float value,dato,value_antiguo;
int caracter;
//::::::::::::::::::::::::::Declaración de Funciones:::::::::::::::::::::::::::::::::::::
void menu(void); // Función que me muestra el menú de opciones
void ajustar_trans(void); // Función que calibra al transmisor
void enviar_rs232(void); // Función que envia los datos vía RS232
void enviar_rs485(void); // Función que envia los datos vía RS485
//::::::::::::::::::::::Interrupción por RB0:::::::::::::::::::::::::::::::::::::::::::::::::::
#INT_EXT
EXT_isr()
{
menu();
}
//:::::::::::::::::::::::::::Programa Principal:::::::::::::::::::::::::::::::::::::::::::
void main(void)
{
set_tris_a(0x01); // Puerto A, como b'00000001
set_tris_c(0x00); // Puerto C, como b'11111111
set_tris_b (0xFF); // Configura puerto b como entrada
set_tris_d(0x00); // Puerto A, como b'00000000
output_a(0);
output_b(0);
output_c(0);
output_d(0);
port_b_pullups(TRUE); // Activo las pullups
enable_interrupts(global); // Habilito todas las interrupciones
enable_interrupts(int_ext); // Activa máscara INTE (Activo interrupción po RB0)
setup_port_a(AN0_ANALOG ); // RA0 son analógicos y los demás son digitales
setup_adc(ADC_CLOCK_INTERNAL ); // Tomará el dato contando el tiempo con el reloj interno
ext_int_edge (H_TO_L); // Flag INTF si flanco de bajada.
IPEN=1; // Deshabilito la prioridad de las interrupciones
RBIF=0; // RB4-RB7 no provocó una interrupción externa por cambio
PIE1=0x00; // Deshabilito interrupciones por otros perifericos (CCP,USART, etc)
PIE2=0x00; // Deshabilito interrupciones por otros perifericos (USB, Oscilador, colisión, memoria, etc)
if(POR==0) // Reset por POR
{
output_high(PIN_C1); // Enciendo un led de prueba
delay_ms(1000); // Una demora para que se estabilicen los voltajes
POR=1; // Limpio la bandera del POR
output_low(PIN_C1); // Apago un led de prueba
}
lcd_init(); // Para inicializar el LCD
//*************************************************************
//* CICLO PRINCIPAL *
//*************************************************************
lcd_enviar(LCD_COMANDO,LCD_CLEAR); // Borro pantalla LCD
delay_ms(5); // Retardo para el comando de la LCD
lcd_enviar(LCD_COMANDO, LCD_CLEAR); // Envía comando al LCD
delay_ms(5); // Retardo para el comando de la LCD
lcd_gotoxy(1,1); // Posiciona el cursor
printf(lcd_putc," Transmisor"); // Visualiza mensaje
lcd_gotoxy(1,2); // Posiciona el cursor
printf(lcd_putc," de Presion "); // Visualiza mensaje
lcd_gotoxy(1,3); // Posiciona el cursor
printf(lcd_putc," Diferencial"); // Visualiza mensaje
delay_ms(3000); // Visualizo la información por 3 segundos
lcd_enviar(LCD_COMANDO,LCD_CLEAR); // Borro pantalla LCD
delay_ms(5); // Retardo para el comando de la LCD
lcd_gotoxy(1,1); // Posiciona el cursor
printf(lcd_putc,"Realizado por:"); // Visualiza mensaje
lcd_gotoxy(1,2); // Posiciona el cursor
printf(lcd_putc,"Vargas Marlin"); // Visualiza mensaje
delay_ms(50); // Retardo para el comando de la LCD
delay_ms(3000); // Visualizo la información por 3 segundos
lcd_enviar(LCD_COMANDO,LCD_CLEAR); // Borro pantalla LCD
delay_ms(5); // Retardo para el comando de la LCD
value_antiguo=0;
while(true)
{
set_adc_channel(0); // El canal de adquisición del dato es el RA0
delay_us(10); // Un retardo para capturar bien el dato
value=read_adc(); // Leo el dato
dato=(value*5)/255; // Convierto el valor a decimal y lo guardo
if(value!=value_antiguo)
{
// printf(lcd_putc,"\f"); // Borro pantalla
lcd_enviar(LCD_COMANDO,LCD_CLEAR); // Borro pantalla LCD
delay_ms(5); // Retardo para el comando de la LCD
lcd_gotoxy(1,1); // Posiciona el cursor
printf(lcd_putc,"Volt= %2.2g",dato); // Mando a mostrar el valor del conversor
value_antiguo=value;
}
if(input(PIN_B1)==0) // ¿Ajustar el transmisor?
{
ajustar_trans(); // Si, voy a la función ajustar
}
if(input(PIN_B2)==0) // ¿Enviar Via RS232?
{
enviar_rs232(); // Si, voy a la función que envia a través del RS232
}
if(input(PIN_B3)==0) // ¿Enviar via RS485?
{
enviar_rs485(); // Si, voy a la función que envia a través del RS485
}
}
}
//::::::::::::::::::::::::::::Función que permite ver el memú de opciones::::::::::::::::::::::::::::::
void menu(void)
{
lcd_enviar(LCD_COMANDO, LCD_CLEAR); // Envía comando al LCD
delay_ms(5); // Retardo para el comando de la LCD
lcd_gotoxy(1,1); // Posiciona el cursor
printf(lcd_putc," Menu"); // Visualiza mensaje
lcd_gotoxy(1,2); // Posiciona el cursor
printf(lcd_putc,"(A)Ajuste"); // Visualiza mensaje
lcd_gotoxy(1,3); // Posiciona el cursor
printf(lcd_putc,"(B)Envio RS232"); // Visualiza mensaje
lcd_gotoxy(1,4); // Posiciona el cursor
printf(lcd_putc,"(C)Envio RS485"); // Visualiza mensaje
delay_ms(50); // Retardo para el comando de la LCD
delay_ms(4000); // Visualizo la información por 4 segundos
}
//::::::::::::::::::::::::::::Función que permite calibrar el transmisor::::::::::::::::::::::::::::::
void ajustar_trans(void)
{
output_high(PIN_C2);
delay_ms(1000);
output_low (PIN_C2);
}
//::::::::::::::::::::::::::::Función que permite enviar los datos via RS232::::::::::::::::::::::::::::::
void enviar_rs232(void)
{
output_high(PIN_C4);
delay_ms(1000);
output_low (PIN_C4);
}
//::::::::::::::::::::::::::::Función que permite enviar los datos via RS485::::::::::::::::::::::::::::::
void enviar_rs485(void)
{
output_high(PIN_C5);
delay_ms(1000);
output_low (PIN_C5);
}
Atte: Enigma... La llanerita de Guayana