Estructura de Computadores Comandos DEBUG Programación en Assembler Profesora : Tatiana Marín R.
Mc Programación PIC Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio...
-
Upload
herminio-bosquez -
Category
Documents
-
view
123 -
download
5
Transcript of Mc Programación PIC Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio...
mc
Programación PIC® Avanzada Rango Medio
Programación Microcontroladores
Familia de Rango Medio Configuración de Periféricos
Programación Assembler
Objectivos
Al finalizar esta clase usted podrá:– Entenderá los Periféricos básicos y los
registros asociados a los mismos
–
–
–
–
“Metiendo Mano”usted experimentará laIncialización de los periféricos del RangoMedio.
Podrá implementar periféricos no cubiertosaquí
Entenderá las interrupciones y el polling
Escriba su propio código de aplicación
Para conseguir lo mejor de estaclase
Idealmente usted debe estar familiarizadocon lo siguiente:
–
–
–
–
–
Programación Assembler
Principios de la Familia de Rango Medio y Setde Instrucciones
Organización de la Memoria de Datos yPrograma
MPLAB
Microchip ICD2 debugger
Agenda
Breve revisión de la Arquitectura del Rango Medio,Set de Instrucciones y Herramientas
Interrupciones sobre los PIC de Rango Medio– Laboratorio de Interrupciones
Discución sobre los Periféricos:– Puertos I/O– Timers
Timer0Timer1
– Timer1 LaboratorioTimer2
– Timer2 Laboratorio
Agenda (cont.)
Módulo (CCP) Captura / Comparación / PWM– PWM y Salida del Compare Laboratorios
Comparador Analógicos
Conversor Analógico Digital (ADC)– ADC Laboratorio
UART direccionable (AUSART)
I2C con el Puerto Serie Sincrónico Master– I2C Basado en un Sensor de Temperatura Laboratorio
Concluciones y preguntas adicionales
Programación PIC® Avanzada Rango Medio
Familia de Rango MedioArquitectura Básica y
Herramientas deDesarrollo
mc ®
REGISTERPages ofProgramMemory
PIC Rango Medio Diagrama enBloques
STATUSPROGRAM COUNTER
8-bit value from instruction
MUX Bancos de Memoriade Datos
ADC
ALUTIMER0
WORKINGREGISTER
14-bits
INSTRUCTION REGISTERAUSART
MSSP
PERIFERICOS
Page 0
Page 1
Memoria de PROGRAMA
Maximo 8K wordsReset Vector 0000h
– (8K x 14 bits/word)/1 byte= 14Kbytes de memoria
Reset Vector at 0000h– Contador de Programa
(PC)irá a esta direcciónsobre el RESET
Interrupt Vector 0004h
0005h07FFh
0800h0FFFh
Page 2
Page 3
1000h17FFh
1800h1FFFh
Interrupt Vector at 0004h– Contador de Programa
(PC) irá a esta direcciónsobre cualquierinterrupción
OPCODE(11-bits)PCH Paging bitsP i bit
Actualización desde PCLATH
POPSRETURN, RETFIE,RETLW Programa
PC<12:0>
Contador de Programa (PC) yStack
PCLATH
13-bit PC– PCL ALU result (8-bits) or PCH<12:8> PCL
CALL, RETURN,– RETFIE, RETLW
Stack Level 1Especifica la Página enMemoria de Programa
8 Niveles de Stack– almacena el contenido del PC
PUSHES Stack Level 8– CALL/Interrupt
Memoria de–
Mapa de Memoria deDatos080h
09Fh
100h
10Fh110h
180h
18Fh190h
000hSpecial
Function
Registers 01Fh
SFR SFRSpecialFunctionRegisters
020h 0A0h
128Bytes General
PurposeRegisters
GeneralPurpose
Registers
GeneralPurposeRegisters
GeneralPurposeRegisters
07Fh
0EFh
0FFh
16Fh
17Fh
1EFh
1FFh
Bank k0
Shared
Bank1
Shared
Bank2
Shared
Bank3
Registros de FuncionesEspeciales (SFRs)
PORTBPORTCPORTDPORTE
PCLATHINTCON
PIR1PIR2
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
TRISBTRISCTRISDTRISE
PCLATHINTCON
PIE1PIE2
86h
87h
88h
89h
8Ah
8Bh
8Ch
8Dh
Bank0 Bank1
Condepto de Archivode Registros
Acceso a cualquierregistroAlgunos Registros se repitenen todos los bancos(PCLATH, INTCON, etc.)
Registro STATUS
IRP RP1 RP0 TO PD Z DC C
RP1 RP0
0RP1
0
RP0
1
BANK0
BANK1
Contiene:– Estado Artmético de la
ALU
– El estado del RESET
– Bit selectores del Bancode memoria
1 0 BANK2
1 1 BANK3
Bit Indirect Register Bank Select :(usados para direcciionamientoIndirecto)
1 = Bank 2,3
0 = Bank 0,1
PIC16 Set de Instrucciones35 instrucciones de palabra simpleTodas se ejecutan en un ciclo escepto los saltos
Byte Oriented Operations Bit Oriented Operationsaddwfandwfclrfclrw
f,df f,d df-
comf f,d
Add W and fAND W with fClear fClear WComplement f
bcfbsfbtfscbtfss
f,bf f,b bf,bf,b
Bit Clear fBit Set fBit Test f, Skip if ClearBit Test f, Skip if Set
Literal and Control Operations
decfdecfszincfincfsziorwfmovfmovwfnoprlfrrfsubwfswapfxorwf
f,df,df,df f,d df,df,df-f,df,df,df,df,d
Decrement fDecrement f, Skip if 0Increment fIncrement f f, Skip if 0Inclusive OR W with fMove fMove W to fNo OperationRotate Left f through CarryRotate Right f through CarrySubtract W from fSwap nibbles in fExclusive OR W with f
addlwandlwcallclrwdtgotoiorlwmovlwretfieretlwreturnsleepsublwxorlw
kkk-kkk-k--kk
Add literal and WAND literal with WCall subroutineClear Watchdog TimerGo to addressInclusive OR literal with WMove literal to WReturn from interruptReturn with literal in WReturn from SubroutineGo into standby modeSubtract W from literalExclusive OR literal with W
Programación PIC® Avanzada Rango Medio
Herramientas deDesarrollo
mcmc
MPLAB® IDE
MPLAB® IDE (Integrated DevelopmentEnvironment)
Integrates different Microchip and thirdparty tools
–
–
–
–
–
Code Editor
Cross Compilers
Assemblers
Simulators, In-Circuit Debuggers, Emulators
Programmers
MPLAB® IDE
MPLAB® IDE (Integrated DevelopmentEnvironment)
Integrates different Microchip and thirdparty tools
–
–
–
–
–
Code Editor
Cross Compilers
Assemblers
Simulators, In-Circuit Debuggers, Emulators
Programmers
ICD 2 (Debugger In Circuit )
MPLAB® ICD 2 es un programador--debugger de bajo costo.–
–
–
–
Lee/Escribe el espacio de memoria y areasEEDATA de los PIC
Programa bits de Configuración
Debugging in circuit
Borrado de Memoria de Programa converificación
LEDs9V to 5Vregulator
RS232Connecto
r
PICDEM® 2 Plus BoardHerramienta PICDEM2
16 x 2 LCDModule
Analog Pot
18, 28 and 40-pin DIPsockets
Push buttonSwitches
ICDConnecto
r
PiezoBuzzer
I2C BasedTemp Sensor
Programación PIC® Avanzada Rango Medio
g
Interrupciones
mc
Interrupciones y Polling
Querer a menudo que el procesadorrealizara una tarea si ocurre unacontecimiento específico
Dos métodos para comprobar si haocurrido este acontecimiento:
–
–
Polling (Interrogación):Comprueba continuamente para saber si hayacontecimiento en varios puntos en el código
Interrupts:“INTERRUPTS”El programa principal pasa a lasubrutina de interrupción cuando ocurre un evento
Pollingbsf PORTA,1 ;Set bit 1 of
;PORTA RA<1> = 1
btfss INTCON,TMR0IF ;Check Timer0;interrupt flag
NO
;in “INTCON”;register and;skip the next;instruction if;it is set
TMR0IF = 1??
YESgoto $-1 ;Go to
;previous RA<1> = 0;instruction
bcf PORTA,1 ;Clear bit 0 of;PORTA
no interruptResetInterrupcionescode 000hgoto
Start
Mainprogram
execution
;=========================int_vector code 004h
interrupt flagset
retfieinstructionretfie
Interrupt ServiceRoutine (ISR);return from;interrupt
;=========================
Execute ISR ataddress 004h
main_prog code
Main programcode
Start ;start label for maincode
end
Habilitando Interrupciones
El Procesador debe saber queinterrupciones serán habilitadas
Un número de registros con los bits dehabilitación de interrupciones hacen esto:
Control de Interrupciones (INTCON)
Habilitador de Interrupción de Periféricos 1(PIE1)
Habilitador de Interrupción de Periféricos 2(PIE2)
Lógica de Interrupción
Interrupt
GIE
PEIE
TMR0IETMR0IF
INTEINTF
RBIERBIF
TMR2IETMR2IF
ADIEADIF
Otros Periféricos
EnableBits Description
GIE Global Interrupt Enable
PEIE Peripheral Interrupt Enable
TMRIE Timer0 Interrupt Enable
INTE External Interrupt Enable
RBIE PORTB change Interrupt Enable
FlFlagBitsBit
DDescriptioniti
TMR0IF Timer0 Overflow Interrupt Flag
INTF RB0/INT External Interrupt Flag
RBIF PORTB Change Interrupt Flag
Registro INTCON(Corazón de las Interrupciones)
Setea el uso decualquierinterrupciónSetea el uso deinterrupcioón porPeriféricos
GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF
Flags avisan dela interrupciónproducida!
Habilitando el nucleo de lasinterrupciones
Int_vect CODE 004h
Program Counter
Stack
“goto $” address
“goto $” address
INTCON
;clear external interrupt;flag to enable;further interruptsbcf
INTCON,INTF
<ISR code>retfie
Main CODE
0 0 0 0 00 1GIE
0 1INTE
0 1INTF
Start<code to set up PORTB >
; initialize INTCONclrf INTCON
;enable an external;interrupt on the INT pin
bsf INTCON,INTE
;enable global interruptsbsf INTCON,GIE
; sit here and loop forevergoto $
Interrupción de Periféricos
Dos registros Habilitan interrupcióndesde Periféricos– Peripheral Interrupt Enable 1 (PIE1)– Peripheral Interrupt Enable 2 (PIE2)
Dos registros muestran la peticiónpara una interrupción (Flags)– Peripheral Interrupt Request 1 (PIR1)– Peripheral Interrupt Request 2 (PIR2)
*Los Flags se activaran incluso si no estanhabilitadas las interrupciones!!
Enable Flag ConditionADIE ADIF ADCconversioncomplete
RCIE RCIF AUSARTreceivebufferisfull
TXIE TXIF AUSARTtransmitbufferisfull
SSPIE SSPIF 2
ICorSPIInterrupt
CCP1IE CCP1IF Timer1registercaptureorcomparematch
TMR2IE
TMR2IF Timer2valueandPR2periodvaluematch
TMR1IE
TMR1IF Timer1registerghasoverflowed
ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
RegistrosPIE1 y PIR1 *PIE1 Register (Peripheral Interrupt Enables)
ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
PIR1 Register (Peripheral Interrupt Requests)
*Check individualmente los data sheets para localizar los bits
Enable Flag Condition
OSCFIE OSCFIF SystemOscillatorFailed
C2IE C2IF Comparator2outputchanged
C1IE C1IF CComparator1t1outputttchangedhd
EEIE EEIF Writeoperationcompleted
BCLIE BCLIF 2
BuscollisionoccurredinMSSPICmode
ULPWUIE ULPWUIF
Wake-upconditionoccurred
CCP2IE CCP2IF Timer1CaptureporComparepmatchoccurred
C2IE C1IE EEIE BCLIE ULPWUIE CCP2IEOSCFIE
Registros PIE2 y PIR2 *PIE2 Register (Interrupt Enables)
C2IF C1IF EEIF BCLIF ULPWUIF CCP2IFOSCFIF
PIR2 Register (Interrupt Flags)
* Check individualmente los data sheets para localizar los bits
Int_vect CODE
Habilitando la interrupción de unperiférico (Timer 1)
004h
“goto $” address
“goto $” address
Program Counter
Stack
banksel PIR1bcf PIR1, TMR1IF
<ISR code>retfie
INTCON1 1
GIE PEIE
PIE1
0
MainStart
CODE
bankselbcf
PIR1PIR1,TMR1IF
1
bankselbsf
PIE1PIE,TMR1IE
TMR1IE
0 1
TMR1IF
PIR1
Timer1 Overflow!
bsf INTCON,PEIEbsf INTCON,GIE
<code to set up Timer1>
; sit here and loop forevergoto $
Latencia de Interrupción
Latencia de Interrupción:–
–
–
Tiempo desde que se produce lainterrupción y el PC direcciona 0004h
Interrupción sincrónica (typ. Inter.)latencia es de 3 ciclos de instrucción (Tcy)
Interrupción asincrónica (typically external)latencia es de 3 – 3.75 cyclos de instrucción
Salvando el contexto
Durante una interrupción solo essalvado el contexto:
–
–
Solo es salvado el PC (sobre el stack)
Registros son cambiados en la rutina deinterrupción.
Deben ser salvados los registros:–
–
–
–
Working (W)
Status
PCLATH (Program Counter Latch High)
Registros definidos por el usuario
Prioridad de interrupción
Los microcontroladores del PIC deRango medio tratan todas lasinterrupciones con la misma prioridad
El usuario debe hacer lo siguiente:–
–
Determine la fuente de interrupción
Determine el orden en el cual lasinterrupciones son atendidas.
INT_VECTOR CODE
Ejemplo de Prioridad deInterrupciones
0x004 ;interrupt vector location
;Save contextmovwfswapf
movwf
temp_wSTATUS,w
temp_status
;save WREG;movf affects Z bit,;use swapf instead;save STATUS register
;Check flags in order of priority
INTCON,RBIFPORTB_ISRPIR1,TMR2IFTimer2_ISRPIR2,TMR1IFTimer1_ISR
temp_status,wSTATUStemp_w,w
btfsccallbtfsccallbtfsccall
Restore_context:swapfmovwfmovfretfie
;PORTB change?
;Timer2 interrupt?
;Timer1 interrupt?
;restore STATUS reg;restore WREG;return from interrupt
Programación PIC® Avanzada Rango Medio
g
Periféricos
mc
Periféficos del Rango medio
I/O Ports
Timers (0, 1, 2)
Capture/Compare/PWM
Comparadores
ADCAUSART
I2C y SPI SerialInterfaz
I/O Revisión
Hasta 35 ports I/O– multiplexados con funciones de Periféricos
Alta capacidad de corriente 25mA
Manipulación directa de bits en un ciclo
Todos los I/O tienen protección ESD
Despues del Reset:–
–
Los pines con capacidad analógica estanactivos
Los pines I/O Digitales son configuradoscomo entradas
Registro PORTx y TRISx
Cada PORT (A, B, C, D, E) tiene un tiene unregistro de dirección TRISx
PORTB RegisterRB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
DatoConfigura Dirección del Dato
PORTB Tri-State Register (TRISB)TRISB7TRISB6TRISB5TRISB4TRISB3TRISB2TRISB1TRISB0
1 = corresponding PORTB pin is an INPUT0 = corresponding PORTB pin is an OUTPUT
Configurando entradas analógicascomo digitales
I/O’s con capacidades analógicas pordefault son analógicas sobre el reset
Configurando entradas analógicascomo digitales
Para configurar las entradas analógicas como digitalesexisten 2 vías:
1) Registro Selectros Analógico (ANSEL and ANSELH)Fara dispositivos con > 8 pines analógicos
O2)Registro ADC Control 1 (ADCON1)
Para dispositivos con < 8 pines analógicosAnalog Select Register (ANSEL)
ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0
Analog Select High Register (ANSELH)
ANS9 ANS8ANS13 ANS12 ANS11 ANS10
1 = Pin assigned as Analog Input0 = Digital I/O
ADC Control Register 1 (ADCON1)Port Configuration Bits
ADFM ADCS2 PCFG3 PCFG2 PCFG1 PCFG0
PCFG AN7
Configurando entradas analógicas paraDigital
AN1 Vdd AN0AN6 AN5 AN4 AN3 AN2<3:0>
ADC Control Register 1 (ADCON1)Port Configuration Bits
ADFM ADCS2 PCFG3 PCFG2 PCFG1 PCFG0
Inicializando Digital I/O
Inicialización PORTB– RB4 a RB7 como entrada Digital– RB0 a RB3 como salida Digital
;------------configure PORTB for digital ----------------------bankselclrfbankselclrf
PORTBPORTBANSELHANSELH
;Go to bank containing PORTB register;Initialize PORTB data;Go to bank containing ANSELH register;Set as all digital
;-----------Set up direction of each PORTB pin-----------------bankselmovlw
movwf
TRISBb’11110000’
TRISB
;Go to bank containing TRISB register;Move value to set TRISB<7:4> high and;TRISB<3:0> low into W register;Move value in W into TRISB
1
confían en bit de RBIE enINTCON
Opciones PORTB Interrupción & Pull-Up
Todos los pines del PORTB tieneinterrupción por cambio y Pull UP
Registro del Pull-Up PORTB (WPUB)
1
RB3
RB4
WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0
1 = Pull-up enabled Dispositivos sin registro WPUB0 = Pull-up disabled usan bit RBPU en el OPTION
Interrupción sobre Cambio PORTB Registro (IOCB)IOCB7 IOCB6 IOCB5 IOCB4 ICOB3 IOCB2 IOCB1 IOCB0
1 = Interrupt-on-change enabled Los dispositivos sin IOCB0 = Interrupt-on-change disabled
HIGH
LOW
Registro de Control de Interrupción (INTCON)
GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF
*PORTB debe primero ser leído/ser escrito y entonces RBIF se puedeborrado por software
g
Timers
mc
Timers
Timers son usados para:–
–
–
tiempo de referencia para eventos
contar el número de eventos
generaciáon de formas de onda etc...
PIC16F877 tiene3 timers–
–
–
Timer0
Timer1
Timer2
Timer ComparaciónTIMER0 TIMER1 TIMER2
SIZE OFREGISTER
CLOCK SOURCE
(Internal)
8-bits (TMR0)
Fosc/4
16-bits(TMR1H:TMR1L)
Fosc/4
8-bits (TMR2)
Fosc/4
T0CKI pin
Prescaler 8-bits(1:2 1:256)
On overflowFFh 00h
(TMR0IF in INTCON)
NO
T1CKI pin orTimer 1 oscillator
(T1OSC)
Prescaler 3-bits(÷1,÷2,÷4,÷8)
On overflowFFFFh 0000h
(TMR1IF in PIR1)
YES
None
Prescaler(1:1,1:4,1:8)
Postscaler(1:1 1:16)
TMR2 matchesPR2
(TMR2IF in PIR2)
NO
CLOCK SOURCE
(External )
CLOCK SCALINGAVAILABLE
(Resolution)
INTERRUPTEVENT and FLAG
LOCATION
CAN WAKE PICFROM SLEEP?
PS2 PS1 PS0TMR0RATE
0 0 0 1:2
0 0 1 1:4
0 1 0 1:8
0 1 1 1:16
1 0 0 1:32
1 0 1 1:64164
1 1 0 1:128
1 1 1 1:256
Timer 0 Diagrama en BloquesDATA BUS
Fosc/4 8
TMR0
synchronize
scaled clock
prescalerWDT out
T0CKIpin
Watchdog Timer
OPTION registerRBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
Prescaler Rate Select Bits
TMR0 ClockSource Select1 = TOCK1, 0 = Fosc/4
Prescaler Assignment1= prescaler assigned to WDT0= prescaler assigned to Timer
Source Edge Select1 = increment TMR0 on high-to-low transition0 = increment TMR0 on low-to-high transition
Timer 0 Diagrama en BloquesDATA BUS
Fosc/4 8
TMR0T0CKIpin
synchronize
scaled clock
prescalerWatchdog Timer INTCON register
TMR0IF
• Si la fuente de clock es externa puede sincronizarse(TOCKI) para el clock interno
• Timer 0 es de lectura y escritura
•Timer 0 el flag es seteado sobre undesborde del TMR0(FF to 00)
TMR0
Selects Timer 0 PrescalerClock Source value = 1:16
Timer0 InicializaciónTimer0
incrementing
0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1
01
;Make sure the Timer0 count;register (TMR0) is clear
banksel TMR0clrf TMR0
TMR0IF
;Clear Timer0 interrupt flagbcf INTCON,TMR0IF
;Setup the Option register to
INTCON
Flag on overflow
This interrupt flag will set onTimer0 overflow even ifinterrupts are disabled
;increment Timer0 from internal;clock with a prescaler of 1:16
banksel OPTION_REGmovlw b’00000011’
OPTION_REGmovwf OPTION_REG
0 0 0 0 0 0 1 1TOCS PSA
PS<2:0>Prescaler
Assignment
(External or Internal) (WDT or TMR0)
;The TMR0 interrupt is disabled, do;polling on the flag bit (TMR0IF)
btfss INTCON,TMR0IFgoto $-1
<continue>
T1CKPS1 T1CKPS0 scale
1 1 1:8
1 0 1:4
0 1 1:2
0 0 1:1
Timer1 Diagrama en Bloques
T1OSC
T1OSI
T1OS0prescaler
synchronize
Fosc/4
TMR1H TMR1LT1CKIpin
Timer1 Control Register (T1CON)
Enable
TMR1ON
T1GINV TMR1GE T1CKPS1T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
LP Oscillator Enable1 = T1OSC selected0 = T1CKI can be used
Timer1 On1 = Enable Timer1
Clock Source Select1 = External (T1CKI)0 = Internal (FOSC/4)
Timer1 Diagrama en Bloques
T1OSC
T1OSI
T1OS0prescaler
synchronize
Fosc/4
TMR1H TMR1LT1CKIpin
Timer1 Control Register (T1CON)
Enable
TMR1ON
T1GINV TMR1GE T1CKPS1T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
Timer1 External Clock Input Synchronization1 = do not synchronize external clock input0 = synchronize external clock input with
internal clock (Fosc/4)
Timer1 Gate Enable andTimer1 Gate Invert areavailable on some devices
Timer1 Setup de InterrupciónTMR1H TMR1LMain Code
;Start by clearing the Timer1 interrupt flagbanksel PIR1bcf PIR1, TMR1IF
;Enable Timer1 interruptbanksel PIE1bsf PIE1, TMR1IE
PIR1
PIE1
01
TMR1IF
1;Enable Global and Peripheral Interrupts TMR1IE
bsfbsf
INTCON, PEIEINTCON, GIE INTCON
1 1
GIE PEIE
Timer1 InicializaciónTMR1H
;Make sure the TMR1 registers are clearbanksel TMR1Hclrf TMR1Hclrf TMR1L
;Make sure the TMR1IF flag in PIR1;is cleared
banksel PIR1
PIR1 (Peripheral Interrupt Request)
0 0 0 0 0 0 0 01
TMR1IF
bcf PIR1,TMR1IF
;Setup T1CON register for internal clock;with 1:8 prescaler, Timer1 is stopped;and T1 osc is disabled
movlw b’00110000’movwf T1CON
T1CON (Timer1 Control)
0 0 1 1 0 0 0 1 0;Start Timer1 incrementing
bsf T1CON, TMR1ON
Input clockprescale bits(T1CKPS<1:0>)
;The TMR1 interrupt is disabled, do;polling on the Timer1 flag bit
btfss PIR1, TMR1IFgoto $-1
TMR1ON
Clock sourceselect bit(TMR1CS)
Timer1oscillatorenable bit(T1OSCEN)
T2CKPS1 T2CKPS2 Scale
0 0 1:1
0 1 1:4
1 X 1:16
Timer2 Diagrama en Block
Prescaler1:1, 1:4, 1:16Fosc/4
TMR2
COMPARATOR
TMR2OUTPUT
Postscaler1:1 1:16
PR2
Timer2 Control Register (T2CON)
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Timer2 ON1 = Timer2 enabled
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 SCALE
0 0 0 0 1:1
0 0 0 1 1:2
0 0 1 0 1:3
0 0 1 1 1:4
0 1 0 0 1:5
0 1 0 1 1:6
0 1 1 0 1:7
0 1 1 1 1:8
1 0 0 0 1:9
1 0 0 1 1:10
1 0 1 0 1:11
1 0 1 1 1:12
1 1 0 0 1:13
1 1 0 1 1:14
1 1 1 0 1:15
1 1 1 1 1:16
T2CKPS1 T2CKPS2 Scale
0 0 1:1
0 1 1:4
1 X 1:16
Timer2 Diagrama en Block
TMR2OUTPUT
Fosc/4
Postscaler1:1 1:16COMPARATOR
Timer2 Control Register (T2CON)
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Timer2 ON1 = Timer2 enabled
Timer2 Diagrama en Block
Prescaler1:1, 1:4, 1:16Fosc/4
Start Timer2Counting
TMR21 1 1 1 0 1 1 0 1 0 0 1
COMPARATOR
TMR2OUTPUT
Postscaler1:1 1:16
1PIR1Load Period
Register
PR21 1 1 1 1 0 0 0
Timer2 Control Register (T2CON)
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
TMR2IF
Flag set on firstmatch with
postscaler = 1:1
Timer2Incrementing
TMR2 (Timer2 Counter);Disable the Timer2 interrupts in the PIE1;register. Make sure the Timer2 interrupt;flag in PIR1 is cleared.
banksel PIE1bcf PIE1,TMR2IEbanksel PIR1
PIE1 (Peripheral Interrupt Enable)
0TMR2IE
PIR1 (Peripheral Interrupt Request)
01TMR2IF
Flag is set
T2CON (Timer2 Control)
0 1 1 1 0 0 1 1 0
bcf PIR1,TMR2IF;Setup T2CON register for Postscaler = 1:15,;Prescaler = 1:16, Timer2 off
movlw b’01110010’movwf T2CON
;Make sure the TMR2 register is clearbanksel TMR2clrf TMR2
;Load the Period registerbanksel PR2movlw b’10000000’movwf PR2
;Start Timer2 incrementing g
bankselbsf
T2CONT2CON,TMR2ON
Postscaler = 1:15(TOUTPS<3:0>)
TMR2ON
Prescaler = 1:16(T2CKPS<1:0>)
;The Timer2 interrupt is disabled, do;polling on the Timer2 interrupt flag
btfss PIR1,TMR2IFgoto $-1
g
MóduloCapture/Compare/PWM
mc
Captura/Compara/PWM
Captura– Temporiza la duración de un evento externo aplicado a una
entrada
Compara– Cambia un pin de salida o genera una interrupción cuando una
cantidad de tiempo especificado ha pasado
Pulso modulado en ancho(PWM)– Crea una señal de indas cuadrada de frecuencia fija y período
variable– Provee características mejoradas para la conexión de varios
puentes
* Modulo interfaces con Timers 1 y 2
BIT FUNCTION
CCP1M<3:0>CCP1M3:0
CCPModeSelectBitsconfigurethemoduleasInputCapture,OOutputttCompare,CorPWM
CCP1<X:Y> PWMdutycycle2LSB’s(8MSB’slocatedinCCPR1L)
P1M<1:0>ThesePWMoutputconfigurationbitsareavailableforEnhancedCCP(ECCP)modulesonly.Theyprovidehalf-bridgeorfull-bridgeoutputsteeringcontrol.
CCP Registro de ControlP1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCP1 Control Register (CCP1CON)
CCPxM CCPxM2 CCPxM1 CCPxM0 CCPModeSelectedFUNCTION
0 0 0 0 Capture/Compare/PWMoff(resetsCCPmodule)
0 0 0 1 Unused(reserved)
0 0 PWM1duty
20 (8MSB’sComparelocatedmode,intoggleCCPR1L)outputonmatch
0 0 1 1 Unused(reserved)
0 1 0 0 Capturemode,everyfallingedge
0 1 0 1 Capturemode,everyrisingedge
0 1 1 1 Capturemode,every16thrisingedge
1 0 0 0 Comparemode,setoutputonmatch
1 0 0 1 Comparemode,clearoutputonmatch
1 0 1 0 CComparemode,generatesoftwarefinterruptonmatch
1 0 1 1 Comparemode,triggerspecialevent
1 1 x x PWMmode
CCP Registro de Control
P1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0CCP1 Control Register (CCP1CON)
Modo Captura
CCPx
TMR1H
Prescaler÷1 1, 4 4, 16
Edge Detectand
CCPxIF in PIRx
TMR1L
Single Buffered
System Clock (Fosc)
CCPRxH CCPRxL
P1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
CCPxCON
CCP1Pin
01
4 3 2 1 th rd st
Detected!!
Captura InicializaciónTMR1H
0 0 0 0 0 0 0 0TMR1L
TIMER1 INCREMENTING!!CCPR1H
0 Current 0 Timer10 Value 0 0 0 0 0
;Turn off CCP modulebanksel CCP1CONclrf CCP1CON
;Make sure Timer1 is offbcf T1CON,TMR1ON nd
;Clear Timer1 registers Rising Edgeclrf TMR1Hclrf TMR1L
Captured!
01CCP1IF
CCPR1L
PIR1
CCP1CON
00000 00 11 0
;Disable all interrupts for CCPbcf PIR1,CCP1IFbanksel PIE1bcf PIE1,CCP1IE
;Set CCP1 pin for inputbsf TRISC,2
;Set Capture for every 4th rising edgebanksel CCP1CON
T1CON
movlwmovwf
b’00000110’CCP1CON
0 1TMR1ON
;Start Timer1 incrementingbsf T1CON,TMR1ON
;Test the interrupt flag for capturebtfss PIR1,CCP1IFgoto $-1
CCPxM3 CCPxM2 CCPxM1 CCPxM0 MODE
1 0 =0
0 SetoutputonOUTPUTmatch(CCPxIFisset)
1 0 0 1 Clearoutputonmatch(CCPxIFisset)
1 0 1 0 Generatesoftwareinterruptonmatch(CCPxIFissetCCP1pinunaffected)
1 01
CCPRxL
1
Triggerspecialevent(CCPxIFisset,CCP1resetsTMR1orTMR2andstartsanA/Dconversionif
enabled)SpecialEvent
Modo Compara
CCPxIF in PIRxTMR1H TMR1L
COMPARATOR NO
Trigger
P1M1 P1M0 CCP1X CCP1Y CCP1M3CCP1M2CCP1M1CCP1M0
TMR1HCompara Inicialización
;Turn off the CCP modulebanksel CCP1CONclrf CCP1CON
;Turn off Timer1bcf T1CON,TMR1ON
;Clear Timer1 result registersclrf TMR1H
0
0
0
0
0
0
0
0
0
0
0
0
CCPR1H
1 0CCPR1L
0 0
T1CON
1 0
clrf TMR1L;Disable CCP1 interrupt and make sure;its flag is clear
banksel PIE1bcf PIE1,CCP1IEbanksel PIR1bcf PIR1,CCP1IF
;Make CCP1 pin outputbankselbcf
TRISCTRISC,2
;Initialize Compare to set output on matchbanksel CCP1CON
TMR1ONCCP1CON
00000 0 01 0
movlw b’00001000’movwf CCP1CON
;Load Compare value into CCPR1H:CCPR1L
PIR1
1 0
bankselmovlw
CCPR1Hb’10000000’
movwf CCPR1H
CCP1IF
clrf CCPR1L;Start Timer1 incrementing
bsf T1CON,TMR1ON;Test CCP1IF for Timer1 match with CCPR1x
btfssgoto
PIR1,CCP1IF$-1
Register Description
PR2 PeriodRegister
T2CON Timer2Control
CCPRCCPRxLL
2DDutytCCyclelRRegistersit
CCPxCON 2CCPControlRegisters
Modo PWM
Genera un pulso modulado en su ancho(PWM) sobre los pines CCP1 y CCP2
El Duty cycle, periodo y resolucion estandeterminados por los siguientes registros
CCPR1L VALUE
PWM Diagrama en Block
CCP1<X:Y>
Period 1 Period 2
CCPR1H LATCH
BUFFERDOUBLE 10
CCP1 Output PinTMR2 = CCPR1H
10
COMPARATORPeriodStart
RLatch
S
(1) 0 1
CCP1pin
Reset to 0’s
10
TMR2incrementing
8
COMPARATORTMR2 = PR2
8
PR2
Note (1): TMR2 is concatenated with the2-bit FOSC, or 2-bits from Prescalerto create 10-bit time base
T2CON
CCPR1L
0 0 0 1 1 1 1 1
PWM InicializaciónTMR2
;Turn off CCP1 pin by setting TRISC bit HIGH 0 0 0 0 0 0 0 0banksel TRISC
bsf TRISC, 2 ;configure pin as input PR2
;Clear Timer2 0 1 1 1 1 1 1 1
CCP1CON
0 0 1 0 1 1 0 0
banksel TMR2clrf TMR2
;Set up Period and Duty Cyclemovlwmovwfmovlwmovwf
b’01111111’PR2b’00011111’CCPR1L
;;Load a Period Value;;Load Duty Cycle Value
duty cycle PWM ModeLSBs CCP1M <3:0>
CCP1<X:Y>
0 0 0 0 0 1 0 0
;Configure CCP module for PWM;and LSB’s of Duty Cycle = b’10’movlw b’00101100’movwf CCP1CON
;Turn CCP1 pin back on (make it an output)
Prescaler bitsTOUTPS<3:0>
Prescaler bitsT2CKPS<1:0>
TMR2ON
banksel TRISCbcf TRISC,2
;Start the PWM by turning on Timer2;Configure Prescaler and Postscaler to 1:1)movlw b’00000100’movwf
T2CON
g
Comparadores
mc
Comparadores RevisiónMódulo Comparador:
– Compara una voltaje analógico de entradacon una referencia y genera un estado desalida
Vref
Output(Vout)
Analog Input(Vi in)
Reference Voltage(Vref)
Vin
+Comp
-Vout
VREF+
CVREF DD
8R R R R RVRSS = 1 VRR
Voltaje de Refencia del Comparador
El Voltaje de referencia puede ser:– Externo desde un pin de un dispositivo– Internamente generado por el Generador de
Refencia internoProvee 16 Voltaje seleccionables desde ) a 75% de VDD
–
Algunos dispositivos tienen refencia fija (0.6V)– Independiente de VDD
8R
VRSS = 0
15
0
VREN
V
To Comparatorsand ADC Module
CVREF
VROE
4 VR<3:0>
VREF-
VRSS = 1
VRSS = 0
Comparador Interrupciones
Una interrupción ocurre cuando cambiala salida de un comparador– Algunos dispositivos comparten un Flagpara ambos comparadores
– Lgunos Dipositivos tienen Flagsindependientes
Debe leer la salida del comparador antesde borrar el flags de interrupción– Las salidas se encuentran en el registro decontrol del comparador (CMCON oCMxCON0)
Comparadores y Modo Sleep
Comparadores permanecen activos enmodo Sleep– Una cambio en una salida del comparadordespierta al nucleo
Despues de un despertar , lainstrucción siguiente a la instrucciónSLEEP o un Servicio de Interrupción(ISR) es ejecutado
g
Conversor Analógico aDigital (ADC)
mcmc
ADC Revisión
Módulo conversor ADC–
–
–
Convierte una señal analógica de entrada en unvalor binario de 8 o 10-bit
Voltaje de refencia interno o externoseleccionable
Una interrupción puede ser generada despuésque ha finalizado una conversión
La interruopción puede despertar al PIC del SLEEP
ADCAnalogInput
DigitalOutput
BIT FUNCTION
ADCS<1:0> A/DConversionClockSelectbitsUUsewithithADCS2iinADCON1
CHSxbits AnalogChannelSelectbits
GO/DONE 1=A/DConversioninprogress0=A/DConversioniscompleted
ADON EnablestheADCmodule
ADCS1 ADCS0 CHS2 CHS1 ADON
ADC Registro de controlEl ADC tiene implementado 2 registros decontrol– ADCON0 y ADCON1– Dispositivos con > 8 entradas analógicas no tienen
los mismos bits mostrados abajo
ADC Control Register 0 (ADCON0)CHS0 GO/DONE
BIT FUNCTION
ADFM ADCResultRegistersFormatbit1=RightJustified,0=LeftJustified
ADCS2 A/DConversionClockSelectbitUsewithADCS<1:0>inADCON0
PCFG<3:0> PortConfigurationBitsConfiguresI/Oasanalogordigital
ADC Registro de controlEl ADC tiene implementado 2 registros decontrol– ADCON0 y ADCON1– Dispositivos con > 8 entradas analógicas no tienen
los mismos bits mostrados abajo
ADC Control Register 1 (ADCON1)ADFM PCFG3 PCFG0PCFG2 PCFG1ADCS2
ADCRegistro de Resultado
10 bit ADC el reultado es almacenado en dosregistros
–
–
ADRESH y ADRESL
Justificado a la Izquierda o a la DerechaDeterminado por el Bit Selector de Formato (ADFM) en el registro ADCON1
ADRESHMSB
ADRESLLSB
Justificado a la Izquierda (ADFM = 0)
ADRESH ADRESLMSB LSB
Justificado a la derecha (ADFM = 1)
Diagrama del Módulo ADC
Conversionclock scalerFosc
ADC
HoldingCapacitor
AN0
AN1
AN2
AN3
AN4
AN5
AN6
AN7
VREF+
pinStart ConversionConversion Complete
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1ADRESH ADRESL
Left Justified Right JustifiedVREF-
pin
ADCON0
Vss
ADCS1 ADCS0 CHS2 CHS1 CHS0 ADONGO/DONE
PCFG3 PCFG2 PCFG1 PCFG0
ADCON1
ADFM ADCS2
PCFG AN7 AN6 AN5 AN4 AN3
Diagrama del Módulo ADCAN2
Conversion
Port Config Bits
AN1 Vdd AN0<3:0>
Fosc clock scaler
ADC
HoldingCapacitor
AN0
AN1
AN2
AN3
AN4
AN5
AN6
AN7
VREF+
pinStart ConversionConversion Complete
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1ADRESH ADRESL
Left Justified Right JustifiedVREF-
pin
ADCON0
Vss
ADCS1 ADCS0 CHS2 CHS1 CHS0 ADONGO/DONE0 0 0 1
PCFG3 PCFG2 PCFG1 PCFG0
ADCON1
ADFM ADCS21 0
Timing consideraciones para el ADC
Cuando un canal A-a-Desseleccionadolleva un tiempo para queel capacitor de HOLD sea cargado
Todas las conversiones de 10 bit llevan11 cyclos para completarse
El usuario debe seleccionar lasincronización apropiada del ADCbasada en la frecuencia de reloj desistema
g
UART Direccionable(AUSART)
mcmc
AUSART Revisión
Comunicaciones I/O serie con Periféricos– Antiguamente se la denominaba Unidad de
Comunicaciones Serie(SCI)
Funciones Principales:– Puede ser sincrónica o asincrónica– Puede recibir y transmitir
Full-duplex asincrónica transmite y recibeHalf-duplex sincrónica Master o eslave
Ciomunmente usada– RS-232 para comunicarse con la PC
Necesita Driver para RS-232
Características Mejoradas(EUSART)permite interface con un sistema de bus Redde Area Local (LIN)
AUSART RegistrosRegistro generador de Baud rate– SPBRG (8 bit para AUSART)– SPBRG y SPBRGH (16 bit para EUSART)
Transmisor status y control– TXSTA
Receptor status y control– RCSTA
Transmisor Regitro data– TXREG
Receptor Registro data– RCREG
Bit Function
CSRC ClockSourceSelect1=MasterMode(clockgeneratedinternallyfromBRG)0=SlaveMode(clockfromexternalsource)
TX9 Ninthbittransmissionenable
TXEN TransmitEnablebit,1=Txenabled,0=Txdisabled
SYNC AUSARTMode,1=SynchronousMode,0=AsynchronousMode
SENB ForEUSARTonly1=Sendsyncbreakcharacterbit0=Syncbreaktransmissioniscompleted
BRGH BBauddRRatetSSelect,lt1=HiHighhSSpeed,d0=LLowSSpeedd
TRMT TransmitShiftRegister(TSR)status1=TSRempty,0=TSRisfull
TX9D Ninthbitoftransmitdata
Registro TXSTA
CSRC TX9 TXEN SYNC SENB BRGH TRMT TX9D
Bit Function
SPEN SerialPortEnable1=Serialportenabled(configuresRX/DTandTX/CKpinsasserialportpins)0=Serialportdisabled
RX9 1=Enable99-bitbitdatareception,0=88-bitbitdata
SREN Synchronousmode(Master),1=enablesingleRx,0=disablesingleRx
CREN ContinuousReceiveEnable,1=enable,0=disable
ADDEN AddressDetectEnablebit1=enable(enableinterruptandloadtheRxbufferwhenRSR<9>isset)th
0=disableanduse9bitforparity
FERR 1=framingerroroccurred(Stopbitnotdetected)
OERR 1=Overrunerroroccurred(FIFOwasstillfullwhenotherdatawasloaded)
RX9D Ninthbitofreceiveddata
Registro RCSTA
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
Transmisor Diagrama en Bloques
DATA BUS TXIETXREG
TXIF
Interrupt
TXENMSB
Set TXIFLSB
Transmit ShiftRegister (TSR)
Clear TXIF
Pin Bufferand Control
SPEN
TX/DTpin
Baud RateGenerator
TRMT
Enables SerialPort
Set TRMT bit Indica registro dedesplazamiento esta vacio
Clear TMRT bitTSR tiene datos en él
TX9D TX9
Ninth data bit
Receptor Diagrama en BlockEnable Serial Port
SPEN
Pin Bufferand Control
DataRecovery
START
RX9
Receive Shift Register (RSR)
STOPRX/DTpin
FIFOBaud RateGenerator
Set RCIF flagClear RCIF flag
RCIERCREG
RX9DRCIF
Data BusInterrupt
g
MASTER SYNCHRONOUSSERIAL PORT (MSSP)
mc
MSSP RevisiónEl MSSP puede operar en uno de estos dos modos:
– SPI (Serial Peripheral Interface)Usa 3 pins
– Serial Data Out (SDO)– Serial Data In (SDI)– Serial Clock (SCK)
– I2C (Inter-Integrated Circuit)Modo Full Master
Modo Slave (con dirección de llamada general)Usa 2 pins– Serial Clock (SCL)– Serial Data (SDA)
El Registro de Control MSSP (SSPCON)
determina en qué modo usted está.
Cubriremos solo Modo I2C
I2C Condiciones
SDA
SCL
pulled
Condiciones :– START (S)
– STOP (P)
SDA released LOWwhile SCL isstill HIGH
– ACKNOWLEDGE (A)
SDA SDA goes LOWby a9th Start pulse
Stop condition quickly during followedLOW clock condition of SCL
–
–
REINICIA (R)
NEGATIVO o NO -ACKNOWLEDGE (N)
SLAVESTARTADDRESS
Leer un IC EEPROM Externo
MASTER
+5V
SCL
SDA
WRITEADDRESS
READ GOTO STOPDATA MODE
BUSY BUSY
LISTEN LISTEN
Esclavo
LISTENEEPROM
DATAACK
PIC
EEPROMRESTARTADDRESS
STOP ACK NACK MEMORY
CKE 2
NotusedinICmode
BF TheSSPBUFregisterisfull
2
UA BF
CONTROL BITS
1 of 3: MSSP Status Register (SSPSTAT)SMP CKE D/A P S R/W
DETECTION BITS (FLAGS)
BIT FUNCTION
WCOL WriteCollisionDetected
SSPOV AwritetotheSSPBUFbeforepreviousvalueprocessed
SSPEN EnablesMSSPmodule
CKP Enablesclock
SSPM3 ModeSelectBit
SSPM2
SSPM1
SSPM0
2
2 of 3: MSSP Control Register 1 (SSPCON)WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0
CONTROL BITS DETECTION BITS (FLAGS)
SSPM3 SSPM2 SSPM1 SSPM0 Mode
0 0 0 0 SPIMastermode,clock=FOSC/4
0 0 0 1 SPIMastermode,clock=FOSC/16
0 0 1 0 SPIMastermode,clock=FOSC/64
0 0 1 1 SPIMastermode,clock=TMR2output/2
0 1 0 0 SPISlavemode,,clock=SCKpin,p,SSppincontrolenabled
0 1BIT
0 1 SPISlavemode,clock=SCKpin,SSpincontroldisabled,SScanbeusedasFUNCTIONI/Opin
0 WCOL1
1 0 I2CSlaveWritemode,Collision7-bitaddressDetected
0 1 1 1 I2CSlavemode,10-bitaddress
1 0 0 0 I2CMastermode,clock=FOSC/(4*(SSPADD+1))
1 0 0 1 Reserved
1 0 1 0 Reserved
1 0 1 1 I2CfirmwarecontrolledModeSelectMasterBitmode(Slaveidle)
1 1 0 0 Reserved
1 1 0 1 Reserved
1 1 1 0 I2CSlavemode,7-bitaddresswithStartandStopbitinterruptsenabled
1 1 1 1 I2CSlavemode,10-bitaddresswithStartandStopbitinterruptsenabled
MSSP Registros de Control(I C mode)2
BIT FUNCTION
GCEN Generatesaninterruptpwhenacallisreceived(slave(mode))
ACKSTAT 0=Acknowledgereceivedfromslave(transmitmode)
ACKDT 0=ACK1=NACK(receivemode)
ACKEN InitiateACK/NACKcondition(TransmitsACKDTbit)
RCEN Enablesreceivemode
PEN InitiatesIititaSTOPconditionditi
RSEN InitiatesaRESTARTcondition
SEN InitiatesInitatesaaSTARTSTARTconditioncondition
GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN
2
3 of 3: MSSP Control Register 2 (SSPCON2)
CONTROL BITS DETECTION BITS (FLAGS)
Tx/Rx Buffer (SSPBUF)
Registro Buffer contiene el datoTx y Rx– SSPBUF interfaces para el registro de
desplazamiento (SSPSR) pra desplazar el datode salida
Cuando se llena, el bit Buffer Full (BF) en elregistro SSPSTAT es seteado
Cualquier escritura al SSPBUF durante laTx/Rx del dato es ignorada, y el bit detectorcolision de escritura (WCOL) del SSPCONes seteado
I2C Registro deDirección (SSPADD)
–
–
–
Modo Slave:Contiene la dirección del PICSlaveComparado contra el valor recibido
Modo Master:Usado para calcular la velocidad declock(BAUD rate) del sistema I2C.
Fosc
4×(SPADD+1)BAUD RATE =
*NOTE: FOSC es la frecuencia del oscilador NOel clock de la instrucción TCY
MSSP Interrupciones
El flag interruptor del MSSP (SSPIF) esseteado en el PIR1 register con lossiguientes eventos:
–
–
–
–
–
Condición START
Condición STOP
Tx or Rx completa
Petición de transmisión
Condición RESTART
Fuentes
Visite www.microchip.com para:
– 24/7 Soporte técnico– Application Notes– Web Seminars– Codigo ejemplo– Datasheets– y Mucho mas!