Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso 4
Curso 4
Curso microcontroladoresPAGS
21/1/04 10:14
Pgina 56
CURSO DE
MICROCONTROLADORES
PIC16F87X (...y IV)
Fernando Remiro Domnguez
Profesor de Sistemas Electrnicos
IES. Juan de la Cierva
www.terra.es/personal/fremiro
LOS REGISTROS PCL
y PCLATH
El contador del programa
(PC) est formado por 13 bit que
sirven para direccionar la
memoria de cdigo, estos bits se
encuentran en dos registros
especficos. El byte bajo viene del
registro de PCL que puede ser
ledo y escrito. Los bits superiores
(PC<12:8>). Estn alojados en el
registro PCH , sobre el que no se
puede leer ni escribir, pero se
puede acceder a l indirectamente
a travs del registro PCLATH.
Las instrucciones de salto
CALL
y
GOTO
slo
proporcionan 11 bits de la
direccin a saltar. Esto limita el
salto dentro de cada Banco de 2K.
Cuando se desea salir del Banco
actual hay que programar
56
RESISTOR
PCH
12
0
Instrucciones con
destino en el PCL
PC
PCLATH<4:0>
8
PCLATH
ALU
Curso microcontroladoresPAGS
21/1/04 10:14
Pgina 57
;***********************************************************************************
; Programa
INTER.asm
Fecha : 24- Enero-2003
; Este programa genera una intermitencia en un lED conectado a la lnea RB0. El programa principal
; est en la pagina 0 de memoria de programa y la subrutina en la pgina 1 de programa
; Revisin 0.0
Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz
Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin :deshabilitado
Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;**********************************************************************************
List
p=16F876
;Tipo de procesador
include "P16F876.INC"
;Definiciones de registros internos
;__config _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _XT_OSC & _WDT_OFF
;
org
0x00
;Vector de Reset
;
goto
INICIO
CONTA1
EQU 0x20
CONTA2
EQU 0x21
PCLATH_TEMP
EQU 0x22
INICIO
BUCLE
TEMPO
BUCLE_1
org
clrf
bsf
movlw
movwf
clrf
bcf
bsf
movf
movwf
bsf
bcf
call
bcf
movf
movwf
bsf
bcf
call
goto
0x05
PORTB
STATUS,RP0
b'00000110'
ADCON1
TRISB
STATUS,RP0
PORTB,0
PCLATH,W
PCLATH_TEMP
PCLATH,3
PCLATH,4
TEMPO
PORTB,0
PCLATH,W
PCLATH_TEMP
PCLATH,3
PCLATH,4
TEMPO
BUCLE
ORG
clrf
clrf
decfsz
0x0800
CONTA1
CONTA2
CONTA1,f
goto
decfsz
goto
movf
movwf
return
BUCLE_1
CONTA2,f
BUCLE_1
PCLATH_TEMP,W
PCLATH
ORG
bcf
bcf
goto
end
0x1F00
PCLATH,4
PCLATH,3
INICIO
;Selecciona la Pgina 1
;Selecciona la pgina 0
;Fin del programa fuente
Programa Inter1.asm
MICROCONTROLADORES
Curso microcontroladoresPAGS
58
RESISTOR
21/1/04 10:14
Pgina 58
Direccionamiento Directo
Direccionamiento Indirecto
Seleccin de Banco
IRP
Seleccin de Banco
01
00
00h
80h
7Fh
FFh
10
Registro FSR
11
100h
180h
17Fh
1FFh
Memoria
de datos
Banco 0
Banco 1
Banco2
Banco3
Curso microcontroladoresPAGS
21/1/04 10:14
Pgina 59
59
RESISTOR
Nombre
Bit 7
05 h
85 h
97 h
PORTA
--TRISA
--ADDCON1 ADFM --
MICROCONTROLADORES
Bit 2
Bit 1
Bit 0
Valor en
Valor en
POR,BOR el resto
de Reset
RA5 RA4 RA3
RA2
RA1 RA0 --0x 0000 --0u 0000
Registro de direccionamiento del PORTA
--11 1111 --11 1111
--PCFG3 PCFG2 PCFG1 PCFG0 --0- 0000
--0- 0000
MICROCONTROLADORES
Curso microcontroladoresPAGS
21/1/04 10:14
STATUS,RP0
STATUS,RP1
PORTA
bsf
movlw
movwf
movlw
movwf
STATUS,RP0
b00000110
ADCON1
b00001111
TRISA
Pgina 60
60
RESISTOR
Curso microcontroladoresPAGS
21/1/04 10:14
Pgina 61
Nombre
Bit 7
Bit 6
Bit 2
Bit 1
Bit 0
06 h 106 h
86 h 186 h
81 h 181 h
PORTB
RB7
RB6 RB5 RB4 RB3
RB2
TRISB
Registro de direccionamiento del PORTB
OPTION_REG RBPU# INTEDG T0SC T0SC PSA
PS2
RB1
RB0
PS1
PS0
Valor en
Valor en
POR,BOR el resto
de Reset
xxxx xxxx uuuu uuuu
1111 1111 1111 1111
1111 1111 1111 1111
Leyenda
x = desconocido, u = inalterado. Las celdas sombreadas no son usadas por el PORTB
bit
bit 0
bit 1
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
bit 2
bit 3
bit 4
bit 5
bit 6
RC7/RX/DT
bit 7
Funcin
E/S digital. Salida Timer 1. Entrada de impulsos para el Timer1
E/S digital, entrada al oscilador del Timer1. Entrada del mdulo de
Captura 2. Salida del Comparador 2; Salida del PWM2
E/S digital. Entrada Captura 1; Salida Comparador 1; Salida PWM 1
E/S digital. Seal de reloj en modo SPI. Seal de reloj en modo I2C
E/S digital. Entrada de datos en modo SPI. Lnea de datos en modo I2C
E/S digital. Salida de datos en modo SPI
E/S digital. Lnea de transmisin en USART. Seal de reloj sncrona en
transmisin serie.
E/S digital. Lnea de transmisin en USART. Lnea de datos en transmisin serie
sncrona.
Tabla 1
Nombre
Bit 7
Bit 6
Bit 1
Bit 0
07 h
87 h
PORTC
TRISC
RC7
RC0
Bit 2
Valor en
Valor en
POR,BOR el resto
de Reset
xxxx xxxx uuuu uuuu
1111 1111 1111 1111
INFORMTICA
61
RESISTOR
Curso microcontroladoresPAGS
21/1/04 10:14
Pgina 62
MICROCONTROLADORES
62
RESISTOR
Direccin
Nombre
Bit 7
Bit 6
08 h
88 h
89 h
PORTD
TRISC
TRISE
RD7
IBF
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Valor en
Valor en
POR,BOR el resto
de Reset
xxxx xxxx uuuu uuuu
1111 1111 1111 1111
0000 111 0000 -111
Leyenda: x = desconocido, u = inalterado; Las celdas sombreadas no son usadas por el PORTD
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
09 h
89 h
PORTE
TRISE
--IBF
--OBF
--IBOV
----PSPMODE ---
97 h
---
---
Bit 1
Bit 0
RE2
RE1 RE0
Registro de
direccionamiento
del PORTE
PCFG3 PCFG1 PCFG0
Valor en
Valor en
POR,BOR el resto
de Reset
---- -xxx
---- -uuu
--0- 0000
--0- 0000
Leyenda: x = desconocido, u = inalterado; - = no implementado se lee como 0. Las celdas sombreadas no son usadas por el PORTE
Bit
Bit 0
RE1/WR#/AN6
RE2/CS#/AN7
Bit 1
Bit 2
Funcin
E/S digital. Seal de lectura en el modo de puerta paralelo esclava. Canal 5 del
Conversor A/D
E/S digital. Seal de escritura PSP. Canal 6 del Conversor A/D
E/S digital. Seal de Chip Select en el modo PSP. Canal 7 del Conversor A/D
bit 4:
bit 3
bit 2
bit 1:
bit 0:
"
R-0
OBF
"
R/W-0
IBOV
R/W-0
PSPMODE
U-1
---
R/W-1
Bit2
R/W-1
Birt1
R/W-1
Bit0
Bit 0
Curso microcontroladoresPAGS
21/1/04 10:14
Pgina 63
;**********************************************************************************
; Programa
Display.asm
Fecha : 27- Enero-2003
; Este programa lee el estado de cuatro interruptores conectados al PORTA <RA3:RA0>
; y representa sobre un display conectado al PORTB, el valor hexadecimal correspondiente
; Revisin 0.0
Programa para PIC16F87X
; Velocidad del Reloj: 4 MHz
Reloj Instruccin: 1 MHz = 1 uS
; Perro Guardin :deshabilitado
Tipo de Reloj : XT
; Proteccin del cdigo : OFF
;**********************************************************************************
List
p=16F876
;Tipo de procesador
include "P16F876.INC"
;Definiciones de registros internos
;__config _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _XT_OSC & _WDT_OFF
;
org
0x00
;Vector de Reset
;
goto
Inicio
org
0x05
INICIO
clrf
PORTB
;Borra los latch de salida
bsf
STATUS,RP0
;Selecciona banco 1
clrf
TRISB
;Puerta B se configura como salida
movlw b'00000110'
;Configura PORTA como E/S Digitales
movwf ADCON1
movlw b'00001111'
;Configura RA3:RA0 como entradas
movwf TRISA
bcf
STATUS,RP0
;Selecciona banco 0
BUCLE
movf PORTA,W
andlw b'00001111'
;Lee el cdigo de RA0-RA3
call
Tabla
;Convierte a 7 segmentos
movwf PORTB
;Visualiza sobre el display
goto
BUCLE
;**********************************************************************************
Tabla:
addwf PCL,F
;Desplazamiento sobre la tabla
retlw b'00111111'
;Dgito 0
retlw b'00000110'
;Dgito 1
retlw b'01011011'
;Dgito 2
retlw b'01001111'
;Dgito 3
retlw b'01100110'
;Dgito 4
retlw b'01101101'
;Dgito 5
retlw b'01111101'
;Dgito 6
retlw b'00000111'
;Dgito 7
retlw b'01111111'
;Dgito 8
retlw b'01100111'
;Dgito 9
retlw b'01110111'
;Dgito A
retlw b'01111100'
;Dgito b
retlw b'00111001'
;Dgito C
retlw b'01011110'
;Dgito d
retlw b'01111001'
;Dgito E
retlw b'01110001'
;Dgito F
;**********************************************************************************
ORG 0x1F00
bcf
PCLATH,4
bcf
PCLATH,3
;Selecciona la pgina 0
goto
INICIO
end
realizar un sencillo ejercicio que
consiste en la lectura de unos
interruptores conectados al
PORTA y la representacin de
dicho valor binario en hexadecimal sobre un display de 7 segmentos conectado en el PORTB.
El circuito de aplicacin es el
que se muestra en la Figura 5. El
programa est diseado para
aquellos que utilicen el bootloader con el circuito que presentamos en el nmero anterior o un
programador con el IC-PROG,
Vcc= 5V
R3
10K
R4
10K
R5
10K
R6
10K
R1
10K
Reset
R7 300
R8 300
R2 100
MCLR
RA0
RA0
RA1
RA2
RA3
RA4
RA5
Vss
RA1
RA2
C1 27 pF
RA3
XT 4Mhz
RB7
R9 300
R10 300
RB6
R11 300
R12 300
RB5
RB4
RB3
RB2
RB1
RB0
R13 300
OSC1
OSC2/CKOUT
VDD
VSS
C2 27 pF
RC0
RC1
RC2
RC3
RC7
RC6
RC5
RC4
Vcc=5V
f
e
b
g
d
c
b
a
c
d