manual pic16f84

21
PIC16F84. Manual Básico Requerimientos para programar 1. Windows 98 2º edición como mínimo. 2. Un puerto serie para el circuito propuesto en esta guía. 3. Los programas correspondientes para quemar o grabar. Ejemplo: WinPic800, NTicprog. 4. los programas correspondientes para programar. En este caso se va a explicar como programar en MPLab 7.0 5. Un circuito quemador 6. Un PIC16F84 7. conocimientos de electrónica básica. Datos Técnicos Sólo 35 instrucciones para aprender 1000 ciclos de borrado/escritura en memoria falsh 20 mA por pin. Reset. Sleep Protección de código. Varias opciones de Osciladores. Rango de operación: 2.0V 5.0V Consumo: <2 mA a 5V, 4MHz.

Upload: michael-lopez

Post on 24-Jun-2015

1.281 views

Category:

Documents


9 download

DESCRIPTION

PIC16F84A

TRANSCRIPT

Page 1: Manual PIC16F84

PIC16F84. Manual Básico

Requerimientos para programar

1. Windows 98 2º edición como mínimo. 2. Un puerto serie para el circuito propuesto en esta guía. 3. Los programas correspondientes para quemar o grabar. Ejemplo:

WinPic800, NTicprog. 4. los programas correspondientes para programar. En este caso se va a

explicar como programar en MPLab 7.0 5. Un circuito quemador 6. Un PIC16F84 7. conocimientos de electrónica básica.

Datos Técnicos

Sólo 35 instrucciones para aprender

1000 ciclos de borrado/escritura en memoria falsh

20 mA por pin.

Reset.

Sleep

Protección de código.

Varias opciones de Osciladores.

Rango de operación: 2.0V – 5.0V

Consumo: <2 mA a 5V, 4MHz.

Page 2: Manual PIC16F84
Page 3: Manual PIC16F84

Introducción:

Controler Interface Peripheral (PIC). Este circuito tiene la capacidad de

manejar un proceso a la vez.

ALU (Unidad Aritmético Lógica): es la región del PIC donde se efectúan todas las operaciones lógicas como la suma, resta, salto, etc.

Vss = Tierra = Gnd = negativo.

Vdd = positivo.

Los datos se escriben así: o Hexadecimal: 0x A1 o Binario: b‟01010101‟

68 variables para establecer en la memoria RAM.

Puerto A: 5 bits. Ejemplo: 01011.

Puerto B: 1 byte= 8 bits. Ejemplo: 01011101.

MCLR: Master Clear= Reset.

Tipos de osciladores: o XT: Cristal de Cuarzo. o RC: Resistencia – capacitor. o HS: Cristal de alta velocidad. o LP: Cristal de baja frecuencia y bajo consumo de potencia.

Conexión de RC:

Page 4: Manual PIC16F84

Conexión de Reset:

Arquitectura interna:

Memoria ROM: 1K x 14 bits.

ALU(Unidad Aritmético Lógica) de 8 bits.

Acumulador: Región de memoria donde se guarda el resultado de una operación lógica o aritmética. Conocido como “W”. Tiene 1 byte de datos

Contador de programa (PC)

Memoria: 1,024 posiciones PC: registro que almacena la posición del último salto realizado por el programa.

Page 5: Manual PIC16F84

La parte del PIC que vamos a estar ocupando para grabar nuestros programas se le conoce como “Bank0”, (Ver dibujo anterior). A esa sección que vamos a estar ocupando es una memoria no volátil, comprendida entre la sección de memoria: 50h y 7Fh. La parte del PIC conocida como “Bank1” se usa por lo general para configurar si las patillas del PIC van a aceptar datos del mundo exterior o bien funcionar como salida de datos, el temporizador, modificar opciones avanzadas, etc. Registros importantes: TRISA: configuración de PORTA = RA0, RA1, RA2, RA3, RA4 (pines del PIC) TRISB: configuración de PORTB =RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7

(pines del PIC). STATUS: contiene la información de “las banderas” que indican el estado del

resultado de una operación lógica o matemática. Este registro tiene los mismos valores tanto en el banco1 como en el banco0.

Tabla 1: STATUS (“Banderas”)

IRP RP1 RP0 TO PD Z DC C

RP0 (Register Bank Selected Bits): cambio de banco.

o si RP0 = 0 Acceso a banco0 o si RP0 = 1 Acceso a banco1

C (Carry): este bit del registro STATUS se activa a 1 lógico cuando el

resultado de una operación lógica o aritmética sobrepasa los 8 bits disponibles de un registro o variable.

Z (Zero): este bit del registro STATUS se activa a 1 lógico cuando el

resultado de una operación lógica o aritmética da cero; y se desactiva o adquiere un estado de 0 lógico cuando el resultado de una operación lógica o aritmética NO da cero.

Los otros registros se utilizan para una programación más avanzada. Ley de los signos: (importante aprender)

Número Positivo C = 1 Z = 0

Cero C = 1 Z = 1

Número Negativo C = 0 Z = 0

Page 6: Manual PIC16F84

Instrucciones w=registro de trabajo. Lugar donde se almacenan los datos más importantes a ocupar para las operaciones lógicas y aritméticas. Está compuesto de 1 byte u 8 bits, es decir ‘00000000’ por ejemplo, al igual que las variables que se puedan declarar y la mayoría de los registros del PIC. Para poner Comentarios en el código se usa “; “

Instrucciones de carga

clrw: limpia w, es decir, w=00000000.

Ejemplo:

Antes: w=01010101 Instrucción: clrw Después: w=00000000 clrf: limpia variable o dirección de memoria.

Ejemplo:

Antes: TRISA= 01010111 Instrucción: clrf Después: TRISA=00000000

Movlw [dato]: copia un dato a registro w. Ejemplo:

Antes: w=0x08 Instrucción: movlw 0xFF Después: w= FF.

movwf f: copia el dato almacenado en el registro “w” y lo guarda en el registro “f ”. movf f,d: copia el dato almacenado en el registro “ f “.

f = registro o variable declarada. d = determina el lugar donde va a almacenarse el dato.

Si d = 0 ; el dato se copia al registro w. Si d = 1 ; el dato se refresca o actualiza, ya que vuelve a guardarse en el mismo lugar. (esto se ocupa para verificar las banderas del PIC).

Page 7: Manual PIC16F84

Ejemplo:

Antes: PORTA=0x05 w=0xFA

Ejecutar instrucción: movf PORTA,0 Después: PORTA = 0x05

w=0x05

Instrucciones de bit

bcf f,b: esta instrucción se utiliza para colocar un 0 lógico en un bit especificado por b, en el registro f.

Ejemplo:

Antes:11111111 Instrucción: bcf PORTA,5 (quinta posición de derecha a izquierda) Después: PORTA=11101111

bsf f,b: esta instrucción se utiliza para colocar un 1 lógico en un bit especificado por b, en el registro f.

Ejemplo:

Antes:00000000

Instrucción: bcf PORTA,5 (quinta posición de derecha a izquierda)

Después: PORTA=00010000

Instrucciones de salto

goto: se desplaza hacia una etiqueta. Ejemplo:

ladrillo: goto hola código ignorado código ignorado hola: código código código

Se desplaza desde la posición de la etiqueta ladrillo hacia la viñeta o etiqueta hola ubicada arriba o abajo, (no importa) e ignora el código que le sigue.

Page 8: Manual PIC16F84

end: fin del programa. Es importante colocarlo siempre al final del código.

<nombre de la variable> EQU <región de memoria>: declara variables o

registros. Es importante empezar desde 0x0C, porque desde esa localidad de memoria inicia el área de la memoria RAM y únicamente acepta 68 variables. Ejemplo1:

Michael EQU 0x0C

Ejemplo2:

pAlAbRa EQU 0x1A

org <posición>: esta instrucción indica la posición de las 1,024 disponibles

donde inicia a escribirse el programa del PIC. Ejemplo1: org 0

Ejemplo2: org 1023

Instrucciones de suma

addlw <dato>: esta instrucción suma aritméticamente el registro w con el dato y el resultado lo almacena en w.

Ejemplo:

Antes: w=0x50 Instrucción: addlw 0x01 Después: w=0x51

addwf f,d: esta instrucción suma aritmética el registro w con un registro (“ f “) y

lo guarda en el registro w si d=0 y si lo guarda en el mismo registro si d=1. Ejemplo1:

Antes: PORTA = 0x02 w=0x01 Instrucción: addwf PORTA,1 Después: PORTA =0x03 w=0x01

Ejemplo2:

Antes: PORTA =0x02 w=0x01 Instrucción: addwf PORTA,0

Page 9: Manual PIC16F84

Después: PORTA =0x02 w=0x03

Instrucciones de resta:

sublw <dato>: esta instrucción efectúa una resta aritmética. Al dato escrito se le resta el valor del registro w y el resultado se guarda en el registro w. Ejemplo:

Antes: w=0x03 Instrucción: sublw 0x01 Después: w=0x02

subwf f,d: esta instrucción resta aritméticamente el valor de w del registro “ f ”.

El resultado se guarda en w cuando d=0. El resultado se guarda en el mismo registro cuando d=1. Ejemplo1:

Antes: Contar=0x04 W=0x01 Instrucción: subwf Contar,0 Después: Contar=0x04 W=0x03

Ejemplo2:

Antes: Contar=0x04 W=0x01 Instrucción: subwf Contar,1 Después: Contar=0x03 W=0x01

Instrucciones de incremento y decremento:

decf f,d : esta instrucción resta una unidad al registro “ f ”. Si el valor de d=0 el

resultado se guarda en el registro w. Si el valor de d=1 entonces el resultado se guarda en el mismo registro “ f ”. Ejemplos: Antes: PORTA = 0x10 Instrucción: decf PORTA,0 Después: PORTA =0x10 ; w= 0x0f Antes: PORTA = 0x10

Page 10: Manual PIC16F84

Instrucción: decf PORTA,1 Después: PORTA =0x0f incf f,d : esta instrucción incrementa el valor del registro “ f “ en uno. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplos: Antes: PORTB=0x01 Instrucción: incf PORTB,0 Después: PORTB=0x01 ; w=0x02 Antes: PORTB=0x01 Instrucción: incf PORTB,1 Después: PORTB=0x02

Instrucciones lógicas:

andlw <dato>: realiza una operación “AND” entre el registro w y el dato (también llamado máscara o “ k “). Ejemplo: Antes: w=b‟10100111‟ AND Instrucción: andlw b‟01011111‟ Después: w=b‟00000111‟ andwf f,d : realiza una “AND” entre w y un registro “ f “. Si d=0 el resultado se

guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplo: Antes: w=b‟10100111‟ ; PORTA=b‟01011111‟ Instrucción: andwf PORTA,0

w=b‟10100111‟ AND

PORTA=b‟01011111 Después: w=b‟00000111‟

Page 11: Manual PIC16F84

comf f,d : realiza un complemento bit a bit de un registro “ f “. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplo: Antes: PORTA=b‟01010101‟ Instrucción: comf PORTA,1 Después: PORTA=b‟10101010‟ iorlw k : realiza una operación “OR” del registro w con el dato “k” y el resultado

se guarda en el registro w. Ejemplo: Antes: w=b‟01010101‟ Instrucción: iorlw b‟00001111‟ Después: w=b‟01011111‟ iorwf f,d: esta instrucción realiza una operación “OR” del registro w con otro registro “ f ”. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplo: Antes: w=b‟01010101‟ : PORTA=b‟00001111‟ Instrucción: iorwf PORTA,0 Después: w=b‟01011111‟ : PORTA=b‟00001111‟ Antes: w=b‟01010101‟ : PORTA=b‟00001111‟ Instrucción: iorwf PORTA,1 Después: w=b‟01010101‟ : PORTA=b‟01011111‟ rlf f,d: esta instrucción realiza un movimiento de bits del registro “ f ”, desplazando uno a uno los 8 bits pasando por la bandera de acarreo hacia la izquierda. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplo: Antes: w=b‟00000000‟ : PORTB= b‟00001111‟ : C=0 Instrucción: rlf PORTB,0 Después: w= b‟00011110‟ : PORTB= b‟00001111‟ Antes: w=b‟00000000‟ : PORTB= b‟00001111‟ : C=1 Instrucción: rlf PORTB,1 Después: w= b‟00000000‟ : PORTB= b‟00011111‟

Carry(C) Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

Page 12: Manual PIC16F84

rrf f,d: esta instrucción realiza un movimiento de bits del registro “ f ”,

desplazando uno a uno los 8 bits pasando por la bandera de acarreo hacia la derecha. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplo: Antes: w=b‟00000000‟ : PORTB= b‟00001111‟ : C=1 Instrucción: rrf PORTB,0 Después: w=b‟10000000‟ : PORTB= b‟00001111‟ Antes: w=b‟00000000‟ : PORTB= b‟00001111‟ : C=1 Instrucción: rrf PORTB,1 Después: w=b‟00000000‟ : PORTB= b‟10001111‟

Carry (C)

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

swapf f,d: esta instrucción realiza un cambio de “Nible”. Si d=0 el resultado se

guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplo: 0001 0100 Nible Nible alto Nible bajo Antes: PORTA=5A Instrucción: swapf PORTA,1 Después: PORTA=A5 xorlw <dato>: realiza una operación “XOR” entre el registro w y el dato

(también llamado máscara o “ k “). Ejemplo: Antes: w=b‟00101011‟ XOR Instrucción: andlw b‟01010101‟ Después: w=b‟01111110‟ xorwf f,d: esta instrucción realiza una operación “XOR” del registro w con otro

registro “ f ”. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplos: Antes: w=b‟01010101‟ : PORTA=b‟00001111‟ Instrucción: xorwf PORTA,0 Después: w=b‟01011010‟ : PORTA=b‟00001111‟ Antes: w=b‟01010101‟ : PORTA=b‟00001111‟ Instrucción: xorwf PORTA,1 Después: w=b‟01010101‟ : PORTA=b‟010111010‟

Page 13: Manual PIC16F84

Saltos:

btfsc f,d: esta instrucción realiza un salto de la línea de código de la posición

que sigue si el bit del registro “ f “ es igual a cero. Ejemplo: a: btfsc reg1,3 b: proceso x c: proceso y proceso z btfss f,d: esta instrucción realiza un salto de la línea de código de la posición

que sigue si el bit del registro “ f “ es igual a uno. Ejemplo: a: btfss reg1,3 b: proceso x c: proceso y proceso z decfsz f,d: esta instrucción realiza un decremento en uno del registro “ f”. Si

d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “ f “. Ejemplo: a: decfsz reg1,0 b: proceso x c: proceso y proceso z incfsz f,d: esta instrucción realiza un incremento en uno del registro “ f”. Si d=0 el resultado se guarda en el registro w; si d=1 se guarda en el mismo registro “f“. Ejemplo: a: incfsz reg1,0 b: proceso x c: proceso y proceso z nop (no operation): esta instrucción no hace nada y no afecta el estado de las

banderas. Tarda un ciclo de máquina en ser ejecutada. Ejemplo: nop nop call: se usa esta instrucción para realizar llamadas a etiquetas que se ubican

dentro del código. Ejemplo: call etiqueta1 … etiqueta1: nop nop ….

Cuando el pic llega a la posición “a:” evalúa el valor del “reg1”, en su tercer bit; si éste es cero salta a una posición y realiza el “proceso y”, sino sigue con el “proceso x”.

Cuando el pic llega a la posición “a:” evalúa el valor del “reg1”, en su tercer bit; si éste es uno salta a una posición y realiza el “proceso y”, sino sigue con el “proceso x”.

Esta operación resta uno al valor de la variable “reg1”. Si el resultado = 0 salta la instrucción siguiente. Si el resultado ≠ 0 la instrucción siguiente es ejecutada.

Esta operación suma uno al valor de la variable “reg1”. Si el resultado = 0 salta la instrucción siguiente. Si el resultado ≠ 0 la instrucción siguiente es ejecutada.

La secuencia es: Primera línea. Tercera línea. Cuarta línea. El resto del código.

Page 14: Manual PIC16F84

return: esta instrucción es utilizada para regresar a la última línea de donde se realizó la instrucción call. Ejemplo: call etiqueta1 ….. etiqueta1: nop …..

return sleep: esta instrucción coloca al pic en modo de hibernación, bajo consumo de

corriente y deja de realizar las instrucciones programadas hasta que se produzca una interrupción. Ejemplo: a: sleep

La secuencia es: Primera línea. Tercera línea. Cuarta línea. Quinta línea. Segunda línea. El resto del código

Page 15: Manual PIC16F84

Empezando a programar. Lo primero a tomar en cuenta es:

tener instalado un depurador. Ejemplo: mplab 7.0

cumplir con los requisitos mínimos de instalación y operación.

Iniciativa de aprender. Vocabulario: Compilar: operación que se realiza para crear el archivo hexadecimal (*.hex)

que se va a grabar en el PIC con otro programa como por ejemplo winpic 800. Compilar = Construir = Hacer. Pasos para iniciar nuestro primer proyecto:

botón inicio –> programas –>microchip –>mplab IDE 7.0

a continuación se encuentran dos formas para crear un proyecto: o en la barra de herramientas de proyectos de dar clic a nuevo

proyecto. o en el menú proyectos –-> nuevo.

Se escribe un nombre para nuestro proyecto.

Se escribe el lugar donde se va a guardar nuestro proyecto (es importante hacerlo lo más cercano a la raíz del sistema operativo, porque da error al compilar).

Click en ok. Pasos preliminares para crear nuestro primer programa:

Existen tres formas: o La primera es: el la barra de herramientas estándar dar clic en nuevo. o La otra es: en el menú archivo –>nuevo. o Ctrl + n.

La siguiente ventana que aparece es donde se va a escribir el código del pic a programar.

En ella se puede escribir.

Después de que se ha escrito algo se puede guardar.

Guardar en el mismo lugar que el proyecto a ocupar. Pasos para crear el programa:

Declarar en la ventana de código el número del pic a ocupar. Ejemplo: Si yo voy a ocupar un pic16f84a, entonces: list p=16f84a include <p16f84a.inc> si yo voy a ocupar un pic 16c84, entonces: list p=16c84 include <p16c84.inc>

Page 16: Manual PIC16F84

En caso de ser necesario declarar las variables a ocupar. Ejemplo: Es importante recordar que la región de memoria RAM designada para declarar variables en le caso del pic16f84a empieza desde el 0x0C en adelante, hasta 68 variables. Las letras a, b, c, de están reservadas por el programa. AX EQU 0x0C BX EQU 0x0D CX EQU 0x0E DX EQU 0x0F

Establecer desde qué posición se inicia el programa. Ejemplo: Recordar que el pic sólo ejecuta una tarea a la vez, por lo tanto sería un desperdicio de espacio empezar desde más adelante. org 0 org 23

Escribir el programa.

Escribir “end ” al final.

Page 17: Manual PIC16F84

Nuestro primer programa Programa 1: Haga un programa que muestre el número 14. list p=16f84a en esta parte se especifica el # include <p16f84a.inc> de PIC a ocupar org 0 indica el inicio del programa en la memoria bsf STATUS,RP0 clrf TRISA Acá se establece el Puerto A bcf STATUS,RP0 como salida de Datos movlw b‟00001110‟ se le asigna el valor 14 a “ w” movwf PORTA se muestra el valor en el Puerto A end FIN Programa 2: Por el puerto B se obtiene el dato del puerto A multiplicado por dos. List p=16f84a include <p16f84a.inc> org 0 ;este es un comentario ;acceso a banco 0 bsf STATUS,RP0 clrf TRISB ;si es cero = salida de datos movlw 0xFF movwf TRISA ; si son uno =entrada de datos bcf STATUS,RP0 end

Page 18: Manual PIC16F84

Programa 3: Por el Puerto B se obtiene el dato introducido por el puerto A, pero los bits pares de la salida se fijan siempre a “1”. El orden de los bits es B0, B1, B2… B5, B6, B7; siendo los pares: B0, B2, B4, B6. Por ejemplo si se introduce por el puerto A el dato „- - - 01100‟. En el puerto b se obtiene „- - - 11101‟ List p=16f84a include <p16f84a.inc> org 0 bsf STATUS,RP0 clrf TRISB movlw 0xFF movwf TRISA bcf STATUS,RP0 inicio: movf PORTA,0 iorlw b‟01010101‟ movf PORTB goto inicio end Programa 4: Por el puerto B se obtiene el contenido del puerto A pero los bits impares de la salida de fijan a “0”. List p=16f84a include <p16f84a.inc> org 0 bsf STATUS,RP0 clrf TRISB movlw 0xFF movwf TRISA bcf STATUS,RP0 inicio: movf PORTA,0 andlw b‟01010101 movf PORTB goto inicio end

Page 19: Manual PIC16F84

Circuito quemador de PIC por puerto serie

R1 10 kOhm

R2 1,5 kOhm

C2 100 uF/16 V

C3 22 uF/16 V

D2 Diodo zener 5,1 V (1N4733a)

D6 Diodo zener 8,2 V (1N4738a)

D3, D4, D5, D7 1N4148

Q1, Q2 BC547B

Porta IC de 18 pines

Conector DB9 hembra.

Tableta de cobre, FeCL3, metro de cable utp,

Caja rectangular con tapadera.

Page 20: Manual PIC16F84
Page 21: Manual PIC16F84

Enlaces:

www.microchip.com

www.victoryvictor.net/pic.htm

www.microchip.com/downloads/en/DeviceDoc/35007b.pdf

http://perso.wanadoo.es/chyryes/tutoriales/pic0.htm

[email protected]

www.ecacssc.blogspot.com