Está en la página 1de 8

Juan Francisco Ayala Lozano

Microcontroladores
Reyes Olgun Arturo
Matricula 1313083134
Mecatrnica 180501
18/02/2015

Marco terico
Instrucciones de suma
La suma se realiza de forma aritmtica binaria pura sin signo y afecta a los flags
del STATUS de la siguiente forma

Al flag Z. El bit Z se pone en 1 si el resultado de la operacin es cero


(b00000000) y se pone Z en 0 si el resultado tiene cualquier otro valor.
Al flag C. Si hay un acarreo del bit 7, es decir si el resultado es mayor que
b11111111 (255 en decimal) el bit c se activa en 1 en caso contrario resulta
C=0
Al flag DC. Si hay un acarreo del bit 3 al 4, es decir que la suma de las dos
mitades(nibbles) menos significativa(bits 0 a 3) resulta mayor que 15, el bit
DC se pone a 1, en caso contrario se pone a 0

Addlw k (add literal to W). Suma el contenido del registro W con el literal o
constante k, almacena el resultado en W. si se produce acarreo el flag C se pone a
1
Addwf f,d (add W and f). Suma el contenido en el registro W al contenido del
registro f almacena el resultado en W si d = 0 y en el registro f si d = 1. Se produce
un acarreo en flag C se pone a 1.
Iorlw, Poner a uno varios bits del registro W sin alterar el resto, se usa la operacin
OR, poniendo en la operacin inmediato un 1 en aquellos bits que se desea poner
a 1, mientras que los restantes se ponen a 0. A la contante con la que se hace la
operacin OR se llama mascara.
Xorlw, Invertir varios bits de W sin alterar el resto, se usa la operacin lgica XOR
poniendo en el operador inmediato un 1 en aquellos bits que se desea invertir
mientras que los restantes se ponen a 0. A la constante con la que se hace la
operacin XOR se la llama mascara

Instruccin
Elemental_01.asm; Por el puerto B se obtiene el dato de las cinco lneas del
puerto A, al que se esta conectando un array de interruptores, sumndole un valor
constante, por ejemplo 74 decimal. Es decir: (PORTB) = (PORTA)+Constante.
Programa y Diagrama de flujo

__CONFIG _HS_OSC
LIST P=16F877A
INCLUDE <P16F877A.INC>
ORG 0x000
Inicio bsf
STATUS,RP0
CONF_ADCON1 equ b'00000110'
clrf
TRISB
bsf
STATUS,RP0
bcf
STATUS,RP1
movlw CONF_ADCON1
movwf ADCON1
clrf
TRISB
clrf
TRISC
movlw
b'11111111'
movwf
TRISA
bcf
STATUS,RP0
bcf
STATUS,RP1
Principal
movf PORTA,W
addlw d'74'
movwf
PORTB
goto Principal
END

Evidencias

Elemental_01.as
m
Configura
PORTA como
entrada
PORTB como salida

Declara PORTA
como W
Suma W ms

Mueve W a PORTB

Entrada de datos PORTA = b00000000 ms constante 74, Salida PORTB =


b01001010

Entrada de datos PORTA = b11111111 mas constante 74, salida PORTB =


b10001010

Instruccin
Elemental_03.asm Por el puerto B se obtiene el dato introducido por el puerto A,
pero los bits pares de la salida se fijan siempre en 1.
Codigo y digrama de flujo
__CONFIG _HS_OSC
LIST P=16F877A
INCLUDE <P16F877A.INC>

Elemental_03.as
m

ORG 0x000
Inicio bsf
STATUS,RP0
CONF_ADCON1 equ b'00000110'
clrf
TRISB
bsf
STATUS,RP0
bcf
STATUS,RP1
movlw CONF_ADCON1
movwf ADCON1
clrf
TRISB
clrf
TRISC
movlw
b'11111111'
movwf
TRISA
bcf
STATUS,RP0
bcf
STATUS,RP1

Declara
PORTA como entrada
PORTB como salida

Mueve el PORTA a W
Solo cambia datos
declarados 0

Principal
movf PORTA,W
iorlw b'01010101'
movwf
PORTB
movwf
PORTC
goto Principal

Mueve w a
PORTB
END

END

Evidencias

Cuando PORTA = b00000000 la salida PORTB = b0101010101

Cuando PORTA = b11111111 la salida PORTB = b11111111

Instruccion
Elemental_05.asm: Por el Puerto se obtiene el dato del Puerto A invertidos los
unos y los ceros
Programa y diagram de flujo

__CONFIG _HS_OSC
LIST P=16F877A
INCLUDE <P16F877A.INC>
ORG 0x000
Inicio bsf
STATUS,RP0
CONF_ADCON1 equ b'00000110'
clrf
TRISB
bsf
STATUS,RP0
bcf
STATUS,RP1
movlw CONF_ADCON1
movwf ADCON1
clrf
TRISB
clrf
TRISC
movlw
b'11111111'
movwf
TRISA
bcf
STATUS,RP0
bcf
STATUS,RP1
principa
movf PORTA,W
xorlw b'11111111'
movwf
PORTB
movwf
PORTC
goto Principal
END

Elemental_05.as
m
Declara
PORTA como
entrada
PORTB como salida
Mueve PORTA a
Invierte W

Mueve W a
PORTB
END

Evidencia
Cuando PORTA = b00000000 la salida PORTB = b11111111

Cuando PORTA = b11111111 la salida PORTB = b00000000