DIAGRAMAPIC

Anuncio
PROCEDIMIENTOS DE DISEÑO Y ANÁLISIS DE LAS SIMULACIONES
Como primera medida establecemos nuestras entradas(PORTC), salidas (PORTB, PORTD, PORTA) y
los aspectos necesarios para acceder a ellos y a múltiples herramientas del microcontrolador.
Comprobamos la simulación y tenemos nuestro Puerto C, como entrada y nuestros Puertos D,B,A
como salidas
Diseñamos un menú el cual nos permite seleccionar la operación que deseamos en nuestro
ejemplo suma y resta.
Colocamos un estímulo a nuestro puerto RE0 para dirigirnos a la suma y miras que está
funcionando nuestro menú.
Efectivamente nos dirigimos a nuestro destino Suma
Repetimos el procedimiento, pero ahora con RE1 y nuestro nuevo destino Resta.
Teniendo en cuenta que nuestros pulsadores reciben un uno o un cero, diseñamos dos bucles para
detectar los cambios del pulsador y así tener control de ellos.
En este caso con ayuda de la instrucción btfss,btfsc podemos evaluar en qué punto el pulsador
está presionado(1) y en qué punto no lo está(0).Tanto para la suma como para la resta utilizamos
este mismo control de pulsadores con la pequeña variación que uno recibe RE0 y el otro RE1.
Decidimos que en nuestro diseño solo usaríamos dos pulsadores asi que hicimos uso de algunas
variables auxiliares.
Haciendo uso de los estados del pulsador nos aprovechamos de ello para enviar nuestro numero
de nuestro puerto de entrada(C) a nuestro registro W.
Eso ocurre justo después de haber elegido la operación y antes de sumar.
Vamos a ingresar un valor a nuestro puerto C para mirar que nuestro movimiento de PORTC a W
se esta efectuando, nuestro numero a enviar será 101.
Tenemos el numero 101 en nuestro puerto C, ahora vamos a verificar que lo este enviando a W
Efectivamente nuestro numero está siendo asignado a W. Este diseño
lo usamos tanto en la suma como en la resta.
Utilizando la instrucción add procedemos a sumar nuestros valores tanto el numero que esta en w
como el que aun esta en el puerto.
Para nuestro ejemplo sumaremos 2+2=4
Tenemos como resultado el esperado 4 eso nos quiere decir que estamos sumando bien,Luego
movemos nuestro resultado a una variable auxiliar.
Esta línea detecta si nuestra suma es superior a los 255.
Si nuestra suma es superior, el bit de acarreo de nuestro registro STATATUS se colocara en 1 y se
ejecutara el bucle acarreo de lo contrario estará en 0 y saltara este bucle.
En nuestro ejemplo la suma no pasa de 255 por lo tanto el bucle acarreo no se ejecuta.
Luego movemos el valor que estaba en Aux a nuestro registro W
Utilizamos una compuerta and la cual nos hace una operación de multiplicación con el valor
binario 0000111, asi de esta manera solo pasaran los primero 4 bits y podremos tener nuestro
primer numero el cual lo vamos a mostrar en nuestro primer display(PORTB).
El valor filtrado se guarda en W y vamos a un bucle llamado tabla el cual tiene nuestros valores
numéricos para moestrar en nuestro display.
Para este caso sumamos los números binarios 11000000 + 10, para mirar el efecto de la filtración.
Como resultado a nuestra suma tenemos el numero binario 110000010.
En simulación nos damos cuenta que nuestro filtro a funcionado mostrándonos simplemente los
valores equivalentes a los 4 primeros bits, colocando los otros 4 en 0
Nos dirigimos a nuestra tabla ya anteriormente mencionada y con ayuda del contador del
programa podremos acceder al valor que necesitamos traer en este caso es el 00000010 que
equivale al numero 2 y en nuestro display al 01101101.
Este valor lo almacenamos en W el cual mas adelante será trasferido a PORTB
Movemos nuevamente el valor de Aux quien es el que contiene el resultado de nuestra suma y
ejecutamos nuestro segundo filtro el cual solo nos dejara pasar los 4 últimos bits haciendo el
mismo proceso anterior con compuerta and pero esta ves con el valor binario 11110000, y este
valor lo almacenamos en otro registro auxiliar llamado Aux2.
Aquí podemos observar nuestro valor completo en 0x20 y nuestro valor filtrado en WREG
En este diseño tuvimos una complicación ya que el valor que nos arrojaba era demasiado grande y
hacia que se desbordara el bucle tabla, así que usamos la instrucción SWAP la cual hace girar los
números de atrás hacia adelante y así tener el número que deseamos para mostrar en nuestros
display.
Esta instrucción hace el giro de números desde nuestra variable Aux2 la cual contenía el valor del
segundo filtro y almacena el nuevo valor en W
Efectivamente podemos ver en simulación que nuestro valor ha sido rotado ahora tenemos el
segundo numero el cual vamos a mostrar en nuestro segundo display.
Volvemos a ir a la tabla traemos su valor equivalente y lo almacenamos en W para ser trasladado a
PORTD.
Podemos observar en nuestro 0x21 es nuestro segundo registro auxiliar el cual contiene el valor
filtrado y en nuestro PORTD el valor equivalente al numero filtrado después del giro con SWAP.
Ahora miramos un ejemplo en simulación el cual supera los 255 y asi entrar en en nuestro bucle
acarreo. Sumamos 1000000+10000000=1 00000000
Al efectuar nuestra suma nos damos cuenta que nuestro Bit1 del registro STATUS a cambiado de 0
a 1 debido a que hay un acarreo en nuestra suma y en w el valor correspondiente a la suma.
De esta manera nuestra instrucción:
Ya no saltara si no que se ejecutara llevándome al bucle acarreo
Nuestro bucle acarreo contiene un valor el cual será depositado en W para luego ser trasladado a
nuestro 3 display que esta conectado a nuestro puerto A.
Este valor es el equivalente a un 1 el cual es nuestro bit de acarreo ya que nuestro numero
máximo a sumar con números de 8 bits es 1xFF por lo tanto cada ves que haya acarreo se
prendera el numero 1 en nuestro 3 display.
Luego de esto seguirá el proceso antes visto el cual me permite filtrar y mostrar el resto del
numero en los otros displays.
RESTA
Volvemos a nuestro menú selección, pero en este caso vamos a seleccionar el bucleInicioRes,
pulsando nuestro pulsador 2 el cual está conectado a RE1.
Como podemos observar hicimos uso de lo visto anterior mente para detectar nuestro pulsador y
enviar nuestro valor a W y restarlo con el valor de nuestro puerto pulsado dos veces nuestro
pulsador resta(RE1)
Para este ejemplo vamos a restar el número 100-10000000 =1000 0100 (4-128=-124) y así nos
dará una resta con signo negativo. Utilizamos la instrucción SUB para restar el valor del puerto – el
valor que hay en W y lo Almacenamos en W para luego trasladarlo a un registro auxiliar.
En w tenemos el resultado de nuestra resta que es 10000100 como podemos observar el bit de
acarreo de nuestro registro STATUS esta en 0 ya que cuando la instrucción SUB se ejecuta y hay un
acarreo este se pone en 0.
Evaluamos el registro STATUS en nuestro bit de acarreo y como esta en 0 Procede a ejecutar el
bucle signo.
En este bucle hicimos un diseño de implementación para trasformar la resta que el
microcontrolador nos envía en complemento A2 y así poderla mostrar en nuestros displays de la
manera requería por nuestro laboratorio.
Como primera medida movimos a el registro W el valor binario de 00000001 el cual enviaremos al
PORTA y asi encender el segmento g el cual nos representará el signo, si nuestra resta no da
negativa este paso al bucle signo será omitido y se procederá a hacer los filtros ya vistos y así
mostrar nuestro resultado en nuestros displays.
Pasos resta sin signo
Pasos resta con signo:
Movimiento del valor 00000001 a PORTA
Nuestro microcontrolador nos devuelve una resta en A2 por lo tanto debemos hacer una
conversión la cual la hacemos en los siguientes pasos:
Movemos el valor binario 11111111 a nuestro registro W
Hacemos uso de una compuerta XOR entre W y el Resultado de la resta el cual esta almacenado en
Aux
Guardando este resultado en Aux
Ya tenemos nuestro número operado por nuestra XOR ahora necesitamos sumarle 1 para tener el
valor deseado, haciendo uso de la instrucción incf
Luego de esto usamos los filtros ya vistos y asi mostrar los otros valores en los otros displays.
CONCLUCIONES
En el proceso de diseño en nuestro hardware tuvimos algunas complicaciones por valores de
resistencias que nos estaban afectando el funcionamiento de nuestros displays.
Tuvimos que soldar algunas paticas extras a nuestros pulsadores para poder que encajaran bien en
nuestra protoboard ya que las que vienen de fábrica son demasiado frágiles y eso nos estaba
causando complicaciones cuando queríamos presionarlos.
Debido al uso de Displays de catado común debimos buscar en internet su configuración y su tabla
para mostrar los números los cuales se conforman al prender cada segmento.
En el proceso de programación del micro controlador debimos tener en cuenta que este trabaja de
manera secuencial por lo tanto debíamos usar pares que se veían reflejados en la implementación
de nuestros pulsadores.
Nuestro micro controlador nos arrojaba una resta en complemento A2 la cual con ayuda de la
resta de números binarios buscamos la manera de hacer su respectiva conversión y asi satisfacer
los requerimientos puestos por el tutor.
Nos pudimos dar cuenta que el trabajo duro tiene su recompensa las pocas horas de descanso y
las largas horas de trabajo aun en horario nocturno tuvieron su fruto al ver como el trabajo estaba
terminado con todos los requerimientos puestos por el profesor.
Con ayuda del tutor y los visto en clase se logro lo cometido, haciendo uso del material expuesto
por nuestro profesor y las indicaciones dadas por el en asesorías dadas antes de la entrega.
BIBLIOGRAFIA
http://angel-danny.blogspot.com/2010/05/suma-resta-multiplicacion-y-division-en.html
https://www.lawebdelprogramador.com/foros/Ensamblador/649100-restar-en-ensamblador.html
http://arantxa.ii.uam.es/~ig/practicas/enunciados/prac3/operacionescomplementoa2.pdf
https://www.taringa.net/posts/info/14813841/Resta-en-el-sistema-de-complemento-A-2.html
https://www.slideshare.net/faurbano/clase-instrucciones-pic16f877a
Descargar
Fichas relacionados
Crear fichas