Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Ricardo1950 en 23 de Marzo de 2011, 16:30:50
Título: problemas con operacion logica and
Publicado por: Ricardo1950 en 23 de Marzo de 2011, 16:30:50
Hola estoy intentando que el pic 16f84 haga algunas operaciones sencillas para incorporarlas a un programita un poco mas complejo pero al querer simular con MPLAB 8.1 no logro que funcione la operacion logica AND, si lo hago sumando el multiplicando tantas veces como el multiplicador va muy bien usando la operacion logica ADDF. les envio una copia de mi microprograma para que me deis algunas sugerencias. gracias
org 00h bcf status,5 clrf multiplicando clrf resultado clrf multiplicador movlw 19h ;cargo en w 25 dec movwf multiplicando ;paso w a multiplicando movlw 08h ;cargo w con 8 dec (multiplicador) movwf multiplicador ; realiza el producto entre w y multiplicador (ojo esto no va aqui´) movfw multiplicador ;este paso lo hice para intentar que lo que carga el w sea un registro en lugar de un literal, por si era eso lo que falla andwf multiplicando movfw multiplicando ; cargo multiplicador en acumulador movwf resultado ; paso a resultado ( estos dos pasos de pueden obviar porque el resultado mirando en Wach se lo ve en multiplicando) end
En primera instancia lo intenté desde el momento en que cargo w con 8 dec. y donde dice realiza el producto entre w y multiplicador, en lugar de movwf multiplicador ponia andwf multiplicador pero tampoco funcionó . Otra pregunta se pueden hacer operaciones mayores de 255 dec?
Título: Re: problemas con operacion logica and
Publicado por: AngelGris en 23 de Marzo de 2011, 18:26:27
¿Cuál es el resultado obtenido como para saber que no te funcionó la and?
Referido a operaciones mayores a 8 bits (255 dec), sí se puede. Solo hay que testear el bit de CARRY del registro STATUS.
Por ejemplo, se podría sumar 250 + 25 y almacenar el resultado en el registro (variable) que estemos usando. Dicha variable valdrá 19, pero se habrá seteado el bit de CARRY.
En el siguiente ejemplo variableL serían los 8 bits menos significativo y variableH los 8 bits mas significativos
Código: ASM
movlw 250
movwf variableL
movlw 25
addwf variableL,F ; hago la suma y lo almaceno en variable
btfsc STATUS,CARRY ; testeo para saber si hubo acarreo
incf variableH ; si hubo acarreo incremente la parte alta
......; si no hubo continuo acá y por lo tanto no se incrementa la parte alta
........
Título: Re: problemas con operacion logica and
Publicado por: mtristan en 23 de Marzo de 2011, 19:52:58
.
Tal vez la elección de los números te está confundiendo: 19h and 8h = 8h :mrgreen:. Podrás probar con AAh y 55h (AAh and 55h = 0h) para estar seguro... Saludos.
Título: Re: problemas con operacion logica and
Publicado por: AngelGris en 23 de Marzo de 2011, 19:58:41
Tal vez la elección de los números te está confundiendo: 19h and 8h = 8h :mrgreen:. Podrás probar con AAh y 55h (AAh and 55h = 0h) para estar seguro... Saludos.