Display pov

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.
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:
Atrás
Arriba