TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Gedeon en 28 de Enero de 2011, 12:45:31
-
buen dia ante todo. soy nuevo en el foro y en esto de los pic para serles sincero. necesito hacer un restador de 2 numero binarios y mostrar el resultado en un display de 7 segmentos, pero no puedo usar la funcion decrementar del pic y el complemento del numero debo hacer en el pic y no puedo de manera externa. quisiera saber quien me pudiera dar una asesoria porque tengo 2 ideas para solucionar.
la primera idea seria configurar el puerto A y el 4 pines del puerto B como entradas de datos y usar los otros pines restantes del puerto B como salidas.
la segunda idea es configurar el puerto B como entrada donde entren los 2 numeros y separarlos por medio de programacion y complementarlos y el puerto A como salida para mostrar eso.
si alguien puede darme una mejor solucion o asesorarme para escoger el mejor camino y completar el codigo ya que esto me tiene detenido realmente. sin mas que agregar agradeciendo de antemano me despido y espero respuesta
-
La mejor opcion en el 16f628A, en mi opinion, es usar el PORTA como 8 entradas, con oscilador interno, y el PORTB para las 7 salidas para el display, porque en el PORTA tienes RA4 que es open drain como salida y esto te complica mas el control del display.
Aqui tienes unos ejemplos con el 16f628, anque ese en concreto creo que no:
http://www.todopic.com.ar/foros/index.php?topic=24720.0
En que lenguaje lo tienes que hacer?. Esto que te pongo esta en assembler, me supongo que te mandaron hacerlo en este lenguaje.
Tienes que separar los nibbles y el mas significativo pasarlo al menos significativo, para despues hacer la resta. Para leer los nibbles por separado tienes que aplicar mascara sobre el que no quieres leer.
-
asi es assembler es el lenguaje a utilizar. no habia pensado esa que propones de verdad me parecer mas apropiada. con respecto a eso de hacer mascara siendo sincero me perdi :? , entiendo lo de los nible pero lo otro ni idea. como dije de verdad soy bastante nuevo en esto de assembler y los micros. e leido las instrucciones del micro en si pero me a costado ciertamente. la costumbre de programar en alto nivel y no poder correr el programa paso a paso para saber como y donde estan los datos me a pegado. alguna sugerencia? gracias de antemano por tu respuesta anterior.
-
Para leer el puerto con los nibbles independientes haces asi:
movlw 0x0F ; movemos a W 00001111
andwf PORTA,0 ; al hacer una and lo que esta en 0 quedara en 0 y lo que esta a1 quedara con su valor
movwf AUXILIAR ; se guarda en un registro, hay que definirlo al principio
Ya tienes leido el nibble bajo, para el alto:
movlw 0xF0
andwf PORTA,0 ; ahora nos quedara el nibble bajo a 0 y el alto con su valor
swapf W,0 ; invertimos los nibbles para restar
subwf AUXILIAR,0 ; restamos y lo dejamos en W
En este punto ya tienes el resultado de la resta, ahora tendras que hacer una tabla para convertir ese valor al codigo del display y sacar el valor por el PORTB. Esto lo tienes en los ejemplos de ese enlace que te puse.
-
ok, muchas gracias de verdad por tu ayuda y orientacion, hare eso y al tenerlo listo lo subo completo el codigo y el esquematico del circuito. nuevamente gracias
-
como puedo hacer un programa