Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Pic16f84a
Manual Pic16f84a
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
NDICE
NDICE...................................................................................................................................I
LISTA DE FIGURAS...........................................................................................................II
LISTA DE TABLAS............................................................................................................VI
INTRODUCCIN.................................................................................................................1
CAPTULO 1. INTRODUCCIN A LOS MICROCONTROLADORES......................2
CAPTULO 2. CARACTERSTICAS DEL PIC16F84A..................................................9
CAPTULO 3. COMPILACIN Y SIMULACIN DE PROGRAMAS......................96
CAPTULO 4. PROGRAMADORES Y PROGRAMACIN DEL PIC.....................116
CAPTULO 5. PRCTICAS SUGERIDAS...................................................................134
RECOMENDACIONES...................................................................................................201
CONCLUSIONES.............................................................................................................202
BIBLIOGRAFA..............................................................................................................203
SITIOS WEB.....................................................................................................................204
ANEXOS............................................................................................................................205
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
LISTA DE FIGURAS
FIGURA 1.4.1.1 DIAGRAMA DE CONEXIONES DE LOS PIC12CXXX DE LA GAMA ENANA. .....................4
FIGURA 1.4.2.1. DIAGRAMA DE CONEXIONES DE LOS PIC DE LA GAMA BAJA QUE RESPONDEN A LA
NOMENCLATURA PIC16C54/56......................................................................5
FIGURA 1.4.3.1. DIAGRAMA DE CONEXIONES DE LOS PIC16C8X, MODELOS REPRESENTATIVOS DE LA
GAMA MEDIA.................................................................................................6
FIGURA 1.4.4.1 DIAGRAMA DE CONEXIONES DE LOS PIC DE LA GAMA ALTA QUE CORRESPONDEN A LA
NOMENCLATURA PIC17C75X........................................................................7
FIGURA 2.1.1.1. DIAGRAMA DE PINES DEL PIC16F84..................................................................11
FIGURA 2.2.2.1. ARQUITECTURA INTERNA DEL PIC16F84A..........................................................14
FIGURA 2.2.4.1 LOS IMPULSOS DEL RELOJ EXTERNO (OSC1) SE DIVIDEN POR 4 FORMANDO LAS SEALES
Q1, Q2, Q3 Y Q4, QUE CONFIGURAN UN CICLO DE INSTRUCCIN.......................16
FIGURA 2.2.4.2. LA SEGMENTACIN PERMITE TRASLAPAR EN EL MISMO CICLO LA FASE DE EJECUCIN DE
UNA INSTRUCCIN Y LA DE BSQUEDA DE LA SIGUIENTE, EXCEPTO EN LAS
INSTRUCCIONES DE SALTO..............................................................................16
FIGURA 2.3.1.1. ORGANIZACIN DE LA MEMORIA DE PROGRAMA......................................................18
FIGURA 2.3.2.1. ORGANIZACIN DE LA MEMORIA RAM DEL PIC16F84A.....................................19
FIGURA 2.3.2.3.1. DIRECCIN Y MAPEO DE BITS DEL REGISTRO ESTADO (STATUS).....................22
FIGURA 2.3.2.3.2. DIRECCIN Y MAPEO DE BITS DEL REGISTRO OPTION Y TMR0.........................24
FIGURA 2.3.2.4.1. MAPEO DE BITS DEL REGISTRO INTCON.........................................................25
FIGURA 2.3.2.5.1 CARGA DEL CONTADOR DE PROGRAMA................................................................27
FIGURA 2.3.3.1. MAPEO GENERAL DE BANCOS DE LOS DISPOSITIVOS PIC..........................................29
FIGURA 2.3.3.1.1. DIRECCIONAMIENTO DIRECTO EN EL PIC16F84.................................................30
FIGURA 2.3.3.2.1. DIRECCIONAMIENTO INDIRECTO EN LOS DISPOSITIVOS PIC....................................31
FIGURA 2.3.4.1. LA INSTRUCCIN CALL Y LA INTERRUPCIN, PROVOCAN LA CARGA AUTOMTICA DEL
CONTENIDO DEL PC EN LA PILA.....................................................................33
FIGURA 2.3.4.2. LAS INSTRUCCIONES DE RETORNO DE SUBRUTINA O DE INTERRUPCIN DESCARGAN
AUTOMTICAMENTE EL CONTENIDO DEL NIVEL 1 DE LA PILA SOBRE EL PC............33
FIGURA 2.4.1. MAPEO DE DIRECCIONES DE LOS PUERTOS.................................................................34
FIGURA 2.4.1.1. LOS PUERTOS NO UTILIZADOS SE DEBEN CONECTAR A LA FUENTE...............................35
FIGURA 2.4.1.2. CAPACIDAD MXIMA DE CORRIENTE QUE SOPORTAN LOS PUERTOS..............................35
FIGURA 2.4.2.1. UBICACIN DE PORTA Y TRISA EN LOS BANCOS DEL PIC..................................36
FIGURA 2.4.2.2. DIAGRAMA DE CONEXIONES DE LOS PINES RA3-RA0 A LAS SEALES DEL PROCESADOR
.................................................................................................................37
FIGURA 2.4.3.1. UBICACIN DE PORTB Y TRISB EN LOS BANCOS DEL PIC..................................39
FIGURA 2.4.3.2. CONEXIONADO DE LOS PINES RB7 RB4 Y LAS LNEAS CORRESPONDIENTES AL BUS
INTERNO DE DATOS Y LAS SEALES DE CONTROL. ..............................................40
FIGURA 2.4.3.3. CONEXIONADO DE LOS PINES RB3 RB0 Y LAS LNEAS CORRESPONDIENTES AL BUS
INTERNO DE DATOS Y LAS SEALES DE CONTROL................................................41
FIGURA 2.5.1. DIAGRAMA SIMPLIFICADOR DEL TEMPORIZADOR TMR0.............................................44
FIGURA 2.5.2. ESQUEMA SIMPLIFICADO DEL CIRCUITO DE CONTROL DE TIEMPOS USADO EN LOS
PIC16X8X...............................................................................................45
FIGURA 2.5.3. ESQUEMA GENERAL DEL FUNCIONAMIENTO DEL TMR0.
.................................................................................................................47
ii
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
LISTA DE TABLAS
TABLA 1.4.1.1 CARACTERSTICAS DE LOS MODELOS PIC12C(F)XXX DE LA GAMA ENANA.................5
TABLA 1.4.2.1. PRINCIPALES CARACTERSTICAS DE LOS MODELOS DE LA GAMA BAJA.............................6
TABLA 1.4.3.1. CARACTERSTICAS RELEVANTES DE LOS MODELOS PIC16X8X DE LA GAMA MEDIA........7
TABLA 1.4.4.1 CARACTERSTICAS MS DESTACADAS DE LOS MODELOS PIC17CXXX DE LA GAMA ALTA 8
TABLA 2.1.1.1. LISTA DE CARACTERSTICAS DEL PIC16F8X..........................................................10
TABLA 2.3.2.2.1. ORGANIZACIN DETALLADA DE LOS REGISTROS DEL PIC16F84A..........................21
TABLA 2.3.2.3.1 VALOR DE PREESCALA ASIGNADO AL DIVISOR DE FRECUENCIA................................25
TABLA 2.4.2.1. DESCRIPCIN DE LAS TERMINALES DEL PUERTO A....................................................38
TABLA 2.4.3. 1. DESCRIPCIN DE LAS TERMINALES DEL PUERTO B...................................................42
TABLA 2.5.1.1. DISTRIBUCIN Y ASIGNACIN DE FUNCIONES DE LOS BITS DEL REGISTRO OPTION......49
TABLA 2.9.1.1. VALORES QUE TOMAN LOS BITS DE LOS REGISTROS SFR TRAS LOS POSIBLES RESET.....73
TABLA 2.9.3.1. LOS BITS Y DEL REGISTRO DE STATUS DETERMINAN LA CAUSA QUE HA ORIGINADO EL
RESET........................................................................................................74
TABLA 2.10.1. CONSECUENCIAS DEL MODO DE REPOSO.................................................................76
TABLA 2.10.1.1. STATUS Y SIGNIFICADO DE LOS SEALIZADORES Y ............................................77
TABLA 2.10.2.1. INSTRUCCIONES QUE EJECUTA EL PIC CUANDO DESPIERTA
POR UNA INTERRUPCIN SEGN EL VALOR DE BIT GIE.......................................78
TABLA 2.11.1.1 . VALORES RECOMENDADOS PARA LOS COMPONENTES DEL OSCILADOR RC
CON RESPECTO A LA FRECUENCIA DESEADA.......................................................81
TABLA 2.11.2.1. TABLA DE SELECCIN DE CRISTAL Y CAPACITOR.....................................................82
TABLA 2.12.2. COMBINACIONES PARA ELEGIR EL TIPO DE OSCILADOR...............................................86
TABLA 2.15.1.1. CLASIFICACIN DE FORMATOS.............................................................................90
TABLA 2.15.2.1. JUEGO DE INSTRUCCIONES DEL PIC16F84A......................................................91
TABLA 2.15.2.1.1. PRINCIPALES CARACTERSTICAS DE LAS INSTRUCCIONES DE LOS PIC16X8X .........92
TABLA 2.15.2.2.1. CARACTERSTICAS MS IMPORTANTES DE LAS DOS INSTRUCCIONES
QUE MANEJAN UN BIT DETERMINADO DE UN REGISTRO........................................93
TABLA 2.15.2.3.1. CARACTERSTICAS MS RELEVANTES DE LAS CUATRO INSTRUCCIONES CONDICIONALES
DE BRINCO..................................................................................................93
TABLA 2.15.2.4.1. CARACTERSTICAS MS IMPORTANTES DE LAS INSTRUCCIONES QUE MANEJAN
OPERANDOS INMEDIATOS (K)..........................................................................94
TABLA 2.15.2.5.1. PRINCIPALES CARACTERSTICAS DE LAS INSTRUCCIONES DEL CONTROL DEL FLUJO DEL
PROGRAMA Y DE LAS ESPECIALES....................................................................95
vi
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
INTRODUCCIN
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Como parte de esta estrategia, la familia NMOS PIC165x fue rediseada para
emplear algo que la misma compaa fabricaba bastante bien, memoria EPROM. De esta
forma naci el concepto de basarse en tecnologa CMOS, OTP y memoria de programacin
EPROM, naciendo la familia PIC16C5x.
Actualmente Microchip ha realizado un gran nmero de mejoras a la arquitectura
original, adaptndola a las actuales tecnologas y al bajo costo de los semiconductores.
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
MEMORIA
MEMORIA FRECUENCIA LNEAS
PROGRAMA
DATOS
MXIMA
E/S
512x12
25x8
4MHz
6
1024x12
41x8
4MHz
6
512x14
80x8
4MHz
6
1024x14
128x8
4MHz
6
2048x14
128x8
4MHz
6
512x12
80x8
4MHz
6
FLASH
16x8 EPROM
1024x14
80x8
4MHz
6
FLASH
16x8 EPROM
ADC
8 BITS
TEMPORIZADORES PINES
2
4
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
8
8
8
8
8
TMR0 + WDT
TMR0 + WDT
Figura 1.4.2.1. Diagrama de conexiones de los PIC de la gama baja que responden a la nomenclatura
PIC16C54/56
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
MEMORIA
PROGRAMA
(x12 Bits)
EEPROM
PIC16C52
PIC16C54
PIC16C54A
PIC16CR54A
PIC16C55
PIC16C56
PIC16C57
PIC16CR57B
PIC16C58A
PIC16CR58A
MEMORIA
DATOS
(Bytes)
FRECUENCIA
MXIMA
LNEAS
E/S
25
25
25
25
24
25
72
72
73
73
4 MHz
20 MHz
20 MHz
20 MHz
20 MHz
20 MHz
20 MHz
20 MHz
20 MHz
20 MHz
4
12
12
12
20
12
20
20
12
12
TEMPORIZADORES PINES
ROM
384
512
512
512
512
1K
2K
2K
2K
2K
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
18
18
18
18
28
18
28
28
18
18
Figura 1.4.3.1. Diagrama de conexiones de los PIC16C8X, modelos representativos de la gama media.
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
MEMORIA
PROGRAMA
1Kx14 EEPROM
1Kx14 FLASH
512x14 FLASH
1Kx14 ROM
512x14 ROM
MEMORIA
DATOS (Bytes)
RAM
EEPROM
36
68
36
68
36
64
64
64
64
64
REGISTROS
ESPECFICOS
TEMPORIZADORES
INTERRUPCIONES
11
11
11
11
11
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
TMR0 + WDT
4
4
4
4
4
E/S PINES
13
13
13
13
13
18
18
18
18
18
Figura 1.4.4.1 Diagrama de conexiones de los PIC de la gama alta que corresponden a la nomenclatura
PIC17C75X
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
PIC17C42A
PIC17C43
PIC17C44
PIC17C752
PIC17C756
MEMORIA
PROGRAMA
MEMORIA
DATOS
RAM
(Bytes)
REGISTROS
ESPECFICOS
TEMPORIZADORES
CAP
PWM
CAD
10 bit
INTERRUPCIONES
E/S
MULTIPLICADOR
HARDWARE
2Kx16
232
48
4 + WDT
2
2
11
33
4Kx16
454
48
4 + WDT
2
2
11
33
8Kx16
454
48
4 + WDT
2
2
11
33
8Kx16
454
76
4 + WDT
4
3
12
18
50
16Kx16
902
76
4 + WDT
4
3
12
18
50
CAP= Capturador; PWM= Modulador por ancho de pulso; CAD= Convertidor Anlogo/Digital
8x8
8x8
8x8
8x8
8x8
PINES
40/44
40/44
40/44
64/68
64/68
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
PIC16F83
PIC16F84
PIC16F84A
PIC16CR83
PIC16CR84
Todos los microcontrollers de PICmicro emplean una avanzada Arquitectura
instrucciones se ejecuten en un solo ciclo, excepto por los saltos del programa, los cuales
requieren dos ciclos.
Un total de 35 instrucciones (Juego de instrucciones reducido) estn disponibles.
Adicionalmente un set del registro largo es usado para lograr un nivel de alto rendimiento.
Los microcontroladores PIC16F8x tpicamente logran una compresin de cdigo de
2:1 y un incremento de 4:1 en la mejora de velocidad (a 20 MHz) sobre otros
microcontroladores de 8 bits de su misma clase.
En la tabla 2.1.1.1 se muestran las caractersticas principales de la serie de
microcontroladores PIC16F8x.
9
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Mxima frecuencia de
operacin MHz
Memoria de programa Flash
Memoria de programa
EEPROM
Memoria de programa ROM
Memoria de datos (bytes)
EEPROM de datos (bytes)
Mdulos Temporizadores
Fuentes de interrupcin
Pines de I/O
Rangos de Voltaje (Volts)
Empaques
PIC16F83
PIC16CR83
PIC16F84
PIC16CR84 PIC16F84A
10
10
10
10
20
512
1K
IK
512
1K
36
36
68
68
68
64
64
64
64
64
TMRO
TMRO
TMRO
TMRO
TMRO
4
4
4
4
4
13
13
13
13
13
4.0-6.0
2.0-6.0
4.0-6.0
2.0-6.0
4.0-6.0
Dip 18-pin, Dip 18-pin, Dip 18-pin, Dip 18-pin, Dip 18-pin,
SOIC
SOIC
SOIC
SOIC
SOIC
10
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
11
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
13
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
14
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
15
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.2.4.1 Los impulsos del reloj externo (OSC1) se dividen por 4 formando las seales Q1, Q2, Q3 y Q4,
que configuran un ciclo de instruccin.
Figura 2.2.4.2. La segmentacin permite traslapar en el mismo ciclo la fase de ejecucin de una instruccin y
la de bsqueda de la siguiente, excepto en las instrucciones de salto
16
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
17
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
18
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
19
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
(esta ltima a travs del registro selector FSR). Para seleccionar que banco de registros se
trabaja en un momento determinado se utiliza el bit RP0 del registro ESTADO (STATUS).
Los registros del SFR (Registros de funcin especial) se localizan en la memoria de
programa de la posicin 00h a la posicin 0Bh, mientras que, los registros GPR (registros
de propsito general) se localizan de la posicin 0Ch a la posicin 4Fh.
Los Registros de la Funcin Especiales son usados por el CPU y perifricos para
controlar el funcionamiento del dispositivo. Estos registros son del tipo RAM esttica.
Los registros de funcin especial (SFR) son registros que ya tienen una funcin
determinada para el microcontrolador, por este motivo el usuario debe tener cuidado al
utilizarlos, mediante la utilizacin de estos registros el usuario determinar el
funcionamiento del microcontrolador y los perifricos del mismo.
En la tabla 2.3.2.2.1 se muestra la organizacin de los registros SFR del
PIC16F84A. Se indica la direccin , el banco, el nombre de registro y cada uno de los bits.
20
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Dir Nombre
Banco 0
00h INDF
01h TMR0
02h PCL
03h STATUS
04h FSR
05h PORTA
06h PORTB
07h
08h EEDATA
09h EEDR
0Ah PCLATH
0Bh INTCON
Banco 1
80h INDF
81h OPTION
82h PCL
83h STATUS
84h FSR
85h TRISA
86h TRISB
87h
88h EECON1
89h EECON2
0Ah PCLATH
0Bh INTCON
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
RA4/T0CK
RB7
RB6
RB5
RB4
RB3
RB2
RB1 RB0/INT
No implementado. Se lee como 0
Registro de datos de EEPROM
Registro de direcciones de EEPROM
5 bits superiores del PC
GIE
EEIE
T0IE
INTE
RBIE
T0IF INTF
RBIF
Usa el contenido de FSR para el direccionamiento indirecto
T0SE
PSA
PS2
PS1
PS0
RBPU INTEDG T0CS
Direccionamiento indirecto de memoria
IRP
RP1
RP0
Z
DC
C
TO
PD
Direccionamiento indirecto de memoria
21
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Los bits Z, DC y C del registro ESTADO, son sealizadores que indican una
operacin realizada por la ALU, por ejemplo si el resultado de una operacin es cero,
entonces el sealizador de Z se pondr en alto (1).
Los bits 5 y 6 (RP0 y RP1) son los bits de seleccin de banco para el
direccionamiento directo de la memoria de datos; solamente RP0 se usa en los PIC16F84.
RP1 se puede utilizar como un bit de propsito general de lectura/escritura.
Los bits TO y PD no se pueden modificar por un proceso de escritura, ya que solo
muestran la condicin por la cual se ocasiona el ltimo reset.
Por ejemplo: CLRF STATUS limpiar los tres bits superiores del registro ESTADO
y pondr en uno el bit Z. Esto dejara el registro de ESTADO como 000u u1uu (donde
u=inalterado).
Slo las instrucciones BCF, BSF, SWAPF MOVLW, MOVF y MOVWF pueden
usarse para alterar el registro ESTADO.
Los bits IRP y RP1 (ESTADO <7:6>) no son usados por los PIC16F8X y deben ser
programados como cero. El uso de estos bits como bits de propsito general no se
recomienda, debido a que esto puede afectar la compatibilidad con futuros productos.
El registro ESTADO (STATUS) se ubica en la direccin 03H del banco 0 y en la
direccin 83h del banco 1 de la memoria de datos en la SFR (registros de propsito
especifico).
22
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
24
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
PS2-PS0: Prescaler Value (Valor con el que acta el Divisor de frecuencia que se
muestra en la tabla 2.3.2.3.1)
Tabla 2.3.2.3.1 Valor de preescala asignado al divisor de frecuencia.
PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
PS0
0
1
0
1
0
1
0
1
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
27
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
28
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Para direccionar una posicin de la memoria RAM en un PIC hay que especificar,
en primer lugar, el banco en el que se encuentra y, despus, la direccin relativa en el
mismo. Para seleccionar el banco existen dos bits en el registro STATUS del rea de la
RAM, que se llaman RP0 y RP1, ocupando las posiciones 5 y 6 de dicho registro. La forma
de direccionar la RAM, es decir, el modo de direccionamiento, puede tomar dos
alternativas: direccionamiento directo y direccionamiento indirecto.
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
30
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Si por ejemplo queremos apuntar de forma indirecta la direccin 12h del banco 1 en
un PIC16F84, comenzaremos cargando en FSR el valor 12h (0x12), para los 7 bits de
menos peso y poniendo a 1 el bit 7, de ms peso, de dicho registro, para elegir el banco 1.
movlw
bsf
movwf
0x12
w,7
FSR
31
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Next
Continua
0x20
FSR
INDF
FSR
FSR,4
NEXT
;Inicializa el punto
;Se carga FSR con 0x20
;Limpia el registro INDF
;Incrementa el punto
;El bit 4 del registro FSR = 1?
;No, limpia la siguiente posicin (salto a NEXT)
;Si, continua el programa
2.3.4 La pila
Una pila o stack es un conjunto de registros que guardan informacin de una forma
determinada, ya que tanto la carga como la descarga es especial. En el caso del PIC16F84
la pila est formada por 8 registros de 13 bits cada uno y dotados de una estructura de
carga/descarga tipo LIFO, que significa ltimo en entrar, primero en salir. Cuando se
carga informacin a la pila siempre se introduce por el nivel 1. Si anteriormente haba
informacin en el nivel 1, se traslada al nivel 2 y lo de ste al nivel 3 y as sucesivamente.
Es decir, cuando se carga informacin en el nivel 1 lo que haba almacenado en cada nivel
se desplaza al siguiente, dicho proceso se puede apreciar en la figura 2.3.4.1.
32
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.3.4.1. La instruccin CALL y la interrupcin, provocan la carga automtica del contenido del PC en
la pila.
Si la pila esta llena y contiene informacin en los ocho niveles, la carga de un nuevo
dato produce el desplazamiento de la informacin de cada nivel al siguiente, perdindose la
que exista en el nivel 8. Para recuperar la informacin de la pila el desplazamiento de la
informacin se realiza al revs. Sale la que est ocupando el nivel 1 y a ste se le carga con
lo del nivel 2. La informacin se desplaza al nivel anterior y el dato que sale desde el nivel
1 habr sido el ltimo que se haba cargado, dicho proceso se muestra en la figura 2.3.4.2.
33
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
La informacin que entra o sale por los puertos reside en las posiciones 5 y 6 del
banco 0, mientras que TRISA y TRISB, que son los registros de configuracin, ocupan las
direcciones 5 y 6 del banco 1.
34
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Como el PIC16F84 es de tecnologa CMOS. Todos los pines deben estar conectados
a alguna parte, nunca dejarlos al aire porque se puede daar el integrado. Los pines que no
se estn usando se deben conectar a la fuente de alimentacin de +5V, como se muestra en
la figura 2.4.1.1.
La mxima capacidad de corriente de cada uno de los pines de los puertos en modo
sumidero (sink) es de 25mA y en modo fuente (source) es de 20mA. La mxima capacidad
de corriente total de los puertos se muestra en la figura 2.4.1.2.
35
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Las lneas RA3-RA0 admiten niveles de entrada TTL y de salida CMOS. La lnea
RA4/TOCK1 dispone de un circuito Disparador Schmith (Schmith Trigger) que
proporciona una buena inmunidad al ruido y la salida tiene drenador abierto. RA4
multiplexa su funcin de E/S con la de entrada de impulsos externos para el TMR0.
En la figura 2.4.2.1 se muestra el registro TRISA, el cual se encarga de configurar
las lneas del Puerto A como entradas si estn a 1 y como salidas si estn a 0. En el circuito
de la figura 2.4.2.2 se muestra la adaptacin de los pines RA3-RA0 a las seales del
procesador.
Cuando se lee una lnea de l Puerto A se toma el nivel lgico que tiene en ese
momento. Las lneas cuando actan como salidas estn sujetadas, lo que significa que
sus pines sacan el nivel lgico que se haya cargado por ltima vez en el registro PUERTO
A. La escritura de un Puerto implica la operacin lectura/modificacin/escritura. Primero
se lee el Puerto, luego se modifica el valor y finalmente se escribe en el latch de salida.
36
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.4.2.2. Diagrama de conexiones de los pines RA3-RA0 a las seales del procesador
De la Figura 2.4.2.2 se desprende que cuando se saca un nivel lgico por una lnea
del Puerto A, primero se deposita en la lnea correspondiente del bus interno de datos y se
activa la seal WRITE, lo que origina el almacenamiento de dicho nivel en el Flip-Flop de
datos. En esta situacin, el FF de configuracin debera contener un 0 para que actuase
como salida. Con estos valores l puerto OR tendra un 0 en su salida y la AND tambin.
Estos valores producen la conduccin del transistor PMOS superior y el bloqueo del
NMOS. As, la terminal de E/S queda conectada a la VDD y tiene un nivel alto. Como la
lnea de salida est sujetada conserva su valor hasta que no es reescrita en el FF tipo D.
Si una lnea acta como entrada, el nivel lgico depositado en ella desde el exterior
pasa a la lnea correspondiente del bus interno de datos cuando se activa la seal READ y
se hace conductor el dispositivo triestado que les une. Al programarse como entrada, los
dos transistores MOS de salida quedan bloqueados y la lnea en alta impedancia.
37
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
As, que cuando se lee una lnea de entrada se obtiene el estado actual que tiene su
terminal correspondiente y no el valor que haya almacenado en el FF de datos. La
informacin presente en una lnea de entrada se muestrea al iniciarse el ciclo de instruccin
y debe mantenerse estable durante su desarrollo.
Al iniciarse el PIC todos los bits de los registros TRIS quedan a 1, con lo que las
lneas de los Puertos quedan configuradas como entradas.
Cada lnea de salida puede suministrar una corriente mxima de 20 mA y si es
entrada puede absorber hasta 25 mA. Al existir una limitacin en la disipacin mxima de
la potencia del chip se restringe la corriente mxima de absorcin del PuertoA a 80 mA y la
de suministro a 50 mA. El Puerto B puede absorber un mximo de 150 mA y suministrar un
total de 100 mA.
Con movf puerto,w se lee un puerto y con la instruccin movwf puerto se escribe.
Tambin existen instrucciones para modificar el valor de un bit particular correspondiente a
una lnea de un puerto con las instrucciones bsf puerto,bit (pone a 1 el bit indicado de l
puerto) y bcf puerto,bit (pone a cero el bit indicado). Existen instrucciones de salto
condicionales que verifican el valor de un bit de un puerto y brincan si vale 1 (btfss) o si
vale 0 (btfsc).
En la tabla 2.4.2.1 se muestra una descripcin de cada uno de los pines del puerto A.
Tabla 2.4.2.1. Descripcin de las terminales del puerto A
Nombre
RA0
RA1
RA2
RA3
Bit
Bit 0
Bit 1
Bit 2
Bit 3
Tipo de Buffer
TTL
TTL
TTL
TTL
Funcin
Entrada / salida
Entrada / salida
Entrada / salida
Entrada / salida
Entrada / salida o entrada de reloj externa para el
RA4/TOCK1 Bit 4 ST
TMR0. La salida es de tipo drenaje abierto.
TTL = entrada TTL,
ST = entrada Schmitt Trigger.
38
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
ESTADO,RP0
00h
PORTA
ESTADO,RP0
A todas las lneas de este puerto se les permite conectar una resistencia Pull-Up de
elevado valor con el positivo de la alimentacin. Para este fin hay que programar en el
registro OPTION el bit RBPU# = 0, afectando la conexin de la resistencia a todas las
lneas. Con el Reset todas las lneas quedan configuradas como entradas y se desactivan las
resistencias Pull-Up.
Las 4 lneas de ms peso, RB7-RB4, pueden programarse para soportar una misin
especial. Cuando las 4 lneas actan como entradas se les puede programar para generar
una interrupcin si alguna de ellas cambia su estado lgico. Esta posibilidad es muy
prctica en el control de teclados.
39
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.4.3.2. Conexionado de los pines RB7 RB4 y las lneas correspondientes al bus interno de datos y
las seales de control.
40
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Los pines RB3 al RB0 pueden ser programados como lneas de entrada o salida,
dependiendo de su configuracin en el registro TRISB. El conexionado de dichos pines se
muestra en la figura 2.4.3.3.
Figura 2.4.3.3. Conexionado de los pines RB3 RB0 y las lneas correspondientes al bus interno de datos y
las seales de control.
ESTADO,RP0
00h
PORTB
ESTADO,RP0
41
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
En la tabla 2.4.3.1 se muestra una descripcin de cada uno de los pines del puerto A.
Tabla 2.4.3. 1. Descripcin de las terminales del puerto B.
Nombre
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Bit
Tipo de Buffer
Funcin
Entrada / salida o entrada de interrupcin
Bit 0
TTL/ST
externa. Resistencias de Pull-Up por software
Entrada / salida
Bit 1
TTL
(Resistencia de Pull-Up por software)
Entrada / salida
Bit 2
TTL
(Resistencias de Pull-Up por software )
Entrada / salida
Bit 3
TTL
(Resistencias de Pull-Up por software )
Entra / salida (con interrupcin por cambio)
Bit 4
TTL
(Resistencias de Pull-Up por software )
Entrada / salida (con interrupcin por cambio)
Bit 5
TTL
(Resistencias de Pull-Up por software )
Entrada / salida (con interrupcin por cambio)
Bit 6
TTL/ST
(Resistencias de Pull-Up por software )
Entrada / salida (con interrupcin por cambio)
Bit 7
TTL/ST
(Resistencias de Pull-Up por software )
TTL = entrada TTL,
ST = entrada Schmitt Trigger.
42
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
El tipo de flanco activo se elige programando el bit T0SE, que es el que ocupa la
posicin 4 del registro OPTION, si T0SE = 1, el flanco activo es el descendente, y si
T0SE= 0, es el ascendente. Cuando se desea que TMR0 funcione como temporizador el bit
T0CS = 0. En el diagrama a bloques de la figura 2.5.1 se describe grficamente el
funcionamiento del TMR0.
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.5.2. Esquema simplificado del circuito de control de tiempos usado en los PIC16X8X
El divisor de frecuencia puede usarse con el TMR0 o con el WDT. Con el TMR0
acta como pre-divisor, es decir, los impulsos pasan primero por el divisor y luego se
aplican al TMR0, una vez aumentada su duracin. Con el perro guardin acta despus,
realizando la funcin de Post-divisor.
Los pulsos, que divide por un rango el divisor de frecuencia, pueden provenir de la
seal de reloj interna (Fosc/4) o de los que se aplican a la terminal T0CK1.
El TMR0 se comporta como un registro de propsito especial (SFR) ubicado en la
direccin 1 del banco 0 de la memoria de datos. En igual direccin, pero en el banco 1, se
45
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
halla el registro OPTION. TMR0 puede ser ledo y escrito en cualquier momento al estar
conectado al bus de datos. Funciona como un contador ascendente de 8 bits.
Cuando funciona como temporizador conviene cargarle con el valor de los impulsos
que se quiere temporizar, pero expresados en complemento a 2. De esta manera, al llegar el
nmero de impulsos deseados se desborda y al pasar por 00h se activa el sealizador TOIF
y/o se produce una interrupcin.
Para calcular los tiempos a controlar con TMR0 se utilizan las siguientes frmulas
prcticas.
En cualquier momento se puede leer el valor que contiene TMR0, sin detener su
conteo. La instruccin adecuada al caso es movf tmr0,w.
46
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
RA4/
TOCK1
47
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
48
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
PS2-PS0: Prescaler Value (Valor con el que acta el Divisor de frecuencia, el cual se
muestra en la tabla 2.5.1.1)
Tabla 2.5.1.1. Distribucin y asignacin de funciones de los bits del registro OPTION
PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
49
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
50
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
51
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
52
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
En la figura 2.6.2.2 se describe cada uno de los bits del registro EECON1.
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
equ
equ
equ
bcf
movlw
movwf
bsf
bsf
bcf
movf
STATUS,rp0
0x0C
EEADR
STATUS,rp0
EECON1,rd
STATUS,rp0
EECON1,w
0x03
0x09
0x08
;STATUS = 0x03
;EEADR = 0x09
;EECON1 = 0x08
;rp0 = 0 para acceder al banco 0
;w = 0C
;w = EEADR
;rp0 = 1 para acceder al banco 1
;rd = 1 para lectura
;rp0 = 0 para acceder al banco 0
;EEDATA = w
54
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Para escribir un dato en una posicin de la EEPROM hay que seguir una secuencia
de instrucciones en la que participa de una manera especial el registro EECON2. Este
registro, que en realidad no est implementado fsicamente, slo asume una funcin de
seguridad al cargarse con los valores 55h y AAh, sucesivamente. Esto evita interferencias
durante la larga operacin de escritura, que a veces llega a los 10 ms.
55
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
STATUS
EECON1
EECON2
equ
equ
equ
bcf
movlw
movwf
movlw
movwf
bsf
bcf
bsf
STATUS,rp0
0x32
EECON2
0xff
EECON1
STATUS,rp0
INTCON,gie
EECON1,wren
0x03
0x08
0x09
;STATUS = 0x03
;EEADR = 0x09
;EECON1 = 0x08
;rp0 = 0 para acceder al banco 0
;w = 0x32
;w = EEADR
;w = 0xff
;w = EEDATA
;rp0 = 0 para acceder al banco 1
;gie = 0 para prohibir interrupciones
;wren = 1 para permitir escritura en EEPROM
Secuencia de seguridad
movlw
movwf
movlw
movwf
bsf
0x55
EECON2
0xAA
EECON2
EECON1,wr
;w = 0x55
;w = EECON2
;w = 0xAA
;w = EECON2
;wr = 1 y comienza el ciclo de escritura
2.7 Interrupciones
Las interrupciones constituyen el procedimiento ms rpido y eficaz del
microcontrolador para el tratamiento de los acontecimiento del mundo exterior. Si algn
parmetro o circunstancia tiene influencia en el desarrollo del programa, la interrupcin es
el medio por el cual el microcontrolador lo atiende inmediatamente. Al programa especial
que trata dicho acontecimiento se le llama rutina de interrupcin.
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 o nivel activo en una terminal del microcontrolador, o bien internos, como el
desbordamiento de un contador.
El comportamiento del microcontrolador ante la interrupcin es similar al de la
instruccin CALL de llamada a subrutina. Cuando se utiliza la instruccin CALL, se
detiene la ejecucin del programa en curso, se guarda la direccin actual del PC en la pila y
ste se carga con una nueva direccin que se especifica en dicha instruccin.
En el caso de una interrupcin, el proceso inicia de la misma forma; se detiene la
ejecucin del programa en curso, se guarda la direccin actual del PC en la pila y ste se
56
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
carga con una direccin reservada de la memoria de programa (0004h), llamada Vector
de Interrupcin.
En los PIC16X8X el Vector de interrupcin se halla situado en la direccin 0004h,
en donde comienza la Rutina de Servicio a la Interrupcin (RSI). 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 cdigo destinada a contener la rutina de atencin a la
interrupcin.
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
58
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.7.2. Organigrama del desarrollo de una interrupcin, teniendo en cuenta el papel del bit GIE
Hay cuatro causas que pueden ocasionar una interrupcin del PIC16F84:
Activacin del pin RB0/INT
Desbordamiento del temporizador TMR0
Cambio de estado de uno de los 4 pines de mas peso del PUERTO B (RB7:RB4)
Finalizacin de la escritura en la EEPROM de datos
59
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Una dificultad inicial que presentan estas interrupciones es que sea cual sea la que
ha originado la interrupcin, la rutina de atencin siempre empieza en la direccin del
vector de interrupcin que es la 0004h.
Otros procesadores disponen de un vector de interrupcin para cada causa que la
produce. Con el PIC16F84 no queda otro remedio que comenzar averiguando cul ha sido
la causa de la interrupcin, probando los sealizadores correspondientes, y desviando hacia
el procedimiento particular que atiende a cada una.
Cuando ocurre cualquiera de las 4 sucesos indicados, se origina una peticin de
interrupcin, que si se acepta y se atiende comienza depositando el valor del PC actual en la
pila, poniendo el bit GIE = 0 y cargando en el PC el valor 0004h, que es el vector de
interrupcin donde se desva el flujo de control.
Cada fuente de interrupcin dispone de un sealizador o flag, que es un bit que se
pone automticamente a 1 cuando se produce. Adems cada fuente de interrupcin tiene
otro bit de permiso, que segn su valor permite o prohbe la realizacin de dicha
interrupcin.
60
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Banco 0
Banco 1
61
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
62
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
RBIF: Bandera de interrupcin por cambio en el puerto B (RB Port Change Interrupt Flag)
1 = Indica el cambio de estado de los bits RB7:RB4 del puerto B (se limpia por
software)
0 = No hay cambios de estado en los bits RB7:RB4 del puerto B.
En el organigrama de la figura 2.7.2 se ampla la operatividad del desarrollo de la
interrupcin al tener en cuenta el papel del bit GIE. Obsrvese que en cuanto se admite una
interrupcin el procesador pone automticamente GIE = 0, para evitar que cuando est
atendindose a una interrupcin se produzcan otras nuevas.
Al completarse la rutina de atencin a la interrupcin y ejecutarse la ltima
instruccin RETFIE, que es la de retorno de la rutina de interrupcin, el bit GIE vuelve a
tomar el valor 1 de manera automtica, para que al retomar el programa principal queden
habilitadas las interrupciones y puedan atenderse.
Cabe sealar que los sealizadores de interrupcin deben ponerse a 0 por programa
antes del retorno de la interrupcin y son operativos aunque la interrupcin est prohibida
con su bit de permiso correspondiente. En la figura 2.7.2.2 se ofrece el esquema de la lgica
de control que origina la interrupcin.
Figura 2.7.2.2. Lgica de control para la generacin de una interrupcin en los PIC16X8X
63
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
int
btfsc
goto
btfsc
goto
portb
tmr0
btfsc
goto
eeprom
btfsc
goto
INTCON,intf
int_RB0/INT
INTCON,rbif
int_portb
retfie
64
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Mediante el bit 6, llamado INTEG, del registro OPTION se puede seleccionar cul
ser el flanco activo en RB0/INT. Si se desea en flanco ascendente se escribe un 1 en dicho
bit, y si se desea que sea el flanco descendente se escribe un 0.
A continuacin se describe con algunos comentarios un pequeo programa para
admitir la interrupcin externa con flanco descendente como activo:
bst
bcf
bcf
bsf
bsf
bcf
ESTADO,rp0
OPTION,intdeg
ESTADO,rp0
INTCON,gie
INTCON,inte
INTCON,intf
65
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Para que el procesador sepa cuando se desborda el TMR0 debe explorar cada poco
tiempo el estado del sealizador T0IF. El chequeo de dicho bit supone una constante
atencin y prdida de rendimiento. Para conocer inmediatamente cundo se ha desbordado
el TMR0 es mucho ms eficaz generar una interrupcin cuando ese hecho ocurra. Para ello
es necesario habilitar la interrupcin del temporizador, lo cual implica inicialmente poner el
bit GIE = 1 , que es el permiso global de interrupciones, y despus activar el bit de permiso
de la interrupcin del TMR0, o sea, escribir un 1 en T0IE.
En la figura 2.7.4.1 se muestra el diagrama a bloques de la interrupcin por
desbordamiento del temporizador TMR0.
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.7.5.1. Estructura y conexionado del teclado matricial a los pines del PUERTO B del PIC
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
bsf
bcf
bsf
bsf
movlw
movwf
movlw
movw
bsf
bsf
STATUS,rp0
INTCON,gie
INTCON,eeie
EECON1,wren
0x55
EECON2
0xAA
EECON2
EECON1,wr
INTCON,gie
;Selecciona el banco 1
;GIE = 0. Prohbe interrupciones
;Permite la interrupcin de la EEPROM
;Permiso de escritura de la EEPROM
;Se escribe en EECON2 el dato 55h
;Se escribe AAh en EECON2
;Comienza el proceso de escritura
;Permiso de interrupciones
68
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
69
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
70
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Cuando se presiona el pulsador de Reset el pin MCLR pasa a nivel lgico bajo
71
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.9.2. El diodo impide que circule corriente del positivo al interior del microcontrolador
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
estado de bajo consumo. En la tabla 2.9.1.1 se presenta el valor que toma cada uno de los
bits de los registros SFR tras cada una de las posibles causas de Reset.
Tabla 2.9.1.1. Valores que toman los bits de los registros SFR tras los posibles Reset.
Registro
Direccin
Conexin de la
alimentacin
W
INDIR
TMR0
PCL
STATUS
FSR
PORT A
PORT B
TRIS A
TRIS B
OPTION
EEDATA
EEADR
EECON 1
EECON 2
PCLATH
INTCON
---00 h
01 h
02 h
03 h
04 h
05 h
06 h
85 h
86 h
81 h
08 h
09 h
88 h
89 h
0A h
0B h
xxxx xxxx
---xxxx xxxx
0000 h
0001 1xxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
- - -1 1111
1111 1111
1111 1111
xxxx xxxx
xxxx xxxx
- - -0 0000
---- - -0 0000
0000 000x
Desbordamiento Desbordamiento
perro guardin
perro guardin
modo normal
modo reposo
uuuu uuuu
---uuuu uuuu
0000 h
0000 1uuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
- - -1 1111
1111 1111
1111 1111
uuuu uuuu
uuuu uuuu
- - -0 ?000
---- - -0 0000
0000 000u
uuuu uuuu
---uuuu uuuu
PC + 1
uuu 0 0uuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
----u uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
- - -u uuuu
---- - -u uuuu
uuuu uuuu
- - - -=No implementado
MCLR
modo
normal
uuuu uuuu
---uuuu uuuu
0000 h
000u uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
- - -1 1111
1111 1111
1111 1111
uuuu uuuu
uuuu uuuu
- - -0 ?000
---- - -0 0000
0000 000u
MCLR
modo reposo
uuuu uuuu
---uuuu uuuu
0000 h
0001 0uuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
- - -1 1111
1111 1111
1111 1111
uuuu uuuu
uuuu uuuu
- - -0 ?000
---- - -0 0000
0000 0000
73
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
TO
PD
Condicin de Reset
Por (Reset por conexin VDD)
74
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
0
0
1
1
1
0
1
0
Cuando la tensin de alimentacin desciende por debajo del valor Vzener + 0.7V, se
produce un Reset por la activacin del pin MCLR .
75
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Estado Recurso
Consecuencia
-No se ejecutan instrucciones
Oscilador principal detenido
-No funciona el TMR0 (RAM/T0CKI conectado a VDD)
WDT
-Se resetea pero sigue funcionando
Lneas E/S congeladas
-Mantienen el estado previo
Consumo mnimo
-Pasa de 2mA a menos de 10A
76
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
77
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Estado de Bits
GIE = 0 (Prohibicin)
RBIE = INTE = EEIE = 1
GIE = 1 (Permiso)
RBIE = INTE = EEIE = 1
Siguiente Instruccin
PC + 1 (Siguiente a SLEEP)
PC + 2 (Siguiente)
PC + 1 (Siguiente a SLEEP)
0004 (Vector de interrupcin)
78
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.10.2.1. Cronograma del despertar del PIC al producirse una interrupcin.
Notas:
1.- XT, HS o LP son los modos asumidos del oscilador
2.- TOST = 1024 TOST. Este retardo (delay) no sucede en modo RC.
3.- Si se supone que GIE = 1, al despertar el procesador salta a la rutina de interrupcin. Si
GIE = 0 la ejecucin continua detrs de SLEEP.
4.- CLKOUT no se precisa en estos modos, pero se usa como referencia.
79
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Oscilador RC
Oscilador LP
Oscilador XT
Oscilador HS
Para iniciar el trabajo del microcontrolador hay que especificar el tipo de oscilador
que se ha implementado. Para este fin existen dos bits FOSC1 y FOSC2 en una posicin de
la memoria de programa, llamada Palabra de Configuracin, especificacin que debe
elegirse con la combinacin correspondiente.
2.11.1 Oscilador RC
En este caso se coloca en el pin 16 del PIC16F84 (OSC1/CLKIN) una resistencia y
un condensador. Este procedimiento es muy barato, pero la estabilidad de la frecuencia es
mediocre y slo se recomienda en sistemas en los que el tiempo no sea un factor crtico y la
economa sea un objetivo prioritario.
Por el pin 15 (OSC2/CLKOUT) sale la cuarta parte de la frecuencia de oscilacin
(Fosc/4) que es el tiempo del ciclo de instruccin normal. La figura 2.11.1.1, muestra un
oscilador de tipo RC.
80
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5K Rext 100K
Cext > 20pF
Fosc
625 KHz
80 KHz
80 Hz
Rext
10 K
10 K
10 K
Cext
20pF
220pF
0.1pF
81
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Modo
LP
XT
HS
Frecuencia
32 KHz
200 KHz
100 KHz
2 MHz
4 MHz
4 MHz
20 MHz
OSC1/C1
68 100 pF
15 33 pF
100 150 pF
15 33 pF
15 33 pF
15 33 pF
15 33 pF
OSC2/C2
68 100 pF
15 33 pF
100 150 pF
15 33 pF
15 33 pF
15 33 pF
15 33 pF
82
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
2.11.3 Oscilador LP
Entre los pines 15 y 16 del microcontrolador se coloca un cristal de cuarzo de la
frecuencia a la que se desee funcione. Tambin puede instalarse en lugar del cristal de
cuarzo un resonador cermico. En cada uno de dichos pines se sita un condensador de
desacoplo, Este tipo de oscilador est preparado para trabajar con bajas frecuencias,
comprendidas entre 35 y 250 KHz. Su principal inters radica en el bajo consumo que
necesita el PIC para trabajar a estas frecuencias tan bajas, detalle muy importante en los
sistemas que se alimentan con pilas.
2.11.4 Oscilador XT
En este tipo de oscilador se coloca un cristal de cuarzo o un resonador cermico
entre los pines 15 y 16, junto a los correspondientes condensadores de desacoplo, cuyos
valores se encuentran en la tabla 17, y dependen de la frecuencia seleccionada. El oscilador
XT est preparado para trabajar en un rango de frecuencia de 100 KHz 4 MHz. En la
figura 2.11.4.1 se muestra la configuracin tpica para este tipo de oscilador
83
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
2.11.5 Oscilador HS
Es un oscilador de alta velocidad y muy estable. Funciona en frecuencias
comprendidas entre 4 y 20 MHZ. Utiliza un cristal de cuarzo o un resonador cermico entre
los pines 15 y 16, junto a dos condensadores de desacoplo. No todos los modelos de PIC
admiten este tipo de oscilador. Debido su alta frecuencia de oscilacin, el costo es muy
elevado.
84
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
FOSC1
1
1
0
0
FOSC2
1
0
1
0
Oscilador
RC
HS
XT
LP
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.13.1. Palabras de identificacin. Solo son validos los 4 bits de menos peso.
87
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 2.14.1. Se resaltan los cinco pines del PIC16F84 que soportan las tres funciones principales:
alimentacin, frecuencia de referencia y Reset.
88
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Las instrucciones de los PIC de la gama media, entre los que se encuentran los
modelos PIC16X8X, tienen 14 bits de longitud. Dicho formato se divide en diferentes
campos de bits, cada uno de los cuales referencia a operandos o elementos que maneja la
instruccin en la operacin que realiza el procesador. A continuacin se describen dichos
campos.
a) Campo de cdigo OP
Los bits de este campo sirven para definir la operacin que realiza la
instruccin.
89
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Smbolo
f
W
k
x
d
label
PC
PCLATH
GIE
WDT
TO
PD
[ ]
( )
< >
Descripcin
Direccin del registro
Registro de trabajo
Campo que contiene un valor inmediato, que puede ser un operando (8 bits) o una
direccin para el PC (11 bits).
Valor indeterminado de un bit. Puede ser 1 o 0.
Seleccin del destino. Cuando d=0, el resultado se almacena en W. Si d=1, el resultado
se almacena en el archivo de registro f. Por default d=1.
Nombre de etiqueta
Contador de Programa
Retenedor de Contador de Programa
Permiso global de interrupciones (Global Interrupt Enable bit)
Temporizador Perro Guardin (Watchdog Timer/Counter)
Bit Time-out
Bit Power-down
Opciones
Contenido
Asignado a
Campo de un bit de un registro. Por ejemplo: ESTADO <5>.
En el conjunto de ejemplo: d [0,1]
90
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Banderas
Afectadas
ADDLW
C,DC,Z
ADDWF
f,d
Suma W y f
C, DC, Z
ANDLW
ANDWF
f,d
AND W con f
BCF
f,d
Limpia el bit f
BSF
f,d
Pone a 1 el bit f
BTFSC
f,d
1 (2)
BTFSS
f,d
1 (2)
CALL
Llamada a Subrutina
CLRF
Borra f
CLRW
Borra W
CLRWDT
TO , PD
COMF
f,d
Complementa f
DECF
f,d
Decrementa f
DECFSZ
f,d
Decrementa f y salta si es 0
1 (2)
GOTO
Salto incondicional
INCF
f,d
Incrementa f
INCFSZ
f,d
Incrementa f y salta si es 0
1 (2)
IORLW
OR inmediata con W
IORWF
f,d
Or entre W y f
MOVF
f,d
Mueve f
MOVLW
Mueve la literal a W
MOVWF
Mueve W a f
NOP
No opera
RETFIE
RETLW
RETURN
Retorno de subrutina
RLF
f,d
RRF
f,d
SLEEP
TO , PD
SUBLW
Resta W de la literal
C,DC,Z
SUBWF
f,d
Resta W y f
C,DC,Z
SWAPF
f,d
Intercambia nibbles en f
XORLW
XORWF
f,d
OR exclusiva W con f
91
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
OPERACIN
Suma W y f
ANDWF f,d
AND W y f
CLRF
CLRW ---
Borra W
COMF f,d
Complementa f (Invierte)
DECF f,d
Decrementa f
INCF
Incrementa f
f,d
IORWF f,d
OR entre W y f
MOVF f,d
Mueve f
MOVWF f
Mueve f
NOP
No opera
---
RLF f,d
RRF f,d
SUBWF f,d
Resta W a f
SWAPF f,d
Intercambia nibbles
XORWF
XOR de W con f
CICLOS
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
FORMATO 14 BITS
00 0111 dfff ffff
00 0101 dfff ffff
00 0001 dfff ffff
00 0001 0xxx xxxx
00 1001 dfff ffff
00 0011 dfff ffff
00 1010 dfff ffff
00 0100 dfff ffff
00 1000 dfff ffff
00 0000 dfff ffff
00 0000 0xx0 0000
00 1101 dfff ffff
00 0100 dfff ffff
00 0110 dfff ffff
00 1110 dfff ffff
00 0110 dfff ffff
SEALIZADORES
C,DC,Z
Z
Z
Z
Z
Z
Z
Z
Z
------C
C
C,DC,Z
---Z
92
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
SEALIZADORES
-------
INSTRUCCIONES DE BRINCO
OPERACIN
CICLO FORMATO 14 BITS
Explora un bit de f y brinca si vale 0
1(2)
01 10bb bfff ffff
Explora un bit de f y brinca si vale 1
1(2)
01 11bb bfff ffff
Decrementa f y si es 0, brinca
1(2)
00 1011 dfff ffff
Decrementa f y si es 1, brinca
1(2)
00 1111 dfff ffff
SEALIZADORES
-------------
93
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
94
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Para el final de las interrupciones hay otra instruccin cuyo nemnico es retfie. La
operatividad de esta instruccin consiste en cargar en el PC el contenido de la cima de la
pila y poner el bit GIE = 1, pues al comenzar
automticamente a 0 para evitar que cuando se atiende una interrupcin se produzca otra.
GIE es el bit de permiso de todas las interrupciones.
En cuanto a las interrupciones especiales, se han incluido dos en este grupo: clrwdt
y slepp. La primera pone a 0 el contenido del Perro Guardin, es decir, lo refresca o lo
reinicializa. El Perro Guardin si se desborda (pasa de 0xff a 0x00) provoca un Reset. La
instruccin clrwdt hay que colocarla estratgicamente en ciertos puntos del programa para
evitar la reinicializacin.
La instruccin slepp introduce al procesador en un modo de funcionamiento que se
llama de Reposo o de Bajo Consumo. Detiene el oscilador y el procesador queda
congelado, no ejecutando instrucciones y manteniendo el mismo valor los Puertos de E/S.
Tambin pone los bits PD = 0 y TO = 1 y borra al Perro Guardin y al Divisor de
frecuencia, como se muestra en la tabla 2.15.2.5.1.
Es recomendable incluir la instruccin clrwdt para que no se desborde el WDT
(Watch Dog Timer o Perro Guardin). Las instrucciones de salto cuentan el doble de ciclos
que las instrucciones normales.
Tabla 2.15.2.5.1. Principales caractersticas de las instrucciones del control del flujo del programa y de las
especiales.
SINTAXIS
CALL
k
CLRWDT
GOTO
k
RETFIE
RETLW k
RETURN
SLEPP
95
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
3.1.1 Instalacin
Windows 3.1/ 95/ 98, Windows NT 3.51/4.0, Windows 2000 ,MAC OS 7.0, Unix
compatible OS.
96
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
97
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
El simulador que proporciona Microchip est contenido en el Mdulo MPLABSIM, el cual es una herramienta para comprobar el correcto funcionamiento de las
instrucciones de un programa al ser ejecutadas.
Los archivos de soporte necesarios para la funcin de depuracin estn contenidos
en el mdulo MPLAB-ICD Debugger Suport Files. Dicha funcin permite ver los
resultados finales del programa y acceder a los registros del sistema segn se va ejecutando
la aplicacin o bien, ejecutar las instrucciones paso a paso.
El mdulo Help Files contiene los archivos necesarios para obtener ayuda de las
funciones que integran el MPLAB, como son los mens, las ventanas, etc.
Para continuar el proceso de instalacin, se debe dar click en el botn Next.
99
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Uno de los ltimos pasos de este proceso consiste en especificar el directorio donde
se desea instalar el programa MPLAB como se observa en la figura 3.1.1.5;
Se recomienda instalar el paquete en la ruta que se sugiere por defecto, la cual es
C:\Archivos de programa\MPLAB.
En dicho directorio se podrn almacenar los proyectos creados, as como los
programas construidos en cada uno de ellos. Al igual que en los cuadros anteriores, se debe
dar click en el botn Next para continuar con la instalacin.
En la siguiente pantalla se ofrece la opcin de hacer una copia de seguridad de los
archivos existentes en el directorio y que posiblemente sean reemplazados, para continuar
con la instalacin se debe elegir la opcin ms conveniente y dar click en el botn Next.
La opcin de introducir accesos directos del programa al men de inicio y al
escritorio se presenta en la siguiente pantalla; en este caso, el usuario deber elegir la
opcin que ms le convenga y dar click en Next.
100
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Una vez instalado el MPLAB, se puede ejecutar este programa dando un click al
Botn de Inicio, despus al submen Programas, a continuacin al Submen
Microchip MPLAB y por ltimo al acceso directo del programa, etiquetado como
MPLAB.
La forma ms fcil y directa de ejecutar el programa es dando un doble click al
icono del MPLAB que representa su acceso directo y que est situado en el escritorio de
Windows, dicho icono se muestra en la figura 3.1.1.6.
101
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
102
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
103
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Una vez que se ha creado un proyecto, se puede crear un nuevo archivo mediante el
men File y seleccionando la opcin New. A continuacin aparecer un cuadro de texto
en el cual se podr editar el programa deseado, justo como se muestra en la figura 3.1.2.3.
Se debe tener en cuenta que la primera columna del cuadro de texto est reservada
para las etiquetas que son nombres simblicos que se asignan a una direccin de memoria.
104
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Dichas etiquetas deben empezar por una letra, deben empezar en la primera posicin de la
columna uno, pueden incluir caracteres alfanumricos, lneas de subrayado e interrogacin,
adems su longitud no debe exceder de 31 caracteres y no pueden usarse expresiones que
ya utiliza el ensamblador, tales como instrucciones, directivas del propio ensamblador,
nombres de registros especiales (SFR) o el nombre de cada uno de los bits de los registros
especiales.
Por ejemplo, cuando se escribe la palabra inicio, se est asignando el smbolo de
inicio a un valor propio del microcontrolador, que es la direccin de memoria
correspondiente donde quedar grabada esa instruccin.
En la segunda columna se puede comenzar a escribir la operacin o el mnemnico
de la instruccin del microcontrolador o las directivas del ensamblador; normalmente se
ocupa una tabulacin mediante la tecla "Tab" para que el cursor salte a la segunda columna
y se pueda empezar a escribir la instruccin.
En la tercera columna se escribe o indican los operandos de la instruccin, que son
los registros o cantidades sobre las que se realizan las operaciones o instrucciones. Un
operando puede ser un registro de la memoria de datos o un valor constante que
comnmente se conoce como literal. Cuando se utilizan dos operandos, el primero es el
operando fuente y el segundo es el operando destino.
Cuando se desea realizar un comentario, se debe escribir un smbolo de punto y
coma (";") seguido de la indicacin deseada. El punto y coma es un delimitador y hace que
el ensamblador ignore la lnea de texto que se encuentra a la derecha de l.
Una vez que se ha completado el programa, o cuando el usuario lo decida, se debe
guardar el archivo mediante el men File, y la opcin Save As.
Despus de esto, aparecer el cuadro de dilogo de Save file as. En el cuadro de
texto File Name se debe especificar el nombre con que se desea guardar el archivo.
Ntese que la extensin del archivo en ensamblador debe ser *.asm. En la estructura de
carpetas de la derecha se debe elegir la ubicacin en la que se podr encontrar el archivo
para modificaciones posteriores. A continuacin se debe dar un click en el botn OK,
justo como se muestra en la figura 3.1.2.4.
105
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
106
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
107
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Cuando el MPLAB intenta generar el archivo *.hex puede avisar de tres tipos de
eventos: los errores (errors), los avisos (warnings) y mensajes (messages), los cuales
pueden imposibilitar que se cree dicho archivo. En la ayuda del MPLAB se describen uno a
uno estos eventos.
El archivo *.hex generado es almacenado en el mismo directorio donde fue
guardado el archivo *.asm.
108
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Una vez que se ha creado el archivo *.hex, es posible observar el cdigo generado
que se grabar en el microcontrolador mediante el men Window, y la opcin Program
Memory, tal como se muestra en la figura 3.1.3.3.
109
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
110
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Una condicin inviolable para simular el programa es que el archivo *.asm debe de
estar compilado, de otra forma, aparecer un mensaje indicando que no hay informacin de
depuracin disponible en el proyecto.
Una vez que se tiene abierto el proyecto, se debe abrir el archivo *.asm que se desea
simular. Cuando el programa ya ha sido compilado no es necesario hacerlo de nuevo, ya
que el MPLAB informa de la existencia el archivo *.hex.
Durante la simulacin del programa puede ser interesante ver en qu posiciones se
alojan las instrucciones que estn ejecutndose. Esto es posible a travs de la ventana de
Memoria de programa, la cual puede ser mostrada mediante el men Window y la
opcin Program Memory. La informacin que se muestra en esta ventana puede
visualizarse en diferentes formatos, los cuales pueden ser elegidos al dar un click en el
icono de Program Memory ubicado en esquina superior izquierda de la barra de ttulo de
esta misma ventana. La ventana Program Memory se muestra en la figura 3.1.4.3.
Estos formatos hacen que se muestre el cdigo de instrucciones en hexadecimal o
tal como se ha escrito, facilitando as su comprobacin. Adems aparece informacin
adicional sobre el nmero de cada instruccin y su posicin dentro de la memoria de
programa.
111
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
112
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Una vez que se tienen disponibles varias ventanas es necesario ordenarlas para su
visualizacin ptima. Una opcin para ordenar un nmero considerable de ventanas es
acceder al men Window y seleccionar la opcin Title Horizontal, que como su
nombre lo indica colocar las ventanas en un orden horizontal.
Para simular un programa es necesario elegir una opcin de esta funcin, dicha
modalidad deber ser elegida de acuerdo a lo que desea observar en el programa. Puede ser
que solo se quiera observar el resultado final de un registro, o quizs ver el desarrollo de un
segmento del programa del cual se desconoce si realmente funciona, o bien visualizar paso
a paso todo el programa o parte de l.
113
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Antes de ejecutar la simulacin debe hacerse un reset general del sistema mediante
el men Debug, luego el submen Run y finalmente la opcin Reset. Cada vez que
se realice una simulacin, y se quiera volver a empezar debe de hacerse un reset.
Para comenzar la simulacin de debe dar click en el men Debug, entrar al
submen Run y seleccionar la opcin Run. En esta opcin de simulacin solo se
pueden observar visualmente el valor de los registros y las posiciones de memoria cuando
se detenga la simulacin, ya que el sistema pretende ejecutar el programa a la velocidad
especificada del oscilador perteneciente al microcontrolador.
Para detener la simulacin se debe entrar al men Debug, acceder al submen
Run y seleccionar la opcin Halt.
El siguiente tipo de simulacin es de mucha utilidad, ya que mientras se ejecutan las
instrucciones, una franja negra de seleccin ilumina la sentencia prxima a procesar. Dicha
opcin de simulacin puede ejecutarse accediendo al men Debug, luego al submen
Run y seleccionando la opcin Animate. La diferencia de esta modalidad de
simulacin es que en el modo Run no se ve cmo se van modificando los registros,
aunque internamente el proceso es el mismo, y una vez ejecutado el cdigo, el contador de
programa sigue con las siguientes posiciones de la memoria de programa.
Otra forma de simular el programa en el MPLAB, es la modalidad de paso a paso.
La simulacin paso a paso se puede ejecutar entrando al men Debug, luego al submen
Run y seleccionando la opcin Step. La principal ventaja de este modo de ejecucin es
que se ilumina la instruccin a ejecutar, pero no se realiza dicha instruccin hasta que se
oprime la tecla rpida de esta funcin, que es F7. De esta manera, cada vez que se oprima
F7 se ejecutar una nica instruccin, y es posible observar el valor que cada registro
toma tras cada instruccin.
Adems, los cambios realizados se van resaltando en color rojo.
Si en un momento determinado se necesita solo ver qu sucede paso a paso en una
parte del programa y no en el programa completo, se puede modificar el valor del contador
del programa (PC) para que comience donde se requiere. Esto se realiza accediendo al
men Debug, luego al submen Run y finalmente mediante la opcin Change
Program Counter. El uso de esta opcin suele ser tpico en programas muy largos donde la
simulacin completa en el modo paso a paso sera demasiado tardada o complicada.
114
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
115
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
R2, R3, R4 = 1k
R5 = 2.2k
C1, C2 = 0.1F
D1, D2 = 1N34
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
1 Conector DB-25
1 Transformador (18-25V)
1 puente de diodos
C 1F
D 1N914
117
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
118
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Figura 4.1.3.1. Palabra de configuracin del PIC16F84 compuesta por cinco bits
119
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
_16F84
list
p=16F84
include
<p16f84.inc>
__config
H09
120
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Este programa, a diferencia del NOPPP, posee varias utilidades como la lectura de
los datos, los programa guardados en el PIC o bien la determinacin de la palabra de
configuracin, sin necesidad de incluirla en el programa en forma de cdigo.
El PonyProg es un software libre y fue creado por Claudio Lanconelli. Dicho
programa puede obtenerse gratuitamente en la direccin electrnica www.lancos.com
El PonyProg emplea el puerto serie de una computadora para enviar los datos al
microcontrolador.
4.2.1 Instalacin
La instalacin del PonyProg depende del sistema donde se desea usar el programa.
Para los sistemas operativos Windows 95 / 98 / Me NT / 2000, solo debe ejecutarse el
archivo de instalacin que se muestra en la figura 4.2.1.1.
121
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
122
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
123
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
124
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
125
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
126
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
R4, R9 = 1K
R5 = 2.2K
R7 = 10K
R8 = 100K
D1,D2 = 1N4007
Q1, Q2 = BC548
Q3 = BC558
LM7812
LM7805
Puente de diodos
Transformador a 24Vca 1 A
127
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
128
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
129
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Oscilador RC
Oscilador HS
Casilla activada,
Casilla desactivada:
Oscilador XT
Casilla activada,
Casilla activada:
Oscilador LP
130
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Una vez que se ha abierto el archivo *.hex, para grabar en el PIC el programa que contiene
este archivo, es necesario acceder al men Comand y posteriormente a la opcinWrite
All.
A continuacin aparecer una advertencia preguntado si se est seguro de escribir en
el dispositivo, ya que de aceptar, se perdern los datos que ste contenga. Para continuar
con el proceso de escritura, es necesario dar un click al botn etiquetado como Yes, justo
como se muestra en la figura 4.2.5.2.
131
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
Para eliminar por completo todos los datos del microcontrolador, solo es necesario
acceder al men command y elegir la opcin Erase.
Se debe tener especial cuidado con esta opcin, ya que no se muestra ningn
mensaje posterior a la ejecucin de esta funcin y se borra inmediatamente el dispositivo.
Cuando el borrado se est realizando, se muestra una barra de proceso que indica el
porcentaje completado de esta accin, tal como se muestra en la figura 4.2.7.1.
132
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
133
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
(
)
134
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
135
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x00
inicio
bucle
ORG
goto
0
inicio
bsf
movlw
movwf
movlw
movwf
bcf
ESTADO,5
b'11111111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
;Se pone en 1 el
;w = b'11111111'
;Se configura el
;w = b'00000000'
;Se configura el
;Se pone en 0 el
movf
movwf
goto
PORT_A,w
PORT_B
bucle
136
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
137
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.2.2 Descripcin
Para la realizacin de este programa se implement la utilizacin de ciclos
anidados, los cuales ocasionarn una prdida de tiempo en el PIC, debido a su alta
frecuencia de operacin. Esto dar un efecto de parpadeo en la salida del puerto B.
138
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
)
NO
SI
139
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.2.5 Procedimiento
Como primer paso a seguir se debe copiar el siguiente programa a un editor de texto
sin formato como el Block de Notas de Windows, o el editor del MPLAB.
140
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
0x00
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0X02
0x05
0x06
0x0C
0x0D
0x0E
0x30
0x40
0x50
;Direccin
;Direccin
;Direccin
;Direccin
;w = 0
;Direccin
;Direccin
;Direccin
;Valor que
;Valor que
;Valor que
del
del
del
del
0
inicio
5
;Vector de reset
;Salto a inicio
config
0x00
PORT_B
retardo
0x01
PORT_B
retardo
bucle
;Llamada a la rutina
;Mueve 0x01 a w
;Mueve w al puerto B
;Llamada a la rutina
;Mueve 0x02 a w
;Mueve w al puerto B
;Llamada a la rutina
;Salto a bucle
config
(apaga Led)
retardo
(prende Led)
retardo
ESTADO,5
b'11111111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
;Se pone en 1 el
;w = b'11111111'
;Se configura el
;w = b'00000000'
;Se configura el
;Se pone en 0 el
141
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
retardo movlw
movwf
tres
movlw
movwf
dos
movlw
movwf
uno
decfsz
goto
decfsz
goto
decfsz
goto
return
VALOR1
REG_1
VALOR2
REG_2
VALOR3
REG_3
REG_3
uno
REG_2
dos
REG_1
tres
142
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
143
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.3.2 Descripcin
Este simple circuito muestra una llamativa secuencia de encendido de leds, los
cuales dan la sensacin de un corrimiento hacia la izquierda, debido a la rotacin generada
por el mnemnico LRF. La experiencia de la prctica anterior servir para la utilizacin de
un tiempo de retardo.
144
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
NO
SI
NO
SI
NO
SI
145
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
146
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x00
0x0C
0x0D
0x0E
0x30
0x40
0x50
0x0F
;Direccin
;Direccin
;Direccin
;w = 0
;Direccin
;Direccin
;Direccin
;Valor que
;Valor que
;Valor que
;Direccin
inicio
bucle
ORG
goto
ORG
0
inicio
7
;Vector de reset
;Salto a inicio
call
movlw
movwf
movf
movwf
call
rlf
goto
config
0x03
AUX
AUX,w
PORT_B
retardo
AUX,1
bucle
bsf
movlw
movwf
movlw
movwf
bcf
return
ESTADO,5
b'11111111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
147
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
retardo
tres
dos
uno
movlw
movwf
movlw
movwf
movlw
movwf
decfsz
goto
decfsz
goto
decfsz
goto
return
VALOR1
REG_1
VALOR2
REG_2
VALOR3
REG_3
REG_3
uno
REG_2
dos
REG_1
tres
148
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
149
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.4.2 Descripcin
Este circuito mostrar un conteo de 0 a 9. Esto es posible debido a la
implementacin de secuencias de salida. Dichas secuencias corresponden a cada uno de los
nmeros en decimal, por lo que el PIC mostrar un dato de salida que ser representado por
el display como un nmero. Despus de esto existir un tiempo de espera y se mostrar el
siguiente nmero.
150
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
151
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
152
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0X02
0x03
0x05
0x06
0x00
0x0C
0x0D
0x0E
0x30
0x40
0x50
0x0F
;Direccin
;Direccin
;Direccin
;Direccin
;w = 0
;Direccin
;Direccin
;Direccin
;Valor que
;Valor que
;Valor que
;Direccin
del
del
del
del
reg. PC en hex
reg. ESTADO
puerto A
puerto B
inicio
bucle
ORG
goto
ORG
0
inicio
5
;Vector de reset
;Salto a inicio
call
movlw
call
movwf
call
movlw
call
movwf
call
movlw
call
movwf
call
movlw
call
movwf
config
0x00
tabla
PORT_B
retardo
0x01
tabla
PORT_B
retardo
0x02
tabla
PORT_B
retardo
0x03
tabla
PORT_B
153
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
call
movlw
call
movwf
call
movlw
call
movwf
call
movlw
call
movwf
call
movlw
call
movwf
call
movlw
call
movwf
call
movlw
call
movwf
call
goto
retardo
0x04
tabla
PORT_B
retardo
0x05
tabla
PORT_B
retardo
0x06
tabla
PORT_B
retardo
0x07
tabla
PORT_B
retardo
0x08
tabla
PORT_B
retardo
0x09
tabla
PORT_B
retardo
bucle
bsf
movlw
movwf
movlw
movwf
bcf
return
ESTADO,5
b'11111111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
retardo
movlw
movwf
movlw
movwf
movlw
movwf
decfsz
goto
decfsz
goto
decfsz
goto
return
VALOR1
REG_1
VALOR2
REG_2
VALOR3
REG_3
REG_3
uno
REG_2
dos
REG_1
tres
tres
dos
uno
154
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
tabla
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
PC,1
; .gfedcba
b'00111111'
b'00000110'
b'01011011'
b'01001111'
b'01100110'
b'01101101'
b'01111101'
b'00000111'
b'01111111'
b'01101111'
;pc= PC+w
Codigo para 7seg catodo comun
;7 segmentos para el 0
;7 segmentos para el 1
;7 segmentos para el 2
;7 segmentos para el 3
;7 segmentos para el 4
;7 segmentos para el 5
;7 segmentos para el 6
;7 segmentos para el 7
;7 segmentos para el 8
;7 segmentos para el 9
155
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.4.6 Indicaciones
Para esta prctica, la palabra de configuracin del PIC debe ser establecida de la
siguiente forma. Cdigo de proteccin deshabilitado, WDTE deshabilitado, PWRTE
habilitado, oscilador XT. Los pines que no sean empleados en esta prctica, deben
conectarse a Vdd por medio de una resistencia de 10K.
156
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.5.2 Descripcin
Las seales de entrada sern proporcionadas por medio de interruptores que se
encuentran conectados en el puerto A. La salida ser visualizada en un display de 7
segmentos conectado al puerto B. En este programa la conversin de BCD a 7 segmentos se
realiza por medio de tablas.
157
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
158
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
0x03
0X02
0x05
0x06
0x00
;Direccin
;Direccin
;Direccin
;Direccin
;w = 0
del
del
del
del
0
inicio
5
inicio
call
config
bucle
movf
call
movwf
goto
PORT_A,w
tabla
PORT_B
bucle
;w = puerto A
;Llamada a la rutina tabla
;Se envian datos al puerto B
;Salto a inicio
159
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
bsf
movlw
movwf
movlw
movwf
bcf
return
ESTADO,5
b'11111111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
tabla
addwf
PC
; .gfedcba
b'00111111'
b'00000110'
b'01011011'
b'01001111'
b'01100110'
b'01101101'
b'01111101'
b'00000111'
b'01111111'
b'01101111'
b'01110111'
b'01111100'
b'00111001'
b'01011110'
b'01111001'
b'01110001'
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
;Se pone en 1 el
;w = b'11111111'
;Se configura el
;w = b'00000000'
;Se configura el
;Se pone en 0 el
;pc= PC+w
Codigo para 7seg catodo
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
;7 segmentos para
comun
el 0
el 1
el 2
el 3
el 4
el 5
el 6
el 7
el 8
el 9
el A
el b
el C
el d
el E
el F
; Notas:
;Si se desea usar un display de 7 segmentos de nodo comun,
;entonces se deberan complementar los datos de la tabla.
;Para este programa no importa la frecuencia de oscilacin.
160
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
161
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.6.1 Objetivo
5.6.2 Descripcin
162
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
NO
SI
163
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
164
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0X02
0x03
0x05
0x06
0x00
0x0C
0x0D
0x0E
0x10
0x20
0x20
0x0F
0x0A
;Direccin
;Direccin
;Direccin
;Direccin
;w = 0
;Direccin
;Direccin
;Direccin
;Valor que
;Valor que
;Valor que
;Direccin
del
del
del
del
reg. PC en hex
reg. ESTADO
puerto A
puerto B
inicio
borra
bucle
boton
boton2
ORG
goto
ORG
0
inicio
5
;Vector de reset
;Salto a inicio
call
movlw
movwf
movf
call
movwf
btfss
goto
call
btfss
goto
goto
config
0x00
AUX
AUX,w
tabla
PORT_B
PORT_A,0
boton
retardo
PORT_A,0
sigue
boton2
165
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
sigue
call
incf
movf
xorlw
btfsc
goto
goto
retardo
AUX,1
AUX,w
DIEZ
ESTADO,2
borra
bucle
bsf
movlw
movwf
movlw
movwf
bcf
return
ESTADO,5
b'00011111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
retardo
uno
movlw
movwf
movlw
movwf
movlw
movwf
decfsz
goto
decfsz
goto
decfsz
goto
return
VALOR1
REG_1
VALOR2
REG_2
VALOR3
REG_3
REG_3
uno
REG_2
dos
REG_1
tres
tabla
addwf
PC,1
; .gfedcba
b'00111111'
b'00000110'
b'01011011'
b'01001111'
b'01100110'
b'01101101'
b'01111101'
b'00000111'
b'01111111'
b'01101111'
;pc= PC+w
Codigo para 7seg catodo comun
;7 segmentos para el 0
;7 segmentos para el 1
;7 segmentos para el 2
;7 segmentos para el 3
;7 segmentos para el 4
;7 segmentos para el 5
;7 segmentos para el 6
;7 segmentos para el 7
;7 segmentos para el 8
;7 segmentos para el 9
tres
dos
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
166
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.6.6 Indicaciones
Para esta prctica, la palabra de configuracin del PIC debe ser establecida de la
siguiente forma. Cdigo de proteccin deshabilitado, WDTE deshabilitado, PWRTE
habilitado, oscilador XT. Los pines que no sean empleados en esta prctica, deben
conectarse a Vdd por medio de una resistencia de 10K.
167
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
168
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
169
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
170
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x00
0x03
0x05
0x06
0x09
0x08
0x08
0x09
0x0B
0x0C
0x0D
0x0E
0x40
0x40
0x50
;w = 0
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Valor que
;Valor que
;Valor que
inicio
ORG
goto
ORG
0
inicio
5
;Vector de reset
;Salto a inicio
call
clrf
bcf
movlw
movwf
movlw
movwf
bsf
bcf
bsf
config
PORT_B
STATUS,5
0x31
EEADR
0x44
EEDATA
STATUS,5
INTCON,7
EECON1,2
171
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
;Secuencia de seguridad
movlw
movwf
movlw
movwf
bsf
0x55
EECON2
0xAA
EECON2
EECON1,1
call
retardo
bcf
movlw
movwf
movlw
movwf
bsf
bcf
bsf
STATUS,5
0x32
EEADR
0x44
EEDATA
STATUS,5
INTCON,7
EECON1,2
;Secuencia de seguridad
movlw
movwf
movlw
movwf
bsf
call
0x55
EECON2
0xAA
EECON2
EECON1,1
retardo
;w = 0x55
;EECON2 = w
;W = 0xAA
;EECON2 = w
;wr=1 y comienza el ciclo de escritura
;Pasa al banco 0
;w = 0x32
;EEADR = w
;w = 0x44
;EEDATA = w
;Pasa al banco 1
;GIE=0 para prohibir interrupciones
;wren=1 para permitir escritura en
;EEPROM
;w = 0x55
;EECON2 = w
;W = 0xAA
;EECON2 = w
;wr=1 y comienza el ciclo de escritura
bcf
STATUS,5
movlw
b'00000001'
ciclo
movwf
PORT_B
goto
ciclo
;============================ Subrutinas ==============================
config
bsf
movlw
movwf
movlw
movwf
bcf
return
STATUS,5
b'11111111'
PORT_A
b'00000000'
PORT_B
STATUS,5
retardo
movlw
VALOR1
;Carga w con el nmero 30 (VALOR1)
movwf
REG_1
;Mueve w al registro REG_1
tres
movlw
VALOR2
;Carga w con el nmero 40 (VALOR2)
movwf
REG_2
;Mueve w al registro REG_2
dos
movlw
VALOR3
;Carga w con el nmero 50 (VALOR3)
movwf
REG_3
;Mueve w al registro REG_3
uno
decfsz
REG_3
;Decrementa el valor de REG_3 en 1
goto
uno
;Salto a uno
decfsz
REG_2
;Decrementa el valor de REG_2 en 1
goto
dos
;Salto a dos
decfsz
REG_1
;Decrementa el valor de REG_1 en 1
goto
tres
;Salto a tres
return
;Retorno desde subrutina
;=============================== Fin ==================================
end
;Notas: La frecuencia externa debe ser de 4MHz (Cristal de 4MHz).
172
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.7.6 Indicaciones
Para esta prctica, la palabra de configuracin del PIC debe ser establecida de la
siguiente forma. Cdigo de proteccin deshabilitado, WDTE deshabilitado, PWRTE
habilitado, oscilador XT. Los pines que no sean empleados en esta prctica, deben
conectarse a Vdd por medio de una resistencia de 10K.
173
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.8.2 Descripcin
Se encuentra un Led conectado al pin
174
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
175
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.8.5 Procedimiento
Como primer paso a seguir se debe copiar el siguiente programa a un editor de texto
sin formato como el Block de Notas de Windows, o el editor del MPLAB.
176
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x00
0x01
0x01
0x03
0x05
0x06
0x0B
0x10
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
;Direccin
del
del
del
del
del
del
del
reg. OPTION
reg. TMR0
reg. ESTADO
puerto A
puerto B
reg. INTCON
reg. CONT
inicio
ciclo
ORG
goto
ORG
goto
ORG
0
inicio
4
inter
5
call
clrf
clrf
movlw
movwf
movlw
movwf
movlw
movwf
nop
goto
config
PORT_A
PORT_B
b'10100000'
INTCON
0x10
CONT
0x0c
TMR0
ciclo
;Vector de reset
;Salto a inicio
;Vector de interrupciones
;Salto a inter
bsf
clrf
clrf
movlw
movwf
bcf
return
STATUS,5
PORT_A
PORT_B
b'00000111'
OPT
STATUS,5
177
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
decfsz
CONT,1
;Decrementa CONT y brinca si vale 0
goto
seguir
;Salto a seguir
cont_0
movlw
0x10
;Si CONT = 0, se carga con 16
movwf
CONT
btfsc
PORT_B,0
;Si RB0 = 0, brinca
goto
rb7_1
bsf
PORT_B,0
;Si RB0 = 0 se invierte el valor
goto
seguir
rb7_1
bcf
PORT_B,0
;Si RB0 = 0 se invierte el valor
seguir
movlw
b'10100000'
;Se restaura INTCON, desactivar inte.
movwf
INTCON
movlw
0x0C
;Se recarga TMR0 con 12 en decimal
movwf
TMR0
retfie
;Retorno de interrupcin
;=============================== Fin ==================================
end
Nota: La frecuencia del cristal debe ser de 4 MHz
178
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.8.6 Indicaciones
Para esta prctica, la palabra de configuracin del PIC debe ser establecida de la
siguiente forma. Cdigo de proteccin deshabilitado, WDTE deshabilitado, PWRTE
habilitado, oscilador XT. Los pines que no sean empleados en esta prctica, deben
conectarse a Vdd por medio de una resistencia de 10K.
179
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
180
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
181
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
182
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x03
0x05
0x06
0x00
0x0C
0x0D
0x0E
0x10
0x20
0x30
;Direccin
;Direccin
;Direccin
;w = 0
;Direccin
;Direccin
;Direccin
;Valor que
;Valor que
;Valor que
call
config
ciclo
btfsc
goto
btfsc
goto
goto
PORT_A,0
derecha
PORT_A,1
izquier
ciclo
;PORT_A<0> = 0?
;No, salto a derecha
;Si, PORT_A<1> = 0?
;No, salto a izquier
;Si, salto a ciclo
derecha
movlw
movwf
call
btfsc
goto
b'00011100'
PORT_B
retardo
PORT_A,1
izquier
;w = b'00011100'
;PORT_B = w
;Llamada a retardo
;PORT_A<1> = 0?
;No, salto a izquier
movlw
movwf
call
btfsc
goto
b'00011000'
PORT_B
retardo
PORT_A,1
izquier
movlw
movwf
call
btfsc
goto
b'00011010'
PORT_B
retardo
PORT_A,1
izquier
183
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
izquier
movlw
movwf
call
btfsc
goto
b'00010010'
PORT_B
retardo
PORT_A,1
izquier
movlw
movwf
call
btfsc
goto
b'00010110'
PORT_B
retardo
PORT_A,1
izquier
movlw
movwf
call
btfsc
goto
b'00000110'
PORT_B
retardo
PORT_A,1
izquier
movlw
movwf
call
btfsc
goto
b'00001110'
PORT_B
retardo
PORT_A,1
izquier
movlw
movwf
call
btfsc
goto
b'00001100'
PORT_B
retardo
PORT_A,1
izquier
;Salto a izquierda
goto
derecha
;Salto a derecha
movlw
movwf
call
btfsc
goto
b'00011100'
PORT_B
retardo
PORT_A,0
derecha
;w = b'00011100'
;PORT_B = w
;Llamada a retardo
;PORT_A<0> = 0?
;No, salto a derecha
movlw
movwf
call
btfsc
goto
b'00001100'
PORT_B
retardo
PORT_A,0
derecha
;Mueve b'00001100' a w
;Mueve w a PORT_B, PORT_B = w
;Llamada a la subrutina retardo
;PORT_A<0> = 0?
;No, salto a derecha
movlw
movwf
call
btfsc
goto
b'00001110'
PORT_B
retardo
PORT_A,0
derecha
movlw
movwf
call
btfsc
goto
b'00000110'
PORT_B
retardo
PORT_A,0
derecha
184
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
movlw
movwf
call
btfsc
goto
b'00010110'
PORT_B
retardo
PORT_A,0
derecha
movlw
movwf
call
btfsc
goto
b'00010010'
PORT_B
retardo
PORT_A,0
derecha
movlw
movwf
call
btfsc
goto
b'00011010'
PORT_B
retardo
PORT_A,0
derecha
movlw
movwf
call
btfsc
goto
b'00011000'
PORT_B
retardo
PORT_A,0
derecha
;salto a derecha
goto
izquier
;Salto a izquier
bsf
movlw
movwf
movlw
movwf
bcf
return
ESTADO,5
b'11111111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
retardo
movlw
movwf
movlw
movwf
movlw
movwf
decfsz
goto
decfsz
goto
decfsz
goto
return
VALOR1
REG_1
VALOR2
REG_2
VALOR3
REG_3
REG_3
uno
REG_2
dos
REG_1
tres
tres
dos
uno
185
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
186
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.9.6 Indicaciones
Para esta prctica, la palabra de configuracin del PIC debe ser establecida de la
siguiente forma. Cdigo de proteccin deshabilitado, WDTE deshabilitado, PWRTE
habilitado, oscilador XT. Los pines que no sean empleados en esta prctica, deben
conectarse a Vdd por medio de una resistencia de 10K..
187
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
188
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
189
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
190
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0X02 ;Direccin
0x03 ;Direccin
0x05 ;Direccin
0x06 ;Direccin
0x00 ;w = 0
0x0C ;Direccin
0x0D ;Direccin
0x0E ;Direccin
0x05 ;Valor que
0x05 ;Valor que
0x05 ;Valor que
0x0F ;Direccin
d'100'
del
del
del
del
reg. PC en hex
reg. ESTADO
puerto A
puerto B
inicio
off
pulsa
ORG
goto
ORG
0
inicio
5
;Vector de reset
;Salto a inicio
call
movlw
movwf
movwf
btfsc
goto
goto
config
0x00
AUX
PORT_B
PORT_A,0
arranca
pulsa
191
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
arranca
movlw
movwf
call
conteo
movlw
movwf
call
call
call
movlw
movwf
clrf
call
0x00
PORT_B
retar2
retar2
retar2
b'01000000'
PORT_B
AUX
conteo
;w = 0x00
;PORT_B = w, PORT_B = 0x00
;Llamada a la rutina retar2
;Llamada a la rutina retar2
;Llamada a la rutina retar2
;w = b'01000000'
;PORT_B = w, PORT_B = b'01000000'
;Borra el contenido de AUX
;Llamada a la rutina conteo
movlw
movwf
sleep
0x00
PORT_B
;w = 0x00
;PORT_B = w, PORT_B = 0x00
;El PIC se duerme
bsf
movlw
movwf
movlw
movwf
bcf
return
ESTADO,5
b'00011111'
PORT_A
b'00000000'
PORT_B
ESTADO,5
retardo
movlw
movwf
movlw
movwf
movlw
movwf
decfsz
goto
decfsz
goto
decfsz
goto
return
VALOR1
REG_1
VALOR2
REG_2
VALOR3
REG_3
REG_3
uno
REG_2
dos
REG_1
tres
call
call
call
call
call
call
return
retardo
retardo
retardo
retardo
retardo
retardo
;Llamada
;Llamada
;Llamada
;Llamada
;Llamada
;Llamada
;Retorno
tres
dos
uno
retar2
a la rutina retardo
a la rutina retardo
a la rutina retardo
a la rutina retardo
a la rutina retardo
a la rutina retardo
desde subrutina
192
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
conteo
boton2
sigue
para
btfss
goto
call
btfss
goto
goto
incf
movf
xorlw
btfsc
goto
goto
return
PORT_A,4
conteo
retardo
PORT_A,4
sigue
boton2
AUX,1
AUX,w
DIEZ
ESTADO,2
para
conteo
193
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
460
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.11.1 Objetivo
Implementar un microcontrolador para el control de giro y conteo de vueltas de un
motor de corriente directa. Tambin se utilizar la interrupcin externa INT como una
forma de adquisicin de datos, adems se emplear el modo de bajo consumo de energa
SLEEP, as como la forma de salir de este estado a travs de una interrupcin (INT).
5.11.2 Descripcin
Esta prctica es muy parecida a la prctica anterior, pues tambin utliza el motor de
Cd, el disco y el optoacoplador, pero la diferencia reside en la utilizacin de la interrupcin
externa INT, que se encuentra en el pin 6 (RB0). Cuando se produce a un flanco ascendente
en el pin RB0/INT, debido al paso de la luz por el orificio del disco se origina una
interrupcin, desviando el flujo del programa hacia el vector de interrupcin, el cual
atender a la interrupcin e incrementar un registro auxiliar. El motor girar hacia la
derecha, luego se detendr un instante y empezar a girar hacia la izquierda; una vez
terminado el proceso, entrar en modo SLEEP. Para salir de dicho estado, bastar con girar
el disco para dejar pasar luz hacia el optoacoplador para activar la bandera de interrupcin
externa, la cual despertar al PIC y provocar que se contine con el resto del programa,
despertando al PIC del modo de ahorro de energa.
195
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
196
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
5.11.5 Procedimiento
Como primer paso a seguir se debe copiar el siguiente programa a un editor de texto
sin formato como el Block de Notas de Windows, o el editor del MPLAB.
197
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x01
0x03
0x05
0x06
0x0B
0x0C
0x0D
0x0E
0x0F
0x10
0x40
0x40
0x50
0
inicio
4
inter
5
;Vector de reset
;Salto a inicio
;Vector de interrupciones
;Salto a inter
inicio
clrf
clrf
clrf
clrf
call
movlw
movwf
PORT_A
PORT_B
CONT
AUX
config
d'100'
CONT
boton
btfss
goto
bsf
movlw
movwf
clrf
btfss
goto
PORT_A,0
boton
INTCON,7
b'10000000'
PORT_B
AUX
AUX,0
bucle_1
;PORT_A<0> = 1?
;No, salto a boton
;Si, pone en 1 el bit 7 de INTCON
;Carga w con b'10000000'
;Carga PORT_B con w
;Borra el reg. AUX
;AUX<0> = 1?
;No, salto a bucle_1
bcf
sleep
nop
goto
INTCON,7
ciclo
bucle_1
ciclo
198
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
retardo
tres
dos
uno
bsf
movlw
movwf
STATUS,5
b'11111111'
PORT_A
movlw
movwf
movlw
movwf
bsf
bcf
return
b'00000001'
PORT_B
b'00010000'
INTCON
OPT,6
STATUS,5
;w = b'00000001'
;PORT_B = w, se configura en puerto B
;w = b'00010000'
;INTCON = w, se configura INTCON
;OPTION<6>=1, flanco ascendente
;STATUS<5>=0, se pasa al banco 0
;Retorno de subrutina
movlw
movwf
movlw
movwf
movlw
movwf
decfsz
goto
decfsz
goto
decfsz
goto
return
VALOR_1
AUX1
VALOR_2
AUX2
VALOR_3
AUX3
AUX3
uno
AUX2
dos
AUX1
tres
cambio
sigue
decfsz
goto
movlw
movwf
btfsc
goto
movlw
movwf
call
bsf
goto
movlw
movwf
call
movlw
movwf
movlw
movwf
retfie
CONT
sigue
d'100'
CONT
PORT_B,7
cambio
b'00000000'
PORT_B
retardo
AUX,0
sigue
0x00
PORT_B
retardo
b'01000000'
PORT_B
b'10010000'
INTCON
199
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
460
5.11.6 Indicaciones
Para esta prctica, la palabra de configuracin del PIC debe ser establecida de la
siguiente forma. Cdigo de proteccin deshabilitado, WDTE deshabilitado, PWRTE
habilitado, oscilador XT. Los pines que no sean empleados en esta prctica, deben
conectarse a Vdd por medio de una resistencia de 10K.
200
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
RECOMENDACIONES
Es muy recomendable que el usuario de los microcontroladores conozca muy bien
las especificaciones de operacin del dispositivo, las cuales estn disponibles en el sitio
web del fabricante; esto con la finalidad de darle un buen uso, de no sobrecargarlo o de
operarlo en condiciones inadecuadas.
El PIC16F84A de Microchip est construido mediante tecnologa CMOS, por lo que
se recomienda manipularlo de forma cuidadosa y siempre con una pulsera antiesttica u
otra herramienta que ayude a la conservacin de este dispositivo.
Cuando se pretende cargar un programa en un dispositivo microcontrolador, es
necesario un circuito grabador, el cual se debe elegir de acuerdo a las necesidades del
usuario. Actualmente en el mercado existen herramientas de desarrollo con un valor que
oscila desde los $ 2,000.00 hasta los $15,000.00. Los programadores de uso libre son una
excelente opcin para todos aquellos usuarios que no requieren de un gran sistema para
realizar prcticas y prototipos didcticos, por lo que se recomienda usar programas como el
IC-Prog y el PonyProg2000.
Por lo general, todos los circuitos grabadores operan bajo ciertos niveles de seal
procedentes de algn puerto de la computadora, por lo que de preferencia se debe trabajar
con una computadora de escritorio, debido a que comnmente se tiene el problema de que
las computadoras porttiles no ofrecen el mismo voltaje a la salida de sus puertos; aunque
al programar los microcontroladores realmente se requiere de un nivel muy bajo de
corriente.
El simulador del programa MPLAB es una herramienta que debe ser usada para
comprobar el correcto funcionamiento del programa diseado, todo esto, con la finalidad de
que no se grabe el pic con un programa inservible.
El tema de los microcontroladores es muy extenso, y an cuando en esta gua se ha
pretendido analizar y explicar todo lo relacionado con el dispositivo PIC16F84A, es
necesario que el usuario investigue en otras fuentes y se actualice constantemente sobre la
evolucin de esta lnea de productos PIC Micro de la empresa Microchip.
201
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
CONCLUSIONES
Durante el desarrollo de esta obra didctica se present una situacin poco peculiar,
ya que en contraste con otros temas, acerca de los microcontroladores PIC16F84A, existe
una gran cantidad de fuentes bibliogrficas, por lo que fue necesario analizar
minuciosamente cada fuente de informacin y posteriormente seleccionar solo el mejor
material.
En lo que se refiere a la explicacin de las caractersticas, arquitectura y operacin
de dicho microcontrolador, fue necesario hacer una trascripcin de los trminos que se
encuentran en las diversas fuentes bibliogrficas, ya que la mayora de las obras
relacionadas con este tema fueron desarrolladas en otros pases con modismos y
terminologa diferente.
Los recursos del PIC16F84A son muy variados, por lo que requirieron de un fuerte
anlisis para poder ser explicados.
El manejo de los programas MPLAB, NOPPP y PonyProg2000 no se especifica
correctamente en ninguna fuente de informacin, por lo que el desarrollo de estas secciones
fue basado en la experimentacin, la prctica y los resultados al operar dichas herramientas
de desarrollo.
La parte ms importante de esta gua son las prcticas propuestas, la cuales se
desarrollaron en circuitos reales y se garantiza su correcto funcionamiento. Durante el
desarrollo de este trabajo se adquiri una gran habilidad para implementar soluciones a
problemas comunes y especficos mediante los microprocesadores PIC.
202
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
BIBLIOGRAFA
203
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
SITIOS WEB
www.redeya.com
www.lancos.com
www.microchip.com
www.mindspring.com/~covington/noppp
204
M A N UA L T E R I C O P R C T I C O D E L P I C 1 6 F 8 4 A
ANEXOS
205