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:
Ahora, tengo un problema en la línea 73:
Al utilizar el compilador C18, me da el siguiente mensaje:
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 ???
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 ???