Autor Tema: Como puedo hacer un restador con un pic 16f84?????  (Leído 2741 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado kiwwi

  • PIC10
  • *
  • Mensajes: 7
Como puedo hacer un restador con un pic 16f84?????
« en: 16 de Octubre de 2004, 23:02:00 »
Soy nueva en esto de los pics y tengo q hacer el codigo en picbasic
para hacer en un display un restador, o sea,  ingresar un numero y despues otro numero y entonces q aparesca el resultado de la resta del primero menos el segundo en el mismo display
Alguien q sepa como porfa ayudemeeee!!!!!

Gracias por su atencion

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Como puedo hacer un restador con un pic 16f84?????
« Respuesta #1 en: 17 de Octubre de 2004, 01:55:00 »
Deberías de poner aquí el código que has intentado hacer para conseguir resolver el problema, y te ayudamos sobre ese código.
Si lo que quieres es que te lo hagamos entero, vas a tener más dificultades para conseguirlo.
Venga, anímate y pásanoslo.

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Como puedo hacer un restador con un pic 16f84?????
« Respuesta #2 en: 17 de Octubre de 2004, 05:47:00 »
Ni siquiera das oportunidades para que algun alma caritativa te lo haga...

qui çir

picbasic pro , o picbasic plus??


PD: y algo mas, los datos por donde entran? por PC , o por un teclado matricial?

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Como puedo hacer un restador con un pic 16f84?????
« Respuesta #3 en: 17 de Octubre de 2004, 12:53:00 »
En hora buena amiga,
Aqui tienes un ejemplo recien hecho, no solo resta, suma,multiplica y divide, no esta optimizado ni hecho en tu modelo y  tampoco trabaja para numeros de mas de 4 cifras(o 5???? eso lo aprenderas), esto no es restriccion, solo es la base para que trabajes, ya que parte de todo esto es que aprendas y no solo COPIES codigo sin saber el por que, asi que esos detalles fueron dejados especialmnte para que eso no suceda. corregirlo es muy sencillo, pero solo si estudias un poco iras corrigiendo estas restricciones .El codigo trabaja, pero con esas condiciones(ademas de tener unos errorsillos por ahi faciles de corregir   ), conforme vayas estudiando podras ir modificando facilmente y a tu antojo(como puedes ver tampoco tiene explicacion, las dudas que te vayan surgiendo y no puedas contestarlas con lo aprendido en el manual, DataSheet "DS"y Ensamblador se podran ir contestando por todos los amigos del foro) lo que no quieras o lo que requieras. sinecesitas el diseño para simular me avizas y te lo envio.Repito  es bueno que solo se copie y pegue codigo si no lo entiendes, en este INIGUALABLE foro encontraras TODA la ayuda que puedas necesitar,pero AYUDA, no programas completos a la orden, espero que no lo tomes a mal,  reviza los post anteriores de mis panas  para entender como se tomo la peticion, ademas lo importante es que se aprenda.

   DEVICE=16F628  
     CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF
     DECLARE LCD_DTPIN PORTA.0
     DECLARE LCD_ENPIN PORTA.5
     DECLARE LCD_RSPIN PORTA.4
     ALL_DIGITAL=TRUE  
     PORTB_PULLUPS=ON    
       DIM BAND AS DWORD
     DIM DISM AS FLOAT
      DIM CALCULO2 AS FLOAT
     DIM TOTAL1 AS FLOAT
     DIM CALCULO1 AS FLOAT
     DIM CALC2 AS DWORD
     DIM CALC1 AS DWORD
      DIM ARRAY[14] AS BYTE
     DIM XX AS BYTE
      DIM KEY AS BYTE
     DIM VAR1 as BYTE
     DIM STORE AS FLOAT
     DIM SUMA AS BIT
     DIM RESTA AS BIT
     DIM MULT AS BIT
     DIM CO AS BYTE
     DIM DIV AS BIT
     DIM SALIR AS BYTE
     DIM DD AS BYTE
     DIM RESX AS DWORD
     DIM RESX1 AS DWORD
    DIM RESX2 AS DWORD
       DIM DD2 AS BYTE
      DIM STOREBIT AS BIT
     DIM DD1 AS BYTE
     CLEAR DD
     CLEAR STORE
     CLEAR STOREBIT
     clear xx
     CLEAR DD1
     CLEAR DD2
     CLEAR DIV
     CLEAR MULT
     CLEAR RESTA
     CLEAR SUMA
     CLEAR CALCULO1
     CLEAR CALCULO2
     CLEAR CALC1
     CLEAR CALC2
     CLEAR RESX2
     CLEAR RESX1
     RESX=100000000
     CLS
INICIO:   
    VAR1 = INKEY   
   DELAYMS 50
   KEY = LOOKUP VAR1, [7,8,9,"/",4,5,6,"X",1,2,3,"-","C","Z",50,"+"]      
   IF KEY="C" THEN
   CLEAR STOREBIT
   CLEAR XX
   CLS
   END IF
   IF KEY=50 THEN
           DD2=DD+7
           RESX2=RESX
           CLEAR RESX
           CLEAR DD
         IF STOREBIT=0 THEN
         
          BAND =1
            CO=0
   LOOP3:      IF CO <> DD1 THEN
                   IF ARRAY[CO]>0 THEN
                   BAND=BAND*10
                      CALC1=ARRAY[CO]*100000000
                   CALCULO1=CALCULO1 + CALC1/BAND
                  ELSE
                  END IF
            INC CO
            GOTO LOOP3
            ELSE
            CALCULO1=CALCULO1/RESX1
             END IF
         ELSE
         CALCULO1=STORE
         END IF
         
         
         CO=7
         BAND=1
   LOOP4:   IF CO <> DD2 THEN
         IF ARRAY[CO]>0 THEN
         BAND=BAND*10
         CALC2=ARRAY[CO]*100000000
         CALCULO2=CALCULO2 + CALC2/BAND
         ELSE
         END IF
         INC CO
         GOTO LOOP4
         ELSE
         CALCULO2=CALCULO2/RESX2
         END IF
         CLS
      
      
         IF SUMA=1 THEN
         TOTAL1= CALCULO1+CALCULO2
         STORE=TOTAL1
         STOREBIT=1
         PRINT DEC8 TOTAL1
         ENDIF
         
         IF RESTA=1 THEN
         TOTAL1= CALCULO1 - CALCULO2
         STORE=TOTAL1
         STOREBIT=1
         PRINT DEC8 TOTAL1
         END IF
         
         IF MULT=1 THEN
         TOTAL1=CALCULO1 * CALCULO2
         STORE=TOTAL1
         STOREBIT=1
         PRINT DEC8 TOTAL1
         END IF
         
         IF DIV=1 THEN
         TOTAL1=CALCULO1/CALCULO2
         STORE=TOTAL1
         STOREBIT=1
         PRINT DEC8 TOTAL1
         DELAYMS 500
         END IF
         

         CLEAR CALC1
         CLEAR CALC2
         CLEAR CALCULO1
         CLEAR CALCULO2
         CLEAR RESX
         CLEAR RESX1
         CLEAR RESX2
            RESX=100000000
         CLEAR SUMA
         CLEAR RESTA
         CLEAR MULT
         CLEAR DIV
         CLEAR DD
         CLEAR DD1
         CLEAR DD2
         CLEAR KEY
           CLEAR XX
   END IF
   
   IF KEY="+" THEN
   DD1=DD
   RESX1=RESX
   RESX=100000000
   CLEAR DD
   SET SUMA
   PRINT KEY
    DELAYMS 100
    XX=7
    CLEAR KEY
    END IF
   
   IF KEY="-" THEN
   DD1=DD
   RESX1=RESX
   RESX=100000000
   CLEAR DD
   SET RESTA
   PRINT KEY
    DELAYMS 100
    XX=7
    CLEAR KEY
     END IF
   
   IF KEY="X" THEN
   DD1=DD
   RESX1=RESX
   RESX=100000000
   CLEAR DD
   SET MULT
   PRINT KEY
    DELAYMS 100
    XX=7
    CLEAR KEY
     END IF
     
   IF KEY="/" THEN
   DD1=DD
   RESX1=RESX
   RESX=100000000
   CLEAR DD
    SET DIV
   PRINT KEY
    DELAYMS 100
    XX=7
    CLEAR KEY
    END IF
   
   IF KEY>0 AND KEY<10 THEN
    PRINT @KEY
   ARRAY[XX]=KEY
    DELAYMS 100
     RESX=RESX /10
    INC XX
    INC DD
    CLEAR KEY
    END IF
     IF KEY="Z"  THEN
    PRINT @0
    ARRAY[XX]=0
    DELAYMS 100
    RESX=RESX /10
    INC XX
    INC DD
    CLEAR KEY
    END IF
    GOTO INICIO
   
           
        
            
Nota: Esta es solo una forma de hacer lo que necesitas(con el plus de hacer mas operaciones, claro esta), como te dije, no esta optimizada ni filtrada , despues de esto puees hacer tu codigo, mucho mas ligero, y mucho mas eficiente, y con mas posiblidades, pero este ejemplo siento que es el mejor para entender como manipular operaciones estilo calculadora y demas, si lo simplificara no entenderias muchas de las instancias que se ven claramente con el exceso de codigo.
         
Salu2

Desconectado kiwwi

  • PIC10
  • *
  • Mensajes: 7
RE: Como puedo hacer un restador con un pic 16f84?????
« Respuesta #4 en: 23 de Octubre de 2004, 21:07:00 »
Muchas gracias por tu codigo lager. Pero la verdad no le entiendo mucho, de casualidad no sabes donde pueda bajar un manual para el pic??

En serio seria de mucha ayuda, GRACIASSSSSS!!!


Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Como puedo hacer un restador con un pic 16f84?????
« Respuesta #5 en: 23 de Octubre de 2004, 21:21:00 »
que onda kiwi,
mira el codigo es basto, pero no complejo, necesitas antes leerte un poco el manual, el ds y aprender ensamblador(en este caso para pics), el datasheet lo obtenes casi de donde sea, entra a la pagina de microchip.com ahi esta, yo te recomiendo que empiezes con el 16f628 ya que el 16f84 ya es obsoleto(ademas este que te digo tiene otrs cositas integradas que luego necesitaras sin duda)
el manual depb pro y de pb plus andan en cualquier  recurso P 2P , desde ahi puedes descargarlo, basicamente un restador es como se ve pana:

resultado=numero1-numero2
como manejamos 3 variables, necesitas declararlas entes8como en todo lenguaje basic) de la siguiente forma:
dim resultado as byte
dim numero1 as byte
dim numero2 as byte
 
donde dim refleja o le dice al compilador que sera una variable ram(en memoria), rresultado(o numero1, o numero2, o x nombre) es el nombre mismo de la variable como va a ser usada en el programa y byte es el formato que puede CONTENER esa variable(aqui no usamos string, ni integer, ni long ni ninguna de esas terminaciones como en el visual basic y demas)
donde byte son 8 bits, es decir el valor maximo es de 255
otros valoes que puede adquirir son word(2 bytes) dword(2 words) o float(valor flotante)
en ensamblador puedes hacer una resta con sublw y subwf,( APRENDER ENSABLADOR!!!!)
Reviza en los foros, hay cantidad de ejemplos y explicaciones  que no necesitas entrar a otro foro.
Lo que es tambien muy importante es que ESTUDIES el DS, pero realmente lo estudies , ya que el funcionamiento viene muy bien explicaco en el Ds de cada modelo, incluso vienen las instruciiones de cada modelo y ejemplos de estas.
Salu2 pana

Desconectado kiwwi

  • PIC10
  • *
  • Mensajes: 7
RE: Como puedo hacer un restador con un pic 16f84?????
« Respuesta #6 en: 25 de Octubre de 2004, 01:18:00 »
HOLA LAGER GRACIAS POR EL DATO.

SOLO UNA PREGUNTTITA MAS, TAL VES TE puede sonar muy tonta pero es en serio

quiero usar 3 display (uno para el primer numero, el segundo para el otro numero y el ultimo para el resultado), solo que no se como hacer para que el pic sepa cuando quiero dibujar el primer numero y este se quede encendido, y luego despues dibujar el segundo numero en el otro display sin q se apague el primero, y por ultimo dibujar el resultado sin que se apaguen los dos anteriores, Hay alguna instruccion especial o tendre q usar 2 o 3 pics???

En serio tal vez esto te resulte tonto para ti, pero yo no se como

Muchas graciasssss por tu tiempo y tu ayuda, Nos vemos prontoo..

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Como puedo hacer un restador con un pic 16f84?????
« Respuesta #7 en: 25 de Octubre de 2004, 11:17:00 »
HOLA:

te voy a dar un dato ,,,el PRO Y el PLUS estan mas bien enfocados en hacerte la vida mas facil si usas un display LCD ,ahi tienes todo resuelto,si bien es posible comandar digitos de 7 segmentos es en realidad una complicacion ;ya te postee en tu otra pregunta como se hace ,ahora veraz que si miras un poco de ejemplos de lcd veras que TODO es mucho mas sencillo ,son alfanumericos ,son "inteligentes" no debes "crear" el caracter ,se queda alli hasta que tu lo saques ,el refresco no es necesario en fin mil problemas resueltos...piensalo y mira ejemplos...


Saludos
Khasitos


 

anything