¿por que no quieres utilizar las funciones de ccs para este caso? para otros si que es cierto que casi uno prefiere hacerselas por uno mismo, pero las de lcd funcionan muy bien,ademas hay por ahi otras funciones mas versatiles hechas por gente del foro(creo...jjeje) como pueden ser flex_lcd para utilizar modos de 4 bits y poder configurar a gusto los pines de cada funcion...
es que ahora mismo no recuerdo muy bien la inicialización del lcd....
hahahah no se, supongo que queria recordar el uso del lcd, lo bueno es que ya lo arregle, y ya me sale bien, incluso agrege la parte del rs232 y funciona, ahora lo que no me funciona es guardar los dados que lee del rs232 en una cadena y luego recorrerla. lo que envio con el pc por el rs232 es algo como:
$GPGGA,195002.000,0614.4766,N,07535.4178,W,1,08,1.0,1534.5,M,1.3,M,,0000*42
que son los datos que envia un gps.
lo que intento hacer en el codigo es: guardar los datos en cadena1 (esto ya comprove que funciona), con un if cuento el numero de comas (,) que le llega a la cadena (no se si funciona), una vez finaliza el if (kbhit()) recorro la cadena1 contando de nuevo las comas, cuando el contador va en 2 (que es cuando inicia la latitud y la lingitud) mando el valor de la cadena a partir de ese punto a que la meustre en el lcd (no funciona).
Pongo el codigo, en caso de que me puedas ayudar.
#include "C:\Users\PsychoBear\Documents\UPB\perifericos\lab 3\testeo rs232\lcd solo\lcd_ini\lcd_ini1.h"
#use RS232(BAUD=4800,RCV=PIN_C7,XMIT=PIN_C6,PARITY=N,BITS=8)
void ini_lcd();
void escribo(cadena);
char c,cadena1[100],numcoma=0;
int j=0,i=0,contcoma=0,contcoma2=0;
//int *buffer = cadena;
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF|ADC_TAD_MUL_0);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_32|RTCC_8_bit);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(False);
// TODO: USER CODE!!
delay_ms(30);
ini_lcd();
//escribo(*cadena);
for(;
{
if (kbhit())
{
j++;
c=getc();
cadena1[j]=c;
if(c==',')
contcoma++;
// sprintf(numcoma, "%d", contcoma);
// numcoma=(char)contcoma;
// escribo(numcoma);
//escribo(c);
//delay_ms(1);
}
if(contcoma>=11){
for(i=0;i<=j;i++){
if(cadena1
==',')
contcoma2++;
if(contcoma2>=2)
escribo(cadena1);
}
}
}
}
void escribo(cadena){
//while(j<16){
output_high(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(cadena);//imprime
output_low(pin_D5);//E
//delay_ms(5);
j++;
//}
}
void ini_lcd(){
output_low(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(63);//limpia lcd
output_low(pin_D5);//E
delay_ms(30);
output_low(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(63);//function set
output_low(pin_D5);//E
delay_ms(20);
output_low(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(63);//display on/off control
output_low(pin_D5);//E
delay_ms(20);
output_low(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(59);//entry mode seet
output_low(pin_D5);//E
delay_ms(20);
output_low(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(15);//pone la DDRAM
output_low(pin_D5);//E
delay_ms(20);
output_low(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(1);//pone la DDRAM
output_low(pin_D5);//E
delay_ms(20);
output_low(pin_D7);//RS
output_low(pin_D6);//RW
output_high(pin_D5);//E
output_B(6);//pone la DDRAM
output_low(pin_D5);//E
delay_ms(200);
}
muchas gracias.