:)Hola que tal:
Siempre he sido seguidor de 'todopic' y siempre leo todos los post, ya que muchos problemillas que he tenido pues son similares a los expuestos y ya con eso lo resuelvo

, sin embargo esto no lo he podido resolver y espero me puedan ayudar. El problema es el siguiente:
Realize un programa que contiene un menu que te dá varias opciones reflejadas en el display. Al elegir una opción (de momento solo la 3) pues te manda una señal por 4 pines. Tengo un pequeño teclado con push buttons en A2,A3,A4.
El problema especificamente es que no hace nada! el programa está en C ya que no sé ensamblador y el C se me facilita mas; lo malo es que obviamente abarca más memoria ya que me está consumiendo el %70 y apenas son las pruebas. En fin, les dejo el circuito y el código a ver si me pueden hechar la mano.

El código:
////////////////////////////////////////////////////////////////////////////////
////////////// Practica 2 //////////////////////
////////////// practica que escribe en una LCD //////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////// By MARCO RECARGADO //////////////////////
////////////////////////////////////////////////////////////////////////////////
#include <16F84a.h> /// libreria para el manejo del pic16f877a
#use delay(clock=4000000) /// declara la frecuencia del cristal
#fuses XT,NOWDT,NOPUT,NOPROTECT
#include <lcd.c> // Librería para el manejo del lcd para ver las conexiones
// abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c
// y ahi les muestra.
////////////////////////////////////////////////////////////////////////////////
// D0 enable
// D1 rs
// D2 rw
// D4 D4
// D5 D5
// D6 D6
// D7 D7
////////////////////////////////////////////////////////////////////////////////
void main(void)
{
int8 seleccion;
int8 compu=0;
int8 senal;
lcd_init(); // Antes de usar el lcd,hay que inicializarlo
lcd_putc("HOLA MUNDO");
delay_ms(1500);
lcd_putc("\f");
delay_ms(5000);
lcd_putc("\f Probador de\n ECM's");
delay_ms(3000);
lcd_putc("\fSeleccione \nMarca:>");
delay_ms(1000);
while (true){
menu:
do {
seleccion=0;
if( input(PIN_A2) ) /*lcd_putc("\f entrada 0");*/ seleccion=1;
if( input(PIN_A3) ) /*lcd_putc("\f entrada 1");*/ seleccion=2;
if( input(PIN_A4) ) /*lcd_putc("\f entrada 2");*/ seleccion=3;
}
while(seleccion==0);
lcd_putc("\f");
//printf(lcd_putc, "%i",seleccion);
delay_ms(500);
apurate:
switch (seleccion) {
case 1://lcd_putc("\fFord PCM");
compu++;
break;
case 3://lcd_putc("\fNissan F50");
compu--;
break;
case 2:lcd_putc("\finiciando...");
delay_ms(1000);
goto proceso;
break;
default://goto apurate;
break; }
//delay_ms(2000);
switch (compu) {
case 1:lcd_putc("\fMarca UNO");
senal=1;
break;
case 2:lcd_putc("\fMarca DOS");
senal=2;
break;
case 3:lcd_putc("\fMarca TRES");
senal=3;
break;
case 4:lcd_putc("\fMarca CUATRO");
senal=4;
break;
//case 2:lcd_putc("\finiciando...");
// goto proceso;
// break;
default:goto apurate;
break; }
delay_ms(600);
lcd_putc("...OK?");
//printf(lcd_putc," %i",senal);
delay_ms(1000);
goto menu;
proceso:
switch (senal) {
case 1:lcd_putc("\fno");
//senal=1;
break;
case 2:lcd_putc("\fno");
//senal=2;
break;
case 3:lcd_putc("\fjalo");
output_high(PIN_A0);
output_high(PIN_A1);
output_high(PIN_B2);
output_high(PIN_B3);
delay_ms(1500);
break;
case 4:lcd_putc("\fMarca CUATRO");
//senal=4;
break;
//case 2:lcd_putc("\finiciando...");
// goto proceso;
// break;
default:goto apurate;
break; }
delay_ms(1000);
lcd_putc("\fzax");
delay_ms(1000);
goto menu;
}
} // fin de programa
PD1: La librería lcd está modificada para trabajar con el puerto B a 4 pines.
PD2: La simulación en el proteus funciona bien.
Gracias.