You are on page 1of 8

SISTEMAS DIGITALES –

Diagrama de la estructura interna del PIC16F84

1

SISTEMAS DIGITALES –

DEFINICIONES Y ABREVIATURAS NOTACION PARA NUMEROS Decimal : D'100' ó .100 Hexadecimal : H'64' ó 0x64 ó 64 Octal : O'144' Binario : B'01101100' ASCII : A'C' ó 'C' SIMBOLOS [] : Opciones. () : Contenido. => : Se asigna a ... <> : Campo de bits de un registro. E : Pertenece al conjunto ... Label : Nombre de la etiqueta. TOS : Cima de la pila con 8 niveles en la gama media. PC : Contador de programa que direcciona la memoria de instrucciones. FLAGS Los Flags o banderas son marcadores, representados por bits dentro del registro STATUS, y son: Z : Flag de cero, se pone a 1 cuando una operación lógica o aritmética da 0 (cero)como resultado. En cualquier otro caso se pone a 0. C : Flag de Carry, se pone a 1 cuando la operación que le afecta sobrepasa el nivel de representación del procesador, en nuestro caso es de 8 BIT's , de esta manera si sumamos a 0b11111111 un 0b00000011 el resultado sería 0b00000010 y el BIT de Carry pasaría a 1. DC : Flag de carry del nibble inferior, este se comporta igual que el BIT de Carry, solo que el límite de representación son los 4 bits inferiores, de esta manera si tenemos 0b00001111 y sumamos 0b00000111, el resultado será 0b00010110 y el BIT de DC se pone a 1, el BIT de Carry estará a 0 al no superarse los 8 bits y el de Z a 0 al ser el número diferente de 0.

2

SISTEMAS DIGITALES –

RESUMEN DE LAS INSTRUCCIONES CLASIFICADAS SEGÚN SU OPERACIÓN SEA ORIENTADA A REGISTROS, A BITS, O A LITERALES Y DE CONTROL W : es el registro de trabajo y almacena datos de forma momentánea f : es la dirección de un registro, si es llamada apunta al contenido de ese registro d : es el destino donde se guarda el resultado de una operación, si es 1 se guarda en el registro f, y si es 0 en W.

k que viene a ser una constante de 8 bit, es decir que k puede tomar valores entre 0 y 255, éstos inclusive, según la instrucción a utilizar

3

SISTEMAS DIGITALES –

REGISTROS IMPORTANTES PARA LA CONFIGURACIÓN DE PUERTOS

1. TRISA Y TRISB: Son registros que se programan para que los puertos del PIC
puedan trabajar como entradas o salidas, para ello se asigna un 1 para que quede como entrada y 0 para que quede como salida. Ejemplo: TRISA RA0(LSB) RA1 RA2 RA3 RA4(MSB) ASIGNACIÓN 1 0 0 1 1 ESTADO ENTRADA SALIDA SALIDA ENTRADA ENTRADA

Entonces esto se leería TRISA (puerto A) es igual a 19h (11001). Igual para el puerto B.

2. STATUS: o registro de estado. Cuando el PIC arranca se encuentra en el BANCO
0, como TRISA y TRISB están en el BANCO 1 no queda otra, deberemos cambiar de banco. Esto se logra a través del Registro STATUS, este registro es de 8 bits u 8 casillas, en el cual la Nº 5 (RP0) define la posición del banco en donde nos encontramos.

Si pones un CERO (0) a RP0 estaremos en el BANCO 0 Si le pones un UNO (1) ya ves, estaremos en el BANCO 1 Ejemplo: 7 IRP 6 RP1 5 RP0 4 TO 3 PD 2 Z 1 DC 0 C

DIRECTIVAS PARA LA PROGRAMACION

1. EQU: es algo así como igual. Es decir, le asigna nombre de variable o etiqueta
al registro que está en la posición que se le asigna de la memoria de datos. Ejemplo: SUMA1 EQU 0X0C

Nombra el registro de la posición 0x0c de memoria con la etiqueta SUMA1.

2. RADIX sirve para informar al compilador que los números reportados sin
notación. Ejemplo: RADIX RADIX DEC HEX

3. ORG: indica la dirección o el sitio de la memoria donde se escribe una parte del
programa o donde el compilador empieza a localizar los datos o instrucciones. NOTA: Antes de listar o digitar nuestro programa debemos tener en claro lo siguiente: • Para mantener un orden, se recomienda presionar la tecla TAB entre la instrucción y el parámetro.

4

SISTEMAS DIGITALES –

El símbolo de Punto y Coma " ; " indica el comienzo de un comentario, sirve para ubicarse mejor en el avance del programa y luego encontrar mas rápidamente una línea o bloque determinado. Todo lo que siga a un " ; " no generará código hexagesimal en nuestro proyecto. En pocas palabras, lo que siga al " ; " no influye en el programa. PASOS PARA PROGRAMAR EN MPLAB:

1. Creo una carpeta en el disco C y dentro de el otra carpeta.

2. Project/New/escribimos un nombre del proyecto y seleccionamos Browse, seleccionamos la ultima carpeta que creamos/select y Ok. 3. En la ventana izquierda seleccionamos nuestro proyecto.mcp y vamos a flile/new. Digitamos nuestro programa. 4. Configure select device/P16F84. 5. Configure/configuration bits/ocillator xt. 6. seleccionamos file/save as/guardamos el archivo con un nombre diferente a los demas y con extensión.asm, en tipo seleccionamos Assembly Sauce Files y presionamos guardar. 7. Cerramos el archivo/clic derecho sobre source files/add files/seleccionamos nuestro archivo y lo abrimos dando doble clic sobre su nombre. 8. Seleccionamos Project/make para compilar y ver los errores, si la ventana sale en verde no hay errores pero si la ventana sale en rojo se observan y corrigen los errores. 9. Para la simulación selecciono view/match en addSFR selecciono Wregister o WREG y en addSimbol selecciono las variables de entrada y de salida. 10.En value sobre cada variable hago clic derecho y elijo el sistema en el que deseo obtener la respuesta.

11. Debbuger/select tool/MPLAB SIM y presionamos el icono run
animación .

o correr con

Ejemplo 1 ; ------------------------------------------------------; EL SIGUIENTE PROGRAMA SUMA 05 Y 02 ; -------------------------------------------------------LIST P=16F84 ; Modelo de PIC SUMA1 SUMA2 RESUL ; ; ; ; ; EQU EQU EQU 0X0C 0X0D 0X0E ; DIRECCION HEXADECIMAL DEL OPERANDO 1 ; DIRECCION DEL SEGUNDO OPERANDO ; DIRECCION DEL RESULTADO

-------------------------------------------------Se han definido 3 variables SUMA,SUMA2 y RESUL en diferentes posiciones de la memoria de datos en el REGISTER FILE MAP -------------------------------------------------ORG 0

; --------------------------------------------------; Origen de las instrucciones en el PROGRAM MEMORY MAP

5

SISTEMAS DIGITALES –

; Directiva de compilación ; ---------------------------------------------------movlw movwf movlw movwf movfw addwf EN W movwf RESUL END 0X05 SUMA1 0X02 SUMA2 SUMA1 SUMA2,0 RESUL ; ; ; ; ; ; PONEMOS 05 en hexadecimal EN W PASAMOS W A LA MEMORIA SUMA1 PONEMOS 02 Hex EN W PASAMOS W A LA MEMORIA SUMA2 PONEMOS EN W SUMA1 = 05 SUMAMOS W+SUMA2 Y EL RESULTADO

; PONEMOS VALOR ACUMULADOR EN

; FIN DE PROGRAMA

;-----------------------------------------------------EJEMPLO 2 Sumar en binario 0001 y 0010. Guardar el resultado en 0x0E ; -------------------------------------------------; EJ2.ASM PROGRAMA PARA SUMAR EN BINARIO 0001 Y 0010 ; RESULTADO GUARDADO EN 0X0E ; -------------------------------------------------LIST P=16F84 ; Modelo de PIC SUMA1 EQU 0X0C ; DIRECCION HEXADECIMAL DEL OPERANDO 1 RESUL EQU 0X0E ; DIRRECCION DEL RESULTADO ; ; ; ; ; -------------------------------------------------Se han definido 2 variables SUMA y RESUL en diferentes posiciones de la memoria de datos en el REGISTER FILE MAP --------------------------------------------------

ORG 0 ; ; ; ; --------------------------------------------------Origen de las instrucciones en el PROGRAM MEMORY MAP Directiva de compilación ----------------------------------------------------

movlw b'0001' ; PONEMOS 0001 EN W movwf SUMA1 ; PASAMOS W A LA MEMORIA SUMA1 movlw b'0010' ; PONEMOS 0010 EN W addwf SUMA1 , 0 ; SUMA W A LA MEMORIA SUMA1 RESULTADO EN W movwf RESUL ; MOVER W A RESUL END ; FIN DE PROGRAMA Sumar en binario 2 y 3, guardar el resultado en 0x0C ; -------------------------------------------------; EJ3.ASM PROGRAMA PARA SUMAR EN BINARIO 2 Y 3 ; RESULTADO GUARDADO EN 0X0D

6

SISTEMAS DIGITALES –

; -------------------------------------------------LIST P=16F84 ; Modelo de PIC SUMA1 EQU 0X0C ; DIRECCION HEXADECIMAL DEL OPERANDO 1 RESUL EQU 0X0D ; DIRRECCION DEL RESULTADO ; ; ; ; ; -------------------------------------------------Se han definido 2 variables SUMA1 y RESUL en diferentes posiciones de la memoria de datos en el REGISTER FILE MAP --------------------------------------------------

ORG 0 ; ; ; ; --------------------------------------------------Origen de las instrucciones en el PROGRAM MEMORY MAP Directiva de compilación ----------------------------------------------------

movlw b'0010' ; PONEMOS UN 2 EN W movwf SUMA1 ; PASAMOS W A LA MEMORIA SUMA1 movlw b'0011' ; PONEMOS 3 EN W addwf SUMA1 , 0 ; SUMA W A LA MEMORIA SUMA1 RESULTADO EN W movwf RESUL ; MOVER W A RESUL END ; FIN DE PROGRAMA ;-----------------------------------------------------EJEMPLO7 Realiza una operación AND entre dos registros ; realizar and entre dos registros ; reg1 registro 1 0xa0 ; reg2 registro 2 0xa1 ; res resultado 0xa2 ;------------------------------------list p=16f84 reg1 equ 0xa0 reg2 equ 0xa1 res equ 0xa2 org 0 ;------------------------------------inici movlw b'01110011' ; cargamos 73H en w 73H=0111 0011 (7 3) movwf reg1 ;enviamos a reg1 reg1->01110011 movlw b'01010101' ;cargamos en w 55H en w 55H= 0101 0101 (5 5) movwf reg2 ;movemos 01010101 a reg 2 andwf reg1,0 ;realizamos AND entre w y reg1 y lo almacenamos en w movwf res ; movemos el resultado al registro de resultados res end ;--------------------------------------------------------------------------------------

7

SISTEMAS DIGITALES –

; El resultado AND de 0111 0011 y 0101 0101 es 0101 0001 (51H) ;--------------------------------------------------------------------------------------

8