Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

05/02/2012 #1

Avatar de superdog13

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:E rror: 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 ???
06/02/2012 #2


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.
06/02/2012 #3

Avatar de superdog13

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-
C:\Users\HP\Desktop\Calculadora\Calculadora.c:40:Warning [2066] type qualifier mismatch in assignment
C:\Users\HP\Desktop\Calculadora\Calculadora.c:41:Warning [2066] type qualifier mismatch in assignment
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:
	while(1){SetDDRamAddr(0x00);putrsXLCD("Calculadora");
Código:
		SetDDRamAddr(0x40);putrsXLCD("");

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 ???
06/02/2012 #4


Hola, si ya no existen errores de sintaxis lo mas probable se que la forma en que quieres resolver tu problema este mal planteada
06/02/2012 #5

Avatar de superdog13

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.
07/02/2012 #6


superdog13 dijo: Ver Mensaje
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"
22/02/2012 #7

Avatar de nietzche

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 ?
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.