Hola!
Los felicito de verdad por esta página. Ha sido una fuente invaluable de conocimientos para mis primeros proyectos con programación en C de microcontroladores.
Les escribo porque tengo un problema con la comunicación vía RS232. A pesar de que creo configurar todo ok, recibo en el hiperterminal pura basura al intentar mandar un simple "hola mundo". Todo esto en un código que estoy empezando a preparar, con el que tengo que hacer una chorrada de cosas además de esto, que me tiene congelado el avance.
Adjunto el código:
// Conexiones: A0 -> SCK eeprom externa
// A1 -> SDA eeprom externa
// A2 -> T1IN RS232
// A3 -> R1OUT RS232 (negado)
// B0 -> E
// B1 -> RS
// B2 -> RW
// B4 -> D4
// B5 -> D5
// B6 -> D6
// B7 -> D7
//////////////////////////////////////////////////////////////////////////////////
#include <16f877a.h> //pic a utilizar
#use delay(CLOCK=4000000) //Fosc=4Mhz
#fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT,NOCPD,NOWRT,NODEBUG
#define use_portb_lcd TRUE //utilizar el port b para lcd
#define EEPROM_SDA PIN_A1 //definimos los pines donde...
#define EEPROM_SCL PIN_A0 //la eeprom ira conectada
#use rs232(baud=9600, xmit=PIN_A2, rcv=PIN_A3) //manejo del RS232
#include <24256.c> //libreria de eeprom externa 24LC256
#include <lcd.c> //libreria de lcd
////INTERRUPCION DE TIMER
//#INT_TIMER0
//void interrupcion(){
// set_timer0(61); //reset TMR0
//}
///PRINCIPAL
void main(void){
int dir=0; //direccion de eeprom a escribir y leer mensajes
int num = 10;
int duty = 50;
char men1[]="wena"; //escribir
char men2[]="0101"; //escribir
char men3[]="wawa"; //escribir
char men4[]="plplp"; //escribir
lcd_init(); //inicializa lcd
init_ext_eeprom(); //inicializa eeprom
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_1, 127, 1);
// enable_interrupts(INT_TIMER0); //interrupcion TIMER0 activada
// setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
// set_timer0(61); //carga TMR0
// enable_interrupts(GLOBAL); //activadas interrupciones
set_pwm1_duty(duty);
printf("hola mundo");
// lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); // Envía comando al LCD
printf(LCD_PUTC,"x=%d",num);
delay_ms(500);
lcd_putc("~ Escribiendo en...\n24LC256\n");
delay_ms(500);
write_ext_eeprom(dir,men1); //proceso de escribir...
dir++;
write_ext_eeprom(dir,men2);
dir++;
write_ext_eeprom(dir,men3);
dir++;
write_ext_eeprom(dir,men4); //...los mensajes en la eeprom externa
lcd_putc("\fFin de escritura en\n24LC25");
delay_ms(1500);
lcd_putc("\f>>>Leyendo...\n");
for(dir=0;dir<4;dir++){ //bucle para leer mensajes en eeprom externa y muestra por lcd
printf(lcd_putc,"\n %d ~ %s",dir,read_ext_eeprom(dir));
delay_ms(800); //retraso para que se vea en pantalla los mensajes
lcd_putc("\n "); //borrado 2ºlinea de lcd
}
output_a(0b00); //apago port a
lcd_putc("\fFin de lectura!");
while(1){
if(duty==100){
duty=0;
}
duty++;
delay_ms(10);
set_pwm1_duty(duty);
}
}
Espero que se pueda corregir fácilmente. Agradeciendo de antemano la ayuda que me puedan prestar, se despide.
Sergio Navarro