Está en la página 1de 6

LECCIN 6: DESCRIPCIN GENERAL

EJERCICIO 6.1
Escribir un programa que sume dos valores inmediatos (p.e. los decimales 12 y 7)

EJERCICIO 6.2
Escribir un programa que resuelva la ecuacin: (A + B) - C

EJERCICIO 6.3
Escribir un programa que sume dos nmeros de 16 bits A y B.

EJERCICIO 6.4
Escribir un programa que reste dos nmeros, A - B, de 16 bits cada uno.

LECCIN 6: DESCRIPCIN GENERAL

;EJERCICIO 6.5
;
;(Para introducir un modo de realizar comparaciones ya que no existe una instruccin
;especfica de comparacin. Se introduce la instruccin clrf)
;
;Escribir un programa que compare dos nmeros A y B. Si son iguales, el resultado
;debe ser 0. Si A > B, el resultado debe ser la diferencia A - B, y si A < B el
;resultado debe ser la suma A + B.
;
List
p=16F84
;Tipo de procesador
include
P16F84.INC
;Incluimos fichero de smbolos y
etiquetas
NumeroA
NumeroB
Resultado

Inicio

Besmayor

equ
equ
equ

0x20
0x21
0x22

;Designamos posiciones de memoria para...


;..almacenar los dos nmeros que vamos a...
;..comparar y el resultado de la comparacin

org
goto

0x00
Inicio

;Vector de Reset

org

0x05

;Saltamos el vector de interrupcin

movlw
movwf
movlw
movwf

datoA
NumeroA
datoB
NumeroB

movf
subwf

NumeroB,W
NumeroA,W

btfsc
goto
btfsc
goto

STATUS,Z
Iguales
STATUS,C
Aesmayor

movf

NumeroA,W

addwf
movwf
goto

;cargamos los dos nmeros que vamos...


;...a comparar en las posiciones de...
;...la memoria de datos que hemos...
;...designado para ello
;Carga el numero B en W
;lo resta del numero A y el...
;...resultado lo almacena en W
;la resta da cero? (A=B)
;S, son iguales, saltamos
;No. Miramos el acarreo
;C=1, la resta es positiva: (A > B)

;C=0, la resta es negativa: (B > A)...


;...cargamos el numero A en W
NumeroB,W
;y lo sumamos con B
Resultado
;Guarda el resultado...
;...en el registro designado
Stop

Aesmayor

movwf
goto Stop

Resultado

;dem al anterior

Iguales

clrf

Resultado

;Pone a 0 el resultado

end

;Fin del programa fuente

LECCIN 6: DESCRIPCIN GENERAL

;EJERCICIO 6.6
;
;(Para manejar el direccionamiento indirecto utilizando el "registro" INDF. Introduce
;otra instruccin de salto condicional: decfsz).
;
;Escribir un programa para almacenar el valor 33 en 15 posiciones contiguas de la
;memoria de datos, empezando en la direccin 0x30
List
include
etiquetas

p=16F84
;Tipo de procesador
P16F84.INC
;Incluye fichero de smbolos y

Contador

equ

Primera

equ

Inicio

Bucle

0x20
0x30

;designamos la posicin 20 de la memoria...


;...de datos para la variable contador
;designa la primera posicin de memoria a partir de
;...la cual se va a almacenar el valor indicado

org
goto

0x00
Inicio

;Vector de Reset

org

0x05

;Saltamos el vector de interrupcin

movlw
movwf
movlw
movwf
movlw

d'15'
Contador
Primera
FSR
0x33

;Carga el contador con el decimal 15 (son...


;...15 posiciones donde almacenar)

movwf

INDF

incf
decfsz

goto
end

;FSR apunta a la posicin 30 inicialmente


;Carga en W el valor a almacenar

;lo almacena en la posicin...


;...indicada por FSR
FSR, F
;Incrementa FSR que apunta ahora...
;...a la posicin siguiente
Contador, F ;Decrementa el contador, almacena el...
;...resultado en l mismo y comprueba...
;...si ha llegado a cero
Bucle
;no ha llegado, sigue
;s ha llegado, fin del programa fuente

LECCIN 6: DESCRIPCIN GENERAL

;EJERCICIO 6.7
;
;(Convierte un valor binario a BCD, muy til en Electrnica Digital. Introduce las
;instrucciones: xorlw, swapf e iorwf).
;
;Escribir un programa que convierta un nmero de 8 bits, escrito en binario
;natural, en su equivalente en BCD.
;
;El proceso es comprobar si el nmero es menor que d'10'. Si es as, su binario coincide
;con su BCD. Si no es as, le restamos d'10', incrementamos el BCD de las decenas y
;repetimos la operacin sucesivamente. Cuando stas llegan a 10, las ponemos a cero e
;incrementamos el BCD de las centenas (el nmero mximo que nos podemos encontrar
;es: 1111 1111 = FF = 255). Como la instruccin incf suma "1" al contenido de f, es
;decir, acta sobre el bit de menos peso de f, tendremos que intercambiar los nibbles
;cuando se trate de la cifra BCD de las decenas.
;
;Se utiliza la resta en complemento a dos, es decir, la resta equivale a la suma del
;minuendo con el complemento a dos del sustraendo. El complemento a dos se obtiene
;complementando todos los bits (complemento a 1) y sumando una unidad.
;
;
;Inicializacin
List
include
etiquetas
BCD_H
BCD_L
Provisional
temporal

Inicio

p=16F84
;Tipo de procesador
P16F84.INC
;Incluye fichero de smbolos y

equ
equ
equ

0x20
0x21
0x22

;Designamos posiciones de la memoria para..


;almacenar el nmero BCD dividido en byte alto y..
;byte bajo y un fichero de almacenamiento

org
goto

0x00
Inicio

;Vector de Reset

org
movlw
clrf
clrf

0x05
dato
BCD_L
BCD_H

;Saltamos el vector de interrupcin


;cargamos en W el dato a convertir
;borramos los registros donde se...
;...almacenar el resultado BCD

;Vamos a restar 10 para ver si el nmero en binario es mayor o no. Como la resta se
;hace en complemento a dos, se tiene: -10 = - 0000 0101 (10)1 = 1111 0101
; (10)2 = 1111 0110 = F6. Si no hay acarreo es que el sustraendo es mayor que el
;minuendo.

LECCIN 6: DESCRIPCIN GENERAL

;Programa principal
BCD0

;restamos 10 y almacenamos el...


;...resultado en W
btfss
STATUS,C ;hay acarreo?
goto
BCD2
;No. El nmero es menor de 10.
movwf
Provisional ;S. El nmero es mayor de 10. Guardamos..
;...provisionalmente el resultado de la resta
incf
BCD_L, F ;Incrementa el BCD de las decenas, lo...
movf
BCD_L,W
;...guarda y lo copia en el W
xorlw
b'00001010' ;miramos a ver si...
btfss
STATUS,Z ;...ya lleg al decimal 10
goto
BCD1
;No lleg.
clrf
BCD_L
;S lleg. Borramos BCD_L
incf
BCD_H, F
;Incrementamos el BCD de las centenas

BCD1
provisional

BCD2

addlw

0xf6

movf

Provisional, W

goto

BCD0

;Recupera el resultado
;Continua la operacin.

addlw H'0A'

;le volvemos a sumar las 10 que le quitamos y...


;...almacenamos el resultado en W (W almacena..
;..entonces la cifra de las unidades)
BCD_L, F
;intercambia los nibbles, el nmero que
;..BCD_L pasa a ser el BCD de las decenas.
;..nibble bajo, el de unidades, es cero
BCD_L, F
;aadimos las unidades al nibble bajo, con lo que..
;..en BCD_L quedan almacenadas las unidades y..
;..las decenas

swapf
almacenaba
El..
iorwf

end

;Fin del programa fuente

LECCIN 6: DESCRIPCIN GENERAL

;EJERCICIO 6.8
;
;(Convierte un nmero de cuatro bits en binario natural en su equivalente en cdigo
;Gray, muy til en las tablas de Karnaugh. Introduce las instrucciones call y retlw).
;
;Escribir un programa que convierta un nmero de 4 bits escrito en binario
;natural en su equivalente en cdigo Gray.
List
include
etiquetas
Gray

Inicio

p=16F84
;Tipo de procesador
P16F84.INC
;Incluye fichero de smbolos y

equ

0x20

;Designamos posicin de memoria para el resultado

org
goto

0x00
Inicio

;Vector de Reset

org

0x05

;Saltamos el vector de interrupcin

movlw

b'binario'
;Carga en W el valor binario que queremos
;convertir a Gray
Tabla
;saltamos a la tabla de conversin
Gray
;guarda el resultado
fin
PCL, F
;suma al PC el nmero binario. El PC
;..y apunta a la instruccin correspondiente..
;..que ser la que se ejecute a continuacin
b'00000000' ;retornamos cargando en W el cdigo Gray del 0
b'00000001' ;retornamos cargando en W el cdigo Gray del 1
b'00000011' ;retornamos cargando en W el cdigo Gray del 2
b'00000010' ;retornamos cargando en W el cdigo Gray del 3
b'00000110' ;retornamos cargando en W el cdigo Gray del 4
b'00000111' ;retornamos cargando en W el cdigo Gray del 5
b'00000101' ;retornamos cargando en W el cdigo Gray del 6
b'00000100' ;retornamos cargando en W el cdigo Gray del 7
b'00001100' ;retornamos cargando en W el cdigo Gray del 8
b'00001101' ;retornamos cargando en W el cdigo Gray del 9
b'00001111' ;retornamos cargando en W el cdigo Gray del 10
b'00001110' ;retornamos cargando en W el cdigo Gray del 11
b'00001010' ;retornamos cargando en W el cdigo Gray del 12
b'00001011' ;retornamos cargando en W el cdigo Gray del 13
b'00001001' ;retornamos cargando en W el cdigo Gray del 14
b'00001000' ;retornamos cargando en W el cdigo Gray del 15

call
movwf
fin
Tabla
salta...

goto
addwf

retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
end

;Fin del programa fuente

También podría gustarte