PIC16CXXX (GAMA MEDIA)deeea.urv.cat/DEEEA/ecanto/WWW/SEMC/PIC16CXXX.pdf · 2007. 10. 8. ·...
Transcript of PIC16CXXX (GAMA MEDIA)deeea.urv.cat/DEEEA/ecanto/WWW/SEMC/PIC16CXXX.pdf · 2007. 10. 8. ·...
PIC16CXXX (GAMA MEDIA)•Oscilador•RESET•SLEEP•WatchDog Timer (WDT)•Protección de código e IDs•Interrupciones•Programación ICSP (In Circuit Serial Programming)•Periféricos:
•Timer/Contador de 8-bits (T0) con pre-scaler compartido para WDT o TMR0•Timer/Contador de 16-bit (T1) con pre-scaler•Timer de 8-bit (T2), usado por el PWM•7 Tipos de puertos I/O (RA,RB,RC,RD,RE,RF,RG) con funciones de periféricos multiplexadas•Memoria de datos E2PROM•CCP (Capture, Compare, PWM)•Convertidor A/D de hasta 12-bit y 8 canales•SSP (Synchronous Serial Port), configurable como SPI o I2C•USART (Universal Synch/Asynch R-T)•Referencias de tensión•Comparadores analógicos•PSP (Parallel Slave Port)•Drivers LCD
Encapsulado y patillaje:
Banco de registros:
Configuración estándar paradispositivos nuevos:•Algunos SFRs no mostrados•Verificar detalles para dispositivo
Configuración paraalgunos dispositivosde 18-pines
Instrucciones: OSCILADORCuatro o siete configuraciones del circuito oscilador, seleccionalbles con FOSC<2:0> o FOSC<1:0> de las palabra de configuración (2007h)
0 0LP (Low Power)
0 1
1 0
1 1
XT (Crystal/Resonator)
HS (High Speed Crystal/Resonator)
RC (Resistor-Capacitor)
FOSC0FOSC1Configuraciones del Oscilador
0 0LP (Low Power)
0 1
1 0
1 1
XT (Crystal/Resonator)
HS (High Speed)
Reservado
FOSC0FOSC1Configuraciones del Oscilador
0
0
0
0
FOSC2
0 0INTRC
0 1
1 0
1 1
INTRC con CLKOUT
EXTRC
EXTRC con CLKOUT (idéntico al modo RC)
1
1
1
1
Modos HS,XT,LP:•Cristal de cuarzo o resolnador cerámico:
•LP: De 32kHz a 200kHz. Baja velocidad y consumo•XT: De 100kHz a 4MHz•HS: De 4MHz a 20MHz. Alta velocidad y consumo
•Permite también un circuito de CLK externo
FOSC0
CONFIGURATION WORD (2007h)*FOSC1WDTEPWRTECP0CP1BODENLVPCPDWRT-DEBUG
*PIC
16F
87X
( L
a po
sici
ón y
bits
de
la p
alab
ra d
e co
nfig
urac
ión
depe
nden
del
dis
posi
tivo
- co
nsul
tar
man
ual d
e re
fere
ncia
)
CP0CP1
Modos EXTRC, EXTRC con CLKOUT (RC):•Solución económica: puede funcionar sin CEXT (recomendado CEXT>20pF)•Aplicaciones insensibles a temporización•EXTRC con CLKOUT: Por OSC2/CLKOUT sale FOSC/4•EXTRC: Pin OSC2/CLKOUT como I/O RA6
Modos INTRC, INTRC con CLKOUT:•La solución más económica: usa un oscilador RC interno de 4MHz @VDD=5V,25ºC•No disponible en todos los dispositivos•INTRC con CLKOUT: Por OSC2/CLKOUT sale FOSC/4•INTRC: Pin OSC2/CLKOUT como I/O RA6•Permite su calibración con el registro OSCCAL:
•Ventana de calibración con CAL<3:0>•Añadir/quitar offset con CALFST o CALSLW
•Instrucción de calibración retlw XX en la última posición de la memoria de programa (XX=calibración)
OSCCAL(8Fh)
--CALSLWCALFSTCAL0CAL1CAL2CAL3
R/W R/W R/W R/W R/W R/W U U
0Mínima
CAL3Frecuencia
0
CAL2
0
CAL1 CAL0
0
1Máxima 1 1 1
CALFSTOffset FST (FaST)1
0Desactivado
1Activado
CALSLWOffset SLW (SLoW)2
0Desactivado
1Activado
2CALFST=0
INIT call CALWORD ;Obtiene valor de calibraciónbanksel OSCCALmovwf OSCCAL...org 0x7FF ;Memoria de programa 2k (1 pagina)
CALWORD retlw 0x68 ;CAL<3:0>=6, CALFST=1, CALSLW=0
1CALSLW=X
RESETHay 6 posibles formas de generación de RESET, dependiendo del dispositivo:•Power-On Reset (POR), al conectar la alimentación VDD
•Al activar MCLR durante modo normal•Al activar MCLR durante modo SLEEP•Reset por WDT durante modo normal•Brown-Out Reset (BOR) por fallo de alimentación •Parity Error Reset (PAR) de memoria de programa, durante el ‘fetch’ de una instrucción
POR externo POR interno
(1) Opcional
(MCLRE=0 en la palabra de configuración)
OST:•Oscillator Start-up Timer (OST) de 1024 TOSC después del PWRT•Sólo se activa por los RESET tipo BOR y POR o por MCLR en modo SLEEP, con modos LP, XT o HS para la estabilidad del oscilador de cristal o resonador cerámico
PWRT:•Power-up Timer (PWRT) de 72ms nominales al realizarse un RESET por BOR o POR•Activado con PWRTE=0 en la palabra de configuración
BOR:•Brown-Out Reset (BOR) por fallo de alimentación mientras VDD<BVDD (4V típicamente) (alimentación por batería, conmutación de cargas...)•Activado si BODEN =1 de la palabra de configuración
FOSC0
CONFIGURATION WORD (2007h)*FOSC1WDTEPWRTECP0CP1BODENLVPCPDWRT-DEBUGCP0CP1
*PIC16F87X ( La posición y bits de la palabra de configuracióndependen del dispositivo - consultar manual de referencia)
STATUS(03h,083h,103h,183h)
CDCZPDTORP0RP1IRP
R/W R/W R/W R R R/W R/W R/W
PCON(8Eh)
PowerCONtrol
BORPORPER----MPEEN
R U U U U R/W R/W R/W
Time-Out
POR,BOR,PER,clrwdt,sleep
TO
0
1
Power-Down
sleep
PD
0
1
Desbordamiento del WDT
POR,BOR,PER,clrwdt
Power-On Reset
No POR
POR
0
1
Brown-Out Reset BOR
0
1
POR1
No BOR1Limpiarse con bsf PCON,NOT_POR
BOR2
2Limpiarse con bsf PCON,NOT_BOR
Parity Error Reset
No PER
PER
0
1
POR, PER3
3Limpiarse con bsf PCON,NOT_PER
Memory Parity Error ENabled
MPEEN=1 de la palabra config
MPEEN
0
1
MPEEN=0 de la palabra config.
TO PD Estado tras RESET1,2,3
0 1
1 0
WDT en modo normal
MCLR=0 durante modo SLEEP
U U MCLR=0 durante modo normal
BORPERPOR
1 1 PORX 10
1 1 BOR0 11
1 1 PER1 01
1 11
1 11
1 11
0 0 WDT en modo SLEEP1 11
TO PD Estado tras despertarBORPERPOR
SLEEP•Modo de bajo consumo•Se entra en modo SLEEP ejecutando sleep:
•El oscilador del sistema se para•Los puertos I/O mantienen su estado•Para menor consumo es recomendable colocar los pines I/O (T0CKI...) a VDD o VSS
•El WDT es limpiado, pero sigue funcionando (si esta habilitado)
•Se sale del modo SLEEP:•Con cualquier tipo de RESET (POR, BOR, PER, MCLR=0)•WDT en modo SLEEP•Interrupción (INT, cambio RB<7:4>, comparadores, A/D, timers, LCD, SSP, modulo captura...)
org 0x0 ;vector RESETgoto INICIO org 0x4 ;vector INTERRUPCIONgoto INTERRUPT...clrwdt ;limpia WDTsleep ;paso a modo SLEEPnop ;recomendado NOP...
RESET
GIE=1
•Al despertar con RESET salta al vector de RESET (0000h)•El despertar el µC con WDT o interrupción provoca la ejecución de la siguiente instrucción. Si GIE=1 del INTCON se salta después al vector de interrupción (0004h)
GIE=0
WDTCaracterísticas:•Usa un oscilador RC interno (independiente del externo)•Funciona en modo normal y modo SLEEP•Temporización de 18ms (nominales)•Posibilidad de usar pre-scaler, desde 1:1 hasta 1:128 (máximo tiempo 128*18ms=2’3s nominales)•Instrucciones clrwdt y sleep limpian el WDT y pre-scaler (si PSA=1)•En modo normal provoca RESET•En modo SLEEP despierta el dispositivo
0Desactivado WDT
1Activado WDT
WDTEWDT Enable
OPTION_REG(81h,181h)
PS0PS1PS2PSAT0SET0CSINTEDGRBPU
R/W
0Pre-Scaler para TMR0
1Pre-Scaler para WDT
PSAPre-Scaler Asignament
01:1
PS2Pre-Scaler
0
PS1
0
PS0
01:2 0 1
01:4 1 0
01:8 1 1
11:16 0 0
11:32 0 1
11:64 1 0
11:128 1 1
FOSC0
CONFIGURATION WORD (2007h)*FOSC1WDTEPWRTECP0CP1BODENLVPCPDWRT-DEBUGCP0CP1
*PIC16F87X ( La posición y bits dela palabra de configuracióndependen del dispositivo -consultar manual de referencia)
R/WR/WR/WR/WR/WR/WR/W
EPROM bit
banksel OPTION_REGmovlw 0x0B ;PSA=1,PS2,PS1,PS0={0,1,1}(144ms aprox)movwf OPTION_REG ;OPTION_REG=Wclrwdtcall SUBR1 ;Subrutina que puede colgarseclrwdt
•La directiva __config del PASM permite configurar las palabras de configuración dentro del código ensamblador•La directiva __idlocs del PASM permite configurar los localizaciones para códigos de identificación, número de serie, checksum...•No son accesibles durante el modo normal de ejecución, sino durante la verificación o programación
PROTECCIÓN CÓDIGO, IDs
FOSC0
CONFIGURATION WORD (2007h)*FOSC1WDTEPWRTECP0CP1BODENLVPCPDWRT-DEBUGCP0CP1
*PIC16F87X ( La posición y bits de la palabra de configuracióndependen del dispositivo - consultar manual de referencia)
ID (2000-2003h)11111111
11111111
11111111
11111111
ID
#Serie
Checksum
list p=16f876__config B’11000000110111’__idlocs H’1234’
FOSC<2:0>: Selección del osciladorWDTE: Watchdog Timer (WDT) EnablePWRTE: Power-up Timer (PWRT) EnableBODEN: Brown-Out Reset (BOR) EnableLVP:Low Voltage ICSP ProgrammingCPD:Code Protection Data E2PROMWRT: FLASH Program Memory Write EnableDEBUG: In Circuit Debugger (ICD) Mode-: No implementados. Son leidos como 1
00000h - 1FFFh (pags 0-3)
0
CP1Code Protection
0
1
CP1
1000h - 1FFFh (pags 2-3)
1F00h - 1FFFh (pag 3) 1 0
No protegido 1 1
INTERRUPCIONES•Interrupción de la ejecución del programa para realizar una rutina de servicio de la causa que la ha provocado•Varias fuentes de interrupción. Cada dispositivo es una (o varias en USART) fuente de interrupción•Registro INTCON para control y estado de interrupciones•Registros PIE1, PIR1, PIE2, PIR2 para control (PIE) y estado (PIR) de la interrupciones del resto de periféricos•Causas externas: por la acción sobre el pin INT o cambio del estado de los pines RB<7:4>•Causas internas: provocado por uno de los periféricos internos del µC
•Desbordamiento del Timer0•Desbordamiento del Timer1•Reset del Timer2•Finalización de conversión del A/D•Cambio de estado del comparador analógico•SSP (Synchronous Serial Port)•CCP (Capture, Compare, PWM)•PSP (Parallel Slave Port)•LCD (Liquid Crystal Display)•Escritura en E2PROM finalizada•USART (Universal Synch/Asynch R-T)
•Recepción•Transmisión
PIR1,PIR2,PIE1,PIE2 INTCON
•Latencia de 3TCY para interrupciones síncronas•Latencia de 3TCY a 4TCY para interrupciones asíncronas•El GIE del INTCON habilita/deshabilita todas las interrupciones:
•GIE=0 por RESET•GIE=0 al responder una interrupción. La dirección de retorno se guarda en pila y PC=0004h•GIE=1 al ejecutar retfie. El PC se recupera de la pila
INTCON(0Bh,8Bh,10Bh,18Bh)
RBIFINTF2T0IFRBIEINTE2T0IEPEIE3GIE
R/WR/WR/WR/WR/WR/WR/WR/W
0Interrupciones deshabilitadas
1Interrupciones habilitadas
GIEGlobal Interrupt Enable
0Int. periféricos deshabilitadas
1Int. periféricos habilitadas
PEIEPEripherical Interrupt Enable
0Int. Timer0 deshabilitada
1Int. Timer0 habilitada
T0IETimer 0 Interrupt Enable
0Timer 0 no ha desbordado
1Timer 0 ha desbordado
T0IF*Timer 0 Interrupt Flag
0Int. externa INT deshabilitada
1Int. externa INT habilitada
INTEInterrupt Enable
0No ha habido int. externa INT
1Ha habido int. externa INT
INTF*Interrupt Flag
0Int. cambio RB<7:4> deshab.
1Int. cambio RB<7:4> habilitada
T0IERB port Interrupt Enable
0RB<7:4> no ha cambiado
1
T0IF*RB port Interrupt Flag
RB<7:4> ha cambiado
1,2 1,2
1 Algunos dispositivos PIC12CXXX RB es llamado GP y RBIE se llama GPIE2No disponible en todos los dispositivo3Dispositivos con 1 periférico adicional se substituye por EEIE o ADIE
PIE1 PIE2(8Ch) (8Dh)
xIE
R/WR/WR/WR/WR/WR/WR/WR/W
PIR1 PIR2(0Ch) (0Dh)
R/WR/WR/WR/WR/WR/WR/WR/W
0Int. por periférico x deshab.
1Int. por periférico x habilitada
xIEPeripherical x Interrupt Enable
0Periférico x no interrumpe
1Periférico x interrumpe
xIF*Peripherical x Interrupt Flag
xIE xIE xIE xIE xIE xIE xIE
xIF xIF xIF xIF xIF xIF xIF xIF
*Los bits de flag de interrupción generalmente deben ser limpiados por software
TMP_W equ 0x70 ;GPR en common RAM (0x70 a 0x7F)TMP_STATUS equ 0x71 ;GPR en common RAM (0x70 a 0x7F)
org 0goto INICIO
org 4goto INTERRUPT ;GIE=0 al interrumpir
INICIO org 5movlw B'10111000' ;GIE=1, PEIE=0, T0IE=INTE=RBIE=1, T0IF=INTF=RBIF=0movwf INTCON...movf PORTB,W...bcf STATUS,RP0bsf STATUS,RP1 ;Selecciona banco2... ;Cambios en W y STATUS...
INTERRUPTmovwf TMP_W ;Guarda Wswapf STATUS,W ;Almacena temporalmente STATUS sin afectar Z
;(movf STATUS,W afecta Z)movwf TMP_STATUS ;Guarda STATUS con nibbles invertidos
btfsc INTCON,INTF ;Testeo del tipo de interrupción goto INT_INTbtfsc INTCON,RBIFgoto INT_RBbtfsc INTCON,T0IFgoto INT_T0
FIN_INT swapf TMP_STATUS,Wmovwf STATUS ;Recupera STATUS con nibbles ordenadosswapf TMP_W,Fswapf TMP_W,W ;Recupera W sin afectar Z (movf TMP_W,W afecta Z)retfie ;GIE=1
INT_RB...bcf INTCON,RBIF ;Limpia flag RBIF=0goto FIN_INT
•La rutina de servicio de interrupciones debe testear el estado de los bits de flag (xIF) para averiguar la causa •En general, el flag debe ser limpiado en la rutina de servicio del periférico causante•Los registros W, STATUS deben ser guardados por la rutina de servicio de interrupciones
Interrupción porcambio en RB<7:4>
Interrupción porcambio en RB<7:4>
ICSP•In Circuit Serial Programming (ICSP)•Todos los dispositivos de gama media son ICSP•Dos líneas de programación: RB6 (reloj), RB7(datos)•Tres líneas de potencia: VDD, VSS, MCLR/VPP
•Programación: VDD=5V, VPP=13V•Verificación: VDD=Márgenes de VDD de la aplicación•Los pins RB6, RB7 deben estar aislados del circuito aplicación durante la programación o no usarse.•Ventajas:
•Rápido desarrollo en dispositivos FLASH•Reducción/actualización de stocks, permitiendo substituir o actualizar rápidamente el ‘firmware’ antes de distribuirlo•Calibración. Permite grabación con datos de compensación incluidos en sistemas con algún sensor con varibilidad•Serialización. Cada dispositivo o serie puede ser grabado con un único identificador
•Los dispositivos OTP con ICSP pueden actualizar su ‘firmware’ una segunda vez si el tamaño de memoria de programa es al menos el doble del tamaño del ‘firmware’:
•Las células EPROM contienen ‘1’ si no están programadas, y ‘0’ cuando se programan•El código de operación de la instrucción NOP es ‘0000000XX00000’•Se puede colocar NOP en los vectores de RESET e interrupción en la segunda grabación y a continuación nuevas instrucciones de salto al nuevo código