Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PIC16F877
PIC16F877
El microcontrolador PIC16F877
El microcontrolador PIC16F877
Configuracin de pines
MCLR/VPP/THV
40
RB7/PGD
RA0/AN0
39
RB6/PGC
RA1/AN1
38
RB5
RA2/AN2/VREF-
37
RB4
RA3/AN3/VREF+
36
RB3/PGM
RA4/T0CKI
35
RB2
RA5/AN4/SS
34
RB1
RE0/RD/AN5
33
RB0/INT
RE1/WR/AN6
32
VDD
RE2/CS/AN7
10
31
VSS
VDD
11
30
RD7/PSP7
VSS
12
29
RD6/PSP6
OSC1/CLKIN
13
28
RD5/PSP5
OSC2/CLKOUT
14
27
RD4/PSP4
RC0/T1OSO/T1CKI
15
26
RC7/RX/DT
RC1/T1OSI/CCP2
16
25
RC6/TX/CK
RC2/CCP1
17
24
RC5/SDO
RC3/SCK/SCL
18
23
RC4/SDI/SDA
RD0/PSP0
19
22
RD3/PSP3
RD1/PSP1
20
21
RD2/PSP2
El microcontrolador PIC16F877
RA0/AN0
RA1/AN1
Puerto A
RA2/AN2/VrefRA3/AN3/Vref+
RA4/TOCKI
RA5/AN4
RC0
RC1
RC2
RC3
Puerto C
RC4
RC5
RC6/Tx
RC7/Rx
RD0
RD1
Puerto D
RD2
RD3
RD4
RD5
RD6
RD7
RB0/INT
RB1
RB2
RB3
Puerto B
RB4
RB5
RE0/RD/AN5
Puerto E RE1/WR/AN6
RB6
RB7
RE2/CS/AN7
El microcontrolador PIC16F877
funciona como un disparador de Schmitt (Schmitt trigger), puede reconocer seales un poco
distorsionadas y llevarlas a niveles lgicos (cero y cinco voltios). Cuando se usa como salida
digital se comporta como colector abierto (open collector), por lo tanto, se debe poner una
resistencia de pull-up (resistencia externa conectada a un nivel de cinco voltios). Como
salida, la lgica es inversa: un "0" escrito al pin del puerto entrega en el pin un "1" lgico.
Adems, como salida no puede manejar cargas como fuente, slo en el modo sumidero.
El puerto E puede controlar la conexin en modo microprocesador con otros dispositivos
utilizando las lneas RD (read), WR (write) y CS (chip select). En este modo el puerto D
funciona como un bus de datos de 8 bits (pines PSP).
La mxima capacidad de corriente de cada uno de los pines de los puertos en modo
sumidero (sink) o en modo fuente (source) es de 25 mA . La mxima capacidad de
corriente total de los puertos es:
Modo sumidero
Modo fuente
Un solo pin
Microcontrolador
Un solo pin
Microcontrolador
Imax=25mA
Imax=25mA
+5V
Puerto completo
Microcontrolador
Microcontrolador
Puerto completo
Imax=200mA
Modo sumidero
Imax=200mA
Modo fuente
El microcontrolador PIC16F877
Pin
2
3
4
5
6
Descripcin
E/S Digital o Entrada anloga 0.
E/S Digital o Entrada anloga 1.
E/S Digital o Entrada anloga 2.
E/S Digital o Entrada anloga 3.
Bit 4 del puerto A (E/S bidireccional ). Tambin se usa como entrada de reloj al
temporizador/contador TMR0. Salida de colector abierto.
7
E/S Digital o Entrada anloga 4. Tambin lo usa el puerto serial sncrono.
33
Bit 0 del puerto B (E/S bidireccional). Buffer E/S: TTL/ST. Tambin se usa como
entrada de interrupcin externa (INT).
34
Bit 1 del puerto B (E/S bidireccional). Buffer E/S: TTL
35
Bit 2 del puerto B (E/S bidireccional). Buffer E/S: TTL
36
Bit 3 del puerto B (E/S bidireccional). Buffer E/S: TTL (Programacin en bajo
voltaje)
37
Bit 4 del puerto B (E/S bidireccional). Buffer E/S: TTL. Interrupcin por cambio
del pin.
38
Bit 5 del puerto B (E/S bidireccional). Buffer E/S: TTL. Interrupcin por cambio
del pin.
39
Bit 6 del puerto B (E/S bidireccional). Buffer E/S: TTL/ST. Interrupcin por
cambio del pin. Entrada de reloj para programacin serial.
40
Bit 7 del puerto B (E/S bidireccional). Buffer E/S: TTL/ST. Interrupcin por
cambio del pin. Entrada de datos para programacin serial.
15
E/S Digital. Salida del oscilador Timer 1 o entrada de reloj Timer 1.
16
E/S Digital. Entrada del oscilador Timer 1. Entrada Captura 2; Salida Compara
2; Salida PWM 2
17
E/S Digital. Entrada Captura 1; Salida Compara 1; Salida PWM 1
18
E/S Digital. Lnea de reloj serial asncrono en el modo SPI y el modo IC
23
E/S Digital. Lnea de datos en el modo SPI o en el modo IC
24
E/S Digital.
25
E/S Digital. Transmisin asncrona (USART) o reloj sncrono (SSP).
26
E/S Digital. Recepcin asncrona (USART) o lnea de datos (SSP).
11,32 Voltaje de alimentacin DC (+)
12,31 Referencia de voltaje (GND).
1
Entrada de RESET al microcontrolador. Voltaje de entrada durante la
programacin. En nivel bajo resetea el microcontrolador.
13
Entrada oscilador cristal oscilador / Entrada fuente de reloj externa.
14
Salida oscilador cristal. Oscilador RC: Salida con un frecuencia OSC1
19
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
20
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
21
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
22
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
27
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
28
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
29
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
30
E/S Digital. Puede ser puerto paralelo en bus de 8 bits.
8
E/S Digital. Puede se pin de lectura (read) en modo microprocesador.
9
E/S Digital. Puede ser pin de escritura (write) en modo microprocesador.
E/S Digital. Puede ser pin de seleccin de chip (chip select) en modo
10
microprocesador.
El microcontrolador PIC16F877
El oscilador externo
Todo microcontrolador requiere un circuito externo que le indique la velocidad a
la que debe trabajar. Este circuito, que se conoce como oscilador o reloj, es muy
simple pero de vital importancia para el buen funcionamiento del sistema. El
PIC16F877 puede utilizar cuatro tipos de oscilador diferentes. Estos tipos son:
RC. Oscilador con resistencia y condensador.
XT. Cristal (por ejemplo de 1 a 4 MHz).
HS. Cristal de alta frecuencia (por ejemplo 10 a 20 MHz).
LP. Cristal para baja frecuencia y bajo consumo de potencia.
En el momento de programar o quemar el microcontrolador se debe especificar que
tipo de oscilador se usa. Esto se hace a travs de unos fusibles llamados fusibles de
configuracin.
El tipo de oscilador que se sugiere para las prcticas es el XT con un cristal de 4
MHz, porque garantiza precisin y es muy comercial. Internamente esta frecuencia es
dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz en
este caso, por lo que cada instruccin se ejecuta en un microsegundo. El cristal debe
ir acompaado de dos condensadores y se conecta como se muestra en la figura 3.4.
20pF
16OSC1
Bytes
Cristal
OSC2
13
P
R
OSC1
Fosc/4
C
El microcontrolador PIC16F877
Reset
10K
100
MCLR
Reset
El microcontrolador PIC16F877
Memoria
EEPROM
Dispositivo
Memoria de
programa
PIC16F874
4K
192 Bytes
128 Bytes
PIC16F877
8K
368 Bytes
256 Bytes
Memoria de
datos
13
Bus de datos
Puerto A
Contador Programa
Memoria de
programa
FLASH
RAM
Pila 8 niveles
(13-bit)
Bus de 14
programa
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3/VREF
RA4/T0CKI
RA5/AN4/SS
Direcciones
de RAM (1)
Puerto B
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
Mux Direcc.
Reg instrucciones
Dir. Directo
Dir.
Indirecto
Reg FSR
Reg STATUS
8
3
Power-up
Timer
Decodificador
de
instrucciones
Generacin de
tiempos
OSC1/CLKIN
OSC2/CLKOUT
Oscillator
Start-up Timer
Power-on
Reset
Watchdog
Timer
Brown-out
Reset
Puerto C
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
MUX
ALU
8
Puerto D
Reg W
RD7/PSP7:RD0/PSP0
In-Circuit
Debugger
Low-Voltage
Programming
Puerto paralelo
esclavo
Puerto C
RE0/AN5/RD
RE1/AN6/WR
MCLR
Timer0
Timer1
Datos EEPROM
Nota 1:
CCP1,2
VDD, VSS
RE2/AN7/CS
Timer2
10-bit A/D
Puerto serial
sncrono
USART
El microcontrolador PIC16F877
El microcontrolador PIC16F877
13
CALL, RETURN
RETFIE, RETLW
Pila nivel 1
Pila nivel 2
Pila nivel 8
Vector de Reset
0000h
Vector de Interrupcin
0004h
0005h
Pgina 0
07FFh
0800h
Pgina 1
Memoria
de
programa
0FFFh
1000h
Pgina 2
17FFh
1800h
Pgina 3
1FFFh
11
El microcontrolador PIC16F877
12
El microcontrolador PIC16F877
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
PORTC
PORTD
PORTE
PCLATH
INTCON
PIR1
PIR2
TMR1L
TMR1H
T1CON
TMR2
T2CON
SSPBUF
SSPCON
CCPR1L
CCPR1H
CCP1CON
RCSTA
TXREG
RCREG
CCPR2L
CCPR2H
CCP2CON
ADRESH
ADCON0
00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
0Eh
0Fh
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh
20h
Registros
de
Propsito
General
96 Bytes
INDF
OPTION_REG
PCL
STATUS
FSR TRISA
TRISA
TRISB
TRISC
TRISD
TRISE
PCLATH
INTCON
PIE1
PIE2
PCON
SSPCON2
PR2
SSPADD
SSPSTAT
TXSTA
SPBRG
ADRESL
ADCON1
80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8Ah
8Bh
8Ch
8Dh
8Eh
8Fh
90h
91h
92h
93h
94h
95h
96h
97h
98h
99h
9Ah
9Bh
9Ch
9Dh
9Eh
9Fh
INDF
TMR0
PCL
STATUS
FSR
PORTB
PCLATH
INTCON
EEDATA
EEADR
EEDATH
EEADRH
16 Bytes
7Fh
PCLATH
INTCON
EECON1
EECON2
Reservado
Reservado
19Fh
1A0h
Registros
de
Propsito
General
Registros
de
Propsito
General
80 Bytes
80 Bytes
1EFh
1F0h
16Fh
170h
17Fh
Banco 2
180h
181h
182h
183h
184h
185h
186h
187h
188h
189h
18Ah
18Bh
18Ch
18Dh
18Eh
18Fh
190h
16 Bytes
120h
FFh
Banco 1
TRISB
11Fh
A0h
Registros
de
Propsito
General
80 Bytes
INDF
OPTION_REG
PCL
STATUS
FSR
Registros
de
Propsito
General
Registros
de
Propsito
General
0EFh
0F0h
Banco 0
100h
101h
102h
103h
104h
105h
106h
107h
108h
109h
10Ah
10Bh
10Ch
10Dh
10Eh
10Fh
110h
1FFh
Banco 3
13
El microcontrolador PIC16F877
Registro PCLATH
12
11
10
Bits Incluidos en la
instruccin, suficiente para
direccionar toda la
memoria del PIC16F877
El microcontrolador PIC16F877
PCLATH (bits 4 a 0), por ejemplo en el caso de la instruccin ADDWF. Esto se debe
tener en cuenta cuando se desea hacer lectura de tablas usando el comando:
ADDWF PC,1 , en este caso se debe tener en cuenta que la tabla debe estar
comprendida dentro de un solo bloque de 256 bytes (0-255, 256-511, etc.).
03h o STATUS: Registro de estados. Contiene el estado aritmtico de la ALU, la causa del
reset y los bits de preseleccin de pgina para la memoria de datos. La figura 3.11
muestra los bits correspondientes a este registro. Los bits 5 y 6 (RP0 y RP1) son los bits de
seleccin de pgina 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; ellos
muestran la condicin por la cual se ocasion el ltimo reset.
Registro: STATUS
IRP RP1
RP0
T0
PD
bit 7
DC
C
bit 0
Direccin:
condicin de reset:
03h
000??XXX
15
El microcontrolador PIC16F877
20h
FSR
INDO
INCF
BTFSS
GOTO
contina
FSR,1
FSR,6
NEXT
......
El microcontrolador PIC16F877
17
El microcontrolador PIC16F877
El microcontrolador PIC16F877
ADRESL
ADRESH
ADCS0
CHS2
CHS1
CHS0
GO/DONE
ADON
bit 0
Bit 0 (ADON): Bit de activacin del mdulo. ADON = 1, Mdulo A/D operando.
ADON = 0, Mdulo A/D desactivado.
Bit 2 (GO/DONE): Estado de conversin: GO = 1, Empieza conversin. GO = 0,
conversin finalizada.
Si ADON = 0, Este bit es cero.
Bits 3, 4 y 5 (CHS0, CHS1, CHS2): Seleccin del canal a convertir (canal 0 - 7).
Bits 6 y 7(ADCS0, ADCS1): Seleccin del reloj de conversin.
ADCS1
0
0
1
1
ADCS0
FRECUENCIA DE CONVERSIN
0
Fosc / 2
1
Fosc / 8
0
Fosc / 32
1
FRC
Figura 3.13. Frecuencias de conversin para el mdulo A/D
Registro ADCON1.
Este es un registro que permite seleccionar como se ubican los diez bits resultado de
la conversin A/D y permite seleccionar cuales de los pines del puerto A trabajarn
como entradas anlogas y cuales como entradas digitales. Adicionalmente, permite
seleccionar los voltajes de referencia del convertidor.
ADFM
bit7
PCFG2
PCFG1
PCFG0
bit 0
19
El microcontrolador PIC16F877
A
A
D
D
D
D
D
A
D
D
D
D
D
D
D
A
A
D
D
D
D
D
A
D
D
D
D
D
D
D
A
A
D
D
D
D
D
A
A
A
A
D
D
D
D
AN4
RA5
A
A
A
A
D
D
D
A
A
A
A
A
D
D
D
AN3
RA3
AN2
RA2
A
VREF+
A
VREF+
A
VREF+
D
VREF+
A
VREF+
VREF+
VREF+
VREF+
D
VREF+
A
A
A
A
D
D
D
VREFA
A
VREFVREFVREFD
VREF-
AN1
RA1
A
A
A
A
A
A
D
A
A
A
A
A
A
D
D
AN0
RA0
A
A
A
A
A
A
D
A
A
A
A
A
A
A
A
VREF+
VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
RA3
RA3
RA3
VDD
RA3
VREFVSS
VSS
VSS
VSS
VSS
VSS
VSS
RA2
VSS
VSS
RA2
RA2
RA2
VSS
RA2
CHAN /
REFS
8/0
7/1
5/0
4/1
3/0
2/1
0/0
6/2
6/0
5/1
4/2
3/2
2/2
1/0
1/2
A = Entrada Anloga
D = Entrada/Salida Digital
Nota 1: Estos canales no estn disponibles en los dispositivos de 28 pines
20
El microcontrolador PIC16F877
2 Tosc
8 Tosc
32 Tosc
Oscilador interno RC
Para conversiones correctas, el reloj de conversin (Tad) debe ser seleccionado para
tener un tiempo mnimo Tad de 1.6 useg.
FORMA DE REALIZAR LA CONVERSIN A/D :
Configurar el mdulo A/D:
- Configurar los pines anlogos, referencia de voltaje y E/S digitales (ADCON1).
- Seleccionar canal de entrada A/D.
- Seleccionar reloj de conversin A/D.
- Activar el mdulo A/D.
Configurar la interrupcin A/D(si se requiere): ADIF =0 (PIR1<6>); ADIE = 1
(PIE1<6>) y GIE = 1 (INTCON<7>).
21
El microcontrolador PIC16F877
22