tengo un programa con el pic 16f877, lo tengo funcionando bien a 8 bits, pero tengo problemas al intentar cambiarlo a 4 bits, quizas ustedes me puedan ayudar, anexo el programa, ah otra cosa, en mi escuela me enseñaron a programar en C, muy diferente a como uds lo hacen, espero que me asesoren ok
programa
//PROGRAMA PARA DISPLAY LCD//
//1, 2, 6, 12, 20, 56, 64, 128//
#include <pic.h>
#include <delay.h>
#include <delay.c>
#define RS RC0
#define EN RC1
char posicion=0;
void Reset (void);
void enter (void);
void main (void){
char mensaje=0;
char time=0;
unsigned char letra []={"HOLA A TODOS"};
unsigned char letra2[]={"ESPERO ESTO"};
unsigned char letra3[]={"LES DIGA"};
unsigned char letra4[]={"CUAN BUENO SOY"};
unsigned char letra5[]={"hola"};
TRISC=12;
TRISB=0;
PORTB=0;
RC2=0;
RC3=0;
Reset(); //LLAMANDO A LA FUNCIÓN DE INICIALIZACIÓN DEL DISPLAY//
//COMIENZA EL ENVÍO DEL DATO//
while (mensaje<12){
RS=1;
EN=0;
DelayMs(1);
PORTB=letra [mensaje]; //ENVIANDO DATO//
DelayMs(10);
EN=1;
DelayMs(50);
EN=0;
PORTB=0; //REINICIANDO EL PUERTO DE DATOS//
mensaje++;
posicion++;
}
enter();//LLAMANDO A LA FUNCIÓN DE PASO AL SEGUNDO RENGLÓN//
//MANDANDO EL SEGUNDO RENGLÓN//
mensaje=0;
while (mensaje<11){
RS=1;
EN=0;
DelayMs(1);
PORTB=letra2 [mensaje]; //ENVIANDO DATO//
DelayMs(10);
EN=1;
DelayMs(50);
EN=0;
PORTB=0; //REINICIANDO EL PUERTO DE DATOS//
mensaje++;
}
while (time<16){
DelayMs(250);
time++;
}
time=0;
Reset();//REINICIAR POR SEGUNDA VEZ//
posicion=0;
//MANDANDO TERCER MENSAJE//
mensaje=0;
while (mensaje<
{
RS=1;
EN=0;
DelayMs(1);
PORTB=letra3 [mensaje]; //ENVIANDO DATO//
DelayMs(10);
EN=1;
DelayMs(50);
EN=0;
PORTB=0; //REINICIANDO EL PUERTO DE DATOS//
mensaje++;
posicion++;
}
enter();
//MANDANDO CUARTO MENSAJE//
mensaje=0;
while (mensaje<14){
RS=1;
EN=0;
DelayMs(1);
PORTB=letra4 [mensaje]; //ENVIANDO DATO//
DelayMs(10);
EN=1;
DelayMs(50);
EN=0;
PORTB=0; //REINICIANDO EL PUERTO DE DATOS//
mensaje++;
}
while (time<20){
DelayMs(250);
time++;
}
Reset();//REINICIAR POR SEGUNDA VEZ//
posicion=0;
//MANDANDO TERCER MENSAJE//
mensaje=0;
while (mensaje<4){
RS=1;
EN=0;
DelayMs(1);
PORTB=letra5 [mensaje]; //ENVIANDO DATO//
DelayMs(10);
EN=1;
DelayMs(50);
EN=0;
PORTB=0; //REINICIANDO EL PUERTO DE DATOS//
mensaje++;
}
enter();
while (time<25){
DelayMs(250);
time++;
}}//FIN//
// FUNCIONES: //
//FUNCIÓN DE INICIALIZACIÓN DEL DISPLAY//
void Reset(void){
unsigned char config [4]={59, 6, 12, 1};
char x=0;
if(RC2==1)RC3=1;
else RC2=0, RC3=0;
while (x<4){
RS=0;
EN=0;
DelayMs(5);
EN=1;
DelayMs(22);
PORTB=config
DelayMs(22);
EN=0;
DelayMs(10);
PORTB=0;
DelayMs(50);
x++;
}//HA SIDO CONFIGURADO EL DISPLAY//
}
//FUNCIÓN DE PASO AL SEGUNDO RENGLÓN//
void enter(void){
while (posicion<40){
RS=1;
EN=0;
DelayMs(1);
PORTB= ' '; //RECORRIENDO CURSOR A SEGUNDO RENGLON//
DelayMs(1);
EN=1;
DelayMs(1);
EN=0;
PORTB=0; //REINICIANDO EL PUERTO DE DATOS//
posicion++;
}
posicion=0;
}