MpLab, 18f4550 y problema programacion

Bueno, tengo una pequeña duda:

Estoy haciendo una calculadora que haga varias operaciones entre dos números de máximo tres dígitos utilizando MpLab y un PIC 18f4550.
Bien, he podido hacer ya un programa con la calculadora y demás, pero dicho programa requiere que para cada número sean ingresados tres dígitos de forma obligatoria.
Es decir, si se quiere ingresar el número 3, se debe ingresar 003.

Decidí entonces crear un programa que pueda aceptar un solo dígito (o dos) sin que sea necesario ingresar dos dígitos anteriormente.

Bueno pues, el código es el siguiente:

Código:
#include <p18f4550.h>
#include <Delays.h>
#include <math.h>
#include <xlcd.h>

int dato,d,f,g,h,j,k=0;
int data1,data2,data3=0; int datb1,datb2,datb3=0;
float uno;
float dos; char operador;char operadorr; char punto; char op1; char op2; char op3;
float resultado;

void teclado (void){
	a1:PORTCbits.RC0=1;
	PORTD=1;
		if(PORTDbits.RD4==1){dato=1;return;}
		if(PORTDbits.RD5==1){dato=2;return;}
		if(PORTDbits.RD6==1){dato=3;return;}
	PORTD=2;
		if(PORTDbits.RD4==1){dato=4;return;}
		if(PORTDbits.RD5==1){dato=5;return;}
		if(PORTDbits.RD6==1){dato=6;return;}
	PORTD=4;
		if(PORTDbits.RD4==1){dato=7;return;}
		if(PORTDbits.RD5==1){dato=8;return;}
		if(PORTDbits.RD6==1){dato=9;return;}
	PORTD=8;
		if(PORTDbits.RD5==1){dato=0;return;}
		if(PORTDbits.RD6==1){operador='=';return;}
	goto a1;}

void DelayFor18TCY(void){Delay10TCYx(20);}
void DelayPORXLCD(void){Delay1KTCYx(20);}
void DelayXLCD(void){Delay1KTCYx(20);}

void main (){
	ADCON1=15;
	OpenXLCD(FOUR_BIT & LINES_5X7); TRISC=0;
	Delay10KTCYx(1);
	
	while(1){SetDDRamAddr(0x02);putrsXLCD("Calculadora");
		SetDDRamAddr(0x40);putrsXLCD("");
		SetDDRamAddr(0x40);TRISD=0xF0;
		
	reset1:	if((PORTD=1 && PORTDbits.RD1) || (PORTD=2 && PORTDbits.RD7) || (PORTD=4 && PORTDbits.RD7) || (PORTD=8 && PORTDbits.RD4) || (PORTD=8 && PORTDbits.RD5) || (PORTD=8 && PORTDbits.RD7)){
			SetDDRamAddr(0x45);("¡ERROR!");
			goto reset1;}
		else{
			teclado();
			SetDDRamAddr(0x40);
			WriteDataXLCD(dato+0x30);
			data1=dato;PORTD=0;
			Delay10KTCYx(100);
			if((PORTD=1 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=2 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=4 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=8 & PORTDbits.RD5)){
				teclado();
				SetDDRamAddr(0x40);
				WriteDataXLCD(dato+0x30);
				data2=dato;PORTD=0;
				Delay10KTCYx(100);
				if((PORTD=1 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=2 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=4 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=8 & PORTDbits.RD5)){
					teclado();
					SetDDRamAddr(0x40);
					WriteDataXLCD(dato+0x30);
					data3=dato;PORTD=0;
					Delay10KTCYx(100);
					uno=((data1*100)+(data2*10)+(data3));
					if((PORTD=1 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=2 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=4 & PORTDbits.RD4) || (PORTD=1 & PORTDbits.RD5) || (PORTD=1 & PORTDbits.RD6) || (PORTD=8 & PORTDbits.RD5)){
						SetDDRamAddr(0x45);("¡ERROR!");
						goto reset1;}
				}
					else uno=((data1*10)+(data2));
			 }
			uno=data1;
			else{ if( PORTD=8 && PORTD=0x40){
					SetDDRamAddr(0x45);("¡ERROR!");
					goto reset1;}
				else{
					if(PORTD=8 & PORTDbits.RD4){
						if(PORTD=8 & PORTDbits.RD4){						
							op1:PORTCbits.RC0=1;
							PORTD=1;
								if(PORTDbits.RD7==1){operador='L';return;}
							PORTD=2;
								if(PORTDbits.RD7==1){operador='Cm';return;}
							PORTD=4;
								if(PORTDbits.RD7==1){operador='°F';return;}
							PORTD=8;
								if(PORTDbits.RD7==1){operador='°C';return;}				
							teclado();WriteDataXLCD(operador);
							operadorr=operador;
							Delay10KTCYx(100);
							goto  op1;}
						else{
							op2:PORTCbits.RC0=1;
							PORTD=1;
								if(PORTDbits.RD7==1){operador='Raiz';return;}
							PORTD=2;
								if(PORTDbits.RD7==1){operador='Potencia';return;}
							PORTD=4;
								if(PORTDbits.RD7==1){operador='Sen';return;}
							PORTD=8;
								if(PORTDbits.RD7==1){operador='Cos';return;}				
							teclado();WriteDataXLCD(operador);
							operadorr=operador;
							Delay10KTCYx(100);
							goto  op2;}}
					else{
						op3:PORTCbits.RC0=1;
						PORTD=1;
							if(PORTDbits.RD7==1){operador='+';return;}
						PORTD=2;
							if(PORTDbits.RD7==1){operador='-';return;}
						PORTD=4;
							if(PORTDbits.RD7==1){operador='X';return;}
						PORTD=8;
							if(PORTDbits.RD7==1){operador='/';return;}				
						teclado();WriteDataXLCD(operador);
						operadorr=operador;
						Delay10KTCYx(100);
						goto  op3;}}
					teclado();
					SetDDRamAddr(0x40);
					WriteDataXLCD(dato+0x30);
					datb1=dato;PORTD=0;
					Delay10KTCYx(100);
					if(PORTD=1 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=2 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=4 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=8 & PORTDbits.RD5=1){
						teclado();
						SetDDRamAddr(0x40);
						WriteDataXLCD(dato+0x30);
						datb2=dato;PORTD=0;
						Delay10KTCYx(100);
						if(PORTD=1 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=2 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=4 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=8 & PORTDbits.RD5=1){
							teclado();
							SetDDRamAddr(0x40);
							WriteDataXLCD(dato+0x30);
							datb3=dato;PORTD=0;
							Delay10KTCYx(100);
							dos=((datb1*100)+(datb2*10)+(datb3));
							if(PORTD=1 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=2 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=4 & PORTDbits.RD4=1 | PORTD=1 & PORTDbits.RD5=1 | PORTD=1 & PORTDbits.RD6=1 | PORTD=8 & PORTDbits.RD5=1){
								SetDDRamAddr(0x45);("¡ERROR!");
								goto reset1;}
							else goto reset2;
						dos=((datb1*10)+(datb2));}
						else goto reset2;
					dos=datb1;}
					if(PORTD=8 & PORTDbits.RD6=1){
						if(operadorr=='+'){resultado=uno+dos;} //Suma
						if(operadorr=='-'){resultado=uno-dos;} //Resta
						if(operadorr=='x'){resultado=uno*dos;} //Multiplicación
						if(operadorr=='/'){resultado=uno/dos;} //División
						if(operadorr=='Raiz'){resultado=pow(uno,0.5);} //Raiz cuadrada
						if(operadorr=='Potencia'){resultado=pow(uno,dos);} //Potencia
						if(operadorr=='Sen'){resultado=sin(uno);} //Seno
						if(operadorr=='Cos'){resultado=cos(uno);} //Coseno
						if(operadorr=='L'){resultado=(uno/1000);} //Centímetros a Litros
						if(operadorr=='Cm'){resultado=(uno*1000);} //Litros a centrímetros
						if(operadorr=='°F'){resultado=((uno*1.8)+32);} //Celsius a Fahrenheit
						if(operadorr=='°C'){resultado=((uno-32)/1.8);} //Fahrenheit a Celsius
						while(operador!='='){teclado();}
						WriteDataXLCD('=');

						d=resultado/1000;
						f=(resultado/100)-(d*10);
						g=(resultado/10)-(d*100)-(f*10);
						h=(resultado)-(d*1000)-(f*100)-(g*10);
						j=(resultado*10)-(d*10000)-(f*1000)-(g*100)-(h*10);
						k=(resultado*100)-(d*100000)-(f*10000)-(g*1000)-(h*100)-(j*10);

						punto='.';

						WriteDataXLCD(d+0x30);WriteDataXLCD(f+0x30);WriteDataXLCD(g+0x30);
						WriteDataXLCD(h+0x30);WriteDataXLCD(punto);WriteDataXLCD(j+0x30);
						WriteDataXLCD(k+0x30);

						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
					}}}}}

Ahora, tengo un problema en la línea 73:

Código:
			else{ if( PORTD=8 && PORTD=0x40){

Al utilizar el compilador C18, me da el siguiente mensaje:

----------------------------------------------------------------------
Debug build of project `C:\Users\HP\Desktop\Calculadora\Calculadora.mcp' started.
Preprocessor symbol `__DEBUG' is defined.
Sun Feb 05 22:11:05 2012
----------------------------------------------------------------------
Make: The target "C:\Users\HP\Desktop\Calculadora\Calculadora.o" is out of date.
Executing: "C:\Users\HP\Documents\Tommy\UMNG\Programas\MPLab\MCC18\bin\mcc18.exe" -p=18F4550 /i"C:\Users\HP\Documents\Tommy\UMNG\Programas\MPLab\MCC18\h" "Calculadora.c" -fo="Calculadora.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Users\HP\Desktop\Calculadora\Calculadora.c:73:Error: syntax error
Halting build on first failure as requested.

----------------------------------------------------------------------
Debug build of project `C:\Users\HP\Desktop\Calculadora\Calculadora.mcp' failed.
Preprocessor symbol `__DEBUG' is defined.
Sun Feb 05 22:11:10 2012
----------------------------------------------------------------------
BUILD FAILED

He mirado lo de cerrar cada cosa que se abre y todo, punto y coma y demás cosas de sintaxis básica, pero no logro saber qué está mal en dicho código.
Alguien me puede ayudar con esto ???
 
Hola, la linea "uno=data1;" ponla dento del ultimo if, ademas revisa todos los if ya que se observa que en muchos no se compara, se asigna.
 
Ya le he corregido varias cosas que ayer no había visto.
El código quedó finalmente así:

Código:
#include <p18f4550.h>
#include <Delays.h>
#include <math.h>
#include <xlcd.h>

int dato,d,f,g,h,j,k=0;
int data1,data2,data3=0; int datb1,datb2,datb3=0;
float uno;
float dos; char operador;char operadorr; char punto;
float resultado;

void teclado (void){
a1:	PORTCbits.RC0=1;
	PORTD=1;
		if(PORTDbits.RD4==1){dato=1;return;}
		if(PORTDbits.RD5==1){dato=2;return;}
		if(PORTDbits.RD6==1){dato=3;return;}
	PORTD=2;
		if(PORTDbits.RD4==1){dato=4;return;}
		if(PORTDbits.RD5==1){dato=5;return;}
		if(PORTDbits.RD6==1){dato=6;return;}
	PORTD=4;
		if(PORTDbits.RD4==1){dato=7;return;}
		if(PORTDbits.RD5==1){dato=8;return;}
		if(PORTDbits.RD6==1){dato=9;return;}
	PORTD=8;
		if(PORTDbits.RD5==1){dato=0;return;}
		if(PORTDbits.RD6==1){operador='=';return;}
	goto a1;}

void DelayFor18TCY(void){Delay10TCYx(20);}
void DelayPORXLCD(void){Delay1KTCYx(20);}
void DelayXLCD(void){Delay1KTCYx(20);}

void main (){
	ADCON1=15;
	OpenXLCD(FOUR_BIT & LINES_5X7); TRISC=0;
	Delay10KTCYx(1);
	
	while(1){SetDDRamAddr(0x00);putrsXLCD("Calculadora");
		SetDDRamAddr(0x40);putrsXLCD("");
		SetDDRamAddr(0x40);TRISD=0xF0;
		
r1:		if((PORTD=1 && PORTDbits.RD1) || (PORTD=2 && PORTDbits.RD7) || (PORTD=4 && PORTDbits.RD7) || (PORTD=8 && PORTDbits.RD4) || (PORTD=8 && PORTDbits.RD5) || (PORTD=8 && PORTDbits.RD7)){
			SetDDRamAddr(0x45);("¡ERROR!");
			goto r1;}
		else{
			teclado();
			SetDDRamAddr(0x40);
			WriteDataXLCD(dato+0x30);
			data1=dato;PORTD=0;
			Delay10KTCYx(100);
			if((PORTD=1 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=2 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=4 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=8 & PORTDbits.RD5)){
				teclado();
				SetDDRamAddr(0x40);
				WriteDataXLCD(dato+0x30);
				data2=dato;PORTD=0;
				Delay10KTCYx(100);
				if((PORTD=1 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=2 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=4 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=8 & PORTDbits.RD5)){
					teclado();
					SetDDRamAddr(0x40);
					WriteDataXLCD(dato+0x30);
					data3=dato;PORTD=0;
					Delay10KTCYx(100);
					if((PORTD=1 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=2 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=4 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=8 & PORTDbits.RD5)){
						SetDDRamAddr(0x45);("¡ERROR!");
						goto r1;}
					else uno=((data1*100)+(data2*10)+(data3));}
				else uno=((data1*10)+(data2));
				uno=data1;}
			 else{ if(PORTD & PORTDbits.RD6){
					SetDDRamAddr(0x45);("¡ERROR!");
					goto r1;}
				else{
					if(PORTD=8 & PORTDbits.RD4){
						if(PORTD=8 & PORTDbits.RD4){						
op1:						PORTCbits.RC0=1;
							PORTD=1;
								if(PORTDbits.RD7==1){operador='L';return;}
							PORTD=2;
								if(PORTDbits.RD7==1){operador='Cm';return;}
							PORTD=4;
								if(PORTDbits.RD7==1){operador='°F';return;}
							PORTD=8;
								if(PORTDbits.RD7==1){operador='°C';return;}				
							teclado();WriteDataXLCD(operador);
							operadorr=operador;
							Delay10KTCYx(100);
							goto  op1;}
						else{
op2:						PORTCbits.RC0=1;
							PORTD=1;
								if(PORTDbits.RD7==1){operador='Raiz';return;}
							PORTD=2;
								if(PORTDbits.RD7==1){operador='Potencia';return;}
							PORTD=4;
								if(PORTDbits.RD7==1){operador='Sen';return;}
							PORTD=8;
								if(PORTDbits.RD7==1){operador='Cos';return;}				
							teclado();WriteDataXLCD(operador);
							operadorr=operador;
							Delay10KTCYx(100);
							goto  op2;}}
					else{
op3:					PORTCbits.RC0=1;
						PORTD=1;
							if(PORTDbits.RD7==1){operador='+';return;}
						PORTD=2;
							if(PORTDbits.RD7==1){operador='-';return;}
						PORTD=4;
							if(PORTDbits.RD7==1){operador='X';return;}
						PORTD=8;
							if(PORTDbits.RD7==1){operador='/';return;}				
						teclado();WriteDataXLCD(operador);
						operadorr=operador;
						Delay10KTCYx(100);
						goto  op3;}}
					teclado();
					SetDDRamAddr(0x40);
					WriteDataXLCD(dato+0x30);
					datb1=dato;PORTD=0;
					Delay10KTCYx(100);
					if((PORTD=1 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=2 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=4 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=8 & PORTDbits.RD5)){
						teclado();
						SetDDRamAddr(0x40);
						WriteDataXLCD(dato+0x30);
						datb2=dato;PORTD=0;
						Delay10KTCYx(100);
						if((PORTD=1 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=2 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=4 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=8 & PORTDbits.RD5)){
							teclado();
							SetDDRamAddr(0x40);
							WriteDataXLCD(dato+0x30);
							datb3=dato;PORTD=0;
							Delay10KTCYx(100);
							dos=((datb1*100)+(datb2*10)+(datb3));
							if((PORTD=1 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=2 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=4 & PORTDbits.RD4) | (PORTD=1 & PORTDbits.RD5) | (PORTD=1 & PORTDbits.RD6) | (PORTD=8 & PORTDbits.RD5)){
								SetDDRamAddr(0x45);("¡ERROR!");
								goto r1;}
							else dos=((datb1*10)+(datb2));}
						else dos=datb1;}
					if(PORTD=8 & PORTDbits.RD6){
						if(operadorr=='+'){resultado=uno+dos;} //Suma
						if(operadorr=='-'){resultado=uno-dos;} //Resta
						if(operadorr=='x'){resultado=uno*dos;} //Multiplicación
						if(operadorr=='/'){resultado=uno/dos;} //División
						if(operadorr=='Raiz'){resultado=pow(uno,0.5);} //Raiz cuadrada
						if(operadorr=='Potencia'){resultado=pow(uno,dos);} //Potencia
						if(operadorr=='Sen'){resultado=sin(uno);} //Seno
						if(operadorr=='Cos'){resultado=cos(uno);} //Coseno
						if(operadorr=='L'){resultado=(uno/1000);} //Centímetros a Litros
						if(operadorr=='Cm'){resultado=(uno*1000);} //Litros a centrímetros
						if(operadorr=='°F'){resultado=((uno*1.8)+32);} //Celsius a Fahrenheit
						if(operadorr=='°C'){resultado=((uno-32)/1.8);} //Fahrenheit a Celsius
						while(operador!='='){teclado();}
						WriteDataXLCD('=');

						d=resultado/1000;
						f=(resultado/100)-(d*10);
						g=(resultado/10)-(d*100)-(f*10);
						h=(resultado)-(d*1000)-(f*100)-(g*10);
						j=(resultado*10)-(d*10000)-(f*1000)-(g*100)-(h*10);
						k=(resultado*100)-(d*100000)-(f*10000)-(g*1000)-(h*100)-(j*10);

						punto='.';

						WriteDataXLCD(d+0x30);WriteDataXLCD(f+0x30);WriteDataXLCD(g+0x30);
						WriteDataXLCD(h+0x30);WriteDataXLCD(punto);WriteDataXLCD(j+0x30);
						WriteDataXLCD(k+0x30);

						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
						Delay10KTCYx(100);
					}}}}}

Al compilarlo, sale:

Código:
----------------------------------------------------------------------
Debug build of project `C:\Users\HP\Desktop\Calculadora\Calculadora.mcp' started.
Preprocessor symbol `__DEBUG' is defined.
Mon Feb 06 10:10:22 2012
----------------------------------------------------------------------
Make: The target "C:\Users\HP\Desktop\Calculadora\Calculadora.o" is out of date.
Executing: "C:\Users\HP\Documents\Tommy\UMNG\Programas\MPLab\MCC18\bin\mcc18.exe" -p=18F4550 /i"C:\Users\HP\Documents\Tommy\UMNG\Programas\MPLab\MCC18\h" "Calculadora.c" -fo="Calculadora.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
[COLOR="Red"]C:\Users\HP\Desktop\Calculadora\Calculadora.c:40:Warning [2066] type qualifier mismatch in assignment[/COLOR]
[COLOR="Blue"]C:\Users\HP\Desktop\Calculadora\Calculadora.c:41:Warning [2066] type qualifier mismatch in assignment[/COLOR]
Make: The target "C:\Users\HP\Desktop\Calculadora\Calculadora.cof" is out of date.
Executing: "C:\Users\HP\Documents\Tommy\UMNG\Programas\MPLab\MCC18\bin\mplink.exe" /l"C:\Users\HP\Documents\Tommy\UMNG\Programas\MPLab\MCC18\lib" /k"C:\Users\HP\Documents\Tommy\UMNG\Programas\MPLab\MCC18\lkr" "..\..\Documents\Tommy\UMNG\Programas\MPLab\MCC18\lkr\18f4550.lkr" "Calculadora.o" /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"Calculadora.cof" /M"Calculadora.map" /W
MPLINK 4.1, Linker
Copyright (c) 2006 Microchip Technology Inc.
Errors    : 0

MP2HEX 4.1, COFF to HEX File Converter
Copyright (c) 2006 Microchip Technology Inc.
Errors    : 0

Loaded C:\Users\HP\Desktop\Calculadora\Calculadora.cof.
----------------------------------------------------------------------
Debug build of project `C:\Users\HP\Desktop\Calculadora\Calculadora.mcp' succeeded.
Preprocessor symbol `__DEBUG' is defined.
Mon Feb 06 10:10:26 2012
----------------------------------------------------------------------
BUILD SUCCEEDED

Los warning que da, qué son realmente ???
Las líneas son:

Código:
[COLOR="Red"]	while(1){SetDDRamAddr(0x00);putrsXLCD("Calculadora");[/COLOR]

Código:
[COLOR="Blue"]		SetDDRamAddr(0x40);putrsXLCD("");[/COLOR]


El programa en sí debería funcionar, pero al implementarlo en Proteus, la calculadora no hace nada.
Se ve que hace el barrido de unos y que recibe las entradas de la tecla pulsada.
Cuando se pulsa un número la primera vez, se observa el mismo en la pantalla sin problemas, pero al pulsar de nuevo, no hace nada, va dejando espacios en blanco.
Y, al oprimir una tecla de operación (que son las letras del teclado matricial 4X4), no genera el mensaje de error que debería generar, sino que sigue dando espacios en blanco.
Si se presiona la tecla de igual (que es el numeral del teclado), da como imagen el igual, pero ahora todas las teclas quedan generando dicha imagen.

Qué puede ser ahora todo eso ???
 
Lo que no se es realmente qué está mal.
La forma de capturar los datos y eso está bien, ya que implementadas de otra forma (pero en estructura exáctamente igual) en otro programa funciona sin problemas, pero acá no.
Y, otra cosa que no entiendo es por qué el programa funciona la primera vez, pero a la segunda y posteriores ya no.
 
Lo que no se es realmente qué está mal.
La forma de capturar los datos y eso está bien, ya que implementadas de otra forma (pero en estructura exáctamente igual) en otro programa funciona sin problemas, pero acá no.

Hola, revisa tu algoritmo precisamente en esa parte de "que sucede despues de capturar los datos"
 
Hola, yo ando en un PIC18F4550 pero en asm, de casualidad no saben como se usa la memoria de datos en ese pic?, porque si quiero meter datos, digamos 200 bytes para una tabla me manda un error, como puedo entonces ocupar otros bancos de datos ?
 
Atrás
Arriba