Mc Programación PIC Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio...

101
mc Programación PIC® Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler

Transcript of Mc Programación PIC Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio...

Page 1: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

mc

Programación PIC® Avanzada Rango Medio

Programación Microcontroladores

Familia de Rango Medio Configuración de Periféricos

Programación Assembler

Page 2: 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

Page 3: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 4: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 5: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 6: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Programación PIC® Avanzada Rango Medio

Familia de Rango MedioArquitectura Básica y

Herramientas deDesarrollo

mc ®

Page 7: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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 8: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 9: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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–

Page 10: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 11: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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.)

Page 12: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 13: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 14: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Programación PIC® Avanzada Rango Medio

Herramientas deDesarrollo

mcmc

Page 15: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

MPLAB® IDE

MPLAB® IDE (Integrated DevelopmentEnvironment)

Integrates different Microchip and thirdparty tools

Code Editor

Cross Compilers

Assemblers

Simulators, In-Circuit Debuggers, Emulators

Programmers

Page 16: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

MPLAB® IDE

MPLAB® IDE (Integrated DevelopmentEnvironment)

Integrates different Microchip and thirdparty tools

Code Editor

Cross Compilers

Assemblers

Simulators, In-Circuit Debuggers, Emulators

Programmers

Page 17: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 18: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 19: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Programación PIC® Avanzada Rango Medio

g

Interrupciones

mc

Page 20: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 21: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 22: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 23: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 24: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Lógica de Interrupción

Interrupt

GIE

PEIE

TMR0IETMR0IF

INTEINTF

RBIERBIF

TMR2IETMR2IF

ADIEADIF

Otros Periféricos

Page 25: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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!

Page 26: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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 $

Page 27: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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!!

Page 28: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 29: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 30: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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 $

Page 31: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 32: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 33: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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.

Page 34: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 35: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Programación PIC® Avanzada Rango Medio

g

Periféricos

mc

Page 36: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Periféficos del Rango medio

I/O Ports

Timers (0, 1, 2)

Capture/Compare/PWM

Comparadores

ADCAUSART

I2C y SPI SerialInterfaz

Page 37: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 38: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 39: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Configurando entradas analógicascomo digitales

I/O’s con capacidades analógicas pordefault son analógicas sobre el reset

Page 40: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 41: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 42: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 43: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 44: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

g

Timers

mc

Page 45: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 46: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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?

Page 47: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 48: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 49: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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>

Page 50: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 51: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 52: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 53: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 54: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 55: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 56: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 57: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 58: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

g

MóduloCapture/Compare/PWM

mc

Page 59: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 60: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 61: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 62: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 63: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 64: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 65: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 66: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 67: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 68: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 69: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

g

Comparadores

mc

Page 70: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 71: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 72: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 73: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 74: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

g

Conversor Analógico aDigital (ADC)

mcmc

Page 75: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 76: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 77: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 78: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 79: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 80: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 81: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 82: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

g

UART Direccionable(AUSART)

mcmc

Page 83: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 84: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 85: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 86: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 87: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 88: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 89: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

g

MASTER SYNCHRONOUSSERIAL PORT (MSSP)

mc

Page 90: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 91: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 92: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 93: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 94: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 95: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 96: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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)

Page 97: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 98: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 99: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

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

Page 100: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.

Fuentes

Visite www.microchip.com para:

– 24/7 Soporte técnico– Application Notes– Web Seminars– Codigo ejemplo– Datasheets– y Mucho mas!

Page 101: Mc Programación PIC  Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio Configuración de Periféricos Programación Assembler.