PIC 16f877a guía programación Ensamblador- Incompleto

10
INSTRUCCIONES DE LOS MICROCONTROLADORE PIC 16F87XX EN LENGUAJE ENSAMBLADOR(Incompleto ) MUÑOZ CANALES RICARDO ALONSO – [email protected] Instrucciones soportadas por el micro-controlador: De manejo de Literales: - movlw k: Carga el valor del literal k al registro de trabajo (W). movlw .5 == 5 W - addlw k: Suma el valor del literal k con el valor del registro W. y lo guarda en el registro w. addlw .5 == .5 +W W - sublw k: Resta el valor del literal k con el contenido del registro W, y lo guarda en el registro w. sublw .5 == .5-W W - andlw k: Realiza la operación lógica AND entre el valor del literal k y W, y lo guarda en el registro w. andlw .5 == .5 and W W - iorlw k: Realiza la operación lógica OR entre el valor del literal K y el registro W, y guarda el resultado en el registro W. iorlw .5 == .5 OR W W - xorlw k: Realiza la operación lógica XOR entre el valor literal K y el Registro W, y lo guarda en el registro W. xorlw .5 == .5 XOR W W De manejo de Registros: - movf f,d: copia el contenido del registro f a la dirección indicada por d(0 W// 1 f) - movf 20h,0 == 20h 0 (W) movf 20h,1 == 20h 1 (20h), En particular no es usada esta última opción - movwf f: copia el contenido del registro W al registro f movwf f == W f - addwf f,d: Suma el contenido del registro f con el contenido del registro W, y lo guarda en d. addwf 20h,0 == (20h)+W W

Transcript of PIC 16f877a guía programación Ensamblador- Incompleto

Page 1: PIC 16f877a guía programación Ensamblador- Incompleto

INSTRUCCIONES DE LOS MICROCONTROLADORE PIC 16F87XX EN LENGUAJE ENSAMBLADOR(Incompleto )

MUÑOZ CANALES RICARDO ALONSO – [email protected]

Instrucciones soportadas por el micro-controlador:

De manejo de Literales:

- movlw k: Carga el valor del literal k al registro de trabajo (W).movlw .5 == 5 W

- addlw k: Suma el valor del literal k con el valor del registro W. y lo guarda en el registro w.addlw .5 == .5 +W W

- sublw k: Resta el valor del literal k con el contenido del registro W, y lo guarda en el registro w.sublw .5 == .5-W W

- andlw k: Realiza la operación lógica AND entre el valor del literal k y W, y lo guarda en el registro w.andlw .5 == .5 and W W

- iorlw k: Realiza la operación lógica OR entre el valor del literal K y el registro W, y guarda el resultado en el registro W.

iorlw .5 == .5 OR W W- xorlw k: Realiza la operación lógica XOR entre el valor literal K y el Registro W, y lo guarda en el registro

W.xorlw .5 == .5 XOR W W

De manejo de Registros:

- movf f,d: copia el contenido del registro f a la dirección indicada por d(0 W// 1 f)- movf 20h,0 == 20h 0 (W)

movf 20h,1 == 20h 1 (20h),En particular no es usada esta última opción

- movwf f: copia el contenido del registro W al registro fmovwf f == W f

- addwf f,d: Suma el contenido del registro f con el contenido del registro W, y lo guarda en d.addwf 20h,0 == (20h)+W W

addwf 20h,1 == (20h)+W 20h

- subwf f,d: Resta el contenido del registro f menos el contenido del registro W, y lo guarda según d .subwf 20h,0 == (20h)-W W

- andwf f,d: Realiza la operación lógica AND entre el contenido del registro f y el de W, y lo guarda según d.

andwf 20h,0 == (20h) AND W W- iorwf f,d: Realiza la operación lógica OR entre el contenido de los registros f y W, y lo guarda según

indica d.iorwf 20h,1== (20h) OR W 20h

Page 2: PIC 16f877a guía programación Ensamblador- Incompleto

- xorwf f,d: Realiza la operación lógica XOR entre en el contenido de los registro F y W, y lo guarda según indica d.

xorwf 21h,1 == (21h) XOR W W

- swapf f,d: Intercambia de lugar los nibles mayor y menor del registro fxeje: sea 21h=63= B’0011111’=3Fh; donde lo nibles son las agrupaciones de 4 bits en un registro en este caso tenemos 2, ya que nuestro uC trabaja con datos de 8 bits y esta operación es apreciable para usuario al estar en código binario o mejor aún hexadecimal.

swapf 21h,0 == swapf B’0011111’==swapf 3Fh==//== B’11110011’==F3h 21h

- comf f,d: Realiza el complemento del contenido del registro f y lo guarda según d.

- incf f,d: Incrementa el contenido de lregistro f en 1, y lo guarda según d.

- decf f,d : decrementa el contenido en 1 el registro f, y lo guarda según d.

- incfsz f,d : Incrementa en 1 el registro f y salta si el resultado es cero, guarda según d el resultado.

- Decfsz f,d: decrementa en 1 el registro f y salta si el resultado es cero, guarda según d el resultado

- Clrf f : borra el contenido de lregistro f

- Clrw : borra el contenido de lregistro W

- Clrwdt : borra el contenido del registro wdt(watch dog- Perro guardían)

DIRECTIVAS:

Son instrucciones de ejecución para el ensamblador, no para el pic, realizan funciones especiales relacionadas con el lenguaje propiamente dicho.

LIST: Indica el dispositivo para el cual se está realizando el programa. Por ejemplo: LIST P=16F877; LIST P=16F84; LIST P=18F2550

EQU: Realiza la operación de equivalencies para definer las constants sean literales o registros.Por ejemplo: VECES EQU 21HORG: Indica desde que posición empieza a ejecutarse el programa.Eje: ORG 0x00, ORG 20HEND: Indica el final del programa.

CONSTANTES: Valores definidos en el programa las cuales no cambian su valor.

Page 3: PIC 16f877a guía programación Ensamblador- Incompleto

DIRECCIONAMIENTO DE MEMORIAEs la forma en que el uC realiza la búsqueda de direcciones indicada por las instrucciones, para la ejecución de estas.Existen diversas formas de Direccionamiento que solo están disponibles ciertos tipo de uC, en nuestro caso solo veremos 2:

Direccionamiento DirectoDireccionamiento Indirecto

Direccionamiento DirectoEsta forma de direccionamiento es ejecuta en forma explícita por la instrucción, ya que en ella se incluye la operación (Op- Code) y la dirección de la instrucción a trabajar.Ejemplo: movlw .1 ; se carga el literal 1 en el registro W movwf 20H ; copia el contenido del registro W a la dirección 20H movwf 21H; copia el contenido del registro W a la dirección 21H movwf 22H, copia el contenido del registro W a la dirección 22H

Direccionamiento IndirectoEste direccionamiento se caracteriza por usar un puntero para realizar la operación(s) a la dirección que se desea trabajar. Puntero: Registro que contiene la dirección a la que se accederá.

Page 4: PIC 16f877a guía programación Ensamblador- Incompleto

Ejemplo:Cargar a 20H con el número 5 Modo Directo: Modo Indirecto:

movlw .5 movlw 20H movwf 20H movwf FSR

movlw .5movwf INDF

Sumar el contenido de los registros 20H+21H y guardarlos en 22HModo Directo Modo Indirecto:

movf 20H,0 movlw 20Haddwf 21H,0 movwf FSRmovwf 22H movf INDF,0

incf FSR,1addwf INDF,0incf FSR,1movwf INDF

Cuando se realiza el direccionamiento Directo la disposición de memoria está dividida en 4 bancos, controlados por los bits RP0 y RP1 del registro STATUS.Pero cuando se realiza el direccionamiento Indirecto nuestra disposición de memoria está dividida en 2 Bancos, controlador por el bit IRP del registro STATUS.

Page 5: PIC 16f877a guía programación Ensamblador- Incompleto

TABLAS DE BUSQUEDA:Mecanismo que tiene el PIC para almacenar un conjunto de datos fijos en la memoria de programa.Son usados es:

- Envío de mensajes al LCD- Envío de mensaje a una impresora- Codificación/Decodificación- teclado- Generación de Señales: Serial, COM, PWM, ETC,ETC

Sintaxis:

movlw DIRECC

call tabla

---

tabla *No se debe realizar saltos a direcciones no especificadas

addwf PCL ; PCL=PCL+W de lo contrario habrá un descontrol del PIC

retlw dato_0

retlw dato_1

retlw dato_2

retlw dato_n ---

Ejemplos de manejo de Tablas:

a).- llamado aTabla de valores

LIST P=16F877INCLUDE <P16F877.INC>ORG 0movlw .2; buscando en esta posición a ser enviada al PC en la tablacall TABLA; llamando tabla

Page 6: PIC 16f877a guía programación Ensamblador- Incompleto

movlw .5call TABLA

movlw .0call TABLAgoto $; regresar aquí mismo, fin de la rutina

TABLAaddwf PCL,1; cargando valor buscado en el PCretlw .0; valor que será cargado a W si es llamadoretlw .1retlw.2retlw .3retlw.4retlw .5

END; fin del programa

Ejemplo 2:

b).- Llenado de registros partiendo de un tabla

LIST P=16F877INCLUDE <P16F877.INC>VECES EQU 20HDIRECC EQU 21H

ORG 0

INICIO ; cargamos la cantidad de veces que se ejecutara la operaciónmovlw .10movwf VECESmovlw .0movwf DIRECC, cargamos el aumento incial para el PC

LAZOmovf DIRECC,0 ; movemos el aumento inicial a wcall TABLA; llamamos a tabladecf VECES,1; dmisnuimos en 1 la cantidad de vecesincf DIRECC,1; aumentamos en 1 la dirección que se aumentará en PCLmovlw .0 ; comprobaremos si VECES llegó a cerosubwf VECES,0btfss STATUS,Z;goto LAZO; si NO llegó a 0 continuamos con el LAZOgoto INICIO; Reiniciando el programa SI VECES llegó a cero

TABLAaddwf PCL,1; direcciona el contenido de DIRECC al PC, se aumenta el valor inicial de DIRECC W

Page 7: PIC 16f877a guía programación Ensamblador- Incompleto

DT 01h,02h, 03h, 04h,05h; otra forma de ordenar los valores de tablaDT 0Ah, 0Bh, 0Ch, 0Dh,0Eh; es indistinto se puede continuar en la fila anterior, pero por didáctica se abrió otra fila.

END; fin de programa

CONTADOR/TEMPORIZADOR TMR0 – TMR1 – TMR2

TMR0

Es un temporizador/contador del PIC 16f877A permite 2 modos de funcionamiento (según la fuente de Reloj):

- Reloj externo, MODO CONTADOR: trabaja como un contador de eventos, y el bit de registro establece el índice de pre-escaler, para retardar el desbordamiento del FLAG T0F

- Se caracteriza por realizar un conteo a partir de la posición X , ingresada por el usuario hasta llegar a 255+1=0, activando el Flag y avisándonos que realizó esa tarea, luego sigue realizando el conteo infinitamente sin ninguna acción adicional.

Estructura Interna TMR0 1

Fórmulas para cálculo de tiempo:

Para cálculo de tiempo deseado

Page 8: PIC 16f877a guía programación Ensamblador- Incompleto

T=(256 - X) (n) (XTAL)

Para hallar el valor de X cuando se tiene un valor t prefijado, solo se despeja:

X=255 – t/(n)4TXTAL

Ejemplo 1:

Para un t=3ms y un XTAL de 20Mhz, hallar el valor de n y x para configurar el registro OPTION_REG.

Solución:

X = 256 – t/ n(XTAL)

X=256 – 3000us/n(0.2us) = 256 – 15000/n ; donde n= 1,2,4,…,256

ORG 0

banco 1mov OPTION_REG, B’11010110’banco 0

mov TMR0, .139

ESPERA

J0 INTCON,T0IF,ESPERA

Bcf INTCON,T0IFgoto $

END

Problema 2:

Para un T= 10 ms con un XTAL de 4Mhz

Solución:

X=256 – t/n(4XTAL)

Page 9: PIC 16f877a guía programación Ensamblador- Incompleto

X=256 – 10000us/n(1us)

X= 256 – 10000/n

*Ayudándonos de Excel obtenemos X=217 n = 256 el menor error possible.

*si al escoger n obtenemos resultados fraccionarios escogemos el más próximo a un entero.

TIMER1

Este Timer permite 3 modos de funcionamiento:

- Modo Contador : Cuando recibe una señal externa.- Modo Temporizador: cuando recibe la señal de un XTAL