Hola gracia spro la respeusta mira coloco mi programa en el cual no funcina cada ves que coloco la interrupcion global "" enable_interrupts(global); " deja de funionar mi programa ya no me muestar pero si la quito la muestra y cuando lo quiero conectar con otro pic no funciona o puedes orientarme paar conectar 2 pics. graciasCódigo: C
#include <16f877.h> #include <string.h> #include <stdlib.h> #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT #use delay(clock=4000000) #use standard_io(b) #use standard_io(d) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) #include "flex_lcd.c" char Keypress=' '; char Serie[10]; char Serie2; char temp[3]; int i=0; int y = 0; #int_rda void serial_isr() { Keypress=0x00; if(kbhit()){//Devuelve verdadero si hay un dato en RS232 y = 1; if (Keypress !='\x0a') { } else i = 1;//nos indica que ha recivido una cadena de caracteres completa } } void main() { enable_interrupts(global); enable_interrupts(int_rda); lcd_init(); do{ if ( y == 1 ) lcd_putc("SI"); else lcd_putc("NO"); if ( i == 1 ) { lcd_putc(Serie); i=0; //reinicia } } while (TRUE); }
//Device/Fuses/Etc.-----------------------------
#include <16F877A.h>
#device adc=10
#include <math.h>
#fuses nowdt //No Watch Dog Timer
#fuses xt
#fuses noput //No Power Up Timer
#fuses noprotect //Code not protected from reading
#fuses nobrownout //No brownout reset
#fuses nolvp //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#fuses nocpd //No EE protection
#use delay(clock=4000000)
#include "lcd.c"
#use standard_io (D)
VOID MAIN(VOID){
float TEMPE,VALUE;
lcd_init();
lcd_gotoxy(3,1);
lcd_putc("Bienvenido");
delay_ms(1000);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Termometro\nDigital");
delay_ms(1000);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Temperatura");
delay_us(1500);
setup_port_a( ALL_ANALOG );
while(true){
setup_adc(ADC_CLOCK_DIV_32);
set_adc_channel(0);//se elige el RA0
delay_us(20);
VALUE = read_adc();
setup_adc( ADC_OFF );
TEMPE=(VALUE*(0.48875));
lcd_gotoxy(1,2);
printf(lcd_putc,"Actual: %02.1F C",TEMPE); //XXX.X C
delay_us(100);
}
}pero es q cuando uno hace el proyecto a traves del pic wizard hay una pestaña "lcd" donde se pueden configurar los pines de control y hay q especificar la direccion del puerto a usar:? Mirando la librería de CCS se ve que eso no es posible. Utiliza un puerto para los bits de control y data.
mira la imagen q adjunto, esas opciones no son para configurar el lcd con la libreria de ccs? hay se puede escoger el puerto a utilizar y los bit de controlRecién lo he probado, pero las definiciones que realiza no corresponden con la librería :shock: Así que no tendrán ningún efecto en la misma. Otra chanchada de los amigos de CCS :?
mira la imagen q adjunto, esas opciones no son para configurar el lcd con la libreria de ccs? hay se puede escoger el puerto a utilizar y los bit de controlRecién lo he probado, pero las definiciones que realiza no corresponden con la librería :shock: Así que no tendrán ningún efecto en la misma. Otra chanchada de los amigos de CCS :?
mira la imagen q adjunto, esas opciones no son para configurar el lcd con la libreria de ccs? hay se puede escoger el puerto a utilizar y los bit de controlRecién lo he probado, pero las definiciones que realiza no corresponden con la librería :shock: Así que no tendrán ningún efecto en la misma. Otra chanchada de los amigos de CCS :?
Muchas gracias por la yuda, ya quedo :) . El unico cambio que hice fue la libreria, nos vemos
Hola gracia spro la respeusta mira coloco mi programa en el cual no funcina cada ves que coloco la interrupcion global "" enable_interrupts(global); " deja de funionar mi programa ya no me muestar pero si la quito la muestra y cuando lo quiero conectar con otro pic no funciona o puedes orientarme paar conectar 2 pics. gracias
#include <16F877A.h> /* PIC16F877A */
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //manejo del RS232
#include <flex_lcd.c>
//#include <kbd.c>
#include <stdlib.h>
#include <math.h>
#define SUBE_IP input(pin_d5)
#define BAJA_IP input(pin_d4)
#define RED pin_C0
#define GREEN pin_C1
#define BLUE pin_C2
int IP=1;
char flag=0,var=11; //variables globales
char * str[] = "0123456789";
///LLAMADA FUNCION INTERRUPCION
#int_rda
void rs232()
{
BYTE i=0,j=0,address,value; //definicion...
char digito; //...variables
char string[30];
int len=0;
char dirIp[4];
disable_interrupts(global); //apago interrupcion
gets(string);
len=strlen(string);
//quito los caracteres \n y \r
string[len-1]=0;
string[len-2]=0;
strncpy (dirIp, string, 3);
lcd_gotoxy(1,1);
if (atoi(dirIp) == IP){ //si es para mi
printf(lcd_putc,"Mio");
lcd_gotoxy(1,2);
printf(lcd_putc,string);
}else{ //si no es para mi
printf("%s \n\r",string);
printf(lcd_putc,"\fNo Mio");
}
enable_interrupts(global); //activamos de nuevo la interrupcion serial rs-232
}
///PROGRAMA
void main(void)
{
int p1=1,p2=1,s=0,b=0,color=0;
// char tmp[3]="aa";
// ext_int_edge(H_TO_L); // Habilita interrupcion por flanco H_to_L
enable_interrupts(int_rda); //activo interrupcion serial rs-232
enable_interrupts(global); //habilito la interrupcion
lcd_init();
lcd_putc("Espera");
do{ //bucle...
if(SUBE_IP){
output_high(RED);
output_low(GREEN);
if (s){
lcd_gotoxy(1,2);
IP++;
printf(lcd_putc,"IP: %d ",IP);
s=0;
}
}else{
s=1;
}
if(BAJA_IP){
output_high(GREEN);
output_low(RED);
if (b){
lcd_gotoxy(1,2);
IP--;
printf(lcd_putc,"IP: %d ",IP);
b=0;
}
}else{
b=1;
}
}while(TRUE); //...infinito
}