Académique Documents
Professionnel Documents
Culture Documents
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
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
PIC
Prof. Nelson An
PIC
Prof. Nelson An
PIC
Prof. Nelson An
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
PIC
Prof. Nelson An
PIC
Prof. Nelson An
11
PIC
Prof. Nelson An
12
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
#DEFINE
#define<nombre> [<valor a reemplazar>]
Explicacin: declara una cadena de texto como subttulo de otra.
END
End
Explicacin: indica fin de programa
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
PIC
Prof. Nelson An
18
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
Existen una serie de directivas que son para el ensamblador y nos hacen la tarea de programacin ms sencilla.
PIC Prof. Nelson An 20
#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
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.
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
Aprendiendo a Programar
3. Se emplean signos para consideraciones. Por ejemplo: efectuar determinadas
Un Programa siempre deber comenzar con la directiva ORG y terminar con la directiva END.
Prof. Nelson An 26
movf
instruccin d={0,1} M(f) d=0 d=1 flagZ=1
f,d
operandos
PIC
Prof. Nelson An
27
movwf
PIC
Prof. Nelson An
28
M (0x20)
movf 0x20,0
M(0x30)
movwf 0x30
Fin
PIC Prof. Nelson An
cdigo fuente
29
movf
movwf end
0x20,0
0x30
PIC
Prof. Nelson An
30
3) simulador
4) programar PIC
PIC Prof. Nelson An 31
Edit Project
Prof. Nelson An 32
Creacin de Proyecto
1. Project File Name New Proyect Ventana
nombre.pjt
Ej001.pjt
PIC
dar OK
Development Mode:
Change
16F628A
Processor
Tools
OK
Untilted 1
File
Save As
File Name
Ej001.asm
OK
Prof. Nelson An
34
OK
movwf
end
PIC Prof. Nelson An
0x30
35
0820
movf
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
movf
movwf end
0x20,0
0x30
PIC
Prof. Nelson An
38
movlw k
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
afectados
C, DC y Z
PIC
Prof. Nelson An
41
W) W
M(0x2E)
Fin
movwf 0x2E
cdigo fuente
42
PIC
Prof. Nelson An
PIC
Prof. Nelson An
43
Instruccin Resta
subwf
f,d
instruccin
d={0,1} M(f) - W M(f) - W flags
operandos
afectados
C, DC y Z
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 (-)
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
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
PIC
Prof. Nelson An
47
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
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
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
PIC
Prof. Nelson An
51
M (0x0A M(0x1A)-W W
W) W
M(0x2A)
Fin
movwf 0x2A
cdigo fuente
52
PIC
Prof. Nelson An
PIC
Prof. Nelson An
53
PIC
Prof. Nelson An
54
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
M=memoria
M(f)=posicin de memoria
PIC
Prof. Nelson An
60
M=memoria
M(f)=posicin de memoria
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
bcf bsf
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
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
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
Instruccin GOTO Salto incondicional a la direccin que vaya precedida como (etiqueta) GOTO K 0<= K <=2047
Inicio
GOTO
RUTINA
Leer PORTA
Escribir en PORTB
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
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
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
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
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
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.
PIC
Prof. Nelson An
80
complemento M(f)
(intercambia 1 y 0)
d={0,1}
d=0
d=1
W
M(f)
PIC
Prof. Nelson An
81
0x00
flags
M(f)
Z=1
Z=0
si el resultado es = 0
si el resultado es = 0
PIC
Prof. Nelson An
82
flags
Z=1 Z=0
afectados
si el resultado es = 0 si el resultado es = 0
Z=1
PIC
Prof. Nelson An
83
M(f) + 1
flags
d={0,1}
afectados
d=0
d=1
W
M(f) Z
f,d
d=0
d=1
Cd. OP:00 0011 dfff ffff
M(f)
Z
84
clrf
M (indice)
PIC
Prof. Nelson An
88
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
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
0=<K=< 255
WK W
flags
afectados
PIC
Prof. Nelson An
93
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
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
d=0 d=1
W M(f)
afectados
PIC
Prof. Nelson An
96
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
W + M(f)
flags
d={0,1}
Z
d=0 d=1
W M(f)
afectados
PIC
Prof. Nelson An
98
instruccin
d={0,1} M(f) M(f) flags
operandos
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
instruccin
d={0,1} M(f) M(f) flags
operandos
afectado
PIC
Prof. Nelson An
100
instruccin
d={0,1} M(f) M(f) flags
operandos
afectado
PIC
Prof. Nelson An
101
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
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 B
DECRE B
NO
B=0
SI
DECRE A
NO
A=0
SI
end
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
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:
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>).
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)
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 =
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
0 =
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.
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 T= 4/1 MHz = 4 us ciclo de instruccin RB0
500 us
1 ms
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
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.
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
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
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 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:
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
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
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 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