Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
Prof. Nelson An
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
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
portA,0
;lee el puerto A
movwf
reg1
;escribe en reg1
Prof. Nelson An
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.
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
portA,0
:
:
goto
PIC
leer
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.
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
Prof. Nelson An
14
Introduccin a la Programacin
en Lenguaje Assembler
EQU
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.
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
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.
Prof. Nelson An
20
Instrucciones para
Ensamblar Programas
Con estas directivas haremos los siguientes ejemplos:
#DEFINE
BANCO1
BSF
STATUS,5
#DEFINE
BANCO0
BCF
STATUS,6
PIC
Prof. Nelson An
21
Prof. Nelson An
22
PIC
Prof. Nelson An
23
Aprendiendo a Programar
Prof. Nelson An
24
Aprendiendo a Programar
Ejemplo:
2 Col.
3 Col.
4 Col.
AZUL
EQU
0x20
Prof. Nelson An
25
Aprendiendo a Programar
3.
efectuar
determinadas
26
Instrucciones para
Ensamblar Programas
MOVF
LECTURA
movf
f,d
instruccin
operandos
M=memoria
d=0
M(f)=posicin de memoria
d=1
M(f)
d={0,1}
M(f)
flagZ=1
M(f)=0
PIC
Prof. Nelson An
27
Instrucciones para
Ensamblar Programas
MOVWF
mover a f
ESCRITURA
M=memoria
movwf
M(f)=posicin de memoria
W
M(f)
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)
M(0x30)
Fin
PIC
Prof. Nelson An
movf 0x20,0
movwf 0x30
cdigo fuente
29
Instrucciones para
Ensamblar Programas
Escribir un programa que copie el contenido del registro 0x20
al 0x30
List
p=16F628A
org
0x00
movf
0x20,0
movwf
0x30
end
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
New Project
New
Proyecto
NOMBRE.pjt
Fuente
NOMBRE.asm
Ejemplo:
Ej001.pjt
Ej001.asm
Edit Project
Prof. Nelson An
32
Instrucciones para
Ensamblar Programas
MPLAB
Editor de texto
Ensamblador
Simulador
Creacin de Proyecto
1. Project
New Proyect
Ventana
File Name
nombre.pjt
Ej001.pjt
PIC
dar OK
33
Instrucciones para
Ensamblar Programas
2. Edit Project
Tools
Development Mode:
Change
16F628A
Processor
Tools
OK
New
Untilted 1
File
Save As
File Name
Ej001.asm
OK
Prof. Nelson An
34
Instrucciones para
Ensamblar Programas
4. Project
Edit Project
Add Node
Ej001.asm Aceptar
Project Files
OK
Ej001 [.hex]
Ej001 [.asm]
1 Tabulacin
List
1 Tabulacin
p=16F628A
org
0x00
movf
0x20,0
movwf
0x30
end
PIC
Prof. Nelson An
35
Instrucciones para
Ensamblar Programas
5. File
Save
6. Project
Build All
OK
Build Failed
Mal
7. Windows
Program Memory
Memoria de Programa
PIC
movf
[formato instruccin]
0000
0820
0x20,w [00100000100000]
0001
[00000010110000]
36
Instrucciones para
Ensamblar Programas
7. Windows
Windows Modify
ADRESS: 0x20
Data/OPCODE:
0x75
WRITE
Program Counter
PC: 0x00
W: 0x20
PC: 0x01
W: 0x75
PC: 0x02
W: 0x75
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
p=16F628A
org
0x00
movf
0x20,0
movwf
0x30
end
PIC
Prof. Nelson An
38
Instruccin de Movimiento
Instruccin de Suma
Instruccin Movimiento:
movlw k
Instruccin Suma:
addlw k
flags C, DC, Z
Resultado=0
afectados
Z=1
w+k
Resultado>255
C=1
PIC
Prof. Nelson An
39
Instruccin de Suma
Uso del C y DC:
PIC
Prof. Nelson An
40
Instruccin Suma
addwf
f,d
instruccin
operandos
d={0,1}
M=memoria
W +M(f)
d=0
M(f)=posicin de memoria
W +M(f)
M(f)
d=1
flags
afectados
C, DC y Z
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)
movf 0x2C,0
W+M (0x2D)
addwf 0x2D,0
M(0x2E)
Fin
PIC
Prof. Nelson An
movwf 0x2E
cdigo fuente
42
Instrucciones para
Ensamblar Programas
Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y
poner el resultado en 0x2E
Reset
List
p=16F628A
ORG
0x00
movf
0x2C,0
addwf
0x2D,0
movwf
0x2E
end
PIC
Prof. Nelson An
43
Instruccin Resta
subwf
f,d
instruccin
operandos
d={0,1}
M=memoria
M(f) - W
d=0
M(f)=posicin de memoria
M(f) - W
M(f)
d=1
flags
afectados
C, DC y Z
PIC
Prof. Nelson An
44
Instruccin Resta
sublw K
0=<K=< 255
K-W
flags
afectados
C=1
C=0
C, DC y Z
PIC
Prof. Nelson An
45
Instruccin Resta
PIC
Prof. Nelson An
46
Instruccin Resta
0000 0011
1111 1110
0000 0001
PIC
Prof. Nelson An
47
PIC
23
22
21
20
Prof. Nelson An
48
23 2 2 21 20
23 2 2 21 20
29
0 0 1 0
1 0 0 1
Prof. Nelson An
49
las
operaciones
aritmticas
resultan
resultado correcto
= 16
Prof. Nelson An
50
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
W)
movf 0x0A,0
M(0x1A)-W
subwf 0x1A,0
M(0x2A)
movwf 0x2A
Fin
PIC
Prof. Nelson An
cdigo fuente
52
Instrucciones para
Ensamblar Programas
Restar el contenido de 2 posiciones de memoria 0x1A y 0x0A y
poner el resultado en 0x2A
Reset
List
p=16F628A
ORG
0x00
movf
0x0A,0
subwf
0x1A,0
movwf
0x2A
end
PIC
Prof. Nelson An
53
PIC
Prof. Nelson An
54
PIC
Prof. Nelson An
55
MEMORIA DE DATOS
PIC
BIT=0
salida
BIT=1
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
M=memoria
M(f)=posicin de memoria
0 =< b =< 7
Cd. OP:01 01bb bfff ffff
PIC
Prof. Nelson An
60
Instrucciones para
Ensamblar Programas
bcf
f,b
M=memoria
M(f)=posicin de memoria
0 =< b =< 7
Cd. OP:01 00bb bff ffff
PIC
Prof. Nelson An
61
REGISTRO DE STATUS
Status Register:
Prof. Nelson An
62
REGISTRO DE STATUS
REGISTRO de Estado:
PIC
Prof. Nelson An
63
PIC
Prof. Nelson An
64
PIC
Prof. Nelson An
65
bcf
Status, RP1
RP0=0
bsf
Status, RP0
Status, RP1=bit6
bcf
0x03,6
Status, RP0=bit5
bsf
0x03,5
M(f)=Status=0x03
PIC
Prof. Nelson An
66
PIC
BANCO 0
BANCO 1
BANCO 2
BANCO 3
bcf 0x03,6
bcf 0x03,5
bcf 0x03,6
bsf 0x03,5
bsf 0x03,6
bcf 0x03,5
bsf 0x03,6
bsf 0x03,5
Prof. Nelson An
67
Selecciono Banco1
bcf 0x03,6
bcf 0x03,5
movlw 0xFF
0xFF
TRISA
0x00
TRISB
Fin
PIC
Prof. Nelson An
movwf 0x85
movlw 0x00
movwf 0x86
cdigo fuente
68
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
Inicio
Instruccin
GOTO
Salto incondicional
a la direccin que
vaya precedida
como (etiqueta)
GOTO K
Programar PORTA
y PORTB
GOTO
RUTINA
Leer PORTA
0<= K <=2047
Escribir en
PORTB
GOTO Pepe
PIC
Prof. Nelson An
70
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
List
p=16F628A
STATUS
PORTA
PORTB
TRISA
TRISB
CMCON
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x85
0x86
0x1F
RESET
ORG
movlw
movwf
bcf
bsf
movlw
0xFF
movwf
movlw
0x00
movwf
bcf
movf
PORTA, 0; PORTA
movwf
PORTB; W
goto
RUTINA
RUTINA
end
W
PORTB
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
PIC
Prof. Nelson An
74
Prof. Nelson An
75
Prof. Nelson An
76
PIC
77
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.
PIC
Prof. Nelson An
80
Instrucciones para
Ensamblar Programas
comf
f,d
complemento M(f)
complemento
d={0,1}
d=0
d=1
M(f)
(intercambia 1 y 0)
M(f)=posicin de memoria
flags
afectados
PIC
Prof. Nelson An
81
Instrucciones para
Ensamblar Programas
clrf
0x00
flags
M(f)
Z=1
si el resultado es = 0
Z=0
si el resultado es = 0
Z=1
PIC
Prof. Nelson An
82
Instrucciones para
Ensamblar Programas
clrw
flags
borra el registro W
afectados
Z=1
si el resultado es = 0
Z=0
si el resultado es = 0
Z=1
PIC
Prof. Nelson An
83
Instrucciones para
Ensamblar Programas
incf
f,d
M(f) + 1
flags
incrementa f
d={0,1}
d=0
d=1
M(f)
afectados
f,d
decrementa f
d={0,1}
d=0
d=1
M(f)
afectados
Prof. Nelson An
84
Instrucciones para
Ensamblar Programas
btfsc
f,d
f,d
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
PIC
0
Localizacin seleccin
direccin de memoria
Prof. Nelson An
88
Direccionamiento de la
Memoria de Datos
IRP = Punto Registro Indirecto
0 x 20
FSR
M (0x00)
0 x 1E
PIC
M (0x00)
Prof. Nelson An
carga FSR
1E
0x 20
89
Direccionamiento Indirecto
Poner a
Start
0x00 las
posiciones
0x20 a
0x2F del
banco 0
No
0 x 20
FSR
M (0x00)
INDF
borrado 0 x 20
FSR + 1
FSR
bit 4 de
FSR=1
Si
End
PIC
Prof. Nelson An
90
Direccionamiento Indirecto
INDF
STATUS
FSR
RESET
NEXT
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
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
flags
afectados
PIC
Prof. Nelson An
93
Instrucciones para
Ensamblar Programas
Andwf
f,d
WM(f)
d={0,1}
flags
afectados
d=0
d=1
M(f)
PIC
Prof. Nelson An
94
Instrucciones para
Ensamblar Programas
IORlw K
0=<K=< 255
W+K
flags
W
afectados
PIC
Prof. Nelson An
95
Instrucciones para
Ensamblar Programas
IORwf
W+M(f)
flags
f,d
d={0,1}
afectados
d=0
d=1
W
M(f)
PIC
Prof. Nelson An
96
Instrucciones para
Ensamblar Programas
XORlw
0=<K=< 255
W + K
flags
afectados
PIC
Prof. Nelson An
97
Instrucciones para
Ensamblar Programas
XORwf
f,d
W + M(f)
d={0,1}
flags
afectados
d=0
d=1
W
M(f)
PIC
Prof. Nelson An
98
Instrucciones para
Ensamblar Programas
swapf
f,d
intercambio de f
instruccin
operandos
d={0,1}
M=memoria
M(f)
d=0
M(f)=posicin de memoria
M(f)
M(f)
d=1
flags
ninguno afectado
Prof. Nelson An
99
Instrucciones para
Ensamblar Programas
RLF
f,d
rota a la izquierda
instruccin
operandos
d={0,1}
M=memoria
M(f)
d=0
M(f)=posicin de memoria
M(f)
M(f)
d=1
flags
afectado
PIC
Prof. Nelson An
100
Instrucciones para
Ensamblar Programas
RRF
f,d
rota a la derecha
instruccin
operandos
d={0,1}
M=memoria
M(f)
d=0
M(f)=posicin de memoria
M(f)
M(f)
d=1
flags
afectado
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
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
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
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
DECRE B
NO
B=0
SI
DECRE A
NO
A=0
SI
end
VAR1
VAR2
VAR3
RESET
INICIO
DECO
DOS
UNO
List
EQU
EQU
EQU
ORG
movlw
p=16F628A
0x21
0x22
0x23
0x00
02 h
movwf
VAR1
movlw
248 h
movwf
VAR2
movlw
248 h
movwf
VAR3
decfsz
VAR3,1
goto
deco
decfsz
VAR2,1
goto
dos
decfsz
VAR1,1
goto
inicio
nop
end
; (VAR1,1)
; (VAR3,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:
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
de
la
T= 250ns
PIC
TEMPORIZADOR TMR0
MODOS DE FUNCIONAMIENTO:
Prof. Nelson An
149
TEMPORIZADOR TMR0
Tiempo = Frec.oscil/4
Timer
Cristal
PIC
4 MHz
T = 250 ns
Ciclo instruccin
T x 4 = 1 us
1 MHz
T = 1 us
Ciclo instruccin
T x 4 = 4 us
Prof. Nelson An
T (perodo de instruccin)
150
TEMPORIZADOR TMR0
REGISTRO TMR0:
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).
Prof. Nelson An
152
TEMPORIZADOR TMR0
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
PIC
BANCO 0
BANCO 1
0 x 01
TMR0
0 x 81
OPTION
0 x 0B
INTCON
0 x 8B
INTCON
Prof. Nelson An
155
TEMPORIZADOR TMR0
BITS DEL REGISTER OPTION:
TOCS
TOSE
OPTION (0 x 81)
BIT = TOCS
TRANSICIN EN
RA4/TOCK1(contador)
0 =
PIC
Prof. Nelson An
156
TEMPORIZADOR TMR0
BITS DEL REGISTER OPTION:
TOCS
TOSE
OPTION (0 x 81)
BIT = TOSE
TOSE: TMR0
PIC
1 =
INCREMENTA EN
(1
0) RA4/TOCK1
0 =
INCREMENTA EN
(0
1) RA4/TOCK1
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
INTCON (0 x 0B)
(0 x 8B)
BIT = TOIF
TOIF: TMR0
1 =
TMR0 se ha desbordado (overflow), hay que
ponerlo a cero por programa
0 =
PIC
Prof. Nelson An
162
TEMPORIZADOR TMR0
Clculo para TMR0:
Prof. Nelson An
163
TEMPORIZADOR TMR0
Clculo para TMR0:
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
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
500 us
1 ms
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
goto
movwf
bsf
bcf
p=16F628A
0x01
0x0B
0x81
0x03
0X1F
0X85
0X86
0X05
0X06
0x00
0x07
inicio
CMCON
Status,5; selecciono Banco 1
Status,6
TEMPORIZADORES
INVERSION
TIMER
ESPERA
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
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.
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
PIC
256 pulsos
65 ms
195 pulsos
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
Utilizo 50 ms 20 veces
El perodo de TMR0 = tiempo / prescaler = 50 / 256 = 195 us
Valor a cargar en TMR0 = 256 195 + 2 = 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
TIMER
POLLING
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
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.
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.
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.
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:
PIC
Prof. Nelson An
185
INTERRUPCIONES
Antes de este evento el PIC:
GIE
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
0000
goto
inicio
ORG
0004
goto
Inicio
interrup
0005
-----------------------
Programa
-----------------------
Principal
----------------------PIC
Prof. Nelson An
188
INTERRUPCIONES
Interrupcin
2) Atenderla
3) Finaliza con la instruccin RETFIE
PIC
Prof. Nelson An
189
INTERRUPCIONES
Ejercicio:
PIC
Prof. Nelson An
190
INTERRUPCIONES
Inicio
Interrupcin
Inicializar
GOTO
RUTINA
INVERTIR RB0
PROGRAMAR TIMER
PARA 500 US
Leer PORTB
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
RUTINA
INTER
BCF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
MOVF
MOVWF
GOTO
MOVWF
MOVLW
XORWF
MOVLW
MOVWF
BCF
MOVF
RETFIE
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).
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:
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
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
FIN_RSI
POP
MOVWF
DECFSZ
GOTO
MOVLW
CONT_POSTSC_SEG
CONT_TIME_01,F
FIN_RSI
D'10'
;
; RESTA 1 AL REGISTRO Y SALTA CUANDO ES CERO
MOVWF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
SWAPF
MOVWF
MOVF
RETFIE
ORG
DATA
END
CONT_TIME_01
PB0
H'B0'
TMR1L
H'3C'
TMR1H
PIR1,TMR1IF
STATUS_TEMP,W
STATUS
W_TEMP,W
0x2007
H'3F30'