# Calculadora Basica 4 Digitos con signo (Pic16F877 Teclado4X4 LCD2X16  - .asm)



## danrod (Feb 16, 2010)

Les aporto una calculadora basica que realice hace mas de un año para el curso de microcontroladores de mi universidad.

El código esta en ensamblador (.ASM MPLAB), simulación en PROTEUS 7.5

Espero que ha alguno le sea util.

Muchas gracias.


----------



## riber33 (Jun 3, 2010)

Amigo danrod descargue tu proyecto pero cuando lo compilo salen muchos errores y como soy nuevo en esto de los micros no se como arreglarlo.


----------



## danrod (Jun 3, 2010)

Ok compañero... si salen errores en mplab puede ser por que no cambiaste los parametros de 
CONFIGURE->Select Device->PIC16F877  OK
lo acabe de compilar y normal!!!!

MPLINK 4.35, Linker
Copyright (c) 2009 Microchip Technology Inc.
Errors    : 0

Salud2s cualquier duda posteala


----------



## riber33 (Jun 5, 2010)

si es verdad compañero gracias pero ahora cuando lo voy a correr en proteus selecciono el archivo.HEX en el micro y luego doy play y ahora cuando presiono las teclas me sale esto (simulation must be paused whilst measuring)  a q se debe eso? como hago para sumar restar dividir y multiplicar una cifra de cinco numeros? de verda soy nuevo en esto y no se nada
espero q me ayudes bye


----------



## marinaamor11 (Jun 6, 2010)

hOLa
si tu programa tiene muchos errores...al parecer varios calls stan llamados pero no los encuentro luego... y pues tampoco jala el proteus.


----------



## danrod (Jun 6, 2010)

Muchas gracias por avisar.... buscare ha ver q encuentro
Gracias


----------



## danrod (Jun 7, 2010)

Pues extraño por que a mi me corre perfectamente!
......


----------



## marinaamor11 (Jun 7, 2010)

mira..si entran los datos pero no realiza las operaciones por ejemplio para multiplicar...

tecleas 8 x 2 y t sale 82..es decir solo junta los datos


----------



## danrod (Jun 7, 2010)

Utiliza la notación "Notación Polaca Inversa"
Que estes bien...!!!


----------



## J2C (Jun 7, 2010)

Danrod

Si mal no recuerdo eso se llama: "Notación Polaca Inversa", era algo muy usado en las viejas calculadoras a partir del año 1975.

Saludos. JuanKa.-

P.D.: Confirmado según Wikipedia: http://es.wikipedia.org/wiki/Notaci%C3%B3n_polaca_inversa


----------



## danrod (Jun 7, 2010)

J2C dijo:


> Danrod
> 
> Si mal no recuerdo eso se llama: "Notación Polaca Inversa", era algo muy usado en las viejas calculadoras a partir del año 1975.
> 
> ...


 
Pues realice una calculadora muy vieja..... algun dia me anime y la hago con una touchscreen
jejeje
saludos y gracias por el dato


----------



## J2C (Jun 7, 2010)

Danrod

Para nada es una calculadora vieja, es una forma de notación usada en lenguajes de programación, tan vigente como el programa que has realizado para cargarle al PIC de la misma.

Saludos.      JuanKa.


----------



## danrod (Jun 17, 2010)

Mira compañero.. el codigo esta perfecto... probado en montaje real..
Aqui envio el una imagen donde explica el porque te sale ese mensaje.....
Lo otro es codigo fue compilado en MPLAB  8.43.... lo puedes descargar en la pagina de MICROCHIP..... Tambien te recomiendo guardar el proyecto en la carpeta CREADA POR EL MPLAB AL MOMENTO QUE LO INSTALAS..... La simulacion fue desarrollada en PROTEUS 7.5 Sp3
... Espero que te sea de ayuda.....


----------



## qui_que_87 (Jun 25, 2010)

Acabo de realizar una calculadora de 4 digitos con el pic18f4520, realiza operaciones basicas, potencia al cuadrado, cubo y calcula la funcion seno. Si a alguien le interesa la puedo subir.


----------



## marinaamor11 (Jun 25, 2010)

amigOo...subela=)


----------



## qui_que_87 (Jun 25, 2010)

ya subi el archivo, te dejo la direccion.

https://www.forosdeelectronica.com/f24/hace-seno-coseno-pic-17102/#post321419


----------



## danrod (Jun 25, 2010)

qui_que_87 dijo:


> ya subi el archivo, te dejo la direccion.
> 
> https://www.forosdeelectronica.com/f24/hace-seno-coseno-pic-17102/#post321419



Gracias por Compartir este aporte........


----------



## marinaamor11 (Jun 27, 2010)

dani..tq!!grax x ser amigOo!!=)


----------



## danrod (Jun 27, 2010)

marinaamor11 dijo:


> dani..tq!!grax x ser amigOo!!=)


Para nada... aqui en el foro estamos para servir... total somos colegas


----------



## hellsing8989 (Ago 9, 2010)

danrod dijo:


> Para nada... aqui en el foro estamos para servir... total somos colegas




dan amigo me preguntaba algo que aun no entiendo...con eso de la notacion polaca inversa...segun lei debes meter el primer numero digamos 250 y luego el segundo numero digamos 3500   pero que debe quedar casi todo junto     [250 3500 +]    (y el signo de la operacion)
ese espacio...en el que decides  cuando es tu segundo numero como lo haces? con que tecla?

y mi otra pregunta..una lista de componentes que se lleva aparte del lcd teclado y el pic..me refiero a las resistencias o transistores

gracias de antemano...


----------



## marinaamor11 (Ago 9, 2010)

mira primero digitas tu dato 250 y das enter(E), despues digitas tu segundo numero 10 i das enter(E) i al final pones q operacion deseas q se efectue con esos digitos (+) y enter (E) por ejemplo.

te queda en pantalla maso asi 0250             SUM
                                         0010            0260


----------



## danrod (Ago 9, 2010)

marinaamor11 dijo:


> mira primero digitas tu dato 250 y das enter(E), despues digitas tu segundo numero 10 i das enter(E) i al final pones q operacion deseas q se efectue con esos digitos (+) y enter (E) por ejemplo.
> 
> te queda en pantalla maso asi 0250             SUM
> 0010            0260



Efectivamente tienes razón marinaamor11..... yo daré un ejemplo... una operación aleatoria (con signo)
      -350
    *    2
------------
       700

1) digitas 350
2) digitas "-" se encenderá un LED o mostrara el signo menos prefijo al numero
3) debes almacenar el numero presionas (E) Mostrara el numero como "- 0350" en la parte superior izquierda
4) digitas en segundo numero "2"
5) debes almacenar el numero presionas (E) Mostrara el numero como " 0002" en la parte inferior izquierda
6) una vez almacenados los dos números ... el programa esperara a que digites una OPERACIÓN... digitas *
Te aparece en la parte superior Derecha MUL
Te aparece en la parte Inferior Derecha  0750  (Con signo positivo)

Por lo de los materiales.....El plano esta en proteus... si no estoy mal no requieres resistencias de pull-up para el teclado... requieres resistencias poara los LEDs indicadores un pulsador para el RESET...
Espero que estes bien compañero............
Cualquier duda solo posteala


----------



## hellsing8989 (Ago 9, 2010)

danrod dijo:


> Efectivamente tienes razón marinaamor11..... yo daré un ejemplo... una operación aleatoria (con signo)
> -350
> *    2
> ------------
> ...



gracias marinaamor11..gracias otra vez dani ..


----------



## hellsing8989 (Ago 16, 2010)

hellsing8989 dijo:


> gracias marinaamor11..gracias otra vez dani ..



vuelvo a molestar    compre este display pero no he encontrado un diagrama que me diga los pines ....no quiciera cagarla por conectar algun pin mal...y no cuento con mas cash$$   helP!!

http://img812.imageshack.us/f/dsc00343mv.jpg/

http://img42.imageshack.us/f/dsc00348lq.jpg/


----------



## danrod (Ago 16, 2010)

hellsing8989 dijo:


> vuelvo a molestar    compre este display pero no he encontrado un diagrama que me diga los pines ....no quiciera cagarla por conectar algun pin mal...y no cuento con mas cash$$   helP!!
> 
> http://img812.imageshack.us/f/dsc00343mv.jpg/
> 
> http://img42.imageshack.us/f/dsc00348lq.jpg/



PINESFUNCION
---------------
DB0...DB7Bus de datos 7....14 
---------------
E              Enable 6 E=0 , LCD no habilitado    E=1 , LCD habilitado
---------------
R/WLectura/escritura 5 R/W=0, escribe en LCD  R/W=1, lee del LCD
 ---------------
RS Register Select 4 R/S=0 , modo comando  R/S=1 , modo carácter
---------------
Vlc Liquid Crystal driving Voltaje 3 Tensión para ajustar el contraste
---------------
Vdd Power supply voltaje 2 Tensión de alimentacion 
---------------
Vss Ground 1Masa
---------------

​  Bien, Mira este datasheet.... La conexión para pantallas de 2 Fila por 16 caracteres es estándar.... La diferencia es si cuentan con Backlight......
Espero que te sirva la Info.... si no... solo postea....
Mira este post... te puede servir... AQUI
Saludos....


----------



## hellsing8989 (Ago 16, 2010)

gracias me ha ayudado bastante tambien pude aclarar leyendo el diagrama la duda de por donde empezar a conectar ...gracias de nuevo..


excelente post


----------



## napa30 (Oct 13, 2010)

alguien puede ayudarme con un calculadora con pic 16f877a que sume reste y haga division entera de 16 bits, con teclado matricial. puede ser en hi tech css.!!! merci.


----------



## chvstracker21 (Abr 4, 2011)

hola daniel oye tenog una pregutna al copilarlo  de nuevo en el mpaswin  me salen 7 errores yo no  hago los progrmaas en mathlab solo los hago en block de notas 
Error[126]   C:\PRUEBA77.ASM 168 : Argument out of range (042D not between 0000 and 03FF)
Error[126]   C:\PROGRAM FILES (X86)\MICROCHIP\MPASM SUITE\TECLACAL.INC 77 : Argument out of range (0423 not between 0000 and 03FF)


 por mensionar algunos que puedo  hacer


----------



## danrod (Abr 4, 2011)

chvstracker21 dijo:


> hola daniel oye tenog una pregutna al copilarlo  de nuevo en el mpaswin  me salen 7 errores yo no  hago los progrmaas en mathlab solo los hago en block de notas
> Error[126]   C:\PRUEBA77.ASM 168 : Argument out of range (042D not between 0000 and 03FF)
> Error[126]   C:\PROGRAM FILES (X86)\MICROCHIP\MPASM SUITE\TECLACAL.INC 77 : Argument out of range (0423 not between 0000 and 03FF)
> 
> ...



Hummm 
La verdad Nunca he usado el mpaswin  
Lo que hacia era copiar o crear los archivos de dentro de esta carpeta con un nombre muy corto....en esta ruta     C:\Archivos de programa\Microchip
Ahora 
Error[126]   C:\PROGRAM FILES (X86)\MICROCHIP\MPASM SUITE\TECLACAL.INC  77 : Argument out of range (0423 not between 0000 and 03FFF.... Puede ser porque esta seleccionado un micro DIFERENTE AL PIC16F877......
Revisa ese detalle..  Nota: los realice con MPLAB 8.43v
Bienvenido al foro!!
Saludos...y cuéntame si sigue el error


----------



## chvstracker21 (Abr 4, 2011)

jajajaj ya arregle eso del micro y sin ningun error se copilo pero la bronca es en el proteus  has de cuenta que tnegno que darle  play  poner un numero yl uego  pause y    luego otra ves play para el sigiente  numero pero  a la hora de presiionar un signo de sunma  resta o division  no me jala  no lo hace que puedo hacer


----------



## danrod (Abr 4, 2011)

chvstracker21 dijo:


> jajajaj ya arregle eso del micro y sin ningun error se copilo pero la bronca es en el proteus  has de cuenta que tnegno que darle  play  poner un numero yl uego  pause y    luego otra ves play para el sigiente  numero pero  a la hora de presiionar un signo de sunma  resta o division  no me jala  no lo hace que puedo hacer



Hummm..Mira en la Primera parte de este post...hay una imagen en la que te explica donde debes presionar...
Otra cosa..Esta en proteus 7.5...... A mi me pasaba eso cuando hacia programas muy complejos..se colgaba el proteus...Quizás sea porque por que tu PC esta sobrecargado...
Pero ...Funciona perfecto en Proteus...
Saludos y me alegro que te funcione el compilador!!!... ese error es comun cuando cambias de micro..ese error el del oscilador y el de la configuración de los fuses es muy común 

Saludos


----------



## chvstracker21 (Abr 13, 2011)

que onda mi  camarada oye  pues ya  funciona perfecto en proteus pero la onda es cuando lo armo en fisico en la pantalla lcd me salen puros cuadritos como cuando apenas la prendes que onda que hago  o que cambio help  si puedes contestame hoy mismo  me ayudarias un buen  grascias  por todo


----------



## danrod (Abr 20, 2011)

.............hummmmmm...revisa el datasheet ...la conexión es la estándar para todas las pantallas...en los post anteriores esta el datasheet que utilice cuando presente esta calculadora......
saludos....


----------



## LxL (Abr 22, 2011)

Alguien me puede ayudar con un codigo en asm para el pic 18f452...
Lo que necesito hacer es un convertidor de binario a BCD... Mas especifico, tengo que pasar 8bit's a BCD...


----------



## carlos felipe ortiz vera (Jun 2, 2011)

hola, probè el programa en proteus  funciona sin problemas, solo tengo una duda que pasa con los puntos que salen con signo de pregunta "?", como van conectados y que representan, espero tu respuesta..... gracias buen aportee... un 10


----------



## danrod (Jun 2, 2011)

......Por defecto, esos son indicadores o puntas lógicas que usa proteus....cuando activas la simulación, esta cambian a estados lógicos 0.........El indicador que esta en la parte superior del teclado, indica cuando esta el programa en la interrupción.......las que están a la izquierda de la pantalla, indican los signos de los numero (operandos)...el indicador que esta a la derecha de la pantalla, indica el resultado de la operación.........
Nota: 1-> negativo        0-> positivo ...indeterminado-> por defecto en proteus....... Recuerda...son puntas lógicas.....Si lo implementas, esto lo cambias por una resistencia en serie con un led a tierra....
Saludos!


----------



## PANCRI24 (Abr 8, 2012)

hola   que tal, ya compile el programa y no me marca errores,  tengo una version mas nueva de proteus y no me   deja abrir  el  archivo  calculadoradan.dns  me puede pueden decir  que  puedo  hacer o me pueden  facilitar una  imagen del conexionado del  lcd,taclado y pic 877 para  yo crear un archivo nuevo.


----------



## MrCarlos (Abr 9, 2012)

Hola PANCRI24

Creo Que Si Tú tienes una versión más nueva del sistema Proteus podrías abrir el archivo que supuestamente fue desarrollado con un Proteus de versión anterior, pero en fin te adjunto una imagen y el .DSN.

Nota que el teclado no es el adecuado pues las teclas según su identificación no corresponden.

saludos
a sus ordenes


----------



## PANCRI24 (Abr 9, 2012)

gracias  mr carlos   reviso   si se puede, si no  creo un  proyecto con la imagen que me evias, estamos en contacto.


----------



## NEMAR (Abr 27, 2012)

hola a todos descargue el archivo y me ah servido de mucho, pero mi pregunta es la siguiente si yo quiero hacer la calculadora solo que realice las operaciones  con dod digito que debe hacer

PD: agradezco su pronta respuesta y espero que me puedean ayudar


----------



## NEMAR (Abr 29, 2012)

hola alguien sabe como hacer para que la calculadora no realice las operaciones con 4 dígitos sino con dos dígitos.


----------



## jari024 (Nov 18, 2012)

Cordial saludo, esta excelente  este pots, le cuento que lo he simulado, lo he probado y me esta funcionando  perfecto, pero tengo muchas dudas acerca  de cómo  creaste el  programa en asembler, es decir no entiendo que está haciendo el programa, no si me podrías explicar cómo está trabajando el algoritmo o si en el mejor de los casos, aun conservas el informe que realizaste para presentar el laboratorio. Gracias…


----------



## danrod (Dic 5, 2012)

Disculpa por la tardanza....Mira voy a buscar si tengo el diagrama de flujo...pero recuerdo que descargue las librerias de un foro..me gusta he sea util ese codigo..Saludos


----------



## halexSF (Feb 25, 2014)

oie disculpa, tengo una duda que presiento es muy bascia, hay unos componentes que aparecen con signo de interrogacion (en proteus) que son? o que representan?
gracias de antemano.


----------



## MrCarlos (Feb 25, 2014)

Hola halexSF

Te Refieres a Unos Cuadritos con una terminal ??
Esos son “Foquitos” con una sola terminal.
Se utilizan para monitorear el estado de alguna salida/entrada de algún IC o una línea.
Si el estado es *alto* enciende un *1*, si el estado es *bajo* enciende un *0*.

En el ISIS de Proteus se llaman *LOGICPROBE (BIG)*, también tiene el *LOGICPROBE* sin el *(BIG)* y es más pequeño.

saludos
a sus ordenes


----------



## halexSF (Mar 6, 2014)

A muchas gracias, a ese mero me refería. Otra duda, el archivo .hex lo pase directamente a mi pic 16f877A, pero al momento de correr todo la pantalla lcd solo me da cuadros negros, estaba viendo el código con el archivo .asm, y no veo por ninguna parte donde este el lcd.h para que funcione la pantalla, veo que tiene uno que dice pantalladan, esta librería tiene la misma función que la lcd.h?

gracias de antemano y saludos


----------



## MrCarlos (Mar 6, 2014)

Hola halexSF

Probablemente la librería para el LCD fue modificada por el originador de este tema.
En el archivo prueba77.asm está nombrado como: <PANTALLAdan.INC>
El del teclado está nombrado como: <tecladodan.INC>
Pero no creo que sean igual a los que trae el ensambador.

También puede ser que tengas algo conectado fuera de lugar por lo que no funciona el LCD.

En fin no puedo hacer más por ti pues ni siquiera tengo algún ensablador para los archivos .asm

saludos
a sus ordenes


----------



## halexSF (Mar 9, 2014)

Muchas gracias MrCarlos, tendre que darle más análisis a todo eso, porque volví a checar todas mis conexiones y según yo están bien, use el datasheet de mi pantalla y según yo todo bien, alguien más de los que haya armado este proyecto en físico tuvo problemas?? Y si no tuvieron, lo armaron tal cual viene en el archivo del ISIS o es que me falto algo??
gracias MrCarlos y a cualquier otro que me pueda ayudar, saludos.


----------

