Hola, soy nuevo en el foro.
Estoy haciendo un proyecto de un display POV para visualizar mensajes.
Llevo mucho tiempo atascado en la comunicacion rs232 y la grabacion en la eeprom.
Necesito transmitir desde el pc 8 strings de 32 caracteres cada una y grabarla en la eeprom pero de momento no se porque solo me transmite 5 caracteres y luego hace eco de el ultimo caracter o simplemente coje solo los 5 primeros y los graba en la eeprom.
Necesitaria ayuda urgente porque estoy desesperado! jajaja gracias de antemano!
Utilizo el compilador HI-TECH y un pic16f876
aqui les dejo el codigo.
el problema lo tengo en la funcion comunicacio.
GRACIAS.
Estoy haciendo un proyecto de un display POV para visualizar mensajes.
Llevo mucho tiempo atascado en la comunicacion rs232 y la grabacion en la eeprom.
Necesito transmitir desde el pc 8 strings de 32 caracteres cada una y grabarla en la eeprom pero de momento no se porque solo me transmite 5 caracteres y luego hace eco de el ultimo caracter o simplemente coje solo los 5 primeros y los graba en la eeprom.
Necesitaria ayuda urgente porque estoy desesperado! jajaja gracias de antemano!
Utilizo el compilador HI-TECH y un pic16f876
aqui les dejo el codigo.
Código:
//*******************************************************************************************************//
//************Hector/Joan***********//
//*************17/03/11*************//
//************DISPLAY_POV**********//
//********************************************INCLUDES***************************************************//
#include <conio.h>
#include <delay.h>
#include <pic.h>
#include <htc.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Taula.h>
#define _XTAL_FREQ 20MHZ
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 20MHZ
#endif
void comunicacio();
void visualitzacio();
void configportsvisual();
void configrs232on();
void escriu_taula (const char lletra);
char contabc,c,j;
void delaylinea();
char i;
unsigned char Recieve;
unsigned char sci_read();
void sci_write (unsigned char dato);
void sci_cad(unsigned char *cad);
char j=0x00;
void escritura_eeprom();
//*******************************************CONFIGURACIO MICRO******************************************//
__CONFIG(HS & WDTDIS & PWRTEN & BORDIS & UNPROTECT & LVPDIS);
//*****************************************DECLARACIO DE VARIABLES***************************************//
void DelayMs(unsigned char cnt){
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif
#if XTAL_FREQ > 2MHZ
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--cnt);
#endif
}
void delaylinea(){
for (j=0; j<=1; j++){
DelayMs(1);
}
}
void escriu_taula (const char lletra){ // lletra pren el valor de l'string text
for(contabc=0; contabc<5; contabc++){ // contador per a la matriu de 5 columnes
PORTC=CARACTER[(lletra-32)*5 +contabc]; // conversió a la taula ASCII
delaylinea(); // separació entre caracters
}
PORTC=0; // apaga el display al acabar l' string
}
unsigned char sci_read(){
while (RCIF==0 && OERR==0);
Recieve=RCREG;
if (OERR==1){
CREN=0;
CREN=1;
}
return Recieve;
}
void sci_write (unsigned char Recieve){
while (TXIF==0);
TXREG=Recieve;
}
void comunicacio(){
configrs232on();
while(1){
sci_read();
escritura_eeprom();
sci_write(Recieve);
j++;
}
}
void escritura_eeprom(){
eeprom_write(j,Recieve);
//DelayMs(1);
}
void visualitzacio(){
char i;
configportsvisual();
do{
if (RB0==0){
for (i=0x00;i<0xFF;i++){
c=eeprom_read(i);
escriu_taula(c);
delaylinea();
}
}
}while(1);
}
void configportsvisual(){
TRISA=255;
TRISB=255;
TRISC=0;
ADCON0=0;
ADCON1=7;
}
void configrs232on(){
BRGH=1;
SPBRG=129;
SYNC=0;
SPEN=1;
CREN=1;
TXEN=1;
}
void main(){
do{
if (RB1==0){
comunicacio();
}
if (RB1==1){
visualitzacio();
}
}while(1);
}
el problema lo tengo en la funcion comunicacio.
GRACIAS.
Última edición por un moderador: