Vous êtes sur la page 1sur 217

Circuitos Integrados Programables

PIC
EL OBJETIVO DE ESTE CURSO ES APRENDER A PROGRAMAR EN LENGUAJE ASSEMBLER

PIC

Prof. Nelson An

PIC 16F628A

PIC

Prof. Nelson An

PIC 16F628A

PIC

Prof. Nelson An

Introduccin a la Programacin en Lenguaje Assembler


Qu son las Instrucciones?: El set de instrucciones de un microcontrolador es el set de entradas binarias que producen acciones definidas durante un ciclo de instruccin. Un set de instrucciones es para el microcontrolador lo mismo que una tabla de verdad es para una compuerta lgica, etc.

Instrucciones Binarias: Una instruccin es un patrn de dgitos binarios el cual debe estar a disposicin del microcontrolador en el tiempo y forma que ste lo requiera. Por ejemplo: cuando un microcontrolador PIC 16F628A recibe el patrn binario de 14 bits 001011 0 0000100
el cual corresponde al formato de la instruccin decfsz 0x04,0: 001011 0 0000100
PIC Prof. Nelson An 4

Introduccin a la Programacin en Lenguaje Assembler


Programa: un Programa es una serie de instrucciones que causan que el microcontrolador realice una tarea en particular. Programa en Assembler: Cmo introducimos un Programa en Assembler en un microcontrolador? Tenemos que traducirlo, compilarlo a hexadecimal a binario. Se puede hacer instruccin a instruccin a mano a travs de un programa en una PC llamado Cdigo Fuente.

PIC

Prof. Nelson An

Introduccin a la Programacin en Lenguaje Assembler


Convenciones en la escritura del cdigo fuente: Para hacer la tarea ms sencilla del programador, se usan algunas convenciones. En general las convenciones son cualquier accin que facilitan la revisin y comprensin de un programa. Comentaremos algunas convenciones que usaremos:

PIC

Prof. Nelson An

Introduccin a la Programacin en Lenguaje Assembler


Los ficheros de cdigo fuente llevarn la extensin *.ASM

Los ficheros de listado llevarn la extensin *.LST


Los ficheros de cdigo objeto llevarn la extensin *.OBJ Los ficheros de errores llevarn la extensin *.ERR Los ficheros ejecutables llevarn la extensin *.HEX Los mnemnicos escritos en mayscula hacen que el cdigo escrito sea ms visible.

Comentarios explicando cada lnea de cdigo

PIC

Prof. Nelson An

Introduccin a la Programacin en Lenguaje Assembler


Caractersticas del Assembler: Campos del Lenguaje Assembler. Las instrucciones estn divididas en un nmero de campos, como se muestra debajo. ETIQUETAS OPERACIN OPERANDO COMENTARIO Lectura movf movwf portA,0 reg1 ;lee el puerto A ;escribe en reg1

El campo del cdigo de operacin es el nico que nunca puede estar vaco; ste siempre contiene una instruccin una directiva del Assembler. El campo del operando direccin puede contener una direccin un dato, puede estar en blanco.
PIC Prof. Nelson An 8

Introduccin a la Programacin en Lenguaje Assembler


El campo del comentario de etiquetas es opcional. El programador asignar una etiqueta a una lnea de instruccin agregar un comentario segn su conveniencia. Delimitadores: Los campos van separados slo con espacios y/o tabulaciones. No agregar nunca otros caracteres. No utilice espacios extra, particularmente despus de comas que separan operandos. Ej. movlw 35,0.

No use caracteres delimitadores (espacios y tabulaciones) en nombres etiquetas.

PIC

Prof. Nelson An

Introduccin a la Programacin en Lenguaje Assembler


Etiquetas: La etiqueta es el primer campo en una lnea en Lenguaje Assembler y puede no existir. Si una etiqueta est presente, el Assembler la define como el equivalente a la direccin del primer byte correspondiente a esa instruccin. Esta etiqueta puede volver a usarse en otro lugar pero como operando de una instruccin. El Assembler reemplazar sta etiqueta por el valor de cuando fue creada. Se usan frecuentemente en las instrucciones de salto.
PIC Prof. Nelson An 10

Introduccin a la Programacin en Lenguaje Assembler


No pueden usarse como nombres de etiquetas las palabras ya reservadas por el Assembler (ORG, EQU) nombres de instrucciones (movf, incf, nop). Por ej.: Leer movf : : goto leer portA,0

PIC

Prof. Nelson An

11

Introduccin a la Programacin en Lenguaje Assembler


Mnemnicos (cdigos de operacin): La tarea principal del Assembler es la traduccin de los cdigos de operacin (mnemnicos) en sus equivalentes binarios. El Assembler realiza esta tarea usando una tabla como si lo haramos a mano. El Assembler debe hacer algo ms que traducir los cdigos de operacin. Tambin debe determinar cuntos operandos requiere la instruccin y de qu tipo.

PIC

Prof. Nelson An

12

Introduccin a la Programacin en Lenguaje Assembler


Directivas: Algunas instrucciones del Lenguaje Asssembler no se traducen directamente a instrucciones del lenguaje mquina. stas instrucciones son directivas para el Assembler; stas asignan al programa ciertas reas de memoria, definen smbolos, designan reas de RAM para el almacenamiento de datos temporales, colocan tablas datos constantes en memoria y permiten referencias a otros programas.
Las directivas se utilizan como comandos escritos en el cdigo fuente para realizar un control directo ahorrar tiempo a la hora de ensamblar.

Para usar estas directivas seudo-operandos, el programador las coloca en el campo de cdigo de operaciones, y si lo requiere la directiva, una direccin dato en el campo de direccin.
PIC Prof. Nelson An 13

Introduccin a la Programacin en Lenguaje Assembler


Las directivas de uso frecuente son instrucciones para el compilador.

#DEFINE
#define<nombre> [<valor a reemplazar>]
Explicacin: declara una cadena de texto como subttulo de otra.

END
End
Explicacin: indica fin de programa

ETIQUETAS A DIRECCIONES DE PROGRAMA:


Explicacin: son muy tiles para usar con instrucciones CALL (llamada a subrutina) GOTO (salto)
PIC Prof. Nelson An 14

Introduccin a la Programacin en Lenguaje Assembler


EQU

portA equ 0x05


Explicacin: define una constante de ensamble INCLUDE

Include<PIC16F628A.inc>
Explicacin: incluye en el programa un archivo con cdigo fuente

ORG
org 0x00 Explicacin: ensambla a partir de la direccin especificada
PIC Prof. Nelson An 15

Introduccin a la Programacin en Lenguaje Assembler


EQU (Equate Equivalente):
La directiva EQU permite al programador igualar nombres a datos direcciones. Los nombres utilizados se refieren generalmente a direcciones de dispositivos, datos numricos, direcciones de comienzo, direcciones fijas, posiciones de byte.

ORG (Origin Origen):


La directiva Origen permite al programador especificar la posicin de memoria donde programas, subrutinas datos residirn. Los programas y los datos pueden estar alojados en diferentes reas de memoria dependiendo de la configuracin de memoria, rutinas de comienzo, subrutinas de interrupcin y otros programas deben comenzar en locaciones de memoria fijados por la estructura del microcontrolador.
PIC Prof. Nelson An 16

Introduccin a la Programacin en Lenguaje Assembler


La directiva ORG hace al compilador colocar el cdigo que le sigue en una nueva direccin de memoria (la salida del compilador no slo coloca los cdigos de operacin, sino tambin las direcciones de cada instruccin y datos del programa). Usualmente se la utiliza para: reset, programa de servicio de interrupcin. Por ej.: Reset org 0x00 goto inicio org 0x04; vector de interrupcin goto interrupcin org 0x05 Inicio movf portA,0; aqu comienza el programa (lee portA)
PIC Prof. Nelson An 17

Introduccin a la Programacin en Lenguaje Assembler


Operandos y Direcciones: Los ensambladores permiten elegir con libertad el tipo de elemento a colocar en el campo de operando direccin. Nmeros decimales: La mayora de los ensambladores asumen el punto como nmeros decimales a no ser que se indiquen de otra manera. Por ej.: movlw .120 Significa: mover el nmero literal 120 (decimal) al registro de trabajo w

PIC

Prof. Nelson An

18

Introduccin a la Programacin en Lenguaje Assembler


Otros sistemas de numeracin: Los ensambladores tambin aceptan nmeros hexadecimales, binarios. Por ej.: 05h 0x05 hexadecimal

b00000101

binario

Inclusin de cdigo: Algunos ensambladores permiten incluir cdigo fuente (partes de programa) desde otros archivos. Por ej.: include lectura.asm

Esta lnea de programa le indica al compilador que incluya el cdigo que se encuentra en el archivo lectura.asm como si fuese parte del propio programa.
PIC Prof. Nelson An 19

Instrucciones para Ensamblar Programas


Podemos usar para escribir los programas el block de notas de windows el MPLAB. Una vez escrito el Programa, se guarda con extensin .asm y se lo convierte (ensambla) con un programa ensamblador a formato .hex (archivo hexadecimal); el programa compilador sugerido es el MPASM (assembler de microsoft) que usa la empresa Microchip. Al archivo con extensin .hex resultante lo podemos transferir usando la tarjeta electrnica cargador de PIC a la memoria del PIC16F628A.

Existen una serie de directivas que son para el ensamblador y nos hacen la tarea de programacin ms sencilla.
PIC Prof. Nelson An 20

Instrucciones para Ensamblar Programas


Con estas directivas haremos los siguientes ejemplos:

#DEFINE
#DEFINE

BANCO1
BANCO0

BSF
BCF

STATUS,5
STATUS,6

A partir de ahora, cuando escribamos BANCO1 se pondr a 1 el bit de seleccin de banco y cuando escribamos BANCO0 se pondr a 0 el bit de seleccin de banco y pasaremos al banco1, recordemos que rp0 y rp1 son los bits que seleccionan en el registro de Status y empiezan en 00.

PIC

Prof. Nelson An

21

Programacin en Lenguaje Assembler

Cmo se ordena un Programa? Cuando desarrollamos un Programa, nos ayudarn las siguientes pautas: 1. Al principio van los EQU y los #DEFINE, despus comenzamos con el Programa. 2. El Programa se escribe en cuatro columnas separadas por tabuladores. 3. La primera columna se ponen las etiquetas las direcciones de programa.

4. En la segunda columna se ponen las instrucciones (bcf, clrw, btfss).


PIC Prof. Nelson An 22

Programacin en Lenguaje Assembler

Cmo se ordena un Programa? Cuando desarrollamos un Programa, nos ayudarn las siguientes pautas: 5. En la tercera columna se ponen los registros a los que afecta la instruccin. 6. En la cuarta columna se ponen los comentarios que crea pertinente seguidos de un punto y coma.

PIC

Prof. Nelson An

23

Aprendiendo a Programar

1. En todo Programa se debe decir cul es el tipo de PIC que se emplear, hay que incluir sus libreras y configurarlo. 2. Al escribir un Programa se realizan las sentencias en columnas. La primera columna se utiliza para nombrar variables colocar etiquetas. La segunda columna se utiliza para aplicar la instruccin. La tercera columna contiene los datos necesarios para que pueda ejecutarse dicha instruccin. La cuarta columna contiene datos tiles para el programador pero que no son tenidos en cuanta por el microcontrolador.
PIC Prof. Nelson An 24

Aprendiendo a Programar

Ejemplo:

Vamos a definir a la variable AZUL en la posicin de memoria expresada en nmero hexadecimal 20.
1 Col. 2 Col. 3 Col. 4 Col.
;defin a la variable AZUL en la posicin 20

AZUL

EQU

0x20

AZUL es la variable que defin.

EQU es la directiva que significa asignar definir.


0x20 es la posicin de la memoria de datos expresado en hexadecimal.
PIC Prof. Nelson An 25

Aprendiendo a Programar
3. Se emplean signos para consideraciones. Por ejemplo: efectuar determinadas

; se emplea para colocar observaciones. El Programa no


toma en cuenta todo lo que est en una lnea luego de dicho signo.

: se utiliza normalmente para definir etiquetas, que son


lugares a donde va el programa cuando as lo requiere.

se utilizan para decir que lo que est entre ellas es el


nmero y puede estar expresado en sistemas de numeracin decimal, binario hexadecimal.

. se emplea para definir un nmero en decimal.


4.
PIC

Un Programa siempre deber comenzar con la directiva ORG y terminar con la directiva END.
Prof. Nelson An 26

Instrucciones para Ensamblar Programas


MOVF LECTURA

movf
instruccin d={0,1} M(f) d=0 d=1 flagZ=1

f,d
operandos

0=< f=< 127


W M(f) M(f)=0

M=memoria M(f)=posicin de memoria

Cd. OP:001000dfff ffff movf d=0 d=1

PIC

Prof. Nelson An

27

Instrucciones para Ensamblar Programas


MOVWF mover a f ESCRITURA

movwf

0=< f=< 127


W M(f)

M=memoria M(f)=posicin de memoria

Cd. OP:0000001fff ffff

PIC

Prof. Nelson An

28

Instrucciones para Ensamblar Programas


Escribir un programa que copie el contenido del registro 0x20 al 0x30
Inicio

M (0x20)

movf 0x20,0

M(0x30)

movwf 0x30

Fin
PIC Prof. Nelson An

cdigo fuente
29

Instrucciones para Ensamblar Programas


Escribir un programa que copie el contenido del registro 0x20 al 0x30 List org p=16F628A 0x00

movf
movwf end

0x20,0
0x30

PIC

Prof. Nelson An

30

Instrucciones para Ensamblar Programas


Pasar del Cdigo fuente al cdigo mquina objeto, se llama compilacin o ensamblado, denominacin usada porque programamos en assembler. Programa a usar MPLAB Funciones: 1) editor de Fuente (ingresar cdigo fuente) 2) compilador (pasar cdigo fuente a cdigo mquina)

3) simulador
4) programar PIC
PIC Prof. Nelson An 31

Instrucciones para Ensamblar Programas


1) Crear un nuevo proyecto en men Project File Proyecto Fuente Ejemplo: New Project

2) Crear un archivo que contenga el cdigo fuente


New NOMBRE.pjt NOMBRE.asm Ej001.pjt Ej001.asm 3) Asignar al archivo de cdigo el proyecto Project
PIC

Edit Project
Prof. Nelson An 32

Instrucciones para Ensamblar Programas


MPLAB
Editor de texto
Ensamblador Simulador

Creacin de Proyecto
1. Project File Name New Proyect Ventana

nombre.pjt
Ej001.pjt
PIC

guardar en cualquier carpeta ej: example


Prof. Nelson An 33

dar OK

Instrucciones para Ensamblar Programas


2. Edit Project Tools

Development Mode:

Change

16F628A
Processor

Tools

MPLAB SIM SIMULATOR


3. Creacin Archivo Fuente File New

OK

Untilted 1

File

Save As

File Name

Ej001.asm

Salvar en la misma carpeta llamada example


PIC

OK

Prof. Nelson An

34

Instrucciones para Ensamblar Programas


4. Project Edit Project Add Node Ej001.asm Aceptar

Project Files Ej001 [.hex] Ej001 [.asm]


1 Tabulacin List org movf 1 Tabulacin p=16F628A 0x00 0x20,0

OK

movwf
end
PIC Prof. Nelson An

0x30

35

Instrucciones para Ensamblar Programas


5. File 6. Project Save Build All OK Mal Program Memory Memoria de Programa [formato instruccin] 0x20,w [00100000100000] [00000010110000]
36

Build Completed sucessfully Build Failed 7. Windows

apretar botn ROM cada posicin 14 bits 0000 0001


PIC

0820

movf

00B0 movwf 0x30


Prof. Nelson An

Instrucciones para Ensamblar Programas


7. Windows Windows Modify File Registers ( apretar RAM)

ADRESS: 0x20
Data/OPCODE: 0x75 WRITE Program Counter
PC: 0x00 W: 0x20 PC: 0x01 W: 0x75 PC: 0x02 W: 0x75

8. PIES (correr el programa)

9. DEBUG
PIC

SYSTEM RESET
Prof. Nelson An 37

Instrucciones para Ensamblar Programas


Escribir un programa que copie el contenido del registro 0x20 al 0x30 List org p=16F628A 0x00

movf
movwf end

0x20,0
0x30

PIC

Prof. Nelson An

38

Instruccin de Movimiento Instruccin de Suma


Instruccin Movimiento:

movlw k

0=< k =< 255


k w Cd. OP: 11 111x kkkk kkkk

Instruccin Suma: addlw k flags C, DC, Z Resultado=0 Z=1 Resultado>255 C=1


PIC Prof. Nelson An 39

0=< k =< 255


w+k w

afectados

Instruccin de Suma
Uso del C y DC:

DC=1 para valores > 15, sea 5 bit C=1 para valores > 255, sea 9 bit

PIC

Prof. Nelson An

40

Instruccin Suma

addwf

f,d

instruccin
d={0,1} W +M(f) W +M(f) flags

operandos

0=< f=< 127


W M(f) d=0 d=1

M=memoria M(f)=posicin de memoria

afectados

C, DC y Z

Cd. OP:00 0111dfff ffff

PIC

Prof. Nelson An

41

Instrucciones para Ensamblar Programas


Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y poner el resultado en 0x2E
Inicio

M (0x2C W+M (0x2D) W

W) W

movf 0x2C,0 addwf 0x2D,0

M(0x2E)
Fin

movwf 0x2E
cdigo fuente
42

PIC

Prof. Nelson An

Instrucciones para Ensamblar Programas


Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y poner el resultado en 0x2E

List Reset ORG movf addwf movwf end

p=16F628A 0x00 0x2C,0 0x2D,0 0x2E

PIC

Prof. Nelson An

43

Instruccin Resta

subwf

f,d

instruccin
d={0,1} M(f) - W M(f) - W flags

operandos

0=< f=< 127


W M(f) d=0 d=1

M=memoria M(f)=posicin de memoria

afectados

C, DC y Z

Cd. OP:00 0010dfff ffff

PIC

Prof. Nelson An

44

Instruccin Resta

sublw K

0=<K=< 255
K-W C=1 C=0 W flags afectados C, DC y Z Resultado >= 0 (+) Resultado < 0 (-)

Cd. OP:11 110xkkkk kkkk

PIC

Prof. Nelson An

45

Instruccin Resta

Los nmeros en el microcontrolador no pueden tener signos diferentes, por lo tanto vamos a utilizar el complemento A1 y el complemento A2. K-W=W 0000 0011-0000 0010 = mtodo complemento A1 = 1111 1101 complemento A2 1111 1101 + 1 1111 1110

Ejemplo: w=0000 0010

PIC

Prof. Nelson An

46

Instruccin Resta

Los nmeros en el microcontrolador no pueden tener signos diferentes, por lo tanto vamos a utilizar el complemento A1 y el complemento A2. K-W=W 0000 0011-0000 0010 = mtodo

0000 0011 1111 1110 0000 0001

PIC

Prof. Nelson An

47

Binario Codificado en Decimal (BCD) Formato BDC


23 0 1 2 3 4 0 0 0 0 0 22 0 0 0 0 1 21 0 0 1 1 0 20 0 1 0 1 0

5
6 7 8 9
PIC

0
0 0 1 1

1
1 1 0 0
Prof. Nelson An

0
1 1 0 0

1
0 1 0 1
48

Binario Codificado en Decimal (BCD) Formato BDC


BCD 29 23 2 2 21 20 0 0 1 0 23 2 2 21 20 1 0 0 1

El principio en que se basa el BCD es sencillo. Para poder codificar los dgitos de 0 a 9 se usan 4 bits (con 3, slo se habra podido codificar 8 dgitos) que en principio serviran para codificar hasta 16 dgitos. El dgito 1 por ejemplo se representa mediante el cdigo 0001 y el 9 mediante el cdigo 1001.

Desafortunadamente con 4 bits se alcanzan 16 combinaciones distintas, por lo que las 1010 a 1111 no tiene aplicacin, y por lo tanto no se utilizan, es decir son ilegales en un cdigo BCD.
PIC Prof. Nelson An 49

Binario Codificado en Decimal (BCD) Formato BDC


Consecuentemente complicadas. las operaciones aritmticas resultan

Ejemplo de cmo se suman 2 nmeros en BCD: 0001 + 0011 = 0100 1 + 3 = 4 resultado correcto

1000 + 1000 = 1 0000 8 + 8 = 16 En BCD esto es un 1 seguido de un 0, es decir un 10 El resultado es incorrecto. La razn es obvia, al usar las reglas de adicin binaria normal habr que saltar los 6 dgitos ilegales en BCD, del 1010 al 1111.
PIC Prof. Nelson An 50

Binario Codificado en Decimal (BCD) Formato BDC


Dicho de otra manera hay que sumar 6 al resultado siempre que caiga dentro de la zona de cdigos ilegales. Veamos un Ejemplo: 1000 + 0110 = 10110 sea en BCD tenemos entonces un 1 seguido de un 6, es decir 16, que es el resultado correcto. Al usar la notacin BCD, tendremos pues que sumar 6 al resultado de la adicin, cuando sta se realice a travs de la zona de cdigos ilegales.

PIC

Prof. Nelson An

51

Instrucciones para Ensamblar Programas


Restar el contenido de 2 posiciones de memoria 0x1A y 0x0A y poner el resultado en 0x2A
Inicio

M (0x0A M(0x1A)-W W

W) W

movf 0x0A,0 subwf 0x1A,0

M(0x2A)
Fin

movwf 0x2A
cdigo fuente
52

PIC

Prof. Nelson An

Instrucciones para Ensamblar Programas


Restar el contenido de 2 posiciones de memoria 0x1A y 0x0A y poner el resultado en 0x2A

List Reset ORG movf subwf movwf end

p=16F628A 0x00 0x0A,0 0x1A,0 0x2A

PIC

Prof. Nelson An

53

Configuracin de los pines en Entradas / Salidas


En esta parte del curso nos vamos a familiarizar con la configuracin de los pines, y los registros PORTA, PORTB, TRISA y TRISB. Recordemos que estos registros especficos pertenecen a la memoria de datos y estn ubicados en los llamados bancos de la misma. En las siguientes diapositivas se muestra nuevamente la informacin que suministra el fabricante. El objetivo de esto es comunicarnos con el mundo exterior a travs de los pines de entrada, y activar a travs de los pines de salida, dispositivos que nos permitan la visualizacin sonorizacin de las actividades que son controladas a travs de un programa que se ejecuta en el microcontrolador 16F628A.

PIC

Prof. Nelson An

54

Sntesis de los 16 pines del 16F628A


PORTA RA0 RA7 PORTB RB0 RB7

16 PINES Posibles ENTRADAS/SALIDAS

RA2 / VA2 / Vrfe = sirve como in-out como comparador RA4 entrada Schmitt Trigger RA4 salida Open drain = salida colector abierto RA5 entrada Schmitt Trigger, sin driver de salida, es un pin que se configura como entrada RA0 RA2 pueden usarse como entradas de los comparadores analgicos RA3 puede usarse como entrada de comparadores analgicos

PIC

Prof. Nelson An

55

MEMORIA DE DATOS

TRIS TRANSFORMER INPUT SOURCE TRANSFORMAR ENTRADA FUENTE TRISA Programa el PORT A M(f)=0x85 TRISB Programa el PORT B M(f)=0x86

BIT=0
BIT=1
PIC

salida
entrada
Prof. Nelson An 56

PIC

Prof. Nelson An

57

ORGANIZACIN DE LA MEMORIA
La tabla anterior indica como acceder a los cuatros bancos de registros: Direcciones F0h-FFh, 170h-17Fh y 1F0h-1FFh se implementan como una RAM comn, y mapeada desde la direccin 70h-7Fh. REGISTRO DE PROPSITOS GENERALES: El registro de Archivos esta organizado como 224x8 en el PIC 16F62X. Se accede tambin directamente e indirectamente a travs del Registro de Seleccin de Archivo (FSR).
PIC Prof. Nelson An 58

PIC

Prof. Nelson An

59

Instrucciones para Ensamblar Programas


bsf f,b

set (pone a 1) el bit b de la posicin f de la memoria

0=< f=< 127


0 =< b =< 7

M=memoria

M(f)=posicin de memoria

Cd. OP:01 01bb bfff ffff

PIC

Prof. Nelson An

60

Instrucciones para Ensamblar Programas


bcf f,b

reset (pone a 0) el bit b de la posicin f de la memoria

0=< f=< 127


0 =< b =< 7

M=memoria

M(f)=posicin de memoria

Cd. OP:01 00bb bff ffff

PIC

Prof. Nelson An

61

REGISTRO DE STATUS
Status Register:

El Registro de Estado, mostrado en el registro 3-1, contiene: el estado aritmtico de la ALU, el estado reset y los bits que se seleccionan para ingresar al banco de la memoria de datos.
El registro de Estado puede ser destino para cualquier instruccin, y de cualquier otro registro. Si el registro de Estado es destino de una instruccin, sta afecta el Z (Cero) y los bits de medio acarreo y acarreo (DC C), entonces l escribe en estos tres bits que estn deshabilitados. Los bits son uno (set), o Cero (cleared) de acuerdo a la lgica del dispositivo.Adems los bits TO y PD no se pueden escribir. Por consiguiente, el resultado de una instruccin con el registro de Estado como destino puede ser diferente al intentado.
PIC Prof. Nelson An 62

REGISTRO DE STATUS
REGISTRO de Estado:

Por ejemplo, CLRF STATUS borrara los tres bits altos y pondr a uno el bit de Cero (Z). Esto lo vemos como 000uu1uu (donde u = unchanged).
Se recomienda el uso solamente de BCF, BSF, SWAPF and MOVWF, instrucciones usadas para alterar el Registro de Estado porque estas instrucciones no afectan ningn bit de estado. Para otras instrucciones, que no afecten ningn bits de estado, ver el set de instrucciones.

PIC

Prof. Nelson An

63

PIC

Prof. Nelson An

64

PIC

Prof. Nelson An

65

MTODO PARA ELEGIR BANCOS


Los bits RP1 y RP0 del registro de Status y las instrucciones bsf y bcf, son quienes nos posibilitan cambiar de bancos en la memoria de datos. Ejemplo: Para elegir el banco 1: RP1=0 RP0=0 Status, RP1=bit6 Status, RP0=bit5 M(f)=Status=0x03
PIC Prof. Nelson An 66

bcf bsf

Status, RP1 Status, RP0 bcf bsf 0x03,6 0x03,5

MTODO PARA ELEGIR BANCOS


Los bits RP1 y RP0 del registro de Status y las instrucciones bsf y bcf, son quienes nos posibilitan cambiar de bancos en la memoria de datos. Ejemplo: TABLA para Eleccin de BANCOS

BANCO 0
bcf 0x03,6 bcf 0x03,5

BANCO 1
bcf 0x03,6 bsf 0x03,5

BANCO 2
bsf 0x03,6 bcf 0x03,5

BANCO 3
bsf 0x03,6 bsf 0x03,5

PIC

Prof. Nelson An

67

Configuracin de los pines en Entradas / Salidas


Programar todas las lneas del PORTA como entrada y todas las lneas del PORTB como salida
Inicio

Selecciono Banco1

bcf 0x03,6 bcf 0x03,5 movlw 0xFF movwf 0x85 movlw 0x00

0xFF 0x00

TRISA TRISB
Fin

movwf 0x86
cdigo fuente
68

PIC

Prof. Nelson An

Instrucciones para Ensamblar Programas


Programar todas las lneas del PORTA como entrada y todas las lneas del PORTB como salida.

Status TRISA TRISB Reset

PIC

List EQU EQU EQU ORG bcf bsf movlw movwf movlw movwf bcf end

p=16F628A 0x03 0x85 0x86 0x00 Status,6; selecciono Banco 1 Status,5; selecciono Banco 1 0xFF TRISA; programo PuertaA 0x00 TRISB; programo PuertaB Status,5; selecciono Banco 0
Prof. Nelson An 69

Aplicacin 1: Diagrama de Flujo

Instruccin GOTO Salto incondicional a la direccin que vaya precedida como (etiqueta) GOTO K 0<= K <=2047

Inicio

Programar PORTA y PORTB

GOTO

RUTINA

Leer PORTA

Pepe btfss portA, 1


btfcs portA, 1 GOTO Pepe
PIC

Escribir en PORTB

Prof. Nelson An

70

Aplicacin 1: Diagrama de Flujo

Programar todas las lneas del PORTA como entrada y todas las lneas del PORTB como salida. A continuacin leer contnuamente la PuertaA y copiar su contenido en la PuertaB.
PIC

Inicio

Programar PORTA y PORTB

Leer PORTA

Escribir en PORTB

Prof. Nelson An

71

Aplicacin 1:
Cdigo Fuente
STATUS PORTA PORTB TRISA TRISB CMCON RESET

List
EQU EQU EQU EQU EQU EQU ORG movlw movwf bcf bsf movlw movwf movlw movwf bcf RUTINA movf movwf goto end

p=16F628A
0x03 0x05 0x06 0x85 0x86 0x1F 0x00; posicin inicial del programa 0x07; deshabilito comparadores CMCON; deshabilito comparadores Status,6; selecciono Banco 1 Status,5; selecciono Banco 1 0xFF TRISA; programo PuertaA 0x00 TRISB; programo PuertaB Status,5; selecciono Banco 0 PORTA, 0; PORTA PORTB; W RUTINA W PORTB

REGISTROS PCL Y PCLATH


REGISTROS PCL y PCLATH :

GOTO COMPUTADO: El PC est formado por dos registros: PCLATH + PCL = PC


Siendo PCLATH = PC<12:8>

Y PCL = PC<7:0>
Por lo tanto, cuando se suma este registro PC con uno de los 8 bits, slo se estar modificando los bits menos significativos de PC. Esto es lo que produce que al hacer una tabla se pueda direccionarcomo mximo 255 posiciones aproximadamente. Solucin: el PCLATH es un registro modificable.
PIC Prof. Nelson An 73

REGISTROS PCL Y PCLATH


REGISTROS PCL y PCLATH:

Existen 2 formas de modificar el PC:


1. Mediante un goto computado, que se refiere a operaciones aritmticas ( lgicas) que modifiquen al PCL. 2. Mediante las instrucciones de salto(goto y call).

PIC

Prof. Nelson An

74

REGISTROS PCL Y PCLATH


REGISTROS PCL y PCLATH :

GOTO COMPUTADO: Estas instrucciones ponen el resultado de la operacin llevada a cabo en los bits menos significativos (8)del registro PC, pero tambin copian el contenido de PCLATH a la parte alta del registro PC.
INSTRUCCIONES DE SALTO: A estas instrucciones, se les pasa como parmetro un nmero de 11 bits (que uno generalmente reemplaza por un label, por ejemplo goto loop), y cuando se ejecuta esta instruccin se copian del PCLATH al PC los bits 12 y 11 del PC. En estas instrucciones es donde est el problema del salto, cuando la memoria de programa tiene ms de 2K.
PIC Prof. Nelson An 75

REGISTROS PCL Y PCLATH


REGISTROS PCL y PCLATH :

Al igual que todos los registros especficos que controlan la actividad del procesador, el Contador de Programa est implementado sobre un par de posiciones de la memoria de datos (RAM). Cuando se escribe el Contador de Programa como resultado de una operacin de la ALU, los 8 bits de menos peso del PC residen en el registro PCL, que ocupa, repetido, la posicin 2 de los dos bancos de la memoria de datos.
Los bits de mas peso, PC<12:8>, residen en los 5 bits de menos peso del registro PCLATH, que ocupa la posicin 0A H de los bancos de la memoria de datos.
PIC Prof. Nelson An 76

REGISTROS PCL Y PCLATH


En las instrucciones GOTO y CALL los 11 bits de menos peso del PC provienen del cdigo de la instruccin y los otros dos de los bits PCLATH<4:3> ver hoja del manual del fabricante (fig33). Como los 11 bits que se cargan en el PC desde el cdigo de las instrucciones GOTO y CALL, se puede direccionar una pgina de 2K de la memoria.
Los bits restantes PC<12:11> tienen la misin de apuntar una de las cuatro pginas del mapa de memoria, y en los modelos de PIC que alcanzan ese tamao, dichos bits proceden de PCLATH<4:3>. La Pila es una zona aislada de las memorias de programa y datos.
Prof. Nelson An 77

PIC

STACK O PILA
Tiene una estructura LIFO, en la que el ultimo valor guardado es el primero que sale. Tiene 8 niveles de profundidad, cada uno con 13 bits. Funciona como un <buffer> circular, de manera que el valor que se obtiene al realizar el noveno <desempilado> (pop) es igual al que se obtuvo en el primero. La instruccin CALL y las interrupciones originan la carga del contenido del PC en el nivel superior o <cima> de la Pila. El contenido del nivel superior se saca de la Pila al ejecutar las instrucciones RETURN, RETLW y RETFIE. El contenido del registro PCLATH no es afectado por la entrada o salida de la informacin de la Pila.
PIC Prof. Nelson An 78

PIC

Prof. Nelson An

79

STACK O PILA
En la figura superior se muestra como se carga el PC cuando una instruccin deposita en l, el resultado que se obtiene de la ALU. Abajo se indica la carga del PC en las instrucciones GOTO Y CALL. En la diapositiva donde el fabricante muestra al PCH y PCL como ambos formando el registro PC sumando bit a bit hablamos 0 a 12, o sea 13 bits, encontramos que de estos 13 bits, 11 bits son del cdigo de Operacin de la instruccin.

Goto k :101 kkk kkkk kkkk

PIC

Prof. Nelson An

80

Instrucciones para Ensamblar Programas


comf f,d complemento

complemento M(f)
(intercambia 1 y 0)

d={0,1}

d=0
d=1

W
M(f)

M(f)=posicin de memoria flags afectados Z

Cd. OP:00 0111dfff ffff

PIC

Prof. Nelson An

81

Instrucciones para Ensamblar Programas


clrf

0x00
flags

M(f)

borra cualquier posicin de memoria M(f)=posicin de memoria


afectados Z=1

Z=1
Z=0

si el resultado es = 0
si el resultado es = 0

Cd. OP:00 0001 1fff ffff

PIC

Prof. Nelson An

82

Instrucciones para Ensamblar Programas


clrw borra el registro W

flags
Z=1 Z=0

afectados
si el resultado es = 0 si el resultado es = 0

Z=1

Cd. OP:00 0001 0000 0011

PIC

Prof. Nelson An

83

Instrucciones para Ensamblar Programas


incf f,d incrementa f

M(f) + 1
flags

d={0,1}
afectados

d=0
d=1

W
M(f) Z

Cd. OP:00 1010 dfff ffff decf M(f) - 1 flags


PIC

f,d

decrementa f d={0,1} afectados


Prof. Nelson An

d=0

d=1
Cd. OP:00 0011 dfff ffff

M(f)
Z
84

Instrucciones para Ensamblar Programas


btfsc f,d test de bit y salto

Salta una instruccin si f(b) es = 0


0 =< b =< 7 Cd. OP:01 10bb bfff ffff btfss f,d test de bit y salto

Salta una instruccin si f(b) es = 1 0 =< b =< 7

Cd. OP:01 11bb bfff ffff


Las instrucciones que saltan una sola instruccin, son saltos condicionados.
PIC Prof. Nelson An 85

Direccionamiento de la Memoria de Datos


En los PIC de la gama media la memoria de datos est organizada para alojar un mximo de 4 bancos de 128 bytes cada uno. En los mismos se destinan 2 bits del registro de status (RP0 y RP1) para determinar el banco y otros 7 para elegir una de las 128 posiciones del banco seleccionado. DIRECCIONAMIENTO DIRECTO: El operando que utiliza la instruccin en curso se referencia mediante su direccin, que viene includa en el cdigo OP de la misma, concretamente en los 7 bits de menos peso. El banco a acceder lo determinan los bits RP0 y RP1 del registro de status.
PIC Prof. Nelson An 86

Direccionamiento de la Memoria de Datos


DIRECCIONAMIENTO INDIRECTO: Este modo de direccionamiento se usa cuando en una instruccin se utiliza como operando el registro INDF (direccin 0x00 en todos los bancos). El registro INDF no est implementado fsicamente y cuando se le hace referencia, se accede a la direccin de un banco especificada con los 7 bits de menos peso del registro FSR (posicin 0x04 en todos los bancos). El bit de ms peso del FSR junto al bit IRP del registro de status se encargan de seleccionar el banco a acceder, mientras que los 7 bits de menos peso del FSR apuntan a la posicin. INDF = contenido del FSR
PIC Prof. Nelson An 87

Direccionamiento de la Memoria de Datos


INDICE

clrf

M (indice)

8 Seleccin del banco

7 Localizacin seleccin direccin de memoria

PIC

Prof. Nelson An

88

Direccionamiento de la Memoria de Datos


IRP = Punto Registro Indirecto

0 x 20

FSR

carga FSR

M (0x00)

0 x 1E

M (0x00)

1E

0x 20

PIC

Prof. Nelson An

89

Direccionamiento Indirecto
Poner a
0x00 las posiciones 0x20 a 0x2F del banco 0
0 x 20 M (0x00) FSR + 1

Start
FSR INDF FSR

apunto con FSR borrado 0 x 20

No

bit 4 de FSR=1
Si End

PIC

Prof. Nelson An

90

Direccionamiento Indirecto
INDF STATUS FSR RESET List EQU EQU EQU ORG bcf movlw movwf clrf incf btfss goto end p=16F628A 0x00 0x03 0x04 0x00 Status,7; 0 IRP 0 x 20; FSR; FSR apunta a posicin 0x20 INDF; borra posicin de memoria FSR; FSR + 1 FSR,incremento puntero FSR,4; todo borrado NEXT; no borra la siguiente ; si contina el programa

NEXT

Instrucciones para Ensamblar Programas


incfsz M(f) + 1 f,d incremento y salto d={0,1} d=0 W d=1 M(f) flags afectados Z Cd. OP:00 1111 dfff ffff decfsz M(f) - 1 f,d decremento y salto d={0,1} d=0 W d=1 M(f) flags afectados Z Si el resultado es 0 salta por encima de la siguiente instruccin Cd. OP:00 1011 dfff ffff
PIC Prof. Nelson An 92

Instrucciones para Ensamblar Programas


Andlw K

0=<K=< 255
WK W

flags

afectados

Realiza funcin AND, operacin bit a bit K constante operacional

Cd. OP:11 1001 kkkk kkkk

PIC

Prof. Nelson An

93

Instrucciones para Ensamblar Programas


Andwf f,d

WM(f)
flags

d={0,1}
afectados Z

d=0
d=1

W
M(f)

Realiza funcin AND, operacin bit a bit Cd. OP:00 0101 dfff ffff

PIC

Prof. Nelson An

94

Instrucciones para Ensamblar Programas


IORlw K

0=<K=< 255
W+K flags W afectados Z

Realiza funcin OR, operacin bit a bit K constante operacional Cd. OP:11 1000 kkkk kkkk

PIC

Prof. Nelson An

95

Instrucciones para Ensamblar Programas


IORwf W+M(f) flags f,d d={0,1} Z

d=0 d=1

W M(f)

afectados

Realiza funcin OR, operacin bit a bit


Cd. OP:00 0100 dfff ffff

PIC

Prof. Nelson An

96

Instrucciones para Ensamblar Programas


XORlw K

0=<K=< 255
W + K flags W Z afectados

Realiza funcin OR exclusiva, operacin bit a bit K constante operacional Cd. OP:11 1010 kkkk kkkk

PIC

Prof. Nelson An

97

Instrucciones para Ensamblar Programas


XORwf f,d

W + M(f)
flags

d={0,1}
Z

d=0 d=1

W M(f)

afectados

Realiza funcin OR exclusiva, operacin bit a bit


Cd. OP:00 0110 dfff ffff

PIC

Prof. Nelson An

98

Instrucciones para Ensamblar Programas


swapf f,d intercambio de f

instruccin
d={0,1} M(f) M(f) flags

operandos

0=< f=< 127


W M(f) d=0 d=1

M=memoria M(f)=posicin de memoria

ninguno afectado

Intercambia el nibble ms significativo y el menos significativo de M(f) Cd. OP:00 1110 dfff ffff
PIC Prof. Nelson An 99

Instrucciones para Ensamblar Programas


RLF f,d rota a la izquierda

instruccin
d={0,1} M(f) M(f) flags

operandos

0=< f=< 127


W M(f) d=0 d=1 C

M=memoria M(f)=posicin de memoria

afectado

Cd. OP:00 1101 dfff ffff

PIC

Prof. Nelson An

100

Instrucciones para Ensamblar Programas


RRF f,d rota a la derecha

instruccin
d={0,1} M(f) M(f) flags

operandos

0=< f=< 127


W M(f) d=0 d=1 C

M=memoria M(f)=posicin de memoria

afectado

Cd. OP:00 1100 dfff ffff

PIC

Prof. Nelson An

101

Instrucciones de Control y Especiales


En este grupo se incluyen las instrucciones que desvan la secuencia normal del programa, porque alteran el contenido del PC, y tambin las instrucciones especiales. La instruccin de salto incondicional goto carga en el PC la direccin de la nueva instruccin. La instruccin call de llamada a subrutina, antes de cargar el PC con la direccin de la instruccin a saltar, salva la direccin de partida guardando en la cima de la pila el valor actual del PC. De esta manera, al retornar de la subrutina se saca de la pila la direccin de regreso en el programa principal. Para realizar un retorno de una subrutina se pueden emplear dos instrucciones la ms habitual es return, que se limita a extraer de la cima de la pila el valor que carga en el PC.
PIC Prof. Nelson An 102

Instrucciones de Control y Especiales


Otra ms compleja es retlw k, que, adems de hacer lo mismo que return, carga en w el valor inmediato k que contiene. Es decir, devuelve un parmetro desde la subrutina. Para el final de las interrupciones hay otra instruccin cuyo nemnico es retfie. La operatividad de esta instruccin consiste en cargar en el PC el contenido de la cima de la pila y poner el bit GIE=1, pues al comenzar la interrupcin este bit se pone automticamente a cero para evitar que cuando se atienda una interrupcin se produzca otra. GIE es el bit de permiso de todas las interrupciones. En cuanto a las instrucciones especiales se han includo dos en este grupo: clrwdt y sleep.
PIC Prof. Nelson An 103

Instrucciones de Control y Especiales


La primera pone a cero el contenido del perro guardin, decir, lo refresca lo reinicializa. El perro guardin si desborda (pasa de 0xff a 0x00) provoca un Reset. instruccin clrwdt hay que colocarla estratgicamente ciertos puntos del programa para evitar la reinicializacin. es se La en

Ejemplo: explicar las diferencias entres las tres instrucciones de retorno. Solucin: Return: retorna de una subrutina al programa principal. Carga al PC con el contenido de la cima de la pila. Retlw k: hace los mismo que Return y, adems, carga en w el literal k. Retfie: carga al PC con el contenido de la cima de la pila y pone GIE=1.
PIC Prof. Nelson An 104

SUBRUTINAS
En ocasiones es necesario realizar un mismo procedimiento en distintos lugares de un programa, por ejemplo desplegar valores en un display. En este caso es ms cmodo y ahorra memoria incluir una sola vez ese trozo de cdigo y utilizarlo (invocarlo) desde distintos puntos del programa, a ese cdigo se le llama SUBRUTINA. Las llamadas a subrutina mediante la instruccin CALL son desviaciones del flujo de control del programa originadas por instrucciones, por lo que se consideran sncronas. Se producen cada vez que se ejecuta dicha instruccin.
PIC Prof. Nelson An 105

SUBRUTINAS
Se puede, a lo sumo, usar 8 subrutinas anidadas (stack 8 level de 13 bits) Instruccin CALL K (salto a Subrutina) K=posicin de memoria de programa 0<= K<=2047

1)La direccin de retorno (PC+1) es guardada en el Stack.


2)Los 11 bits de la direccion K, son cargados en el PC (PCL y PCLATH)

PIC

Prof. Nelson An

106

SUBRUTINAS
Carga en el Program Counters (PC) el contenido de la cima de Pila, dejando adems la cima libre
Representacin de Subrutina En Diagrama de Flujo

Nombre de la Subrutina

PIC

Prof. Nelson An

107

SUBRUTINAS
RETURN: retorna a subrutina

RETLW K (RETORNO, CARGA W)


0<=K<=255 1)Carga en el PC la direccin guardada en la cima del STACK (dejando la cima libre) 2) Carga K------W RETLW K va en lugar del RETURN

PIC

Prof. Nelson An

108

SUBRUTINAS DE TEMPORIZACIN
Ejemplo: Realizar un temporizador delay de 0,5 segundos con un PIC 16F628A a una frecuencia de 1 MHz. Datos: 1 ciclo instruccin = 4T 1 MHz = 1 x 10 6 Hz 1 ciclo = 1 MHz x 4= 4 x 10 6 Hz

1 MHz
CLK = 1 us

PIC

Prof. Nelson An

109

SUBRUTINAS DE TEMPORIZACIN
Ejemplo: Realizar un temporizador delay de 0,5 segundos con un PIC 16F628A a una frecuencia de 1 MHz. Datos: 1 ciclo instruccin = 4T 1 MHz = 1 x 10 6 Hz 1 ciclo = 1 MHz x 4= 4 x 10 6 Hz T = 1/f = 1 us 1 clock = 1 us 0.5 seg/ 4 x 10 6 Hz = 125.000 ciclos de instruccin que equivalen a 0,5 seg

PIC

Prof. Nelson An

110

SUBRUTINAS DE TEMPORIZACIN
Para lograr este tiempo lo que debo hacer es decrementar (el decremento se puede hacer hasta 256). Es decir necesito decrementar de 248 a 0 para que los nmeros sean exactos. De 248 a 0 hay 249 nmeros contando el 0 y dicha instruccin al llegar al nmero deseado salta un ciclo ms, es decir decrementa 250. Esto es lo que tenemos que obtener: 125.000/ 250 = 500, son las veces que tengo que repetir el decremento para obtener 0,5 segundos 500 miliseg

PIC

Prof. Nelson An

111

inicio

A=2

B = 248

C = 248

DECRE C
NO

C=0
SI

1 A B

DECRE B

NO

B=0
SI

DECRE A

NO

A=0
SI
end

VAR1 VAR2 VAR3 RESET INICIO

List EQU EQU EQU ORG movlw movwf movlw movwf

p=16F628A 0x21 0x22 0x23 0x00 02 h VAR1 248 h VAR2

; demora 0,5 seg

movlw
movwf DECO decfsz goto DOS decfsz goto UNO decfsz goto nop end

248 h
VAR3 VAR3,1 deco VAR2,1 dos VAR1,1 inicio ; (VAR3,1) ; (VAR1,1)

SUBRUTINAS DE TEMPORIZACIN
Para poder ver el tiempo que demora el programa se debe fijar un comienzo y un fin. El comienzo donde el programa dice inicio, y el fin lugar donde vamos a escribir la instruccin NOP antes de la directiva END. Usando el MPLAB para verificar el tiempo que logro obtener vamos a DEBUG.....RUN.....RESET. Luego voy a OPTION DEVELOPMENT MODE elijo el PIC 16F628A clock de 1 MHz y acepto. En ese momento se modifica la configuracin en el MPLAB, indicando que qued pronto para funcionar a esa frecuencia. Luego voy a WINDOWS STOP WATCH (donde se indican los milisegundos) y en el programa indico los puntos de BREAK POINT que corresponden a donde empieza el programa (goto inicio) hasta NOP (lo tenemos que poner para que detenga el conteo).
PIC Prof. Nelson An 115

SUBRUTINAS DE TEMPORIZACIN

PIC

Prof. Nelson An

116

SUBRUTINAS DE TEMPORIZACIN

PIC

Prof. Nelson An

117

PIC

Prof. Nelson An

118

PIC

Prof. Nelson An

119

PIC

Prof. Nelson An

120

PIC

Prof. Nelson An

121

PIC

Prof. Nelson An

122

PIC

Prof. Nelson An

123

PIC

Prof. Nelson An

124

PIC

Prof. Nelson An

125

PIC

Prof. Nelson An

126

SUBRUTINAS DE TEMPORIZACIN
;PIC Time Delay = 0,5000020 s with Osc = 1.000000 MHz movlw D'3' movwf CounterC movlw D'140' movwf CounterB movlw D'83' movwf CounterA loop decfsz CounterA,1 goto loop decfsz CounterB,1 goto loop decfsz CounterC,1 goto loop return
PIC Prof. Nelson An 127

SUBRUTINAS DE TEMPORIZACIN

PIC

Prof. Nelson An

128

TEMPORIZADORES

PIC

Prof. Nelson An

129

TEMPORIZADORES
La frecuencia de trabajo del microcontrolador es un parmetro fundamental a la hora de establecer la velocidad en la ejecucin de instrucciones y el consumo de energa. Los pulsos de reloj externos entran por la patita OSC1/CLKIN y se dividen por cuatro internamente dando lugar a las seales Q1, Q2, Q3 y Q4, que configuran un ciclo de instruccin. Durante un ciclo de instruccin, que comprende las cuatro seales mencionadas, se desarrollan las siguientes operaciones:
PIC Prof. Nelson An 130

TEMPORIZADORES
Q1: Durante este impulso se incrementa el contador de programa.
Q4: Durante este impulso se busca el cdigo de la operacin en la memoria de programa y se carga en el registro de instrucciones. Q2-Q3: Durante la actividad de estas dos seales se produce la decodificacin y la ejecucin de la instruccin. Para conseguir ejecutar cada instruccin en un ciclo de instruccin, se aplica la tcnica de segmentacin, que consiste en realizar en paralelo las dos fases que comprenden cada instruccin.
PIC Prof. Nelson An 131

TEMPORIZADORES
Cada instruccin se ejecuta en 2 ciclos: en el primero se lleva a cabo la fase de bsqueda del cdigo de la instruccin en la memoria del programa, y en el segunda se decodifica y se ejecuta (fase de ejecucin). La estructura segmentada del procesador permite realizar al mismo tiempo la fase de ejecucin de una instruccin y la bsqueda de la siguiente instruccin. Cuando la instruccin ejecutada corresponde a un salto no se conoce cul ser la siguiente hasta que se complete, por eso en esta situacin se sustituye la fase de bsqueda de la siguiente instruccin por un ciclo vaco, originando que las instrucciones de salto tarden en realizarse dos ciclos de instruccin. Ver figura 2-1 del fabricante.
PIC Prof. Nelson An 132

TEMPORIZADORES

PIC

Prof. Nelson An

133

PIC

Prof. Nelson An

134

PIC

Prof. Nelson An

135

PIC

Prof. Nelson An

136

PIC

Prof. Nelson An

137

PIC

Prof. Nelson An

138

PIC

Prof. Nelson An

139

PIC

Prof. Nelson An

140

PIC

Prof. Nelson An

141

PIC

Prof. Nelson An

142

PIC

Prof. Nelson An

143

PIC

Prof. Nelson An

144

TEMPORIZADOR TMR0
REGISTRO OPCION:

OPTION Register es un registro de lectura y escritura, el cual contiene varios bits de control para configurar el TMRO/WDT prescaler, la interrupcin externa RBO/INT, el TMRO y las resistencias de pull-up del puerto B.

PIC

Prof. Nelson An

145

PIC

Prof. Nelson An

146

TEMPORIZADOR TMR0

PIC

Prof. Nelson An

147

TEMPORIZADOR TMR0
La programacin del temporizador frecuencia de trabajo del PIC. Frecuencia de oscilacin: 4 MHz depende T= 250ns de la

ciclo de instruccin = 1us

En los programas de control es necesario determinar intervalos concretos de tiempos.


Hacer esto por medio de loop (bucle) de programa desperdiciara capacidad de proceso y no siempre fcil de calcular con exactitud. Tambin es necesario contar la cantidad de veces que ocurre un evento externo, el PIC 16F628A dispone de un Timer y Contador de 8 bits llamado TMR0. Prof. Nelson An 148

PIC

TEMPORIZADOR TMR0
MODOS DE FUNCIONAMIENTO:

1) CONTADOR DE SUCESO: El contador TMR0 cuenta los impulsos que se aplican al Pin RA4/TOCK1/CMP2.
Al llegar al valor FF se desborda el contador y con el siguiente impulso pasa a 00, activando un flag (y provocando una interrupcin ,si estn habilitados). Este flag debe ser luego puesto a 0 por el programa. 2) TIMER: El TMRO se incrementa con cada ciclo de instruccin (Frec.oscil/4), hasta que d overflod, pasando de FF a 00, activando un flags (provocando una interrupcin si estn habilitadas). Si el registro TMR0 est escrito, el incremento es inhibido durante los 2 prximos ciclos de instruccin.
PIC Prof. Nelson An 149

TEMPORIZADOR TMR0
Tiempo = Frec.oscil/4

Timer
Cristal 4 MHz T = 250 ns

Ciclo instruccin
1 MHz Ciclo instruccin

T x 4 = 1 us
T = 1 us T x 4 = 4 us T (perodo de instruccin)

PIC

Prof. Nelson An

150

TEMPORIZADOR TMR0
REGISTRO TMR0:

El dispositivo 16F628A dispone de un TMR0.


El TMR0 es un contador ascendente de 8 bits, que puede funcionar como reloj interno externo y ser sensible al flanco ascendente descendente. Se le puede asignar el divisor de frecuencia. Una novedad importante en el TMR0 es la posibilidad de generar una interrupcin cuando se desborda.

PIC

Prof. Nelson An

151

TEMPORIZADOR TMR0
REGISTRO TMR0: Funcionamiento en 10 puntos:
1. El bit T0CS (OPCION<5>) determina si est a 1 que el TMR0 funciona en modo contador y si est a 0 en modo de temporizador, con seal externa de reloj por T0CKI.
2. En el modo contador, el bit TOSE (OPCION<4>) selecciona el tipo de flanco activo en T0CKI. (1: descendente y 0: ascendente).

3. En modo contador el perodo de la seal externa debe ser como mnimo de 4 Tosc. En el modo temporizador la frecuencia de trabajo es Fosc/4.
PIC Prof. Nelson An 152

TEMPORIZADOR TMR0

4. El bit PSA (OPTION<3>) asigna el divisor de frecuencia al TMR0 si est a 0 y al WDT si est a 1. 5. El ratio al que funciona el divisor de frecuencia se elige con los bits PS2, PS1 y PS0 (OPTION<2:0>).

6. El TMR0 se puede leer en cualquier momento para conocer el estado de la cuenta.


7. Cuando se escribe un nuevo valor en TMR0 para establecer una nueva temporizacin, los incrementos del mismo se inhiben durante los dos ciclos de reloj posteriores.
PIC Prof. Nelson An 153

TEMPORIZADOR TMR0
8. Como es un contador ascendente, conviene cargarle con el complemento a 2 del valor deseado para la temporizacin. Se utilizan las mismas frmulas indicadas en la descripcin del TMR0. 9. Cuando se desborda el TMR0, es decir, cuando pasa del valor FF h a 00 h, se activa el bit <2> de INTCON (T0IF). Acta como una bandera de sealizacin del desbordamiento. Si adems, el bit <7> de dicho registro est a 1 (Permiso de interrupcin), se genera una interrupcin. El bit T0IF se debe borrar por software una vez atendida la interrupcin. 10. En el modo de reposo (Sleep) el TMR0 se detiene, por lo que no puede originar interrupcin.
PIC Prof. Nelson An 154

TEMPORIZADOR TMR0
TMR0
BANCO 0 BANCO 1

0 x 01

TMR0

0 x 81

OPTION

0 x 0B

INTCON

0 x 8B

INTCON
155

PIC

Prof. Nelson An

TEMPORIZADOR TMR0
BITS DEL REGISTER OPTION:

TOCS
5 BIT = TOCS

TOSE
4

OPTION (0 x 81)

TOCS: TMR0 CLOCK SOURCE


1 = TRANSICIN EN RA4/TOCK1(contador) 0 = CLOCK INTERNO DE CICLO DE INSTRUCCIN

PIC

Prof. Nelson An

156

TEMPORIZADOR TMR0
BITS DEL REGISTER OPTION:

TOCS
5 BIT = TOSE

TOSE
4

OPTION (0 x 81)

TOSE: TMR0
1 = 0 =

SOURCE EDGE SELECT BIT


(1 (0 0) RA4/TOCK1 1) RA4/TOCK1

INCREMENTA EN INCREMENTA EN

PIC

Prof. Nelson An

157

TEMPORIZADOR TMR0
REGISTRO INTCON:
El INTCON es un registro de lectura y escritura, el cual contiene habilitadas varias banderas de bits, todas fuentes de interrupcin, excepto el mdulo de comparacin. Mire la Seccin 3.2.2.4 PIE1 Register y la Seccin 3.2.2.5 PIR1 Register para una descripcin de la habilitacin del comparador y sus bits. 3.2.2.4 PIE1 Register: Este registro contiene bits que habilitan interrupciones 3.2.2.5 PIR1 Register: Este registro contiene bits de interrupcin. Nota: Los bits de interrupcin se ponen a uno 1 cuando ocurre una condicin de interrupcin, guardndose el estado del correspondiente bit de habilitacin habilitacin global bit, GIE (INTCON<7>)
PIC Prof. Nelson An 158

TEMPORIZADOR TMR0

PIC

Prof. Nelson An

159

PIC

Prof. Nelson An

160

PIC

Prof. Nelson An

161

TEMPORIZADOR TMR0
BIT DEL REGISTER INTCON:

TOIF
2 BIT = TOIF

INTCON (0 x 0B)
(0 x 8B)

TOIF: TMR0

INTERRUPT FLAG BIT

1 = TMR0 se ha desbordado (overflow), hay que ponerlo a cero por programa

0 =

TMR0 no hay desborde

PIC

Prof. Nelson An

162

TEMPORIZADOR TMR0
Clculo para TMR0:

1)Determinar el periodo del ciclo de instruccin, el cual coincide con el periodo de incremento de TMR0
T= 4/F.OSCILADOR. 2)Calcular el nmero de veces que T cabe en el tiempo que debemos temporizar. N pulsos a contar =tiempo/T 3)Calcular el valor a cargar en TMR0, recordar que Toif se pone a 1 al pasar de FF a 00 y que los primeros pulsos luego de cargar TMR0 se pierden. VALOR A CARGAR = 256-N pulsos +2
PIC Prof. Nelson An 163

TEMPORIZADOR TMR0
Clculo para TMR0:

1)Determinar el periodo del ciclo de instruccin, el cual coincide con el periodo de incremento de TMR0
T= 4/F.OSCILADOR.

2)Calcular el nmero de veces que T cabe en el tiempo que debemos temporizar.


N pulsos a contar =tiempo/T 3)Calcular el valor a cargar en TMR0, recordar que Toif se pone a 1 al pasar de FF a 00 y que los primeros pulsos luego de cargar TMR0 se pierden. VALOR A CARGAR = 256-N pulsos +2
PIC Prof. Nelson An 164

TEMPORIZADOR TMR0
Clculo para TMR0:

Ejemplo:
Cristal = 4 MHz tiempo: 100 us T = 4/4 MHz = 1 us N pulsos = tiempo/T = 100 us / 1 us = 100 pulsos

Valor a agregar = 256 100 + 2 = 15810

PIC

Prof. Nelson An

165

TEMPORIZADOR TMR0
START

INICIALIZACION

D 158............TMR0

0.................TOIF

NO
TOIF = 1 SI END PIC Prof. Nelson An 166

TEMPORIZADOR TMR0
List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU RESET ORG bsf bcf bcf movlw movwf bcf ESPERA btfss goto nop end p=16F628A 0x01 0x0B 0x81 0x03 0x00 Status,5; selecciono Banco 1 Option,5; selecciona clock interno TOCS=0 STATUS,5; selecciono Banco0 D158; cargar valor decimal 158 TMR0; cargo TMR0 para 100 us INTCON,2; pongo a 0 TOIF INTCON,2; flag de overflow Toif=1 ESPERA ; NO ; SI

TEMPORIZADOR TMR0
Ejemplo: Utilizando un PIC 16F628A con un reloj de 1 MHz, realizar un oscilador que entregue una seal de onda cuadrada en RB0, con un frecuencia de 1 KHz. Datos: 1 ciclo instruccin = 4T T= 1/1000 = 1 ms T= 4/1 MHz = 4 us ciclo de instruccin RB0

500 us

1 ms

N pulsos = 500 us / 4us = 125

Valor a cargar = 256 125 + 2 = 133 pulsos


PIC Prof. Nelson An 168

TEMPORIZADORES
START

INICIALIZACION

D 133............TMR0

0.................TOIF

NO
TOIF = 1 SI END PIC Prof. Nelson An 169

TEMPORIZADORES
List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU CMCON EQU TRISA EQU TRISB EQU PORTA EQU PORTB EQU RESET ORG inicio movlw p=16F628A 0x01 0x0B 0x81 0x03 0X1F 0X85 0X86 0X05 0X06 0x00

goto movwf bsf bcf

0x07 inicio CMCON Status,5; selecciono Banco 1 Status,6

TEMPORIZADORES
movlw movwf bcf bcf goto movlw xorwf movlw movwf bcf btfss goto goto end b11111110 TrisB Option,5; selecciona clock interno TOCS=0 Status,5 TIMER 0x01 PortB,1 D133 TMR0 INTCON,2 INTCON,2 ESPERA INVERSION

INVERSION TIMER

ESPERA

WATCHDOG
Es un timer de perodo fijo 18 miliseg aproximadamente, funciona en base a un oscilador RC interno del PIC totalmente independiente del clock. Durante la operacin manual el watchdog genera Device Reset al dar time out (terminar el tiempo del timer). El WDT tiene un perodo nominal de 18 miliseg, el cual vara con la temperatura, la tensin de alimentacin VDD y de un chip a otro. La instruccin CLRWDT pone a cero el WDT y a 1 los bits To y PD del STATUS.
PIC Prof. Nelson An 172

WATCHDOG
El bit To del STATUS es puesto a cero cuando el WDT da un time out.

El WDT puede ser habilitado slo en la programacin del PIC.

PIC

Prof. Nelson An

173

TEMPORIZADOR TMR0
Ejemplo: Se est utilizando un PIC con un oscilador de 4 MHz. Programar una subrutina que al ser invocada, produzca una demora de aproximadamente 1 seg. Datos: 1 ciclo instruccin = 4T 4 MHz = 4 x 10 6 Hz T = 4 / 4 MHz = 1 us ciclo de instruccin

TMR0 cuenta mximo 0xff 256 us 256 x 256 = 65,54 ms, aqu aplicamos el prescaler mximo que es 256 si tomo 50 ms 20 veces llego a 1 seg de demora 256 pulsos 195 pulsos
PIC

65 ms 50 ms aproximadamente
Prof. Nelson An 174

TEMPORIZADOR TMR0
START

0 .............CONTADOR

TIMER

CONTADOR+1...CONTADOR

NO

CONTAD
FINAL

SI VOLVER PIC Prof. Nelson An 175

TEMPORIZADOR TMR0
Ejemplo: Se est utilizando un PIC con un oscilador de 4 MHz. Programar una subrutina que al ser invocada, produzca una demora de aproximadamente 1 seg. 4 MHz 1 us sin prescaler Tmxima = 256 us

con prescaler T mxima = 256 us x 256 us = 65,536 us

Utilizo 50 ms 20 veces
El perodo de TMR0 = tiempo / prescaler = 50 / 256 = 195 us Valor a cargar en TMR0 = 256 195 + 2 = 63

Factor divisor = 256


Valor del TMR0 = 63

PIC

Prof. Nelson An

176

TEMPORIZADOR TMR0
List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU CONT EQU RESET ORG GOTO INICIO CLRWDT; BSF BCF MOVLW MOVWF BCF p=16F628A 0x01 0x0B 0x81 0x03 0x020 0x00 INICIO CLEAR WDT STATUS, 5; SELECCIONO BANCO 1 STATUS, 6; SELECCIONO BANCO 1 b10000111; PROG TMR0 Y PRESCALER OPTION STATUS, 5; SELECT BANCO 0

TEMPORIZADOR TMR0
DEMORA MOVLW MOVWF MOVLW MOVWF BCF BTFSS GOTO DECF GOTO RETURN END D20 CONT; 20.......... CONTADOR D63 TMRO; CARGO TMR0 INTCON, 2; 0.......TOIF INTCON, 2; TOIF=1? POLLING; NO CONT; SI TIMER; NO ; SI

TIMER

POLLING

INTERRUPCIONES
Hemos visto que el mtodo de POLLING interrupcin nos permite saber qu est pasando en una puerta (I/0). Para ello debemos interrogar peridicamente a una puerta de estados asociada a la puerta de datos. Existen algunos procesos que no pueden esperar a que el programa lo interrogue, la propia puerta I/0 debe tomar la iniciativa y llamar la atencin a la CPU, a esto le llamamos interrupcin.

La CPU suspender el programa que est ejecutando y saltar a una subrutina, de tratamiento de interrupciones.
PIC Prof. Nelson An 179

INTERRUPCIONES
Los llamados a subrutina mediante la instruccin CALL son desviaciones del flujo de control del programa asignado por instruccin, se los considera sincrnicos. Las interrupciones son desviaciones del flujo de control del programa originadas asincrnicamente por diversos sucesos que no se hallan bajo la supervisin de las instrucciones. Dichos sucesos pueden ser externos al sistema, como la generacin de un flanco nivel activo en una patita del microcontrolador, bien internos, como el desbordamiento de un contador.

PIC

Prof. Nelson An

180

INTERRUPCIONES
El comportamiento del microcontrolador ante la interrupcin es similar al de la instruccin CALL de llamada a subrutina. En ambos casos se detiene la ejecucin del programa en curso, se salva la direccin actual del PC en la pila y se carga el PC con una direccin, que en el caso de CALL viene acompaando a la propia instruccin, y en el caso de una interrupcin es una direccin reservada de la memoria de programa, llamada vector de interrupcin.

En el PIC 16F628A el vector de interrupcin se halla situado en la direccin 0004h, en donde comienza la rutina de servicio a la interrupcin (RSI).
PIC Prof. Nelson An 181

INTERRUPCIONES
En general, en dicho vector se suele colocar una instruccin de salto incondicional (GOTO), que traslada el flujo de control a la zona de la memoria de programa ( cdigo) destinada a contener la rutina de atencin a la interrupcin. La RSI suele comenzar guardando en la memoria de datos algunos registros especficos del procesador (CPU). Concretamente aquellos que la RSI va a emplear y va a alterar su contenido. Antes del retorno al programa principal se recuperan los valores guardados y se restaura completamente el estado del procesador. Algunos procesadores salvan estos registros en la Pila, pero el PIC 16F628A como toda su familia no disponen de instrucciones para meter (push) y sacar (pop) informacin de la Pila, utilizando para este fin registros de propsito general de la memoria de datos.
PIC Prof. Nelson An 182

INTERRUPCIONES
La familia de los PIC 16F628A pueden ser interrumpidos por 10 causas diferentes, pero todas desvan el flujo de control a la direccin 0004h, por lo que otra de las operaciones iniciales de la RSI es averiguar cual de las posibles causas ha sido la responsable de la interrupcin en curso. Para ello se exploran los sealizadores (banderines) de las fuentes de interrupcin.

Otro detalle importante en la RSI de los PIC es que estos microcontroladores poseen un bit GIE (Global Interrupt Enable) que cuando vale 0 prohbe todas las interrupciones.
PIC Prof. Nelson An 183

INTERRUPCIONES
Pues bien, al comenzar la RSI dicho bit GIE se pone automticamente a 0, con objeto de no atender nuevas interrupciones hasta que se termine la que ha comenzado. En el retorno final de la interrupcin, GIE pasa a valer automticamente 1 para volver a tener en cuenta las interrupciones. Dicho retorno de interrupcin se realiza mediante la instruccin RETFIE. Antes del retorno conviene borrar el sealizador bandera de la causa de interrupcin que ha atendido, porque si bien los sealizadores se ponen a 1 automticamente en cuanto se produce la causa que indican, la puesta a 0 se hace por programa.
PIC Prof. Nelson An 184

INTERRUPCIONES
Causas de Interrupcin:

EXTERNOS: un pulso de una lnea I/0 RB0/INT, cambio de estado de los pines RB4 a RB7.
INTERNO: desborde de un contador TMR0.

PIC

Prof. Nelson An

185

INTERRUPCIONES
Antes de este evento el PIC:

1) Deshabilita las instrucciones 0

GIE

2) Guarda el Program Counter en el STACK 3) 0004h pasa al Program Counter

La direccin de memoria 0004h es entonces el punto


donde comienza la rutina que atiende las interrupciones. Esa direccin llamada vector de interrupcin de la rutina

de interrupcin se retorna con la instruccin RTFIE.

PIC

Prof. Nelson An

186

INTERRUPCIONES
1) Externa interrupcin RBO/INT
2) Desborde TMR0
3) Cambia algunas de las lneas RB4 a RB7 (cambio de estados) Las interrupciones se utilizan a partir de la posicin de Programa.

PIC

Prof. Nelson An

187

INTERRUPCIONES
Modelo de Programa
Reset ORG
goto ORG

0000
inicio 0004

goto
Inicio

interrup
0005 ------------------------------------------------------------------Programa Principal

PIC

Prof. Nelson An

188

INTERRUPCIONES
Interrupcin 1) Identificar la causa de la interrupcin

2) Atenderla
3) Finaliza con la instruccin RETFIE

PIC

Prof. Nelson An

189

INTERRUPCIONES
Ejercicio:

Hacer un oscilador de 1 KHz con un PIC 16F628A en la salida RB0, simultneamente, leer la puerta B y copiarla a la posicin a M (0x20)

PIC

Prof. Nelson An

190

INTERRUPCIONES
Inicio Interrupcin

Inicializar

INVERTIR RB0

GOTO RUTINA

Leer PORTB

PROGRAMAR TIMER PARA 500 US

Volver

W----M(0x20)

PIC

Prof. Nelson An

191

TEMPORIZADOR TMR0
List TMR0 EQU INTCON EQU OPTION_REG EQU STATUS EQU PORTB EQU TRISB EQU ORG GOTO ORG GOTO INICIO BSF BCF p=16F628A 0x01 0x0B 0x81 0x03 0x06 0x86 0x000 INICIO 0x0004 INTER STATUS, 5; SELECCIONO BANCO 1 STATUS, 6; SELECT BANCO 1

MOVLW
BCF BCF MOVLW MOVWF MOVLW MOVWF MOVF MOVWF GOTO MOVWF MOVLW XORWF MOVLW MOVWF BCF MOVF RETFIE

RUTINA

INTER

0XFE OPTION, 5; 0..... TOCS (habilita clock interno) STATUS, 5; SELECCIONO BANCO 0 D133 TMR0; CARGO TMR0 0xA0; 1=GIE 1=TOIE 0....TOIF INTCON PORTB, 0 0x20 RUTINA 0x21; SALVO W 0x01 PORTB, 1; INVIERTO RB0 D133 TMR0; CARGO TM0 INTCON, 2; 0.....TOIF 0x21, 0; RECUPERO W ; REGRESA A LA RUTINA

Interrupciones

PIC

Prof. Nelson An

194

Interrupciones

PIC

Prof. Nelson An

195

PIC

Prof. Nelson An

196

ORGANIZACIN DE LA MEMORIA
REGISTRO TMR1:
El TMR1 es un temporizador/contador ascendente de 16 bits, por lo que est implementado mediante dos registros especficos TMR1H y TMR1L, que contienen el valor del conteo en cada momento. Estos registros pueden leerse y escribirse. El valor del registro (TMR1H:TMR1L) evoluciona desde 0000h hasta FFFFh, en cuyo instante activa <<1>> la bandera TMR1IF (PIR1<0>) y vuelve a 0000h. Se puede provocar una peticin de interrupcin mediante la programacin del bit TMR1IE (PIE1<0>).
PIC Prof. Nelson An 197

ORGANIZACIN DE LA MEMORIA
REGISTRO TMR1:
El funcionamiento de TMR1 depende de la programacin del registro T1CON (10h). TMR1 puede funcionar como temporizador y como contador sncrono asncrono. El modo de funcionamiento viene determinado por el bit 1, TMR1CS (T1CON<1>). En modo temporizador, TMR1 se incrementa con cada ciclo de instruccin (Fosc/4), mientras en modo contador, se incrementa con cada flanco de subida de la seal del reloj externa, que se aplica a los pines RB6 y RB7, por impulsos aplicados al pin RB6.
PIC Prof. Nelson An 198

ORGANIZACIN DE LA MEMORIA
REGISTRO TMR1:
Como fuente de los impulsos de reloj existen tres alternativas:
1. Generacin interna (Fosc/4).

2. Generacin mediante un oscilador externo controlado por cristal que se conecta a los pines RB6/T1OSO/T1CKI y RB7/T1OSI/CCP2. El oscilador se activa poniendo a 1 el bit T1OSCEN del registro T1CON. El bit TMR1CS del registro T1CON selecciona entre reloj interno externo. En los PIC16F62X los pines son RB6 y RB7.
PIC Prof. Nelson An 199

ORGANIZACIN DE LA MEMORIA
REGISTRO TMR1:
3. Trabaja en modo contador de eventos cuando los impulsos externos a contar se aplican a la patita RB6/T1OSO/T1CKI. En los PIC16F62X el pin es RB6.

PIC

Prof. Nelson An

200

ORGANIZACIN DE LA MEMORIA
REGISTRO TMR1:
El funcionamiento de TMR1 depende de la programacin del registro T1CON (10h), Registro 7-1. El bit 0 TMR1ON gobierna su funcionamiento, desactivando TMR1 cuando vale 0. El bit 1 TMR1CS elige la fuente de pulsos; cuando su valor es 1, stos proceden de una seal externa. En este caso, si el bit 3 T1OSCEN vale 1, actan los pines RB6 y RB7 como entradas del reloj externo. Es posible colocar entre estos pines un cristal de cuarzo de hasta 200 KHz que permite que el oscilador siga en funcionamiento incluso en modo de bajo consumo SLEEP. Si el bit T1OSCEN vale 0, los pulsos se introducirn por el pin RB6. Prof. Nelson An 201

PIC

PIC

Prof. Nelson An

202

PIC

Prof. Nelson An

203

PIC

Prof. Nelson An

204

PIC

Prof. Nelson An

205

PIC

Prof. Nelson An

206

PIC

Prof. Nelson An

207

PIC

Prof. Nelson An

208

PIC

Prof. Nelson An

209

PIC

Prof. Nelson An

210

PIC

Prof. Nelson An

211

PIC

Prof. Nelson An

212

PIC

Prof. Nelson An

213

PIC

Prof. Nelson An

214

PIC

Prof. Nelson An

215

TITULO: Timer de 10 segundos con TMR1 PIC16F628A - 4MHz intRC - MCLR MODIFICACIONES CONT_POSTSC_SEG EQU 0X20 CONT_TIME_01 EQU 0X21 W_TEMP EQU 0X30 STATUS_TEMP EQU 0X31 #DEFINE PA0 PORTA,2 #DEFINE PA1 PORTA,3 #DEFINE PB0 PORTB,7 #DEFINE PB1 PORTB,6 LIST p=16F628A INCLUDE "P16F628A.INC ORG 0x0000 GOTO INICIALIZA_MC ORG 0x0004 GOTO PUSH INICIALIZA_MC MOVLW B'00000111' MOVWF CMCON BSF STATUS,RP0 MOVLW B'11111111' MOVWF TRISA MOVLW B'00111111' MOVWF TRISB BCF STATUS,RP0 CLRF PORTB

; DEFINE DIRECCIN DE MEMORIA RAM ; DEFINE DIRECCIN DE MEMORIA RAM

; DEFINE ENTRADA DEL PULSADOR ; DEFINE ENTRADA DEL PULSADOR ; DEFINE SALIDA DEL LED A ENCENDER ; DEFINE SALIDA DEL LED A ENCENDER ; PROCESADOR UTILIZADO ; LIBRERIA DE DIRECCIONES CORRESPONDIENTES AL PIC ;VECTOR RESET (DIR. DE LA MEMORIA FLASH) ; SALTA A LA ETIQUETA "INICIALIZA_MC" ; VECTOR INTERRUPCION (DIR. DE LA MEMORIA FLASH) ; SALTA A LA ETIQUETA "PUSH" (INTERRUPCIN) ; CONFIGURA PINES DEL COMP. ANLOGO COMO I/O DIG. ; EN EL REGISTRO CMCON ; CAMBIO AL BANCO 1 ; ESCRIBE ESTE VALOR EN EL ACUMULADOR ; MUEVE ESTE VALOR AL REGISTRO TRISA (ENT 1 - SAL 0) ; ESCRIBE ESTE VALOR EN EL ACUMULADOR ; MUEVE ESTE VALOR AL REGISTRO TRISB (ENT 1 - SAL 0) ; CAMBIO AL BANCO 0 ; LIMPIA EL REGITRO PORTB

PROGRAMA PRINCIPAL BTFSC PA0 BSF PB0 GOTO PROG_PRINCIPAL RUTINA DE SERVICIO DE INTERRUPCIN PUSH MOVWF W_TEMP SWAPF STATUS,W MOVWF STATUS_TEMP RSI DECFSZ CONT_POSTSC_SEG ,F GOTO FIN_RSI MOVLW D'20' PROG_PRINCIPAL MOVWF DECFSZ GOTO MOVLW MOVWF BCF MOVLW MOVWF MOVLW MOVWF BCF SWAPF MOVWF MOVF RETFIE ORG DATA END CONT_POSTSC_SEG CONT_TIME_01,F FIN_RSI D'10' CONT_TIME_01 PB0 H'B0' TMR1L H'3C' TMR1H PIR1,TMR1IF STATUS_TEMP,W STATUS W_TEMP,W 0x2007 H'3F30'

; SALTA A LA ETIQUETA "LOOP_SINFIN" ; ; GUARDA EL VALOR DE W EN W_TEMP ; (RUTINA DE SERVICIO DE INTERRUPCIN) ; GUARDA EL VALOR DE STATUS EN STATUS_TEMP ; RESTA 1 AL REGISTRO Y SALTA CUANDO ES CERO ; VALOR INICIAL DEL REGISTRO "CONT_POSTSCALA" ; ; RESTA 1 AL REGISTRO Y SALTA CUANDO ES CERO ; VALOR INICIAL DEL REGISTRO "CONT_POSTSCALA" ; ; VALOR INICIAL DEL REGISTRO "TMR1L" ; ; VALOR INICIAL DEL REGISTRO "TMR1H" ; ; COLOCA EN 0 EL FLAG DE LA INTERRUPCION CORRESP. ; RECUPERA VALORES DE STATUS ; MUEVE EL VALOR DE W AL REGISTRO "STATUS" ; RECUPERA VALORES DE W ; RETORNA DE LA INTERRUPCION HABILITANDO EL BIT GIE" ; DIR. DE MEM. ROM DE LA PALABRA DE CONFIGURACION ; VALOR PARA LA PALABRA DE CONFIGURACION ; FIN DEL PROGRAMA

FIN_RSI

POP

Vous aimerez peut-être aussi