Post on 10-Feb-2018
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
1/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
1. Objetivos
a. General
ensamblador
b. Especficos
del PIC16F877A a travs del conjunto de
instrucciones RISC de esta familia de microcontroladores.
2. Fundamento Terico:
Modelo de Programacin
ALU Unidad Aritmtica-Lgica
entrada
peraciones segn el cdigo que reciba en las entradas de control
Registro de trabajo W
Este es el registro de trabajo principal, se comporta de manera similar al
acumulador en los microprocesadores. Este registro
participa en la mayora de las instrucciones. Est directamente relacionado con la
Unidad Aritmtica y Lgica ALU.
Registro de Estado(STATUS)
microcontrolador
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
2/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
e la ALU, es estado del
RESET y elbanco elegido para los datos de la
memoria (SRAM)
bit 7 IRP: Registro de seleccin de Banco de la memoria de Datos (usado para direccionamiento
indirecto)1 = Bank 2, 3 (100h - 1FFh)0 = Bank 0, 1 (00h - FFh)bit 6-5 RP1:RP0: Registro de seleccin de banco de la memoria de Datos (usado para direccionamientodirecto)00 = Bank 0 (00h - 7Fh)01 = Bank 1 (80h - FFh)10 = Bank 2 (100h - 17Fh)11 = Bank 3 (180h - 1FFh)bit 4 TO: bit de Timeout1 = Despus de encender, una instruccin CLRWDT , o una instruccin SLEEP
0 = ocurri un timeout de WDTbit 3 PD: bit de Apagado1 = Despus de encendido o por una instruccin CLRWDT0 = Por una ejecucin de la instruccin SLEEPbit 2 Z: Zero bit
1 = El resultado de una operacin aritmtica fue 0.0 = El resultado de una operacin aritmtica no fue 0.bit 1 DC: Digito de acarreo1 = Hubo acarreo del cuarto bit de orden bajo en el resultado.0 = No hubo acarreo del cuarto bit de orden bajo en el resultado.bit 0 C: bit de acarreo o prstamo1 = Ocurri acarreo en el bit ms significativo del resultado.
0 = No ocurri acarreo en el bit ms significativo del resultado.
Organizacin de la memoria RAM del PIC16F877A
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
3/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
BANCO 0:
- TMR0: Registro del temporizador/contador de 8 bits.
- PCL: Byte menos significativo del contador de programa (PC).- STATUS: Contiene banderas (bits) que indican el estado del procesador despus de una operacin
aritmtica/lgica.
- FSR: Registro de direccionamiento indirecto.
- PORTA, PORTB, PORTC, PORTD, PORTE: Registro de puertos de E/S de datos. Conectan con los
pines fsicos del micro.
- PCLATH: Byte alto (ms significativo) del contador de programa (PC).
- INTCON: Registro de control de las interrupciones.
- ADRESH: Parte alta del resultado de la conversin A/D.
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
4/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
- ADCON0: Controla la operacin del mdulo de conversin A/D
BANCO 1:
- OPTION: Registro de control de frecuencia del TMR0.
- TRISA, TRISB, TRISC, TRISD. TRISE: Registros de configuracin de la operacin de los pines de los
puertos.
- ADRESL: Parte baja del resultado de la conversin A/D.
- ADCON1: Controla la configuracin de los pines de entrada anloga.BANCO 2:
- TMR0: Registro del temporizador/contador de 8 bits.
- PCL: Byte menos significativo del contador de programa (PC).
- FSR: Registro de direccionamiento indirecto.
- EEDATA: Registro de datos de la memoria EEPROM.
- EEADR: Registro de direccin de la memoria EEPROM.
- PCLATH: Byte alto (ms significativo) del contador de programa (PC).
- INTCON: Registro de control de las interrupciones.
BANCO 3:
- OPTION: Registro de control de frecuencia del TMR0.
- EECON1: Control de lectura/escritura de la memoria EEPROM de datos.
- EECON2: No es un registro fsico.
05h o PORTA: Puerto de Entrada/Salida de 6 bits Este puerto, al igual que todos sus similares en losPIC, puede leerse o escribirse
como si se tratara de un registro cualquiera. El registro que controla el sentido (entrada o salida) de los pines
de este puerto est
localizado en la pgina 1, en la posicin 85h y se llama TRISA. El puerto A tambin puede ser configurado
para que trabaje como
entradas anlogas para el convertidor Anlogo a Digital interno del microcontrolador.
06h o PORTB: Puerto de entrada/salida de 8 bits. Al igual que en todos los PIC, este puede leerse o
escribirse como si se tratara de un
registro cualquiera; algunos de sus pines tienen funciones alternas en la generacin de interrupciones. El
registro de control para la
configuracin de la funcin de sus pines se localiza en la pgina 1, en la direccin 86h y se llama TRISB.
Puede ser configurado tambinpara cumplir otras funciones.
07h o PORTC: Puerto de entrada/salida de 8 bits. Al igual que en todos los PIC, este puede leerse o
escribirse como si se tratara de un
registro cualquiera; algunos de sus pines tienen funciones alternas. El registro de control para la
configuracin de la funcin de sus
pines se localiza en la pgina 1, en la direccin 87h y se llama TRISC. Puede ser configurado tambin para
cumplir otras funciones.
08h o PORTD: Puerto de entrada/salida de 8 bits. Al igual que en todos los PIC, este puede leerse o
escribirse como si se tratara de un
registro cualquiera; algunos de sus pines tienen funciones alternas cuando se utiliza el micro en modo
microprocesador. El registro de
control para la configuracin de la funcin de sus pines se localiza en la pgina 1, en la direccin 88h y se
llama TRISD. Puede ser
configurado tambin para cumplir otras funciones.
09h o PORTE: Puerto de Entrada/Salida de 3 bits. Este puerto, al igual que todos sus similares en los
PIC, puede leerse o escribirse
como si se tratara de un registro cualquiera. El registro que controla el sentido (entrada o salida) de los pines
de este puerto est
localizado en la pgina 1, en la posicin 89h y se llama TRISE. El puerto E tambin puede ser configurado
para que trabaje como
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
5/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
entradas anlogas para el convertidor Anlogo a Digital interno del microcontrolador o para que maneje las
seales de control en el
modo microprocesador.
85h o TRISA: Registro de configuracin del puerto A. Como ya se mencion, es el registro de
control para el puerto A. Un cero en el
bit correspondiente al pin lo configura como salida, mientras que un uno lo hace como entrada.
86h o TRISB: Registro de configuracin del puerto B. Control del puerto B. Son vlidas las mismasconsideraciones del registro TRISA.
87h o TRISC: Registro de configuracin del puerto C. Control del puerto C. Son vlidas las mismas
consideraciones del registro TRISA.
88h o TRISD: Registro de configuracin del puerto D. Control del puerto D. Son vlidas las mismas
consideraciones del registro TRISA.
89h o TRISE: Registro de configuracin del puerto E. Control del puerto E. Son vlidas las mismas
consideraciones del registro TRISA.
020h a 7Fh: Registros de propsito general. Estas 96 posiciones estn implementadas en la memoria
RAM esttica, la cual conforma el
rea de trabajo del usuario. Pueden ser utilizadas para almacenar cualquier dato de 8 bits.
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
6/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
Tcnicas de programacin en ensambladorMovimiento de datosEl juego de instrucciones reducido, y su tamao de 14 bits, hacen que el PIC16F877A tenga una serie de
restricciones. Por un lado no
se pueden especificar dos registros dentro de una instruccin. Cada registro necesita 7 bits para especificar
la direccin, pero tambin
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
7/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
hay que especificar el cdigo de la instruccin y qu hacer con ella. La solucin es realizar todo a travs del
registro de trabajo o w que
no necesita direccin y est situado dentro de la CPU del microcontrolador. Una transferencia de un registro
a otro necesitara dos
instrucciones. Supongamos que tenemos que transferir un dato al puerto B:
MOVF DATO, W ; copia el contenido del registro DATO en W
MOVWF PORTB ; copia el contenido de W en el Puerto BNota: En todos los ejemplos consideramos que w = 0 y que f = 1, esto significa que MOVF DATO, W es lo
mismo que MOVF DATO, 0
La primera instruccin tiene la forma MOVF f,d que copia el registro f en el destino especificado por d (w
en este caso). La segunda
instruccin simplemente mueve cualquier dato contenido en w en el registro f, que en este caso es el
puerto B.
El registro DATO permanece invariable en la primera instruccin y w permanece invariable en la segunda,
de manera que estas
instrucciones se parecen ms a una copia que a un movimiento de datos.
Las instrucciones con literales no tienen espacio para contener la direccin de un registro, por eso debemos
utilizar el registro de
trabajo w para cargar un registro con un literal y tambin se necesitan dos instrucciones.
MOVLW 0xAA ; coloca el valor 10101010 en WMOVWF DATO ; copia W en el registro DATO
Esto mismo se aplica cuando se usan operaciones booleanas, de suma y de resta entre literales y registros.
Todas necesitan dos
instrucciones:
MOVLW k ; copia el literal en WSUBWF f,d ; copia el resultado de restar W de f en d
Supongamos que queremos poner a cero el nibble inferior
MOVLW 0xF0 ; ponemos una mascara ('11110000')ANDWF DATO, f ; el resultado de DATO AND 0xF0 se coloca en DATO
Las instrucciones de un solo operando son fciles de entender:
CLRF f, Pone todos los bits del registro f a cero
CLRW, Pone todos los bits de W a cero
BCF f,b, Pone a cero el bit b del registro f
BSF f,b, Pone a cero el bit b del registro f
AritmticaDentro de los microcontroladores PIC se cuenta con instrucciones aritmticas tales como:
Para efectuar operaciones de suma:
o ADDWF f,d, Suma el valor de w al registro f guardndolo en w o f
o ADDLW k, Suma el valor de w al literal k guardndolo en w
Para efectuar operaciones de resta:
o SUBWF f,d, Resta al valor del registro f el valor de w (f-w) guardndolo en w o f
o SUBLW k, Resta al valor del literal k el valor de w (k-w) guardndolo en w
Para realizar multiplicaciones por 2.
o RLF f,d, Rota a la izquierda el valor del registro f guardndolo en w o f
Para realizar divisiones entre 2.
o RRF f,d, Rota a la derecha el valor del registro f guardndolo en w o f
Hasta este punto podramos ver el conjunto de instrucciones un poco limitado. Sin embargo, utilizando las
tcnicas apropiadas de
programacin podemos obtener operaciones ms complejas.
Restar del acumuladorVisto lo anterior, para restar un valor al acumulador se utiliza ADDLW y se le suma el complemento a 2 del
valor a restar.
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
8/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
Realizar la operacin w - 1
Para restar 1 al acumulador se utiliza ADDLW 0xFF, en lugar de SUBLW 0x1 porque esta instruccin no
resta el literal a w, sino al
revs, al literal le resta w. Por lo tanto para restar un literal de w debemos sumar el complemento a 2 del
literal con w, en nuestro caso
el literal es 1 (0000 0001 b) y el complemento a 2 de 1 es FF h:
0000 00011111 1110+1-----------1111 1111 (FF h.)
Banderas (Flags)Las banderas se utilizan para dar informacin adicional cuando se realizan operaciones lgicas y aritmticas
dentro del
microcontrolador. As, podremos tomar decisiones segn el valor de cada una de las banderas. Existen
diferentes tipos de banderas en
un microcontrolador; entre ellas tenemos:
Las banderas en la sumaLos registros bsicos del microcontrolador PIC16F84A tienen una longitud de 8 bits expresados en forma
binaria, lo cual quiere decirque el nmero mximo expresado en forma decimal ser el 255. En la suma existen tres tipos de banderas
que pueden
proporcionarnos mayor informacin del resultado. Estas banderas son denominadas CARRY (C), Acarreo
de Dgito (DC) y el Estado Cero
(Z ). Todas estas banderas son activadas segn sea el caso.
Por ejemplo, en la suma, la bandera CARRY se coloca en "1" cuando el resultado supera el nmero 255 y
permanecer en "0"
indicando que no se present ningn overflow; es decir que el resultado de la suma fue menor que el
mximo permitido.
Por otro lado, existe otra bandera denominada Acarreo de Dgito DC que expresa lo que sucede con los
4 Bits menos significativos; es
decir, si los cuatro bits menos significativos sobrepasa al numero 15 (2 elevado a 4, incluyendo el cero)expresado en forma decimal,
entonces la bandera DC = 1, en el caso contrario ser "0".
Finalmente la bandera de estado Z se activa cuando la operacin aritmtica da como resultado un "1"; de lo
contrario se coloca en
"0".
Las banderas en la restaEn la resta de dos nmeros la bandera CARRY se coloca en "1" cuando el resultado de la operacin sea un
nmero positivo, o se pone
en cero para el caso contrario. Esto tan sencillamente quiere decir por ejemplo que si tenemos A=20 y B=10
donde X=A-B; el resultado
ser X=10 (nmero positivo); para el caso contrario si tenemos A=10 y B=20 donde X=A-B entonces X= - 10,
obtenindose un resultado
negativo.La bandera de acarreo de dgito DC se colocar en "1" cuando los cuatro bits menos significativos del
registro w sea menor que los
cuatro bits menos significativos del registro que se desea restar, en caso contrario se colocar un cero. La
bandera de estado Z
solamente se activar cuando ambas cantidades sean iguales.
Operaciones de comparacin
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
9/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
Las operaciones de comparacin utilizan la instruccin de resta. La resta no es mas que sumar al minuendo
el complemento a 2 del
sustraendo.
IgualdadSupongamos que estamos intetando determinar si un nmero es igual a 2.MOVLW .2
SUBWF N, W ; W = N - 2BTFSS STATUS, ZGOTO NO_ES_IGUALGOTO ES_IGUAL
Al nmero a comprobar (N) se le resta la cantidad de comparacin (2) que se ha guardado en W. El resultado
vuelve a guardarse en
W para salvaguardar la variable N. Finalmente se comprueba la bandera Zero del registro Status.
Mayor que y menor queSupongamos que estamos intetando determinar si un nmero mayor omenor de 2.MOVLW .2SUBWF N, W ; W = N - 2BTFSS STATUS, C
GOTO MENORGOTO MAYOR_IGUAL
Aqui se comprueba la bandera C. Si Carry es 1 el resultado es positivo y si es 0 es negativo. As, si N
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
10/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
figuran las llamadas (CALL).
La instruccin CALLLa instruccin CALL (llamada a subrutina) consigue que la ejecucin del programa contine en la direccin
donde se encuentra la
subrutina a la que hace referencia. Es similar a GOTO pero coloca en la pila la direccin de la siguiente
instruccin que se debe ejecutar
despus de terminar con la subrutina.La subrutina finaliza con la instruccin RETURN (retorno de la subrutina) que retoma la direccin guardada
en la pila y la coloca en el
contador de programa PC continuando el flujo de control con la instruccinque que sigue a CALL .
En la familia PIC de gama media la pila tiene ocho niveles de memoria del tipo LIFO (Last In, First Out, ltimo
en entrar, primero en
salir). Si se produce la llamada a una subrutina durante la ejecucin de otra subrutina, la direccin de
retorno de esta segunda es
colocada en la cima de la pila sobre la direccin anterior. Esta segunda direccin es la primera en salir de la
pila mediante la instruccin
RETURN .
Con la pila de ocho niveles, una subrutina puede llamar a otra y sta, a su vez, llamar a otra hasta un
mximo de ocho.
RamificacinCuando se tiene que solucionar un diagrama de flujo como el de la siguiente figura, en el cual tenemos una
accin o ninguna segn la
respuestas a una pregunta, se plantea la solucin siguiente.
Como ejemplo consideramos lo siguiente; el puerto A se configura como entrada y el puerto B como salida
de manera que las salidas
del puerto B dependan del estado que introduzcamos al puerto A:
....Bucle btfsc PORTA,0 ; si el bit 0 del puerto A esta a 1 se ejecuta'Accion1' pero si escall Accion1 ; 0 se salta 'call Accion1' y se contina en la siguienteinstruccin
btfsc PORTA,1 ; si el bit 1 del puerto A esta a 1 se ejecuta 'Accion2'pero si escall Accion2 ; 0 se salta 'call Accion1' y se contina en la siguienteinstruccin....goto Bucle ; El ciclo se repiteAccion1 movlw B'00010001'movwf PORTBreturnAccion2 movlw B'00100010'
movwf PORTBreturn.....
Ramificacin mltipleCuando se tiene que solucionar un diagrama de flujo como el de la siguiente figura, en el cual tenemos tres
posibles respuestas a una
pregunta, se plantean las soluciones aqu presentadas.
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
11/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
Existen varias formas de resolver en unprograma este problema:
Una forma posible es comparando uno por uno los valores de las diferentes opciones almacenadas en
memoria RAM en una variable
llamada OPCION
MOVLW OPCION1XORWF OPCION,0 ; verificacin de OPCION respecto a WBTFSC STATUS,Z ; verificando la bandera ZGOTO ACCION1MOVLW OPCION2XORWF OPCION,0 ; verificacin de OPCION respecto a WBTFSC STATUS,Z ; verificando la bandera ZGOTO ACCION2MOVLW OPCION3XORWF OPCION,0 ; verificacin de OPCION respecto a WBTFSC STATUS,Z ; verificando la bandera ZGOTO ACCION3ACCION1 ......... ; instrucciones de la Accin 1..................GOTO ENCUENTROACCION2 ......... ; instrucciones de la Accin 2
.........
.........GOTO ENCUENTROACCION3 ......... ; instrucciones de la Accin 3..................ENCUENTRO ; sitio de encuentro......... ; continuacin del programa
3. Materiales y Equipos
a. Herramientas Software
Compilador: MikroBasic Pro for PIC y MikroC Pro for PIC
-Isis
b. Herramientas Hardware
Ninguno
c. Componentes
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
12/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
Ninguno
4. Diagrama Esquemtico para armado en protoboard
6. Cdigo fuente MikroBasic-ASM
Ejemplo1:Se obtiene un dato de los 4 bits inferiores del puerto D (RD0RD3). Se suma una
constante 5 al dato y se muestra en los 4 bits inferiores del puerto B (RB0RB3)
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
13/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
Ejemplo2:Compara el dato del puerto de Entrada con el nmero 13. Si el Dato es
igual a 13, se encienden todos los leds de Salida. Si el dato es distinto de 13
se activan los leds pares y se apagan los impares.
Ejemplo3: Se obtiene un dato de los 4 bits inferiores del puerto D de Entrada
(RD0RD3). RD0 no es afectado y reaparece en RB0. RD1 siempre aparece en RB1
como Cero.RD2 siempre aparece en RB2 como Uno. Finalmente RD3 aparece invertido
en RB3. Esta operacin se repite infinitamente.
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
14/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
7. Procedimiento Experimental
Modificando, si es necesario, el circuito esquemtico y usando el compilador MikroBasicPro for PIC realizar
los siguientes
programas:
a) Se obtiene un dato X de los 4 bits inferiores del puerto D de (RD0RD3) y un datoY de los 4 bits superiores
del puerto D
(RD4RD7). Se multiplica X*Y, el resultado se muestra en los 8 bits del puerto B (RB0RB7)
b) Se obtiene un dato X de los 4 bits inferiores del puerto D de Entrada (RD0RD3). y un dato Y de los 4 bits
superiores del puerto
D de Entrada (RD4RD7). Se comparan X e Y. Si X=Y se enciende elled en RB0, si X>Y se enciende el led en
RB1 y si X
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
15/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
III. Conclusiones
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
16/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.
7/22/2019 PRACTICA 01: Operaciones con Puertos I/O en Ensamblador
17/17
INFORME DE LABORATORIO DE MICRO_I
REALISADO POR ANGHEL COUSIN C. Y. M. Q.