Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
NDICE
Presentacin
Red de contenidos
: El microprocesador
: El PIC16F84
9
9
10
13
1.2.1 : Caractersticas
13
14
16
1.3 Tema3
: Organizacin de la memoria
21
21
21
22
1.4 Tema4
: Juego de Instrucciones
30
30
31
32
1.5 Tema5
: Gestin de puertos
32
1.5.1 : Configuracin
32
34
35
1.6 Tema6
: Gestin de RAM
44
44
45
46
1.7 Tema7
: Gestin de Temporizacin
47
48
50
CIBERTEC
: Introduccin al PIC16F877
56
2.1.1 : Caractersticas
56
57
58
CARRERAS PROFESIONALES
2.1.4 : Memorias
2.2 Tema9
: Registros y funciones
59
65
2.2.1 : Registros
65
2.2.2 : Funciones
67
2.3 Tema10
82
82
83
85
87
2.4 Tema11
: Gestin de Temporizacin
95
2.4.1 : Timer0
95
2.4.2 : Timer1
97
2.4.3 : Timer2
100
102
2.5 Tema12
108
108
114
117
2.6 Tema13
: Gestin de Interrupciones
123
123
124
127
128
: El PIC24FJ64GA006
141
3.1.1 : Caractersticas
141
143
145
146
160
164
3.2 Tema15
: El PIC32MX300F032H
173
3.2.1 : Caractersticas
173
175
177
178
179
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
PRESENTACIN
CIBERTEC
CARRERAS PROFESIONALES
RED DE CONTENIDOS
Microcontroladores
PIC24FJ64GA006
PIC32MX300FO32H
Arquitectura
y
Puesta en marcha
Memorias
y
Registros
PIC16F84
PIC16F877
Arquitectura
y
Puesta en marcha
Memorias
y
Registros
Juego de instrucciones
y Configuracin
CARRERAS PROFESIONALES
Temporizacin,
Comunicacin serial
e Interrupciones
CIBERTEC
MICROCONTROLADORES
CIBERTEC
CARRERAS PROFESIONALES
UNIDAD DE
APRENDIZAJE
EL PIC16F84
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad bsica utilizando el Microcontrolador PIC16F84. Los
circuitos sern implementados en protoboards y deber asegurarse que las
conexiones realizadas de polarizacin, reinicio, oscilacin y puertos sean 100%
correctas. Por otro lado, los programas que activan el funcionamiento de los circuitos
se desarrollarn empleando el entorno de trabajo MPLAB pero utilizando comandos de
lenguaje C. Estos debern garantizar la perfecta configuracin de los puertos A y B del
Microcontrolador y el funcionamiento mnimo del 80% de las tareas propuestas.
TEMARIO
El Microprocesador
Introduccin al PIC16F84
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
1.1 EL MICROPROCESADOR
Desde la invencin del primer microprocesador (4004), estos
CHIPs han sido perfeccionados ao tras ao, convirtindose
actualmente en los ICs ms potentes y complejos
tecnolgicamente. Los microprocesadores de hoy son capaces de
procesar muchsima ms informacin y a muchsima mayor
velocidad que el legendario 4004.
El microprocesador, tambin conocido como CPU (unidad central de proceso), es un
circuito integrado semiconductor formado por la integracin de millones de
transistores, interrelacionados entre s para formar el circuito ms complejo que la
electrnica haya realizado. Sin embargo, su funcin es lgica, simple y repetitiva,
procesa toda la informacin de cualquier sistema electrnico a travs de la lectura,
interpretacin y ejecucin de instrucciones. Esta forma de operar madur y se aplic
gracias al aporte de Jhon Von Newman.
CIBERTEC
CARRERAS PROFESIONALES
10
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
11
CIBERTEC
CARRERAS PROFESIONALES
12
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
13
1.2.1 CARACTERSTICAS
1.2.1.1 CONTACTOS DEL PIC16F84
La figura muestra la disposicin de pines de este PIC. VDD y VSS son los pines de
polarizacin, +5V y GND, respectivamente. OSC1 y OSC2 son los pines para el reloj.
En estos se conectar el cristal.
MCLR es el pin de programacin o
reset. Durante la programacin, esta
patilla se conecta al voltaje de
programacin (13,2V), mientras que,
en funcionamiento, este debe
conectarse a un arreglo RC para
recibir el pulso de inicializacin. Los
pines RAx y RBx son los pines de los
puertos A y B, respectivamente. A
travs
de
estas
patillas,
el
microcontrolador se conectar con el circuito a controlar.
1.2.1.2 Descripcin de la CPU
Este Microcontrolador posee, en su interior, un Microprocesador de 8 bits que opera a
una frecuencia mxima de 20Mhz, soporta un total de 35 instrucciones las que ejecuta
en un ciclo de mquina, excepto las de salto que ejecuta en dos ciclos. Un ciclo de
mquina equivale a 4 periodos de reloj (f/4), donde f es la frecuencia del cristal
utilizado para proveer la seal de reloj.
1.2.1.3 Descripcin de las memorias
El PIC16F84 posee tres tipos de memorias: FLASH, EEPROM y RAM.
CIBERTEC
CARRERAS PROFESIONALES
14
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
15
CIBERTEC
CARRERAS PROFESIONALES
16
1.2.2.3.1.3 Modo HS
Este sistema est diseado para que el microcontrolador opere a
frecuencias comprendidas entre los 4Mhz y 20Mhz. Es posible
adaptar un oscilador cermico o un oscilador de cristal de cuarzo.
Este debe ser acompaado por dos condensadores y una
resistencia cuyos valores dependen de la frecuencia de trabajo.
Los fabricantes facilitan esta informacin en tablas de la hoja de
datos del PIC.
1.2.2.3.1.4 Modo RC
Este es un sistema poco preciso pero econmico y se realiza
utilizando una resistencia y un condensador. Los valores
recomendados por los fabricantes para este tipo de oscilador son
5K ohmios < R <100K ohmios y C > 20pF.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
17
CIBERTEC
CARRERAS PROFESIONALES
18
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
19
Resumen
El Microprocesador es el chip ms avanzado integrado por millones de
transistores. El primer Microprocesador fue el 4004 y lo desarroll Intel.
Un sistema basado en Microprocesador est constituido por memorias, unidades
de entrada/salida y el Microprocesador.
Los buses de comunicacin son tres: el bus de datos, de direccin y de control.
Estos sirven para establecer el orden y sincronizacin de comunicacin de un
sistema basado en Microprocesador.
Tras la energizacin del Microprocesador, este empieza a realizar su funcin
simple y repetitiva de leer, interpretar y ejecutar las instrucciones de la memoria.
El Microcontrolador es un microcomputador en un solo chip. En este, se incluyen
todos los dispositivos y funciones especficas que reducen el tamao de las
aplicaciones.
Existe una gran variedad de Microcontroladores desde los ms simples hasta los
ms potentes y complejos. El empleo de uno u otro depender de la complejidad
del proyecto o aplicacin a realizar.
El PIC16F84 lo desarrolla Microchip y pertenece a la gama media de los
microcontroladores. Tiene un Microprocesador de 8 bits; una memoria FLASH de
1K words; una memoria EEPROM de 64 bytes; una RAM de 68 bytes; dos puertos:
PORTA y PORTB; y un temporizador TMR0.
El PIC para funcionar necesita de una seal de reloj. Adems, es necesario
realizar un arreglo RC sobre la patilla MCLR que asegure su inicializacin interna.
Su arquitectura es del tipo Harvard (acceso independiente y simultneo a la
memoria de datos e instrucciones), realiza procesamiento segmentado de las
instrucciones (mientras una se ejecuta, la siguiente instruccin se lee), posee un
reducido nmero de instrucciones (35) y dispone de un formato ortogonal.
Si desea saber ms acerca de estos temas, puede consultar las siguientes
pginas.
http://perso.wanadoo.es/pictob/micropic16f84_3.htm
Aqu, hallar informacin sobre reset y oscilacin del PIC.
http://www.terra.es/personal/fremiro/arquitectura.htm
Aqu, hallar informacin sobre la arquitectura de este PIC.
CIBERTEC
CARRERAS PROFESIONALES
20
UNIDAD DE
APRENDIZAJE
EL PIC16F84
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad bsica utilizando el Microcontrolador PIC16F84. Los
circuitos sern implementados en protoboards y deber asegurarse que las
conexiones realizadas de polarizacin, reinicio, oscilacin y puertos sean 100%
correctas. Por otro lado, los programas que activan el funcionamiento de los circuitos
se desarrollarn empleando el entorno de trabajo MPLAB pero utilizando comandos de
lenguaje C. Estos debern garantizar la perfecta configuracin de los puertos A y B del
Microcontrolador y el funcionamiento mnimo del 80% de las tareas propuestas.
TEMARIO
Organizacin de la memoria
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
21
CIBERTEC
CARRERAS PROFESIONALES
22
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
EEDATA
EEADR
PCLATH
INTCON
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
23
BANCO 1
80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8Ah
8Bh
INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB
EECON1
EECON2
PCLATH
INTCON
RP1
bit6
RP0
bit5
T0
bit4
PD
bit3
Z
bit2
DC
bit1
C
bit0
PD:
Z:
Indicador de cero
0: Desactivado
1: Activado
DC:
CIBERTEC
CARRERAS PROFESIONALES
24
C:
INTDEG
bit6
T0CS
bit5
T0SE
bit4
PSA
bit3
PS2
bit2
PS1
bit1
PS0
bit0
CARRERAS PROFESIONALES
TIMER0
2
4
8
16
32
64
128
256
WATCHDOG
1
2
4
8
16
32
64
128
CIBERTEC
MICROCONTROLADORES
25
GIE:
EEIE
bit6
T0IE
bit5
INTE
bit4
RBIE
bit3
T0IF
bit2
INTF
bit1
RBIF
bit0
EEIF:
bit6
bit5
EEIF
bit4
WRWRR
bit3
WREN
bit2
WR
bit1
RD
Bit0
CIBERTEC
CARRERAS PROFESIONALES
26
RD:
RA0:
RA1:
RA2:
RA3:
RA4:
bit6
bit5
RA4/TOCKI
bit4
RA3
bit3
RA2
bit2
RA1
bit1
RA0
Bit0
RB0:
RB1:
RB2:
RB3:
RB4:
RB5
RB6
RB7
RB6
bit6
RB5
bit5
RB4
bit4
RB3
bit3
RB2
bit2
RB1
Bit1
RB0/INT
Bit0
Bit menos significativo. Funciona como I/O digital o interrupcin por pulso bajo.
Funciona como I/O digital.
Funciona como I/O digital.
Funciona como I/O digital.
Funciona como I/O digital o interrupcin si vara su valor.
Funciona como I/O digital o interrupcin si vara su valor.
Funciona como I/O digital o interrupcin si vara su valor.
Bit ms significativo. Funciona como I/O o interrupcin si vara su valor.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
27
TRISA0:
TRISA1:
TRISA2:
TRISA3:
TRISA4:
bit6
bit5
TRISA4
bit4
TRISA3
bit3
TRISA2
bit2
TRISA1
bit1
TRISA0
Bit0
TRISB0:
TRISB1:
TRISB2:
TRISB3:
TRISB4:
TRISB5:
TRISB6:
TRISB7:
TRISB6
bit6
TRISB5
bit5
TRISB4
bit4
TRISB3
bit3
TRISB2
bit2
TRISB1
bit1
TRISB0
Bit0
CIBERTEC
CARRERAS PROFESIONALES
28
Resumen
La memoria FLASH sirve para almacenar las instrucciones del programa. En esta,
se insertan las del programa principal y las de las subrutinas de interrupcin. El
registro encargado de direccionar estas instrucciones es el PC. Cada vez que
aparece un reset, el PC recibe la direccin 0000h para ejecutar la primera
instruccin.
La memoria RAM est organizada por dos Bancos: el Banco 0 y el Banco 1. En los
primeros espacios de memoria, estn contenidos los registros especiales de
configuracin y funcin del PIC, mientras que los dems espacios estn reservados
para el tratamiento de los datos y variables.
La seleccin de los Bancos se debe realizar cada vez que necesitamos manipular
algn registro especial o leer/escribir sobre alguna de las celdas de RAM. Esta
seleccin se realiza a travs del bit RP0 del registro STATUS.
Los registros de puertos PORTA y PORTB son los encargados de comunicarse
con los dispositivos externos, mientras que los registros TRISA y TRISB son los
encargados de configurar el sentido de trabajo de los puertos.
Si desea saber ms acerca de estos temas, puede consultar las siguientes
pginas.
http://members.fortunecity.es/electronico/tutoriales/tutopic16f84/p3.html
Aqu, hallar informacin sobre la organizacin de la memoria del PIC.
http://www.terra.es/personal/fremiro/registros.htm
En esta pgina web, hallar informacin sobre los registros de este PIC.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
29
UNIDAD DE
APRENDIZAJE
EL PIC16F84
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad bsica utilizando el Microcontrolador PIC16F84. Los
circuitos sern implementados en protoboards y deber asegurarse que las
conexiones realizadas de polarizacin, reinicio, oscilacin y puertos sean 100%
correctas. Por otro lado, los programas que activan el funcionamiento de los circuitos
se desarrollarn empleando el entorno de trabajo MPLAB pero utilizando comandos de
lenguaje C. Estos debern garantizar la perfecta configuracin de los puertos A y B del
Microcontrolador y el funcionamiento mnimo del 80% de las tareas propuestas.
TEMARIO
Juego de instrucciones
Gestin de puertos
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
30
Ejemplos:
ADDWF
ADDWF
CLRF
CLRF
CLRW
DECF
INCF
MOVFW
MOVWF
SUBWF
SUBWF
PORTB,1
PORTB,0
PORTA
TRISB
VALOR
VARIABLE
PORTB
INDF
MAXIMO,1
MAXIMO,0
CARRERAS PROFESIONALES
; PORTB = W + PORTB
; W = W + PORTB
; PORTA = 0 (todos sus bits)
; TRISB = 0 (todos sus bits)
; W = 0 (todos sus bits)
; VALOR = VALOR 1
; VARIABLE = VARIABLE + 1
; W = PORTB
; INDF = W
; MAXIMO = MAXIMO W
; W = MAXIMO - W
CIBERTEC
MICROCONTROLADORES
31
Orientadas al BIT
BCF F,b
BSF F,b
BTFSC F,b
BTFSS F,b
Ejemplos:
BCF
STATUS,RP0 ; Pone a cero (0) el bit RP0 del registro STATUS
BSF
PORTA,0
; Pone a uno (1) el bit menos significativo del PUERTO A.
BCF
TRISA,2
; Pone a cero el tercer bit del registro TRISA.
BSF
EECON1,7
; Pone a uno el bit ms significativo del registro EECON1.
BTFSC PORTB,0
; Salta si el bit menos significativo del PUERTO B es cero.
BTFSS PORTA,4
; Salta si el bit ms significativo del PUERTO A es uno.
1.4.3 Orientadas al control
Constantes y control
ADDLW K
ANDLW K
CALL ETIQUETA
CLRWDT
GOTO K
IORLW K
MOVLW K
RETFIE
RETLW K
RETURN
SLEEP
SUBLW K
XORLW K
Ejemplos:
ADDLW
ADDLW
ADDLW
ANDLW
CALL
GOTO
MOVLW
RETLW
RETLW
SUBLW
CIBERTEC
.100
; W = W + 100 (decimal)
0X35
; W = W + 35h (hexadecimal)
B11110001 ; W = W + 11110001b (binario)
B11001100 ; W = W AND 11001100b
DELAY
; Invoca la ejecucin de la funcin DELAY.
REPEAT
; Salta a la etiqueta REPEAT
0X55
; W = 55h
.10
; Retorna de una subrutina y transfiere el valor 10 a W
0x58
; Retorna de una subrutina y transfiere el valor 58h a W
.200
; W = 200 W
CARRERAS PROFESIONALES
32
Assembler
MOVFW PORTA
MOVWF PORTA
MOVFW PORTB
MOVWF PORTB
MOVWF TRISA
MOVWF TRISB
Assembler
BCF PORTA,2
BSF PORTB,0
BSF PORTA,4
BCF PORTB,5
BTFSC PORTA,1
BTFSS PORTB,7
BTFSS PORTA,0
BTFSC PORTB,3
Orientadas al BYTE
Comentario
Comandos en C
DATO
lee
la
informacin
del puerto A
DATO=input_a();
DATO es el valor que se escribe en el puerto A
output_a(DATO);
DATO lee la informacin del puerto B
DATO=input_b();
DATO es el valor que se escribe en el puerto B
output_b(DATO);
set_tris_a(CONF); CONF es el valor de configuracin del puerto A
set_tris_b(CONF); CONF es el valor de configuracin del puerto B
Orientadas al BIT
Comentario
Comandos en C
Se fija a cero el pin 2 del puerto A
output_low(PIN_A2);
output_high(PIN_B0); Se fija a uno el pin 0 del puerto B
output_high(PIN_A4); Se fija a uno el pin 4 del puerto A
Se fija a cero el pin 5 del puerto B
output_low(PIN_B5);
Evala si el pin 1 del Puerto A es cero
if(!input(PIN_A1);
Evala si el pin 7 del Puerto B es uno
if(input(PIN_B7);
Evala si el pin 0 del Puerto A es uno
if(input(PIN_A0);
Evala si el pin 3 del Puerto B es cero
if(!input(PIN_B3);
1.5.1 Configuracin
Es necesario indicarle al Microcontrolador el sentido de trabajo de los elementos que
hemos conectado a sus puertos; de no hacerlo, en el mejor de los casos, nuestro
sistema no funcionara bien y en el peor de los casos quemaramos algunos bits de los
puertos.
1.5.1.1 Entradas o salidas
Cada pin de los puertos es configurable independientemente y solo puede trabajar en
un solo sentido, como entrada o salida. La configuracin se realiza a travs de los
registros TRISA y TRISB, donde TRISA configura al PUERTO A y TRISB configura el
PUERTO B. Un cero sobre los bits de los registros TRIS configura como salida los
pines relacionados en los PUERTOS, mientras que un uno deja configurado como
entrada los pines relacionados en los PUERTOS.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
33
El registro de configuracin por manipular sera TRISA y sus bits deberan verse segn
el esquema:
El registro de configuracin por manipular sera TRISB y sus bits deberan verse segn
el esquema:
CIBERTEC
CARRERAS PROFESIONALES
34
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
35
CIBERTEC
CARRERAS PROFESIONALES
36
// Apagar
// los LEDs
// desde RB0
// hasta RB3
delay_ms(1000);
// esperar 1s.
output_high(PIN_B0);
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
// encender
// los LEDs
// desde RB0
// hasta RB3
delay_ms(1000);
// esperar 1s.
}while(TRUE);
// repetir el bucle
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
37
// Apagar
// los LEDs
// desde RB0
// hasta RB3
delay_ms(1000);
// esperar 1s.
output_high(PIN_B0);
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
// encender
// los LEDs
// desde RB0
// hasta RB3
delay_ms(1000);
// esperar 1s.
}while(TRUE);
// repetir el bucle
}
1.5.3.2 Manipulacin de un led y un pulsador
Realice el programa que mantenga apagado el led hasta que se
active el pulsador. Es decir, el led permanecer apagado y se
encender apenas se active el pulsador.
Como el led est en conexin normal, se apagar con 0 y se
encender con 1.
Segn el arreglo del pulsador, cuando este no est activado, la
patilla RA0 (PORTA,0) est conectada a tierra a travs de la
resistencia, es decir, el pulsador, en estado natural, genera un 0
sobre el pin RA0. Y cuando se active el pulsador, el pin RA0
queda conectado a 5v. Es decir, en estado activado, el pulsador
genera un 1 sobre la patilla RA0.
Recordemos, por ltima vez que, antes de manipular los puertos, estos deben ser
configurados a travs del los registros TRIS.
CIBERTEC
CARRERAS PROFESIONALES
38
Configuracin:
set_tris_a(0xFF); // El pin RA0 queda configurado para trabajar como entrada
// y el resto de pines del puerto A, tambin.
set_tris_b(0xFE); // El pin RB0 queda configurado para trabajar como salida,
// mientras que, el resto de pines del puerto B (RB1 a RB7)
//como entradas.
Manipulacin de los puertos:
do{
if(input(PIN_A0)){
output_high(PIN_B0); }
else {
output_low(PIN_B0); }
}while(TRUE);
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
39
Desarrollemos el programa:
//---------- Cabecera ----------#include <16f84.h>
// PIC utilizado
#fuses XT,NOWDT,NOPROTECT,PUT // configuracin de los fuses
#use delay (clock=4000000)
// oscilador a 4 MHz
//-----------Programa principal------------void main(void)
{
set_tris_a(0xFF); // Los pines RA0 y RA1 quedan configurados como entrada
// y el resto de pines del puerto A, tambin.
set_tris_b(0xFE); // El pin RB0 queda configurado para trabajar como salida,
// mientras que, el resto de pines del puerto B (RB1 a RB7)
//como entradas.
output_high(PIN_B0); // el LED empieza apagado
do{
if(input(PIN_A0)){
output_low(PIN_B0); }
else if (input(PIN_A1)){
output_high(PIN_B0); }
}while(TRUE);
}
1.5.3.4 Escritura sobre un display
Realice el programa que muestre sobre el display el nmero 9.
Tenga en cuenta que el display es ctodo comn, es decir, sus
segmentos se encienden con unos (1) y
se apagan con ceros (0). Adems, la
conexin de cada uno de sus
segmentos al puerto B se muestra en la
figura de la derecha. Segn esta
adaptacin, el bit PORTB,0 estara conectado al segmento a del display, el bit
PORTB1 al regento b y as sucesivamente. Con ello, podemos armar una tabla que
relacione los nmeros del 0 al 9 sobre el display con los valores que se deben
transferir sobre el PORTB. Para este problema, slo es necesario el nmero 9.
CIBERTEC
CARRERAS PROFESIONALES
40
Veamos qu valor se debe enviar por el PORTB para que aparezca el nmero
requerido.
Segmentos
Nmero 9
0 = OFF
1 = ON
// Encender el segmento a
// encender el segmento b
// encender el segmento c
// encender el segmento d
// apagar el segmento e
// encender el segmento f
// encender el segmento g
// apagar el punto
// repetir el bucle
}
1.5.3.5 Manipulacin de un display y dos pulsadores
Realice el programa que muestre sobre el display el nmero 8
cada vez que se active el pulsador P1 y cada vez que se active
P2 muestre el nmero 0. Tenga en
cuenta que la conexin al PORTB es
la misma que la conexin del
problema anterior, pero el tipo de
display ya no es ctodo comn, sino
nodo comn, eso quiere decir que sus segmentos se encienden
con ceros (0) y se apagan con unos (1). Los pulsadores, segn
su arreglo, generan los mismos cambios que en los problemas
anteriores: 0 para OFF y 1 para ON. Apenas inicie el programa, el display debe tener
apagado todos sus segmentos.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
41
Nmero 8
Nmero 0
1 = OFF
0 = ON
CIBERTEC
CARRERAS PROFESIONALES
42
Resumen
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
43
UNIDAD DE
APRENDIZAJE
EL PIC16F84
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad bsica utilizando el Microcontrolador PIC16F84. Los
circuitos sern implementados en protoboards y deber asegurarse que las
conexiones realizadas de polarizacin, reinicio, oscilacin y puertos sean 100%
correctas. Por otro lado, los programas que activan el funcionamiento de los circuitos
se desarrollarn empleando el entorno de trabajo MPLAB pero utilizando comandos de
lenguaje C. Estos debern garantizar la perfecta configuracin de los puertos A y B del
Microcontrolador y el funcionamiento mnimo del 80% de las tareas propuestas.
TEMARIO
Gestin de RAM
Gestin de Temporizacin
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
44
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
45
BCF
BCF
MOVLW
MOVWF
MOVFW
MOVWF
INCF
STATUS,IRP
FSR,7
0X10
FSR
INDF
PORTB
FSR
; IRP = 0
; Bit 7 = 0
; W = 10h
; FSR = Direccin de inicio de cadena
; W = INDF (DATO de la memoria)
; PORTB = W = DATO
; Avanza a la siguiente celda
Nuevamente nos topamos con una tarea simple (leer datos de memoria) pero tediosa
en cuanto al empleo y secuencia de las de instrucciones en Assembler. Felizmente, el
entorno de compilacin del C Compiler nos facilita esta tarea. Para realizar este
proceso se emplean dos variables, una para declarar una tabla que contenga los
CIBERTEC
CARRERAS PROFESIONALES
46
int tabla[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
set_tris_b(0x00);
set_tris_a(0xFF);
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
output_b(0);
do{
if(input(PIN_A2))
for (i=0;i<10;++i){
output_b(tabla7s[i]);
delay_ms(1000);}
}while(TRUE);
47
// apaga el display
CIBERTEC
CARRERAS PROFESIONALES
48
BSF
BCF
BSF
MOVLW
MOVWF
OPTION_REG, T0CS
OPTION_REG, T0SE
OPTION_REG, PSA
.156
TMR0
INTDEG
bit6
T0CS
bit5
T0SE
bit4
PSA
bit3
PS2
bit2
PS1
bit1
T0CS:
T0SE:
PSA:
PS0
bit0
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
49
de reloj del registro de trabajo (TMR0), har que este aumente en uno su valor, hasta
que en algn momento genere su desbordamiento y, por lo tanto, la activacin del
indicador T0IF. Cada pulso que llegue al registro de trabajo tiene una frecuencia que
se calcula de la siguiente manera:
F = (f/4)/factor de divisin = f/(4*factor de divisin)
Si a esta le aadimos la cantidad de pulsos a contar, tendramos:
F = f/(4*factor de divisin*#pulsos)
Pero, el tiempo transcurrido se calculara:
T = (4*factor de divisin*#pulsos)/f
Frecuencia
F = f/(4*factor de divisin*#pulsos)
Tiempo
T = (4*factor de divisin*#pulsos)/f
20ms = 4*factord*#pulsos/4Mhz
20ms = factord*#pulsos * 1us ; ya que 1/Mhz es 1 microsegundo (1us)
20ms = factord*#pulsos* 1ms/1000 ; ya que 1us = 1ms/1000
20ms*1000 = factord*#pulsos*1ms
20000 = factord*#pulsos
INTDEG
bit6
T0CS
bit5
T0SE
bit4
PSA
bit3
PS2
bit2
PS1
bit1
PS0
bit0
TIMER0
2
4
8
16
32
64
128
256
WATCHDOG
1
2
4
8
16
32
64
128
CIBERTEC
CARRERAS PROFESIONALES
50
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
51
#use delay(clock=4000000)
#bit RB0=0X6.7 // declaracin de la variable RB0 para la onda cuadrada (pin PORT)
#bit TOIF=0XB.2 // declaracin de la variable TOIF (indicador de desborde del TMRO)
//-----------Programa principal------------void main()
{
set_tris_b(0xFE);
RB0=0;
do{
if(TOIF==1)
// si el indicador de desborde se activa
{
TOIF=0;
// desactivar el indicador
if(RB0==0)
// si la onda es 0
{
RB0=1;
// fijar la onda a 1
set_TIMER0(0); // inicializa otra vez el TIMER con 0
}
Else
// de lo contrario, si la onda es 1
{
RB7=0;
// fijar la onda a 0
set_TIMER0(0); // inicializa otra vez el TIMER con 0
}
}
}while(TRUE); // repetir el bucle
}
1.7.2.2 Cuenta regresiva temporizada
Realice el programa que permita mostrar una cuenta regresiva de
9 a 0 cada vez que se active el pulsador. Cada dgito debe
aparecer durante 1 segundo. Despus del cero, el display debe
apagarse.
El display es ctodo comn por lo que sus segmentos se apagan
con ceros y se encienden con unos.
El pulsador genera un 0 en estado off y un 1 en estado on.
Para los cdigos de los dgitos 9, 8, 7, 6, 5, 4 ,3 ,2 ,1 y 0 realice
un arreglo en RAM, al que se acceda con un puntero.
Para el temporizado, suponga que el cristal es de 4Mhz y
recuerde utilizar la frmula: T = (4*factor de divisin*#pulsos)/f
En este caso, necesitaremos una base de tiempo y una variable que contabilice una
cantidad de estas bases de tiempo. Fijaremos la base de tiempo a 12.5ms y
CIBERTEC
CARRERAS PROFESIONALES
52
necesitaremos una funcin for que cuente 80 de estas bases de tiempo para llegar a
los 1000ms = 1s (12.5ms * 80 = 1000ms).
Calculemos el #pulsos: T = (4*factor de divisin*#pulsos)/f
Reemplazando valores: 12.5ms = (4*factor de divisin*#pulsos)/4Mhz
12.5ms = factor de divisin*#pulsos us (1/1Mhz = 1us)
12.5ms x1000 = fd*#p ms
12,500 = fd*#p
Utilizando el valor 64 para el factor de divisin (fd) tendramos lo siguiente:
12,500 = 64*#p, entonces, #p = 12,500/64 = 195.3
Por lo que el valor inicial del TMR0 sera 256 195 = 61 = 0x3D (hexadecimal)
Iniciemos el programa:
//---------- Encabezado ----------#include <16f84.h>
#fuses XT,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#bit TOIF=0XB.2 // variable del indicador de desborde del TMR0
//------Funcin que genera un segundo de retardo------------void un_segundo()
{
char j;
for (j=0;j<80;++j)
// bucle de 80 repeticiones
{
set_TIMER0(61); // inicializa el TMR0 con 61 para trabajar otros 12.5ms
TOIF=0;
// borra el indicador de desborde del TMR0
do{
// mantenerse en el bucle do while hasta que TOIF sea 1
}while(TOIF==0); // TOIF se hace 1 cada 12.5ms
}
}
//------Programa principal----------------------------------------------void main(void)
{
char i;
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
53
do{
if(input(PIN_A2))
// si el pulsador est activado (RA2=1)
for (i=0;i<10;++i){
// aplicar la secuencia for que
output_b(tabla9a0[i]); // accede a un cdigo y lo muestra en el display
un_segundo();}
// genera un retardo de 1 segundo
else
// de lo contrario
output_b(0);
// apagar el display
}while(TRUE);
// repetir el bucle.
}
CIBERTEC
CARRERAS PROFESIONALES
54
Resumen
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
55
UNIDAD DE
APRENDIZAJE
EL PIC16F877
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad media utilizando el Microcontrolador PIC16F877. Los
circuitos sern implementados en protoboards y no deben presentar fallas en las
conexiones realizadas. Por otro lado, los programas que activan el funcionamiento de
los circuitos se desarrollarn mediante comandos de Lenguaje C y el compilador C de
MPLAB y debern garantizar, luego de la correcta instalacin de los mismos, el
funcionamiento mnimo del 80% de las tareas propuestas para las aplicaciones de
lectura y/o escritura de puertos, temporizacin, comunicacin serie, conversin
anloga digital e interrupciones en los cinco puertos del Microcontrolador.
TEMARIO
Introduccin al PIC16F877
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
56
2.1.1 Caractersticas
2.1.1.1 Descripcin de contactos
La figura de arriba muestra la disposicin de pines de este PIC. VDD y VSS son los
pines de polarizacin, +5V y GND, respectivamente. OSC1 y OSC2 son los pines para
el reloj. En estos se conectar el cristal. MCLR es el pin de programacin o reset.
Durante la programacin, esta patilla se conecta al voltaje de programacin (13,2V),
mientras que, en funcionamiento, este debe conectarse a un arreglo RC para recibir el
pulso de inicializacin. Los pines RAx, RBx, RCx, RDx y REx son los pines de los
puertos A, B, C, D y E, respectivamente. A travs de estas patillas, el microcontrolador
se conectar con el sistema por controlar.
2.1.1.2 Descripcin de la CPU
Este Microcontrolador posee, en su interior, un Microprocesador de 8 bits que opera a
una frecuencia mxima de 20Mhz. Soporta un total de 35 instrucciones las que ejecuta
en un ciclo de mquina, excepto las de salto que ejecuta en dos ciclos. Un ciclo de
mquina equivale a 4 periodos de reloj (f/4), donde f es la frecuencia del cristal
utilizado para proveer la seal de reloj.
2.1.1.3 Descripcin de las memorias
El PIC16F877, al igual que el PIC16F84, posee tres tipos de memorias: FLASH,
EEPROM y RAM.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
57
CIBERTEC
CARRERAS PROFESIONALES
58
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
59
CIBERTEC
CARRERAS PROFESIONALES
60
2.1.4 MEMORIAS
2.1.4.1 Memoria FLASH
Esta memoria, encargada de proveer las
instrucciones al microprocesador, debe ser
adecuadamente tratada, de lo contrario
podramos cometer errores involuntarios
de programacin.
La capacidad fsica de esta memoria es de
8Kwords, donde cada Word est formado
por 14 bits. Su direccionamiento va desde
la posicin 0000h hasta la 1FFFh. Esta
rea es conocida como la memoria de
usuario.
El PC (contador de programa) es un
registro que se encarga de direccionar a
cada una de las instrucciones de esta
memoria. Cada vez que el pin MCLR del
microcontrolador recibe un pulso bajo, el
PC se fija automticamente a 0000h
(vector de reset) garantizando que se
apunte a la primera instruccin del
programa.
Cada vez que se presente alguna interrupcin, el valor del PC es guardado en uno de
los 8 niveles de la Pila, para recibir luego, y de modo automtico, la direccin 0004h
(vector de interrupcin).
La Pila es un arreglo de registros que sirve para guardar o restaurar los valores del
PC. Cada vez que se presenta una interrupcin o se invoca a alguna subrutina (CALL),
el valor del PC es guardado en la Pila; en cambio, cuando se termina la ejecucin de
una subrutina de interrupcin (RETFIE) o se finaliza la ejecucin de una subrutina
comn (RETURN o RETLW), el PC recupera su valor de la Pila.
La memoria de usuario est organizada por pginas de 2K words y es de fundamental
importancia trasladarse, desde los programas, adecuadamente sobre estas pginas.
Si desde la pgina 0 se desea ejecutar alguna subrutina ubicada en la pgina 2, no
basta con indicarle al PC la etiqueta (direccin) de esta subrutina, es necesario indicar
la pgina a travs del registro PCLATH, especficamente dos de sus bits 3 y 4 como se
muestra en la tabla:
PCLATH,4
0
0
1
1
PCLATH,3
0
1
0
1
Pgina
0
1
2
3
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
61
CIBERTEC
CARRERAS PROFESIONALES
62
En las direcciones 00h a 1Fh del banco 0, 80h a 9Fh del banco 1, 100h a 10Fh del
banco 2 y 180h a 18Fh del banco 3 estn ubicados los registros de funciones
especiales (SFR). Algunos de estos registros, como Indirect, STATUS, FSR, se
encuentran en los cuatro bancos con el nico propsito de facilitar su acceso.
2.1.4.2.4 Seleccin de los Bancos
El acceso a los Bancos se realiza a travs de la manipulacin de los bits 6 (RP1) y 5
(RP0) del registro STATUS. Las cuatro combinaciones que se pueden generar con
estos bits seleccionan a uno de los cuatro bancos, tal como se indica en la tabla:
RP1
0
0
1
1
RP0
0
1
0
1
Banco
0
1
2
3
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
63
Resumen
CIBERTEC
CARRERAS PROFESIONALES
64
UNIDAD DE
APRENDIZAJE
EL PIC16F877
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad media utilizando el Microcontrolador PIC16F877. Los
circuitos sern implementados en protoboards y no deben presentar fallas en las
conexiones realizadas. Por otro lado, los programas que activan el funcionamiento de
los circuitos se desarrollarn mediante comandos de Lenguaje C y el compilador C de
MPLAB y debern garantizar, luego de la correcta instalacin de los mismos, el
funcionamiento mnimo del 80% de las tareas propuestas para las aplicaciones de
lectura y/o escritura de puertos, temporizacin, comunicacin serie, conversin
anloga digital e interrupciones en los cinco puertos del Microcontrolador.
TEMARIO
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
65
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
PORTC
PORTD
PORTE
PCLATH
INTCON
PIR1
PIR2
TMR1L
TMR1H
BANCO 0
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh
CIBERTEC
T1CON
TMR2
T2CON
SSPBUF
SSPCON
CCPR1L
CCPR1H
CCPCON
RCSTA
TXREG
RCREG
CCPR2L
CCPR2H
CCPCON
ADRESH
ADCON0
CARRERAS PROFESIONALES
66
BANCO 1
80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8Ah
8Bh
8Ch
8Dh
8Eh
91h
92h
93h
94h
98h
99h
9Eh
9Fh
INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB
TRISC
TRISD
TRISE
PCLATH
INTCON
PIE1
PIE2
PCON
SSPCON2
PR2
SSPADD
SSPSTAT
TXSTA
SPBRG
ADRESL
ADCON1
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
BANCO 2
100h
101h
102h
103h
104h
106h
10Ah
10Bh
10Ch
10Dh
10Eh
10Fh
INDF
TMR0
PCL
STATUS
FSR
PORTB
PCLATH
INTCON
EEDATA
EEADR
EEDATH
EEADRH
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
67
BANCO 3
180h
181h
182h
183h
184h
186h
18Ah
18Bh
18Ch
18Dh
INDF
OPTION
PCL
STATUS
FSR
TRISB
PCLATH
INTCON
EECON1
EECON2
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
Registro
2.2.2 FUNCIONES
Cada registro tiene una capacidad mxima de 8 bits y cada bit tiene su funcin
especial. Por tal motivo, es necesario desagregar a los registros en funcin de sus bits
para tener una idea ms completa de su funcin.
2.2.2.1 El registro STATUS
Este es el registro de estado. Est formado por 8 bits y contiene los indicadores de
estado de la ALU, el bit que permite la seleccin del banco de memoria RAM, y los
indicadores de watchdog y power down. Abajo, se muestra la disposicin de sus bits:
IRP
bit7
RP1
bit6
RP0
bit5
T0
bit4
PD
bit3
Z
bit2
DC
bit1
C
bit0
PD:
Z:
Indicador de cero
0: Desactivado
1: Activado
DC:
C:
CIBERTEC
CARRERAS PROFESIONALES
68
1: Activado
2.2.2.2 El registro OPTION
El registro de opcin tambin est formado por 8 bits y contiene los bits de control para
la configuracin de trabajo del TIMER0 y WATCHDOG, los bits de habilitacin de
interrupcin externa y del TIMER0, y la habilitacin de la funcin PULL-up para los bits
del PUERTOB. A continuacin, se muestran sus bits:
RBPU
bit7
INTDEG
bit6
T0CS
bit5
T0SE
bit4
PSA
bit3
PS2
bit2
PS1
bit1
PS0
bit0
TIMER0
2
4
8
16
32
64
128
256
WATCHDOG
1
2
4
8
16
32
64
128
GIE:
PEIE
bit6
T0IE
Bit5
INTE
bit4
RBIE
bit3
T0IF
bit2
INTF
bit1
RBIF
bit0
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
69
bit6
bit5
EEIF
bit4
WRWRR
bit3
WREN
bit2
WR
bit1
RD
Bit0
EEIF:
RD:
CIBERTEC
CARRERAS PROFESIONALES
70
bit6
RA5
bit5
RA4
bit4
RA3
bit3
RA2
bit2
RA1
bit1
RA0
Bit0
RA0: Bit menos significativo del puerto. Funciona como I/O digital o in anloga 0.
RA1: Funciona como I/O digital o entrada anloga 1.
RA2: Funciona como I/O digital o entrada anloga 2.
RA3: Funciona como I/O digital o entrada anloga 3 o VREF.
RA4: Funciona como I/O digital o entrada de fuente externa de reloj para el TMR0.
RA5: Bit ms significativo del puerto. Funciona como I/O o selector del puerto serie
esclavo sncrono de entrada o entrada anloga 4.
2.2.2.7 El registro PORTB
El registro de puerto B est formado por 8 bits y contiene los 8 siguientes pines de
comunicacin con los elementos externos al Microcontrolador. Veamos sus bits:
RB7
bit7
RB0:
RB1:
RB2:
RB3:
RB4:
RB5
RB6
RB7
RB6
bit6
RB5
bit5
RB4
bit4
RB3
bit3
RB2
bit2
RB1
Bit1
RB0
Bit0
Bit menos significativo. Funciona como I/O digital o interrupcin por pulso bajo.
Funciona como I/O digital.
Funciona como I/O digital.
Funciona como I/O digital.
Funciona como I/O digital o interrupcin si vara su valor.
Funciona como I/O digital o interrupcin si vara su valor.
Funciona como I/O digital o interrupcin si vara su valor.
Bit ms significativo. Funciona como I/O o interrupcin si vara su valor.
RC0:
RC1:
RC2:
RC3:
RC4:
RC5
RC6
RC6
bit6
RC5
Bit5
RC4
bit4
RC3
bit3
RC2
bit2
RC1
Bit1
RC0
Bit0
Bit menos significativo. Funciona como I/O digital o entrada de reloj para TMT1.
Funciona como I/O digital o captura 2 in/compare 2 out/pwm2 out.
Funciona como I/O digital o captura 1 in/compare 1 out/pwm1 out.
Funciona como I/O digital o reloj de sincronismo serie para SPI o IC.
Funciona como I/O digital o dato in para SPI o I/O para IC.
Funciona como I/O digital o sincronismo del puerto serie en salida de datos.
Funciona como I/O digital o transmisin asncrona USART/reloj sncrono.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
RC7
71
RD0:
RD1:
RD2:
RD3:
RD4:
RD5
RD6
RD7
RD6
bit6
RD5
bit5
RD4
bit4
RD3
bit3
RD2
bit2
RD1
Bit1
RD0
Bit0
Bit menos significativo. Funciona como I/O digital o puerto paralelo esclavo 0
Funciona como I/O digital o puerto paralelo esclavo 1.
Funciona como I/O digital o puerto paralelo esclavo 2.
Funciona como I/O digital o puerto paralelo esclavo 3.
Funciona como I/O digital o puerto paralelo esclavo 4.
Funciona como I/O digital o puerto paralelo esclavo 5.
Funciona como I/O digital o puerto paralelo esclavo 6.
Bit ms significativo. Funciona como I/O o puerto paralelo esclavo 7.
RE2
bit2
RE1
Bit1
RE0
Bit0
RE0: Bit menos significativo. Funciona como I/O digital o control de lectura en el
modo puerto esclavo paralelo o entrada anloga 5.
RE1: Funciona como I/O digital o control de escritura en el modo puerto esclavo
paralelo o entrada anloga 6. .
RE2: Funciona como I/O digital o habilitador del chip en el modo puerto esclavo
paralelo o entrada anloga 7.
2.2.2.11 El registro TRISA
El registro de configuracin del sentido de trabajo est formado por 6 bits y establece
si cada pin del PUERTO A trabajar como entrada o salida. Veamos sus bits:
bit7
TRISA0:
TRISA1:
TRISA2:
TRISA3:
TRISA4:
TRISA5:
bit6
TRISA5
bit5
TRISA4
bit4
TRISA3
bit3
TRISA2
bit2
TRISA1
bit1
TRISA0
Bit0
CIBERTEC
TRISB6
bit6
TRISB5
bit5
TRISB4
bit4
TRISB3
bit3
TRISB2
bit2
TRISB1
bit1
TRISB0
Bit0
CARRERAS PROFESIONALES
72
TRISB0:
TRISB1:
TRISB2:
TRISB3:
TRISB4:
TRISB5:
TRISB6:
TRISB7:
TRISC0:
TRISC1:
TRISC2:
TRISC3:
TRISC4:
TRISC5:
TRISC6:
TRISC7:
TRISC6
bit6
TRISC5
bit5
TRISBC
bit4
TRISBC
bit3
TRISBC
bit2
TRISBC
bit1
TRISC0
Bit0
TRISD0:
TRISD1:
TRISD2:
TRISD3:
TRISD4:
TRISD5:
TRISD6:
TRISD7:
TRISD6
bit6
TRISD5
bit5
TRISD4
bit4
TRISD3
bit3
TRISD2
bit2
TRISD1
bit1
TRISD0
Bit0
TRISE0:
TRISE1:
TRISE2:
TRISE2
bit2
TRISE1
bit1
TRISE0
Bit0
Cada bit de los cinco puertos puede ser configurado independientemente o en grupo
segn se requiera. Si el bit TRISXy es fijado a cero (0), su pin correspondiente en el
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
73
PORTXy (RXy) queda configurado como salida. Por el contrario, si fijamos su valor a
uno (1), el pin correspondiente en RXy quedara configurado como entrada.
2.2.2.16 El registro PIE1
El registro de interrupcin de perifricos 1 contiene la habilitacin individual de
interrupcin de los primeros perifricos. Es necesario fijar a 1 el bit relacionado con la
funcin de interrupcin que deseamos habilitar.
PSPIE1
bit7
ADIE
bit6
RCIE
bit5
TXIE
bit4
SSPIE
bit3
CCP1IE
bit2
PSPIE :
ADIE :
RCIE:
USART recepcin
0: Deshabilitado
1: Habilitado
TXIE:
USART transmisin
0: Deshabilitado
1: Habilitado
SSPIE:
CCP1IE:
TMR2IE:
TMR1IE:
TMR2IE
bit1
TMR1IE
Bit0
PSPIF:
CIBERTEC
ADIF
bit6
RCIF
bit5
TXIF
bit4
SSPIF
bit3
CCP1IF
bit2
TMR2IF
bit1
TMR1IF
Bit0
CARRERAS PROFESIONALES
74
RCIF:
USART recepcin
1: El buffer de recepcin USART est lleno.
0: Buffer an por llenar
TXIF:
USART transmisin
1: El buffer de transmisin USART est vaco.
0: Buffer an por vaciar
SSPIF:
CCP1IF:
TMR2IF:
TMR1IF:
bit6
bit5
EEIE
bit4
BCLIE
bit3
bit2
EEIE:
Escritura de la EEPROM
0: Deshabilitado
1: Habilitado
BCLIE:
CCP2IE:
CARRERAS PROFESIONALES
Bit1
CCP2IE
Bit0
CIBERTEC
MICROCONTROLADORES
75
Bit6
bit5
EEIF
bit4
BCLIF
bit3
bit2
Bit1
CCP2IF
Bit0
EEIF:
Escritura de la EEPROM
1: El proceso de escritura ha culminado.
0: La escritura an no termina.
BCLIF:
CCP2IF:
bit6
T1CKPS1
bit5
T1CKPS0
bit4
T1OSCEN
bit3
T1SYNC
bit2
TMR1CS
Bit1
TMR1ON
Bit0
T1OSCEN:
T1SYNC:
TIMR1
1
2
4
8
Oscilador externo
1: Habilitado
0: Deshabilitado
Sincronizacin de entrada del oscilador externo
0: Habilitada
1: Desactivada
TMR1CS:
TMR1ON:
CIBERTEC
CARRERAS PROFESIONALES
76
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0
Bit6
bit5
bit4
bit3
bit2
Bit1
Bit0
TOUTPSX:
POST TMR2
1
2
3
4
5
.
.
.
.
.
.
TMR2ON:
T2CKPSX:
16
TMR2
1
4
16
16
TX9
TXEN
SYNC
BRGH
TRMT
TX9D
bit6
bit5
bit4
bit3
bit2
Bit1
Bit0
CSRC:
TX9:
TXEN:
Habilitador de la transmisin
0: desactivado
1: activado
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
77
SYNC:
BRGH:
TRMT:
TX9D:
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
bit6
bit5
bit4
bit3
bit2
Bit1
Bit0
SPEN:
RX9:
SREN:
CREN:
ADDEN:
FERR:
OERR:
RX9D:
CIBERTEC
CARRERAS PROFESIONALES
78
ADCSX:
ADCS0
CHS2
CH1
CH0
GO/DONE
ADON
bit6
bit5
bit4
bit3
bit2
Bit1
Bit0
CHSX:
CLOCK
F/2
F/8
F/32
FRC
CANAL
0 (RA0)
1 (RA1)
2 (RA2)
3 (RA3)
4 (RA5)
5 (RE0)
6 (RE1)
7 (RE2)
GO/DONE:
Estado de la conversin
1: En progreso
0: Culmin la conversin.
ADON:
ADFM:
PCFG3
PCFG2
PCFG1
PCFG0
bit6
bit5
bit4
Bit3
bit2
Bit1
Bit0
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
PCFGX:
79
PCFG3:
PCFG0
AN7
RE2
AN6
RE1
AN5
RE0
AN4
RA5
AN3
RA3
AN2
RA2
AN1
RA1
AN0
RA0
VREF+
VREF-
0000
VDD
GND
0001
RA3
GND
0010
VDD
GND
0011
RA3
GND
0100
VDD
GND
0101
RA3
GND
0110
0111
1000
RA3
RA2
1001
VDD
GND
1010
RA3
GND
1011
RA3
RA2
1100
RA3
RA2
1101
RA3
RA2
1110
VDD
GND
1111
RA3
RA2
La manipulacin de los bits de todos estos registros especiales se har necesario cada
vez que se configuren y utilicen los puertos, temporizadores, comunicacin serial,
acceso a la EEPROM y canales de conversin anloga digital.
CIBERTEC
CARRERAS PROFESIONALES
80
Resumen
Los registros de los puertos PORTA, PORTB, PORTC, PORTD y PORTE son los
encargados de comunicarse con los dispositivos externos, mientras que los
registros TRISA, TRISB, TRISC, TRISD y TRISE son los encargados de configurar
el sentido de trabajo de los puertos.
Los registros INTCON, PIE1, PIE2, PIR1 y PIR2 son los encargados de habilitar las
fuentes de interrupcin e indicar la presencia de sus interrupciones.
Los registros OPTION, T1CON y T2CON son los encargados de configurar y poner
en marcha el funcionamiento de los timers TMR0, TMR1 y TMR2.
Los registros TXSTA y RCSTA son los encargados de configurar la comunicacin
serial tipo USART.
Los registros ADCON0 y ADCON1 son los registros encargados de configurar la
conversin anloga digital.
Si desea saber ms acerca de estos temas, puede consultar la siguiente pgina.
http://www.ate.uniovi.es/fernando/Doc2006/Sed_06/Presentaciones/Organizacion
%20de%20la%20Memoria.pdf
Aqu, hallar informacin sobre la memoria FLASH, los bancos de RAM y
registros.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
81
UNIDAD DE
APRENDIZAJE
EL PIC16F877
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad media utilizando el Microcontrolador PIC16F877. Los
circuitos sern implementados en protoboards y no deben presentar fallas en las
conexiones realizadas. Por otro lado, los programas que activan el funcionamiento de
los circuitos se desarrollarn mediante comandos de Lenguaje C y el compilador C de
MPLAB y debern garantizar, luego de la correcta instalacin de los mismos, el
funcionamiento mnimo del 80% de las tareas propuestas para las aplicaciones de
lectura y/o escritura de puertos, temporizacin, comunicacin serie, conversin
anloga digital e interrupciones en los cinco puertos del Microcontrolador.
TEMARIO
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
82
Orientadas al BIT
BCF F,b
BSF F,b
BTFSC F,b
BTFSS F,b
Constantes y control
ADDLW K
ANDLW K
CALL ETIQUETA
CLRWDT
GOTO K
IORLW K
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
MOVLW K
RETFIE
RETLW K
RETURN
SLEEP
SUBLW K
XORLW K
83
Transfiere a W el valor de K.
Retorno de una subrutina de interrupcin.
Retorno de una subrutina comn cargando una constante en W
Retorno de una subrutina comn
Ingreso al modo de descanso
Resta a K, W.
Xor lgico entre W y K
El registro de configuracin por manipular sera TRISD y sus bits deberan verse
segn el siguiente esquema:
CIBERTEC
CARRERAS PROFESIONALES
84
El registro de configuracin por manipular sera TRISC y sus bits deberan verse
segn el esquema siguiente:
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
85
No hay que preocuparse por seleccionar el banco 0 antes de manipular algn bit de
los puertos, ya que, el compilador PIC C Compiler lo realiza automticamente.
2.3.2.2.2 Escritura
El tratamiento de escritura con el PIC16F877 tambin se realiza del mismo modo que
la escritura con el PIC16F84. Las instrucciones asociadas a este proceso son las que
estn orientadas al byte MOVWF sera reemplazada por el comando output_X(DATO);
donde X el puerto a manipular y DATO la constante o variable de 8 bits que deseamos
escribir en el puerto. Por ejemplo, si queremos escribir el valor 0X55 en el puerto B, el
comando sera: output_b(0x55); pero si queremos escribir en el puerto D el valor de
una variable tipo char (8 bits) nombrada VALOR, sera: output_d(VALOR);
Y las que estn orientadas al BIT BCF y BSF seran reemplazadas por los comandos
output_high(PIN); si queremos fijar el estado 1 y output_low(PIN); si queremos fijar el
estado 0. PIN, en los dos casos, representa el pin del puerto a manipular.
Supongamos que necesitamos fijar el estado 1 al bit 1 del puerto A, el comando sera:
output_high(PIN_A1);
Considerando la figura de la izquierda, el PIC tiene conectado un
display de 7 segmentos a su puerto C. Esto implica manipular
varios bits a la vez y por consiguiente, el comando a utilizar sera
output_X(DATO);. Suponga que se desea apagar el display
nodo comn, es decir, sus segmentos se apagan con unos; el
comando sera: output_c(0XFF);.
Pero, si en lugar de displays se tienen leds conectados a los
puertos, tal como se muestra en la figura de la derecha, los
comandos seran output_high(PIN); y output_low(PIN); segn sea lo
requerido, apagarlos o encenderlos. Suponga que los leds se
encuentran en conexin normal, es decir, se apagan con 0 y se
encienden con 1. Los comandos para apagar el primer led y
encender
el
segundo
seran:
output_low(PIN_E1);
y
output_high(PIN_D5);
De acuerdo a la figura de la derecha, Cules seran las
instrucciones que permitan leer la informacin del teclado y
transferir esta sobre el display repetitivamente? Para leer el
teclado, la instruccin sera DATO=input_c(); y para escribir
sobre el display la instruccin sera output_X(DATO);. Para
la lectura repetitiva sera:
do{
DATO=input_c();
output_b(DATO);
}while(TRUE);
CIBERTEC
CARRERAS PROFESIONALES
86
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
87
CIBERTEC
CARRERAS PROFESIONALES
88
DATO=DATO&0X0F;
// validacin slo del estado de los pulsadores
if(DATO!=0){
// si algn pulsador est activado
output_b(tabla[DATO]); } // leer posicin de la tabla y escribirlo en el puerto B.
}while(TRUE);
// repetir el bucle
}
// leds apagados.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
89
if(input(PIN_D2))
// si el pulsador P1 est activado (1)
for(i=0;i<4;i++){
// realizar cuenta de 0 a 3
output_b(secuencia[i]); // sacar dato en secuencia normal y enviar al puerto B
delay_ms(500);
// retardo de medio segundo
}
else if(input(PIN_D3))
// si el pulsador P2 est activado (1)
for(i=0;i<4;i++){
// realizar cuenta de 0 a 3
output_b(secuencia[3-i]); // sacar dato en secuencia inversa y enviar al puerto B
delay_ms(500);
// retardo de medio segundo
}
}while(TRUE);
// repetir bucle
CIBERTEC
CARRERAS PROFESIONALES
90
// apagar leds
// empezar la variable con estado OFF
do{
do{
if(input(PIN_D2))
activar=TRUE;
}while(!activar);
do{
for(i=0;i<4;i++){
// realizar cuenta de 0 a 3
output_b(secuencia[i]); // sacar dato en secuencia normal y enviar al puerto B
delay_ms(250);
// retardo de 250ms (velocidad de giro)
if(input(PIN_D3))
// si pulsador P2 (OFF) se activa
activar=FALSE;}
// fijar en OFF el estado de la variable activar
}while(activar);
// repetir bucle si variable activar sigue en estado ON
}while(TRUE);
// repetir bucle
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
91
// PIC utilizado
// configuracin de los fuses
// oscilador a 4 MHz
CIBERTEC
CARRERAS PROFESIONALES
92
for(i=0;i<13;i++){
// bucle para los 13 caracteres del mensaje
write_char(mensaje[i]); // escribe en el display cada caracter
delay_ms(60);}
// retardo por cada caracter escrito en el display
delay_ms(2000);}
do{
write_command(0XC0); // desplaza el mensaje una posicin a la izquierda
delay_ms(200);
// retardo de desplazamiento
}while(TRUE);
// repetir desplazamiento
}
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
93
Resumen
http://www.alos.5u.com/pic16f877/Modulo1a.htm#1.%20Registros%20para%20el%2
0manejo%20de%20puertos%20digitales
Aqu, hallars informacin sobre los puertos del PIC16F877.
http://www.todorobot.com.ar/documentos/display.pdf
Aqu, hallar informacin sobre los comandos de un LCD.
CIBERTEC
CARRERAS PROFESIONALES
94
UNIDAD DE
APRENDIZAJE
EL PIC16F877
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad media utilizando el Microcontrolador PIC16F877. Los
circuitos sern implementados en protoboards y no deben presentar fallas en las
conexiones realizadas. Por otro lado, los programas que activan el funcionamiento de
los circuitos se desarrollarn mediante comandos de Lenguaje C y el compilador C de
MPLAB y debern garantizar, luego de la correcta instalacin de los mismos, el
funcionamiento mnimo del 80% de las tareas propuestas para las aplicaciones de
lectura y/o escritura de puertos, temporizacin, comunicacin serie, conversin
anloga digital e interrupciones en los cinco puertos del Microcontrolador.
TEMARIO
Gestin de temporizacin
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
95
2.4.1 El TMR0
El TMR0 de este PIC es de 8 bits y funciona del mismo modo que el TMR0 del
PIC16F84. Puede trabajar en modo contador o temporizador. En el siguiente
esquema, se observa el sistema funcional y los bits de configuracin.
CIBERTEC
CARRERAS PROFESIONALES
96
INTDEG
bit6
T0CS
bit5
T0SE
bit4
PSA
bit3
PS2
bit2
PS1
Bit1
T0CS:
T0SE:
PSA:
PS0
bit0
F = f/(4*factor de divisin*#pulsos)
Tiempo
T = (4*factor de divisin*#pulsos)/f
10ms = 4*factord*#pulsos/4Mhz
10ms = factord*#pulsos * 1us ; ya que 1/Mhz es 1 microsegundo (us)
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
97
INTDEG
bit6
T0CS
bit5
T0SE
bit4
PSA
bit3
PS2
bit2
PS1
bit1
PS0
bit0
TIMER0
2
4
8
16
32
64
128
256
WATCHDOG
1
2
4
8
16
32
64
128
CIBERTEC
CARRERAS PROFESIONALES
98
2.4.2 El TMR1
Este TIMER es de 16 bits y, al igual que el TMR0, trabaja en los modos de cuenta y
temporizacin. A continuacin, se mencionan sus caractersticas:
-
2.4.2.1 Operacin
La secuencia de trabajo del timer 1 es similar a la del timer 0, con la diferencia que
posee 16 bits de trabajo y no 8. Tiene la posibilidad de adaptarle un oscilador externo,
lo cual facilitara el desarrollo de retardos ms amplios.
Recordemos el registro T1CON
El registro de control del timer 1 contiene los bits de habilitacin, configuracin y factor de divisin para el
timer 1.
Oscilador externo
1: Habilitado
0: Deshabilitado
T1SYNC:
TMR1CS:
TMR1ON:
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
99
1: Activada
0: Desactivada
MOVLW
0x18
MOVWF
TMR1L
MOVLW
0XFC
MOVWF
TMR1H
BCF
T1CON, TMR1CS
BSF
T1CON, T1CKPS0
BSF
T1CON, T1CKPS1
MOVLW
0x58
MOVWF
TMR1L
MOVLW
0X9E
MOVWF
TMR1H
BSF
T1CON, TMR1ON
CIBERTEC
CARRERAS PROFESIONALES
100
Veamos:
T = ( 4 * 8 * 25000 ) / 8Mhz
T = ( 4 * 25000 ) / 1Mhz
T = 100000 / 1Mhz
T = 100000 / 1000Khz
T = 100 / 1Khz
T = 100 * 1/1Khz
T = 100 ms
2.4.3 El TMR2
Este timer es de 8 bits al igual que el TMR0, pero solo funciona en modo temporizador
y tiene un modo especial de operar. A continuacin, se mencionan sus caractersticas:
-
2.4.3.1 Operacin
El registro de trabajo TMR2
incrementa su valor por cada
pulso recibido, es decir, por
cada
f/4/pre
factor
de
divisin. En algn momento,
el valor de este registro
coincide con el valor del
registro PR2, por lo cual
suceden dos cosas: la
primera es reiniciar a 0 el
valor del registro TMR2; y la
segunda es afectar al post
divisor, disminuyndolo en
uno cada vez que esto sucede. Cuando el valor del post divisor (postscaler) se hace
cero, suceden dos situaciones adicionales: la primera es reiniciar el valor de post
divisin de acuerdo con la configuracin realizada; y la segunda es activar el bit
indicador de interrupcin TMR2IF, culminando de este modo el proceso.
El modo operativo es parecido al timer0. La diferencia radica en la reinicializacin
automtica del registro de trabajo TMR2, lo cual facilita el trabajo de las bases de
tiempo.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
101
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
TMR2ON
T2CKPS1
T2CKPS0
Bit7
Bit6
bit5
bit4
bit3
bit2
Bit1
Bit0
TOUTPSX:
TMR2ON:
T2CKPSX:
POST TMR2
1
2
3
4
.
.
.
16
T2CKPS1 PS0
0
0
0
1
1
0
1
1
TMR2
1
4
16
16
CLRF
TMR2
MOVLW
.250
MOVWF
PR2
BSF
T2CON, T2CKPS0
BSF
T2CON, T2CKPS1
BSF
T2CON, T2OUTPS0
BSF
T2CON, T2OUTPS1
BSF
T2CON, T2OUTPS2
BCF
T2CON, T2OUTPS3
BSF
T2CON, TMR2ON
CIBERTEC
CARRERAS PROFESIONALES
102
Realicemos los clculos previos para el factor de divisin y el valor inicial del registro
de trabajo.
Recordemos que el tiempo se calcula as:
T= (4*factor de divisin*pulsos a contar)/f
Veamos:
Considerando el factor mximo de divisin (8) y la frecuencia del cristal de 4Mhz
(segn el esquema), los pulsos por contabilizar seran as:
Pulsos por contar = T*f/4*factor de divisin = 500ms*4000Khz/4*8 = 62,500
Pero, el valor inicial de los registros de trabajo se obtiene como 65,536 62,500
= 3036.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
103
Iniciemos el programa:
//------Configuracin inicial---------------------------------------------#include <16f877.h>
// PIC utilizado
#fuses XT,NOWDT,NOPROTECT,PUT // configuracin de los fuses
#use delay (clock=4000000)
// oscilador a 4Mhz
#bit TMR1IF=0XC.0
// variable indicadora de desborde del TMR1
#bit TMR1ON=0X10.0 // variable de puesta en marcha del TMR1
//------Funcin de 500ms con el TMR1-----------------------------void medio_segundo()
{
set_TIMER1(3036);
TMR1IF=0;
do{
}while(TMR1IF==0);
}
//------Programa principal----------------------------------------------void main(void)
{
char i;
// bucle de 14 repeticiones
// lee secuencia y escribe en el puerto D
// retardo de 500ms
// repetir el bucle
CIBERTEC
CARRERAS PROFESIONALES
104
Realicemos los clculos previos para el factor de divisin y el valor inicial del registro
de trabajo.
Recordemos que el tiempo se calcula as:
T= (4*factor de divisin*PR2)/f
Veamos:
Considerando como factor de divisin 4, la frecuencia del cristal de 4Mhz (segn el
esquema) y 25 el valor de PR2. El tiempo transcurrido en cada coincidencia con PR2
sera 4*4*25/4Mhz = 0.1ms; y considerando el factor de post divisin 5, el tiempo total
transcurrido sera 0.1 * 5 = 0.5ms.
Aplicando los comandos del compilador PIC C Compiler tendramos:
setup_timer_2(T2_DIV_BY_4,25,5); // factor de division 4, PR2 = 25 y post factor 5
set_TIMER2(0); // siempre se inicializa el timer2 con 0
Iniciemos el programa:
//------Configuracin inicial---------------------------------------------#include <16f877.h>
// PIC utilizado
#fuses XT,NOWDT,NOPROTECT,PUT // configuracin de los fuses
#use delay (clock=4000000)
// oscilador a 4Mhz
#bit TMR2IF=0XC.1
// variable indicadora de desborde del TMR2
#bit TMR2ON=0X12.2 // variable de puesta en marcha del TMR2
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
105
CIBERTEC
CARRERAS PROFESIONALES
106
Resumen
http://www.alos.5u.com/pic16f877/Modulo2.html
Aqu, hallar informacin sobre los temporizadores del PIC16f877.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
107
UNIDAD DE
APRENDIZAJE
EL PIC16F877
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad media utilizando el Microcontrolador PIC16F877. Los
circuitos sern implementados en protoboards y no deben presentar fallas en las
conexiones realizadas. Por otro lado, los programas que activan el funcionamiento de
los circuitos se desarrollarn mediante comandos de Lenguaje C y el compilador C de
MPLAB y debern garantizar, luego de la correcta instalacin de los mismos, el
funcionamiento mnimo del 80% de las tareas propuestas para las aplicaciones de
lectura y/o escritura de puertos, temporizacin, comunicacin serie, conversin
anloga digital e interrupciones en los cinco puertos del Microcontrolador.
TEMARIO
ACTIVIDADES PROPUESTAS
CIBERTEC
CARRERAS PROFESIONALES
108
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
109
Observe que, para la transferencia de los bits hacia el pin RC6/TX/CK, existe un bit de
control llamado SPEN (habilitador del puerto serie). Este debe encontrarse habilitado;
de lo contrario, ningn bit podr salir del buffer. El proceso en detalle sera as:
a) Copia manual del dato (a transmitir) sobre el registro TXREG
b) Copia automtica de TXREG sobre el registro TSR
c) Activacin del indicador TXIF y si la interrupcin por transmisin estuviese
activada (TXIE = 1), se generara la interrupcin respectiva. Al mismo tiempo,
el indicador de proceso de la transmisin se activa (TRMT = 0).
d) Transmisin del bit de START (LSB) de TSR hacia el pin RC6/TX/CK
e) Transmisin bit a bit de los 8 siguientes bits (dato) de TSR. Si la transmisin
del noveno bit se encontrase habilitado (TX9=1), inmediatamente se
transmitira el bit TX9D, que podra ser el bit de paridad del dato enviado.
f) Desactivacin del indicador de proceso de la transmisin (TRMT = 1)
g) Finalmente, se transmite el bit de STOP (1).
La rapidez con la que se desplazan los bits es controlada por el registro SPBRG y el
bit BRGH. Sin embargo, para que esta seal de sincronismo se pueda utilizar, debe
activarse (1) el bit TXEN.
2.5.1.1.2 Recepcin de datos
En este proceso, los datos son recibidos bit a bit a travs del pin RC7. Estos ingresan
a un registro especial para formar el dato de 8 bits. El proceso se inicia con la
aparicin del bit de START (0) sobre el pin RC7/RX/DT. Note, en el siguiente
esquema, que, para recibir los datos provenientes de este pin, el puerto serial debe
encontrarse habilitado (SPEN = 1).
El proceso contina segn el siguiente orden:
a)
b)
c)
d)
CIBERTEC
CARRERAS PROFESIONALES
110
La rapidez con la que se desplazan los bits es controlada por el registro SPBRG y el
bit BRGH. Los bits OERR y FERR son indicadores de error durante la recepcin.
2.5.1.1.3 Registros asociados
Es necesario configurar y manipular los bits de estos registros para tener acceso a
este tipo de comunicacin. Los registros asociados son los siguientes:
TXSTA: Registro de configuracin para la transmisin. Est ubicado en el banco 1.
RCSTA: Registro de configuracin para la recepcin. Pertenece al banco 0.
SPBRG: Registro para la configuracin de los baudios. Se encuentra en el banco 1.
RCREG: Registro de datos de la recepcin. Se trabaja en el banco 0.
TXREG: Registro de datos de la transmisin. Se sita en el banco 0.
2.5.1.1.3.1 Registro TXSTA
Este registro muestra el estado y permite el control de la transmisin de datos seriales.
CSRC
TX9
TXEN
SYNC
BRGH
TRMT
TX9D
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
CSRC:
TX9:
TXEN:
SYNC:
BRGH:
TRMT:
TX9D:
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
111
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
SPEN:
RX9:
SREN:
CREN:
ADDEN:
FERR:
OERR:
RX9D:
0 (asncrono)
Baudios = F/64(X+1)
Baudios = F/16(X+1)
1 (sncrono)
Baudios = F/4(X+1)
n/a
CIBERTEC
CARRERAS PROFESIONALES
112
X+1 = 4000000HZ/16*2400Hz
X+1 = 104.16
X = 103.16
Sin embargo, como X es un valor entero, lo redondeamos a 103.
Con estos resultados, las instrucciones que lograran establecer esta velocidad seran
las siguientes:
BSF TXSTA, BRGH
MOVLW .103
MOVWF SPBRG
2.5.1.1.4 Secuencia de configuracin para la transmisin
Supngase que se desea transmitir un valor por el puerto serial a una velocidad de
4800 baudios, sin noveno bit (paridad), en modo asncrono y utilizando un cristal de
8Mhz.
Se considerarn los siguientes pasos:
1- Establecer la velocidad de comunicacin a 4800 baudios
2- Seleccionar el modo de comunicacin asncrono
3- Deshabilitar el 9no bit de dato (paridad)
4- Habilitar la transmisin
5- Habilitar el puerto serial
6- Transmitir el dato deseado
Las instrucciones seran las siguientes:
BCF
TXSTA,BRGH
;velocidad
MOVLW
.25
;a
MOVWF
SPBRG
;4800 baudios
BCF
TXSTA,SYN
;seleccin del modo asincrnico
BCF
TXSTA,TX9
;desactivacin del 9no bit de datos
BSF
TXSTA,TXEN
;habilitacin de la transmisin
BSF
RCSTA,SPEN
;habilitacin del puerto serial
Aplicando los comandos del compilador PIC C Compiler tendramos:
#use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Con la ejecucin de estas instrucciones, el puerto serial quedara configurado y listo
para transmitir cualquier dato. Supongamos que se desea enviar una constante, por
ejemplo 55h, las instrucciones seran las siguientes:
TXREG=0X55;
Si en lugar de una constante se desea enviar el valor de una variable, cuyo nombre es
DATO, las instrucciones seran las siguientes:
TXREG=DATO; // DATO tiene que ser una variable tipo char
Pero, si se quisiera enviar el valor de un puerto; por ejemplo, el valor del PORTD, las
instrucciones serian las siguientes:
TXREG=input_d();
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
113
TXSTA,BRGH
.12
SPBRG
TXSTA,SYN
TXSTA,TX9
TXSTA,TXEN
RCSTA,SPEN
;velocidad
;a
;9600 baudios
;seleccin del modo asincrnico
;desactivacin del 9no bit de datos (paridad)
;des habilitacin de la transmisin
;habilitacin del puerto serial
CIBERTEC
CARRERAS PROFESIONALES
114
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
115
ADCSX:
ADCS0
CHS2
CH1
CH0
GO/DONE
ADON
bit6
bit5
bit4
bit3
bit2
Bit1
Bit0
CHSX:
RELOJ
F/2
F/8
F/32
FRC
CANAL
0 (RA0)
1 (RA1)
2 (RA2)
3 (RA3)
4 (RA5)
5 (RE0)
6 (RE1)
7 (RE2)
GO/DONE:
ADON:
Activacin de la conversin
1: Activada
0: Desactivada
ADFM:
PCFGX:
CIBERTEC
PCFG3
PCFG2
PCFG1
PCFG0
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
CARRERAS PROFESIONALES
116
PCFG3:
PCFG0
AN7
RE2
AN6
RE1
AN5
RE0
AN4
RA5
AN3
RA3
AN2
RA2
AN1
RA1
AN0
RA0
VREF+
VREF-
0000
VDD
GND
0001
RA3
GND
0010
VDD
GND
0011
RA3
GND
0100
VDD
GND
0101
RA3
GND
0110
0111
1000
RA3
RA2
1001
VDD
GND
1010
RA3
GND
1011
RA3
RA2
1100
RA3
RA2
1101
RA3
RA2
1110
VDD
GND
1111
RA3
RA2
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
NOP
NOP
NOP
BSF ADCON0,GO/DONE
117
;de espera
;para iniciar
;cada conversin
;pone en marcha la conversin.
// formato de 8 bits
// pin RA0 como entrada analgica
// clock F/8
// multiplexor ADC a RA0
output_b(read_adc());
Investigue la direccin en memoria RAM del registro RCREG, este recibe los datos
provenientes del puerto serie. Adems, averige que registro contiene al bit indicador
de dato serie recibido y listo (RCIF), es necesario saber cul es la direccin de este
registro en la memoria RAM y tambin, cul es la posicin del bit RCIF dentro de este
registro. Es fundamental para leer los datos del puerto serie.
Iniciemos el desarrollo del programa:
//------Configuracin inicial----------------------------------------------
CIBERTEC
CARRERAS PROFESIONALES
118
#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD,
NOWRT, NODEBUG
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#byte RCREG=0X1A
#bit RCIF=0XC.5
//------Programa principal---------------------------------------------void main()
{
set_tris_b(0x00);
do{
if(RCIF==1){
output_b(RCREG);
RCIF=0;}
}while(TRUE);
}
2.5.3.2 Visualizacin de conversin analgica
Realice el programa que permita mostrar constantemente a travs del puertos B el
valor digital del voltaje ingresado a travs de la patilla PA0 (RA0).
Se utilizar la seal de reloj F/8, ya que esta se configura hasta frecuencias mximas
de cristal de 5Mhz y, segn el esquema, el cristal es de 4Mhz. El voltaje de referencia
ser VDD y GND, y el formato de conversin debe ser 8 bits.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
119
Iniciemos el programa:
//------Configuracin inicial---------------------------------------------#include <16F877.h>
#device adc=8
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD,
NOWRT, NODEBUG
#use delay(clock=4000000)
//------Programa principal---------------------------------------------void main()
{
set_tris_b(0x00);
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_8);
set_adc_channel(0);
do{
output_b(read_adc());
delay_ms(100);
}while(TRUE);
}
2.5.3.3 Iluminacin automtica
Realice el programa que
permita prender o apagar un
foco segn la cantidad de luz
natural. El sensor de luz
provee un rango de voltajes
segn la cantidad de luz que
incida sobre este. Suponga
que, tras las pruebas, una luz
ptima natural genera un
voltaje de 3.5v; y una luz
tenue, apenas visible, genera
un voltaje de 1v. Por lo tanto,
para los valores menores o
iguales a 1v, la luz del foco se
debe encender, mientras que
para los valores iguales o
mayores a 3.5v, la luz del foco
se tendr que apagar.
Se
utilizar
la
misma
configuracin del problema
anterior.
CIBERTEC
CARRERAS PROFESIONALES
120
Iniciemos el programa.
//------Configuracin inicial---------------------------------------------#include <16F877.h>
#device adc=8
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD,
NOWRT, NODEBUG
#use delay(clock=4000000)
//------Programa principal---------------------------------------------void main()
{
char cant_luz;
// variable que obtendr el voltaje
set_tris_d(0x00);
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_8);
set_adc_channel(0);
do{
cant_luz=read_adc();
if(cant_luz<=51)
output_high(PIN_D0);
// verificar si es menor a 1V
// si es asi prende la luz
else if(cant_luz>=178)
output_low(PIN_D0);
delay_ms(100);
}while(TRUE);
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
121
Resumen
CIBERTEC
CARRERAS PROFESIONALES
122
UNIDAD DE
APRENDIZAJE
EL PIC16F877
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno construye e implementa circuitos electrnicos
funcionales de complejidad media utilizando el Microcontrolador PIC16F877. Los
circuitos sern implementados en protoboards y no deben presentar fallas en las
conexiones realizadas. Por otro lado, los programas que activan el funcionamiento de
los circuitos se desarrollarn mediante comandos de Lenguaje C y el compilador C de
MPLAB y debern garantizar, luego de la correcta instalacin de los mismos, el
funcionamiento mnimo del 80% de las tareas propuestas para las aplicaciones de
lectura y/o escritura de puertos, temporizacin, comunicacin serie, conversin
anloga digital e interrupciones en los cinco puertos del Microcontrolador.
TEMARIO
Gestin de Interrupciones
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
123
CIBERTEC
CARRERAS PROFESIONALES
124
GIE:
PEIE
bit6
T0IE
bit5
INTE
bit4
RBIE
bit3
T0IF
bit2
INTF
bit1
RBIF
bit0
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
125
0: Desactivado
2.6.2.2 Registro OPTION
RBPU
bit7
INTDEG
bit6
T0CS
bit5
T0SE
bit4
PSA
bit3
PS2
bit2
PS1
bit1
PS0
bit0
TMR2IE
bit1
TMR1IE
Bit0
ADIE
bit6
RCIE
bit5
TXIE
bit4
SSPIE
bit3
CCP1IE
bit2
PSPIE :
ADIE :
RCIE:
TXIE:
SSPIE:
CCP1IE:
TMR2IE:
TMR1IE:
CIBERTEC
CARRERAS PROFESIONALES
126
ADIF
bit6
RCIF
bit5
TXIF
bit4
SSPIF
bit3
CCP1IF
bit2
TMR2IF
bit1
TMR1IF
Bit0
PSPIF:
ADIF:
RCIF:
TXIF:
SSPIF:
CCP1IF:
TMR2IF:
TMR1IF:
bit6
bit5
EEIE
bit4
BCLIE
bit3
bit2
Bit1
EEIE:
BCLIE:
CCP2IE:
CARRERAS PROFESIONALES
CCP2IE
Bit0
CIBERTEC
MICROCONTROLADORES
127
1: Habilitado
bit6
bit5
EEIF
bit4
BCLIF
bit3
bit2
Bit1
CCP2IF
Bit0
EEIF:
BCLIF:
CCP2IF:
CIBERTEC
CARRERAS PROFESIONALES
128
Iniciemos el programa:
//------Configuracin inicial---------------------------------------------#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD,
NOWRT, NODEBUG
#use delay(clock=4000000)
#Byte CUENTA=0X30
#int_EXT
//------Funcin de interrupcin que genera cuenta de 0 a 15 por el puerto D-----------EXT_isr()
{
CUENTA=CUENTA+1;
if(CUENTA==16)
CUENTA=0;
output_d(CUENTA);
}
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
129
CIBERTEC
CARRERAS PROFESIONALES
130
Desarrollemos el programa:
//------Configuracin inicial---------------------------------------------#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD,
NOWRT, NODEBUG
#use delay(clock=4000000)
#byte LIMITE=0X30
#int_RB
//------Funcin de interrupcin que carga en LIMITE el valor del puerto B-----------RB_isr()
{
LIMITE=input_b();
LIMITE=LIMITE>>4; // rota hacia la derecha 4 posiciones
output_c(LIMITE);
// muestra el lmite en el Puerto C
}
//------Programa principal---------------------------------------------void main()
{
char CUENTA;
enable_interrupts(INT_RB); // habilitar interrupcin por variacin de RB4 a RB7
enable_interrupts(GLOBAL); // habilitar interrupciones
set_tris_c(0x00);
set_tris_d(0x00);
output_c(0x00);
output_d(0x00);
do{
for(CUENTA=0;CUENTA<=LIMITE;CUENTA++){
output_d(CUENTA);
delay_ms(500);}
}while(TRUE);
}
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
131
Iniciemos el programa:
//------Configuracin inicial---------------------------------------------#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD,
NOWRT, NODEBUG
#use delay(clock=4000000)
#byte CUENTA=0X30
#bit TMR1ON=0X10.0
#int_TIMER1
//------Funcin de interrupcin del TMER1 cada 500ms-----------TIMER1_isr()
{
set_TIMER1(3036);
CUENTA=CUENTA-1;
}
CIBERTEC
CARRERAS PROFESIONALES
132
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
133
CIBERTEC
CARRERAS PROFESIONALES
134
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
135
Iniciemos el programa.
//---------- Configuracin inicial ----------#include <16f877.h>
// PIC utilizado
#fuses XT,NOWDT,NOPROTECT,PUT // configuracin de los fuses
#use delay (clock=4000000)
// oscilador a 4 MHz
#bit KEY_ON=0X30.0
#byte tecla=0X31
#byte dfila=0x32
#byte dcol=0x33
#byte dcolx=0x34
#bit TMR1ON=0X10.0
#bit RBIF=0XB.0
#bit RBIE=0XB.3
CIBERTEC
CARRERAS PROFESIONALES
136
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
137
for(i=0;i<8;i++){
// bucle para los 8 caracteres del mensaje: IN KEY:
write_char(caracter[i]); // escribe en el display cada caracter
delay_ms(60);}
// retardo por cada caracter escrito en el display
dfila=0;
set_TIMER1(53036);
TMR1ON=1;
KEY_ON=0;
do{
if(KEY_ON==1){
// si la interrupcin RBX activa el bit KEY_ON
write_char(teclado[tecla]); // muestra en el display la tecla presionada
delay_ms(500);
// retardo por cada tecla presionada
KEY_ON=0;}
// desactiva el indicador de tecla presionada
}while(TRUE);
// repetir bucle
}
CIBERTEC
CARRERAS PROFESIONALES
138
Resumen
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
CIBERTEC
139
CARRERAS PROFESIONALES
140
UNIDAD DE
APRENDIZAJE
PICS DE 16 Y 32 BITS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno describe las caractersticas y capacidades de los
microcontroladores de 16 y 32 bits de la familia Microchip, empleando los conceptos
de las hojas de datos de los microcontroladores PIC24FJ64GA006 y
PIC32MX300F032H. Asimismo, implementar circuitos aplicativos con estos
microcontroladores y desarrollar los programas que pongan en funcionamiento los
sistemas en un 80%.
TEMARIO
El PIC24FJ64GA006
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
141
3.1 EL PIC24FJ64GA006
El PIC24FJ64GA006 es un microcontrolador desarrollado por Microchip. Pertenece a
la gama baja de microcontroladores de 16 bits, ideal para iniciar el estudio de estos
microcontroladores ms avanzados.
3.1.1 Caractersticas
3.1.1.1 Descripcin de contactos
CIBERTEC
CARRERAS PROFESIONALES
142
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
143
Regulador habilitado
Regulador deshabilitado
Regulador deshabilitado
3.1.2.2 Reset
Todos los Microcontroladores necesitan recibir un impulso apenas se energizan. Esto
es fundamental para inicializar sus unidades y registros. De no presentarse este
impulso, el Microcontrolador probablemente quedara bloqueado ejecutando algn
grupo de instrucciones que nada tienen que ver con la ejecucin del programa
preparado, ya que el PC (contador de programa) podra estar apuntando a cualquier
parte de la memoria de programa flash. Este impulso, entre otras cosas, asegura que
el registro PC apunte a la primera celda de la memoria flash, es decir, el
Microcontrolador queda listo para leer, interpretar y ejecutar su primera instruccin.
Este impulso se logra
realizando un arreglo RC
sobre la patilla MCLR, tal
como se muestra en la
figura de la izquierda.
Valores comunes seran
1K ohmios para la
resistencia y 10 uF para
el
condensador.
Si
durante el funcionamiento
del
Microcontrolador
ocurriera algn evento no
deseado y este quedase
bloqueado o simplemente
se requiere reiniciar la
ejecucin del programa
desde el principio, es
necesario inyectar un
nuevo impulso sobre
MCLR. Pero como notamos en la grfica, MCLR, no es la nica fuente que puede
generar un reset del sistema.
CIBERTEC
CARRERAS PROFESIONALES
144
3.1.2.3 Reloj
La funcin de reloj, tambin conocida como sistema de oscilacin, es fundamental
para que el Microcontrolador se ponga en marcha. Sin esta seal, los
Microcontroladores no podran realizar la ms mnima labor. Estos necesitan los
pulsos repetitivos de la seal de reloj para leer, interpretar y ejecutar las instrucciones
almacenadas en su memoria flash.
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
145
CIBERTEC
CARRERAS PROFESIONALES
146
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
147
CIBERTEC
CARRERAS PROFESIONALES
148
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
149
CIBERTEC
CARRERAS PROFESIONALES
150
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
151
CIBERTEC
CARRERAS PROFESIONALES
152
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
CIBERTEC
153
CARRERAS PROFESIONALES
154
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
155
CIBERTEC
CARRERAS PROFESIONALES
156
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
157
CIBERTEC
CARRERAS PROFESIONALES
158
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
159
TRISB y PORTB:
TRISC y PORTC:
TRISD y PORTD:
TRISE y PORTE:
TRISF y PORTF:
TRISG y PORTG:
CIBERTEC
CARRERAS PROFESIONALES
160
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
CIBERTEC
161
CARRERAS PROFESIONALES
162
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
CIBERTEC
163
CARRERAS PROFESIONALES
164
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
165
CIBERTEC
CARRERAS PROFESIONALES
166
else
rvalue = tmp;
}
pos = 0;
if (lastop != 0)
calc_opfunctions(lastop);
if (key != '=')
lastop = key;
else
lastop = 0;
}
}
}
VOID calc_opfunctions (CHAR token)
{ INT8 result = OK;
switch (token)
{ case '+' : lvalue += rvalue; break;
case '-' : lvalue -= rvalue; break;
case '*' : lvalue *= rvalue; break;
case '/' :
if (rvalue != 0)
lvalue /= rvalue;
else
result = ERROR;
break;
}
if (result == OK)
calc_format(lvalue);
else if (result == ERROR)
{ char buf[] = "*ERROR*";
calc_display(buf);
}
}
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
167
0.000001,
0.0000001,
0
};
CHAR dbuf [MAX_DISPLAY_CHAR+1];
FLOAT divisor, tmp;
INT count = 0, digit;
INT pad=0, p=0;
if (f >= 0)
dbuf[p++] = ' ';
else
{ dbuf[p++] = '-';
f = -f;
}
if (f >= divisors[0])
dbuf[p++] = 'E';
else
while (p < MAX_DISPLAY_CHAR && ((divisor=divisors[count++]) >= 1 || f >
0.0000001))
{ if (fabs(f)<1)
digit = f/divisor+0.05;
else
digit = f/divisor;
if (divisor == 0.1)
dbuf[p++] = '.';
if (digit != 0 || divisor < 10)
{ dbuf[p++] = digit + '0';
pad = TRUE;
}
else if (pad)
dbuf[p++] = '0';
tmp = digit*divisor;
f -= tmp;
}
dbuf[p] = 0;
calc_display(dbuf);
}
BOOL calc_testkey (CHAR key)
{ if ((key == '.')|| ((key >= '0') && (key <= '9')))
return TRUE;
else
return FALSE;
}
CIBERTEC
CARRERAS PROFESIONALES
168
0x0000
0x0100
0x0200
0x0300
0x0400
#define LCD_CLS
0x01
#define LCD_HOME
0x02
#define LCD_SETMODE
0x04
#define LCD_SETVISIBLE
0x08
#define LCD_SHIFT
0x10
#define LCD_SETFUNCTION 0x20
#define LCD_SETCGADDR 0x40
#define LCD_SETDDADDR 0x80
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
169
VOID calc_evaluate(void);
CHAR calc_getkey (VOID);
VOID calc_format (FLOAT f);
VOID calc_display (CHAR *buf);
VOID calc_opfunctions (CHAR token);
BOOL calc_testkey (CHAR ch);
VOID calc_output (INT status);
CHAR keypadread(void);
CHAR scankeypad(void);
VOID lcd_init(void);
VOID lcd_wait(void);
VOID wrcmd (BYTE data);
VOID wrdata(BYTE data);
VOID clearscreen(void);
//--------------Archivo keybdio.c---------------------#include "p24FJ64GA006.h"
#include "calc.h"
CHAR keycodes[16] = {'7','8','9','/','4','5','6','*','1','2','3','-','.','0','=','+'};
CHAR keypadread()
{ CHAR key = scankeypad();
if (key)
while (scankeypad() != 0);
return key;
}
CHAR scankeypad()
{ INT8 row,col,tmp;
CHAR key=0;
INT wait;
TRISG = 0xFFFF;
TRISD = 0x0000;
TRISB = 0;
for (row=0; row < KEYP_NUM_ROWS; row++)
{
PORTD = (~(1 << row)) & 0xFF;
for (wait=0; wait<100; ++wait);
tmp = (PORTG & G_MASK) >> G_SHIFT;
for (col=0; col<KEYP_NUM_COLS; ++col)
if ((tmp & (1<<col)) == 0)
{ INT idx = (row*KEYP_NUM_COLS) + col;
key = keycodes[idx];
PORTB = idx;
goto DONE;
CIBERTEC
CARRERAS PROFESIONALES
170
}
}
DONE:
PORTD = 0x00FF;
TRISD = 0x00FF;
return key;
}
//--------------Archivo lcdio.c---------------------#include "p24FJ64GA006.h"
#include "calc.h"
CHAR keycodes[16] = {'7','8','9','/','4','5','6','*','1','2','3','-','.','0','=','+'};
CHAR keypadread()
{ CHAR key = scankeypad();
if (key)
while (scankeypad() != 0)
/* Nothing */ ;
return key;
}
CHAR scankeypad()
{ INT8 row,col,tmp;
CHAR key=0;
INT wait;
TRISG = 0xFFFF;
TRISD = 0x0000;
TRISB = 0;
for (row=0; row < KEYP_NUM_ROWS; row++)
{ // Drive appropriate row low and read columns:
PORTD = (~(1 << row)) & 0xFF;
for (wait=0; wait<100; ++wait)
;
tmp = (PORTG & G_MASK) >> G_SHIFT;
for (col=0; col<KEYP_NUM_COLS; ++col)
if ((tmp & (1<<col)) == 0)
{ INT idx = (row*KEYP_NUM_COLS) + col;
key = keycodes[idx];
PORTB = idx;
goto DONE;
}
}
DONE:
PORTD = 0x00FF;
TRISD = 0x00FF;
return key;
}
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
171
Resumen
CIBERTEC
CARRERAS PROFESIONALES
172
UNIDAD DE
APRENDIZAJE
PICS DE 16 Y 32 BITS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al terminar la unidad, el alumno describe las caractersticas y capacidades de los
microcontroladores de 16 y 32 bits de la familia Microchip, empleando los conceptos
de las hojas de datos de los microcontroladores PIC24FJ64GA006 y
PIC32MX300F032H. Asimismo, implementar circuitos aplicativos con estos
microcontroladores y desarrollar los programas que pongan en funcionamiento los
sistemas en un 80%.
TEMARIO
El PIC32MX300F032H
ACTIVIDADES PROPUESTAS
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
173
3.2 EL PIC32MX300F032H
El PIC32MX300F032H es un microcontrolador desarrollado por Microchip. Pertenece a
la gama de microcontroladores de 32 bits.
3.2.1 Caractersticas
3.2.1.1 Contactos del PIC32MX320F032H
CIBERTEC
CARRERAS PROFESIONALES
174
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
175
Regulador habilitado
Regulador deshabilitado
Regulador deshabilitado
3.2.2.2 Reset
Todos los Microcontroladores necesitan recibir un impulso apenas se energizan. Esto
es fundamental para inicializar sus unidades y registros. De no presentarse este
impulso, el Microcontrolador probablemente quedara bloqueado ejecutando algn
grupo de instrucciones que nada tienen que ver con la ejecucin del programa
preparado, ya que el PC (contador de programa) podra estar apuntando a cualquier
parte de la memoria de programa flash. Este impulso, entre otras cosas, asegura que
el registro PC apunte a la primera celda de la memoria flash, es decir, el
Microcontrolador queda listo para leer, interpretar y ejecutar su primera instruccin.
Este impulso se
logra realizando un
arreglo RC sobre la
patilla
MCLR.
Valores comunes
seran 1K ohmios
para la resistencia
y 10 uF para el
condensador.
Si
durante
el
funcionamiento del
Microcontrolador
ocurriera
algn
evento no deseado
y este quedase bloqueado o simplemente se requiere reiniciar la ejecucin del
programa desde el principio, es necesario inyectar un nuevo impulso sobre MCLR.
Pero como notamos en la grfica, MCLR, no es la nica fuente que puede generar un
reset del sistema.
CIBERTEC
CARRERAS PROFESIONALES
176
3.2.2.3 Reloj
La funcin de reloj, tambin conocida como sistema de oscilacin, es fundamental
para que el Microcontrolador se ponga en marcha. Sin esta seal, los
Microcontroladores no podran realizar la ms mnima labor. Estos necesitan los
pulsos repetitivos de la seal de reloj para leer, interpretar y ejecutar las instrucciones
almacenadas en su memoria flash.
Tiene
cuatro
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
177
CIBERTEC
CARRERAS PROFESIONALES
178
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
179
CIBERTEC
CARRERAS PROFESIONALES
180
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
CIBERTEC
181
CARRERAS PROFESIONALES
182
CARRERAS PROFESIONALES
CIBERTEC
MICROCONTROLADORES
CIBERTEC
183
CARRERAS PROFESIONALES
184
Resumen
CARRERAS PROFESIONALES
CIBERTEC