Professional Documents
Culture Documents
Mid Range Family Peripheral Configuration and Assembly Programming
Mid Range Family Peripheral Configuration and Assembly Programming
201ASP
v8.0
JanuarySlide
20071
Objectives
z
201ASP
Slide 2
Assembler programming
Basic Mid-Range family Instruction set
Data and Program memory organization
MPLAB Integrated Development Environment
Microchip ICD2 debugger
201ASP
Slide 3
201ASP Agenda
z
Interrupts Lab
Peripheral discussion:
Input/Output Ports
Timers
z Timer0
z Timer1
Timer1 Lab
z Timer2
Timer2 Lab
201ASP
Slide 4
Analog Comparator
ADC Lab
z I 2C
201ASP
Slide 5
201ASP
v8.0
JanuarySlide
20076
STATUS
PROGRAM COUNTER
REGISTER
MUX
ADC
ALU
TIMER0
14-bits
INSTRUCTION REGISTER
WORKING
REGISTER
AUSART
MSSP
PERIPHERALS
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 7
Program Memory
z
Maximum 8K words
Reset Vector
201ASP
0000h
0005h
07FFh
Page 1
0800h
0FFFh
Page 2
1000h
17FFh
Page 3
1800h
1FFFh
Slide 8
13-bit PC
PCL
PC<12:0>
Stack Level 1
PUSHES
Stack Level 8
CALL/Interrupt
Program Memory
POPS
RETURN, RETFIE,RETLW
201ASP
Slide 9
Special
Function
Registers 01Fh
Special
Function
Registers
020h
128
Bytes
General
Purpose
Registers
080h
SFR
09Fh
0A0h
General
Purpose
Registers
General
Purpose
Registers
0EFh
07Fh
Bank 0
Shared
Shared
0FFh
Bank1
100h
10Fh
110h
General
Purpose
Registers
1EFh
16Fh
Shared
Shared
Bank2
201ASP
SFR
180h
18Fh
190h
17Fh
Shared
Shared
1FFh
Bank3
Slide 10
PORTB
PORTC
PORTD
PORTE
PCLATH
INTCON
PIR1
PIR2
Bank0
201ASP
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
TRISB
TRISC
TRISD
TRISE
PCLATH
INTCON
PIE1
PIE2
86h
87h
88h
89h
8Ah
8Bh
8Ch
8Dh
Bank1
Slide 11
Status Register
IRP
RP1 RP0
TO
PD
Contains:
RP1
RP1
0
0
1
1
DC
RP0
RP0
0
1
0
1
BANK0
BANK1
BANK2
BANK3
201ASP
Slide 12
bcf
bcf
bsf
bsf
btfsc
btfsc
btfss
btfss
addlw
addlw
andlw
andlw
call
call
clrwdt
clrwdt
goto
goto
iorlw
iorlw
movlw
movlw
retfie
retfie
retlw
retlw
return
return
sleep
sleep
sublw
sublw
xorlw
xorlw
201ASP
Bit
Bit Oriented
Oriented Operations
Operations
f,b
Bit Clear
Clear ff
f,b Bit
f,b
f,b Bit
Bit Set
Set ff
f,b
f,b Bit
Bit Test
Test f,f, Skip
Skip ifif Clear
Clear
f,b
f,b Bit
Bit Test
Test f,f, Skip
Skip ifif Set
Set
Literal
Literal and
and Control
Control Operations
Operations
kk
Add
Add literal
literal and
and W
W
kk
AND
AND literal
literal with
with W
W
kk
Call
Call subroutine
subroutine
-Clear
Clear Watchdog
Watchdog Timer
Timer
kk
Go
Go to
to address
address
kk
Inclusive
Inclusive OR
OR literal
literal with
with W
W
kk
Move
Move literal
literal to
to W
W
-Return
Return from
from interrupt
interrupt
kk
Return
Return with
with literal
literal in
in W
W
-Return
Return from
from Subroutine
Subroutine
-Go
Go into
into standby
standby mode
mode
Subtract
kk
Subtract W
W from
from literal
literal
kk
Exclusive
Exclusive OR
OR literal
literal with
with W
W
Slide 13
PICmicro Development
Tools
201ASP
v8.0
January
Slide
2007
14
MPLAB IDE
MPLAB IDE (Integrated Development
Environment)
z Integrates different Microchip and third
party tools
z
Code Editor
Cross Compilers
Assemblers
Simulators, In-Circuit Debuggers, Emulators
Programmers
201ASP
Slide 15
MPLAB IDE
MPLAB IDE (Integrated Development
Environment)
z Integrates different Microchip and third
party tools
z
Code Editor
Cross Compilers
Assemblers
Simulators, In-Circuit Debuggers, Emulators
Programmers
201ASP
Slide 16
201ASP
Slide 17
LEDs
16 x 2 LCD
Module
RS232
Connector
Analog Pot
Push button
Switches
I2C Based
Temp Sensor
201ASP
Slide 18
Interrupts
201ASP
v8.0
January
Slide
2007
19
Polling:
z
Interrupts:
z
201ASP
Slide 20
Polling
bsf
PORTA,1
;Set bit 1 of
;PORTA
$-1
;Go to
;previous
;instruction
bcf
PORTA,1
;Clear bit 0 of
;PORTA
201ASP
RA<1>
RA<1>==11
NO
TMR0IF
TMR0IF==11
??
??
YES
RA<1>
RA<1>==00
Slide 21
Interrupts
Reset
code
goto
;=========================
int_vector code 004h
Interrupt Service
Routine (ISR)
retfie
;return from
;interrupt
;=========================
main_prog
no interrupt
000h
Start
Main
Main
program
program
execution
execution
retfie
instruction
interrupt flag
set
Execute
ExecuteISR
ISRat
at
address
address004h
004h
code
end
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 22
Enabling Interrupts
z
201ASP
Slide 23
Interrupt Logic
TMR0IE
TMR0IF
Interrupt
INTE
INTF
RBIE
RBIF
TMR2IE
TMR2IF
GIE
ADIE
ADIF
PEIE
Other peripherals
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 24
INTCON Register
(Core Interrupts)
Enable Bits
Description
GIE
PEIE
TMRIE
INTE
RBIE
GIE
Description
TMR0IF
INTF
RBIF
201ASP
Slide 25
Main
Start
goto $ address
Program Counter
goto $ address
Stack
INTCON
0 0 0
1
CODE
<code to set up PORTB >
GIE
; initialize INTCON
clrf
INTCON
0
1
INTE
0
1
INTF
Interrupt detected
on RB0/INT Pin!!
;enable an external
;interrupt on the INT pin
bsf
INTCON,INTE
;enable global interrupts
bsf
INTCON,GIE
; sit here and loop forever
goto
$
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 26
Peripheral Interrupts
z
201ASP
Slide 27
RCIE
TXIE
SSPIE
Enable
RCIF
TXIF
SSPIF
Flag
Condition
ADIE
ADIF
RCIE
RCIF
TXIE
TXIF
SSPIE
SSPIF
CCP1IE
CCP1IF
TMR2IE TMR2IF
TMR1IE TMR1IF
201ASP
Slide 28
C2IE
C1IE
EEIE
BCLIE ULPWUIE
CCP2IE
Enable
C2IF
C1IF
EEIF
Flag
BCLIF ULPWUIF
CCP2IF
Condition
OSCFIE
OSCFIF
C2IE
C2IF
C1IE
C1IF
EEIE
EEIF
BCLIE
BCLIF
ULPWUIE
ULPWUIF
CCP2IE
CCP2IF
201ASP
Slide 29
Int_vect CODE
Main
Start
banksel PIR1
bcf
PIR1, TMR1IF
goto $ address
<ISR code>
retfie
goto $ address
PIR1
PIR1,TMR1IF
PIE1
PIE,TMR1IE
bsf
bsf
INTCON,PEIE
INTCON,GIE
Stack
INTCON
1 1
0
CODE
banksel
bcf
banksel
bsf
Program Counter
GIE PEIE
PIE1
1
TMR1IE
PIR1
0
1
Timer1 Overflow!
201ASP
TMR1IF
Slide 30
Interrupt Latency
z
Interrupt Latency:
201ASP
Slide 31
Context Saving
z
During an interrupt:
Working register
Status
PCLATH (Program Counter Latch High)
User defined registers
201ASP
Slide 32
Interrupt Priority
z
201ASP
Slide 33
0x004
;Save context
movwf temp_w
swapf STATUS,w
;save WREG
;movf affects Z bit,
;use swapf instead
;save STATUS register
movwf
temp_status
;Check
btfsc
call
btfsc
call
btfsc
call
Restore_context:
swapf temp_status,w
movwf STATUS
;restore STATUS reg
movf
temp_w,w
;restore WREG
retfie
;return from interrupt
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 34
Interrupt
Hands on Lab
201ASP
v8.0
January
Slide
2007
35
Interrupt
z
Building a Project
Using the ICD to set a break point
201ASP
Slide 36
Main Program
Call
debounce
delay function
Clear Variables
Initialize PORTB
(RB0) for S3 input
Increment
Count variable
Enable Interrupts
Clear IF
No Operation
NOP
Return to Main
201ASP
Slide 37
Lab Specifics
z
201ASP
Slide 38
201ASP
Slide 39
bsf
bsf
bsf
bsf
bcf
STATUS,RP0
TRISB,0
INTCON,INTE
INTCON,GIE
STATUS,RP0
;
;
;
;
;
point to BANK1
### initialize PORTB<0> as input
### enable INTE interrupts
### Enable global interrupts
return to BANK0
201ASP
Slide 40
Peripherals
201ASP
v8.0
January
Slide
2007
41
I/O Ports
Timers (0, 1, 2)
Capture/Compare/PWM
Comparators
Analog-to-Digital
Converter
AUSART
I2C and SPI Serial
Interface
201ASP
Slide 42
I/O Overview
z
After Reset:
201ASP
Slide 43
RB6
RB6
RB5
RB5
RB4
RB4
RB3
RB3
RB2
RB2
RB1
RB1
RB0
RB0
Data
Configures Data Direction
PORTB Tri-State Register (TRISB)
TRISB7
TRISB6TRISB5
TRISB5TRISB4
TRISB4TRISB3
TRISB3TRISB2
TRISB2TRISB1
TRISB1TRISB0
TRISB0
TRISB7TRISB6
201ASP
Slide 44
201ASP
Slide 45
OR
2) ADC Control register 1 (ADCON1)
z
PCFG3
PCFG2 PCFG1
PCFG1 PCFG0
PCFG0
PCFG3 PCFG2
ADFM
ADCS2
ADFM ADCS2
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 46
AN1
VddAN0
PCFG3
PCFG2 PCFG1
PCFG1 PCFG0
PCFG0
PCFG3 PCFG2
ADFM
ADCS2
ADFM ADCS2
2007 Microchip Technology Incorporated. All Rights Reserved.
AN2
201ASP
Slide 47
Initialize PORTB
201ASP
Slide 48
1 = Pull-up enabled
0 = Pull-up disabled
RB3
RB4
201ASP
Slide 49
Timers
201ASP
v8.0
January
Slide
2007
50
Timers
z
Timer0
Timer1
Timer2
201ASP
Slide 51
Timer Comparison
TIMER0
TIMER1
TIMER2
SIZE OF
REGISTER
8-bits (TMR0)
16-bits
(TMR1H:TMR1L)
8-bits (TMR2)
CLOCK SOURCE
(Internal)
Fosc/4
Fosc/4
Fosc/4
CLOCK SOURCE
(External )
T0CKI pin
T1CKI pin or
Timer 1 oscillator
(T1OSC)
None
CLOCK SCALING
AVAILABLE
(Resolution)
Prescaler 8-bits
(1:21:256)
Prescaler 3-bits
(1,2,4,8)
Prescaler
(1:1,1:4,1:8)
Postscaler
(1:11:16)
INTERRUPT
EVENT and FLAG
LOCATION
On overflow
FFh00h
(TMR0IF in INTCON)
On overflow
FFFFh0000h
(TMR1IF in PIR1)
TMR2 matches
PR2
(TMR2IF in PIR2)
NO
YES
NO
201ASP
Slide 52
8
synchronize
T0CKI
pin
scaled clock
TMR0
PS2
PS1
PS0
TMR0
RATE
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
prescaler
Watchdog Timer
WDT out
OPTION register
RBPU INTEDG TOCS TOSE
PSA
PS2
PS1
PS0
201ASP
Slide 53
8
synchronize
T0CKI
pin
scaled clock
Watchdog Timer
prescaler
TMR0
INTCON register
TMR0IF
201ASP
Slide 54
Timer0 Initialization
;Make sure the Timer0 count
;register (TMR0) is clear
banksel
TMR0
clrf
TMR0
Timer0
incrementing
TMR0
0
0 0
1 0
1 0
1 0
1 0
1 0
1 1
1
INTCON
0
1
TMR0IF
Flag on overflow
0 0 0 0 0 0 1 1
TOCS
PSA
PS<2:0>
Prescaler
Selects Timer 0
Prescaler
Assignment
Clock Source
value = 1:16
(External or Internal) (WDT or TMR0)
201ASP
Slide 55
T1
OSC
T1OS0
prescaler
synchronize
Fosc/4
T1CKI
pin
TMR1H
TMR1L
Enable
TMR1ON
T1CKPS1
T1CKPS0
scale
1:8
1:4
1:2
1:1
LP Oscillator Enable
1 = T1OSC selected
0 = T1CKI can be used
201ASP
Timer1 On
1 = Enable Timer1
Slide 56
T1
OSC
prescaler
synchronize
Fosc/4
T1CKI
pin
TMR1H
TMR1L
Enable
TMR1ON
201ASP
Slide 57
TMR1H
Main Code
1 0
0
1 0
1 0
1 0
1 0
1 0
1 0
1
1 0
0
1 0
1 0
1 0
1
Start
;Start by clearing the Timer1 interrupt flag
banksel
PIR1
PIR1
bcf
PIR1, TMR1IF
0
1
0 0
1
1
1
0
;Enable Timer1 interrupt
banksel
PIE1
bsf
PIE1, TMR1IE
TMR1IF
PIE1
1
TMR1IE
1 1
GIE PEIE
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 58
Timer1 Initialization
TMR1H
;Make sure the TMR1 registers are clear
banksel
TMR1H
clrf
TMR1H
clrf
TMR1L
;Make sure the TMR1IF flag in PIR1
;is cleared
banksel
PIR1
bcf
PIR1,TMR1IF
TMR1H:TMR1L
0 0OVERFLOW!!
0 0 INCREMENTING
0 0 0 0
0 0 0 0 0 0 0 01
TMR1IF
0 0 1 1 0 0 0 1
0
TMR1L
0 0 0 0 0 0 0 0
Input clock
prescale bits
(T1CKPS<1:0>)
201ASP
Timer1
oscillator
enable bit
(T1OSCEN)
TMR1ON
Clock source
select bit
(TMR1CS)
Slide 59
Timer1 Lab
201ASP
v8.0
January
Slide
2007
60
Timer1 Lab
z
201ASP
Slide 61
Lab Overview
Interrupt Vector
Main Program
Save Context
Initialize PORTB
Clear IF
Reload Timer1
Toggle LED 0
5th
Int. ?
NO
YES
Toggle LED 3
NOP
Main Loop
Restore Context
Retfie
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 62
Lab Specifics
z
201ASP
Slide 63
201ASP
Slide 64
201ASP
Slide 65
Lab Questions
Question:
Was Timer 1 still running during the time it
took to service the Interrupt?
Answer:
Yes
Question:
What effect did this have on the value to be
placed to reload TMR1L and TMR1H?
Answer:
Everything to be precise the latency of
reloading Timer1 should be considered.
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 66
Fosc/4
TMR2
OUTPUT
TMR2
Prescaler
1:1, 1:4, 1:16
COMPARATOR
Postscaler
1:1 1:16
PR2
T2CKPS1
T2CKPS2
Scale
1:1
1:4
1:16
Timer2 ON
1 = Timer2 enabled
201ASP
Slide 67
TOUTPS3
TOUTPS1
TOUTPS0
SCALE
1:1
1:2
1:3
1:4
1
Prescaler
0
1:1, 1:4,1 1:16
1:6
1:7
1:8
1:9
1:14
1:15
1:16
Fosc/4
TMR2
OUTPUT
TMR21:5
1:10
COMPARATOR
1:11
Postscaler
1:1 1:16
1:12
PR2 1:13
T2CKPS1
T2CKPS2
Scale
1:1
1:4
1:16
Timer2 ON
1 = Timer2 enabled
201ASP
Slide 68
Fosc/4
Prescaler
1:1, 1:4, 1:16
TMR2
1 1 1 1 0
1 1
0 0
1 1
0
Postscaler
1:1 1:16
COMPARATOR
Load Period
Register
PR2
1 1 1 1 1 0 0 0
TMR2
OUTPUT
PIR1
1
TMR2IF
201ASP
Slide 69
Timer2 Initialization
Timer2
Incrementing
1 0
1
0
1 0
1 0
1 0
1 0
1 0
1 0
1 0 0 0 0 0 0 0
0
0
1
0 1 1 1 0 0
1 1 0
(T2CKPS<1:0>)
201ASP
Slide 70
Timer2 Lab
201ASP
v8.0
January
Slide
2007
71
Timer2 Lab
z
201ASP
Slide 72
Lab Overview
Interrupt Vector
Main Program
Save Context
Initialize PORT B
Set up Timer2
Period,
Prescaler,
Postscaler
Enable interrupts
NOP
Restore context
retfie
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 73
Lab Specifics
z
201ASP
Slide 74
INTCON(Interrupt Control)
PIE1..(Peripheral Interrupt Enable 1)
PR2...(Timer2 Period Register)
T2CON..(Timer2 Control)
201ASP
Slide 75
STATUS,RP0
PIE1,TMR2IE
INTCON,PEIE
INTCON,GIE
STATUS,RP0
;
;
;
;
;
point to BANK1
### enable TMR2 interrupts
### enable peripheral interrupts
### enable global interrupts
return to BANK0
201ASP
Slide 76
Lab Questions
Question:
Like Timer1, does Timer2 keep running
during Interrupt latency?
Answer:
Yes it does!
Question:
Does the user have to account for the free
running Timer2 in order to ensure a precise
interrupt period?
Answer:
No, Interrupt occurs on match not overflow
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 77
Capture/Compare/PWM
Module
201ASP
v8.0
January
Slide
2007
78
Capture/Compare/PWM
(CCP) Overview
Capture
Compare
201ASP
Slide 79
Capture/Compare/PWM
(CCP) Overview
Capture
Compare
Capture
Timer 1
PWM
Pulse Width
Modulation (PWM) Timer 2
201ASP
Slide 80
FUNCTION
CCP1M<3:0>
CCP1<X:Y>
P1M<1:0>
201ASP
Slide 81
0CCP1<X:Y>
0
0
0
0
0
1
P1M<1:0>
CCPxM1
CCPxM0
CCP Mode
Select0 Bits configure
the module asoffInput
0
Capture/Compare/PWM
(resetsCapture,
CCP module)
Output
0 Compare,1 or PWM
Unused (reserved)
Compare
mode,in
toggle
output on match
PWM1duty cycle 20 LSBs (8 MSBs
located
CCPR1L)
1
Unused (reserved)
PWM mode
201ASP
Slide 82
Capture Mode
Prescaler
1, 4, 16
CCPx
CCPxIF in PIRx
TMR1H
Edge Detect
and
TMR1L
Single Buffered
CCPRxH CCPRxL
P1M1
P1M0
CCPxCON
201ASP
Slide 83
Capture Mode
Prescaler
1, 4, 16
CCPx
CCPxIF in PIRx
TMR1H
CCPxM3
CCPxM2
CCPxM1
CCPxM0
TMR1L
MODE
Edge Detect
0 and
0
0
1
1
System Clock (Fosc)
0
1
1
P1M1
P1M0
CCPRxH CCPRxL
CCPxCON
201ASP
Slide 84
Capture Initialization
TMR1H
;Turn off CCP module
CCP1
0
0
0 0
0 0
0
0
banksel
CCP1CON
Pin
clrf
CCP1CON
TMR1L
0
1
;Make sure Timer1 is off
0 Current
0 0 INCREMENTING!!
0
0 0Value
0
0
TIMER1
Timer1
rd
bcf
T1CON,TMR1ON
nd
st
4
3
21th
;Clear Timer1 registers Rising Edge CCPR1H
clrf
TMR1H
Detected!!
clrf
TMR1L
;Disable all interrupts for CCP
CCPR1L
bcf
PIR1,CCP1IF
Captured!
banksel
PIE1
bcf
PIE1,CCP1IE
PIR1
;Set CCP1 pin for input
0
1
bsf
TRISC,2
CCP1IF
;Set Capture for every 4th rising edge
CCP1CON
banksel
CCP1CON
movlw
b00000110
0
0 0
0 0 10 0
1 0
movwf
CCP1CON
;Start Timer1 incrementing
T1CON
bsf
T1CON,TMR1ON
;Test the interrupt flag for capture
1
0
btfss
PIR1,CCP1IF
TMR1ON
goto
$-1
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 85
Compare Mode
TMR1H
TMR1L
COMPARATOR
COMPARATOR
Does
DoesTMR1H:TMR1L
TMR1H:TMR1L
==CCPRxH:CCPRxL
CCPRxH:CCPRxL
??
??
CCPRxH
CCPxIF in PIRx
NO
YES
OUTPUT
OUTPUT
LOGIC
LOGIC
CCPx
CCPRxL
Special Event Trigger
CCP1CON
P1M1
P1M0
201ASP
Slide 86
Compare Mode
TMR1H
TMR1L
COMPARATOR
CCPxM3 COMPARATOR
CCPxM2 CCPxM1
Does
DoesTMR1H:TMR1L
TMR1H:TMR1L
==CCPRxH:CCPRxL
0
0
CCPRxH:CCPRxL
1
1
??
??
CCPRxH
P1M1
P1M0
CCPxIF in PIRx
NO
CCPxM0
MODE
YES
LOGIC
LOGIC
CCPx
CCPRxL
201ASP
Slide 87
Compare Initialization
TMR1H
201ASP
TMR1L
TMR1H:TMR1L = 1000 0000 0000 0000
0
0 0 INCREMENTING!!
0
0 0
0
0
TIMER1
(CCPR1H:CCPR1L Value)
CCPR1H
CCPR1L
T1CON
0
1
TMR1ON
CCP1CON
10
PIR1
1
0
CCP1IF
Slide 88
PWM Mode
z
Description
PR2
Period Register
T2CON
Timer2 Control
CCPRxL
CCPxCON
201ASP
Slide 89
Period 2
CCP1<X:Y>
DUTY CYCLE VALUE
CCPR1L
DOUBLE
BUFFER
10
CCPR1H
LATCH
10
Period
Start
TMR2
= CCPR1H
COMPARATOR
10
TMR2incrementing
TMR2
Reset to 0s
R
Latch
(1)
0
1
CCP1
pin
COMPARATOR
TMR2 = PR2
8
PR2
2007 Microchip Technology Incorporated. All Rights Reserved.
Slide 90
PWM Initialization
TMR2
;Turn off CCP1 pin by setting TRISC bit HIGH
banksel
TRISC
bsf
TRISC, 2
;configure pin as input
0 0 0 0
PR2
0 1 1 1 1 1 1 1
;Clear Timer2
banksel
TMR2
clrf
TMR2
;Set up Period and Duty
movlw
b01111111
movwf
PR2
movlw
b00011111
movwf
CCPR1L
0 0 0 0
CCPR1L
Cycle
;
;Load a Period Value
;
;Load Duty Cycle Value
CCP1CON
0 0 1 0 1 1 0 0
T2CON
duty cycle
LSBs
CCP1<X:Y>
0 0 0
PWM Mode
CCP1M <3:0>
0 0 1 0 0
Prescaler bits
TOUTPS<3:0>
0 0 0 1 1 1 1 1
Prescaler bits
T2CKPS<1:0>
TMR2ON
201ASP
Slide 91
201ASP
v8.0
January
Slide
2007
92
201ASP
Slide 93
201ASP
Slide 94
NOP
201ASP
Slide 95
201ASP
Slide 96
TRISC
T2CON
CCP1CON
201ASP
Slide 97
STATUS,RP0
0x80
CCPR1L
; point to BANK0
; establish duty cycle @ 50%
;*****************************************************************
;
Put CCP1 module in PWM mode.
;*****************************************************************
movlw
movwf
0x0C
CCP1CON
;*****************************************************************
; Configure Timer2 pre and post scale of 1:1 and turn Timer2 on
;*****************************************************************
bsf
T2CON,TMR2ON
; ### turn on TMR2
201ASP
Slide 98
201ASP
Slide 99
Output Compare
Lab
201ASP
v8.0
January
Slide
2007
100
201ASP
Slide 101
201ASP
Slide 102
Main Program
Save Context
Configure CCP as
Output Compare
Clear IF
Initialize Timer1
Toggle CCP
Output Pin
Drives
Buzzer
Initialize PORT C
Decrement
CCPR1L
Turn on timer1
Reset
Timer1
NOP
RETFIE
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 103
201ASP
Slide 104
201ASP
Slide 105
201ASP
Slide 106
Lab Question
Question:
The PWM did not require an interrupt in order
to work. Do we need an interrupt to operate in
output compare mode?
Answer:
Not necessarily
201ASP
Slide 107
Comparators
201ASP
v8.0
January
Slide
2007
108
Comparator Overview
z
Comparator Module:
Vin
+
Output
(Vout)
Comp
Vout
201ASP
Slide 109
VREF+
VRSS = 1
VRR
VRSS = 0
V
CVREFDD
To Comparators
and ADC Module
8R
15
VREF0
VRSS = 1
4 VR<3:0>
CVREF
VROE
VRSS = 0
VREN
201ASP
Slide 110
Comparator Interrupts
z
201ASP
Slide 111
201ASP
Slide 112
Analog-to-Digital
Converter (ADC)
201ASP
v8.0
January
Slide
2007
113
ADC Overview
z
ADC
Analog
Input
2007 Microchip Technology Incorporated. All Rights Reserved.
Digital
Output
201ASP
Slide 114
ADCS0
CHS2
BIT
CHS1
CHS0 GO/DONE
ADON
FUNCTION
201ASP
Slide 115
ADCS2
PCFG3
BIT
PCFG2
PCFG1
FUNCTION
ADFM
ADCS2
PCFG<3:0>
PCFG0
201ASP
Slide 116
ADRESH
ADRESL
LSB
MSB
ADRESL
LSB
MSB
201ASP
Slide 117
Conversion
clock scaler
VREF+
pin
AN0
AN1
AN2
AN3
ADC
AN4
AN5
AN6
AN7
Holding
Capacitor
Start Conversion
Conversion Complete
00000011 11111111
ADRESH
ADRESL
Left Justified Right Justified
VREFpin
ADCON0
ADCS1 ADCS0 CHS2
CHS1
CHS0
GO/DONE
ADON
Vss
ADCON1
ADFM ADCS2
2007 Microchip Technology Incorporated. All Rights Reserved.
Slide 118
AN2
AN1
VddAN0
VREF+
pin
AN0
AN1
AN2
AN3
ADC
AN4
AN5
AN6
AN7
Holding
Capacitor
Start Conversion
Conversion Complete
00000011 11111111
ADRESH
ADRESL
Left Justified Right Justified
VREFpin
ADCON0
ADCS1 ADCS0 CHS2
0
0
CHS1
CHS0
0
GO/DONE
0
1
ADON
Vss
ADCON1
0
ADFM
ADCS2
1
2007 Microchip Technology Incorporated. All Rights Reserved.
Slide 119
201ASP
Slide 120
Analog-to-Digital
Conversion LAB
201ASP
v8.0
January
Slide
2007
121
ADC Lab
z
201ASP
Slide 122
Enable interrupts
Continued on
next page
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 123
Main Loop
TMR2IF=1
NO
YES
Start ADC
NO
ADC done?
YES
Put ADC value in
CCPR1L
Output 4 LSBs of
ADC value to LEDs
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 124
201ASP
Slide 125
201ASP
Slide 126
ADC Solution
;*************************************************************************
; Configure ADC: Channel 0, left justified, Tad = 8 * Tosc, turn on ADC
;*************************************************************************
clrf
ADCON0
; ### ensure default channel is set to channel 0
bsf
ADCON0,ADCS1
; ### set Tad = Fosc/4
bsf
ADCON0,ADON
; ### turn on ADC
bsf
STATUS,RP0
; ### point to BANK1
movlw
0x0E
; ### left justify, configure AN0 analog
movwf
ADCON1
;
; Enable Timer 2 interrupts, Peripheral Interrupts and Global Interrupts
;
bsf
PIE1,TMR2IE
bsf
INTCON,GIE
bsf
INTCON,PEIE
bcf
STATUS,RP0
; return to BANK0
;
;*************************************************************************
; add three lines of code to start the ADC conversion and wait for the
; conversion to complete
;*************************************************************************
bsf
ADCON0,GO
; ### start ADC conversion
btfsc
ADCON0,GO
; ### Is the conversion done?
goto
$-1
; ### no: loop until done
201ASP
Slide 127
201ASP
Slide 128
ADDRESSABLE Universal
Synchronous Asynchronous
Receiver Transmitter
(AUSART)
201ASP
v8.0
January
Slide
2007
129
AUSART Overview
z
Main Functions:
201ASP
Slide 130
AUSART Registers
z
RCSTA
TXSTA
TXREG
RCREG
201ASP
Slide 131
TXSTA Register
CSRC
TX9
TXEN
SYNC
SENB
Bit
CSRC
TX9
BRGH
TRMT
TX9D
Function
Clock Source Select
1 = Master Mode (clock generated internally from BRG)
0 = Slave Mode (clock from external source)
Ninth bit transmission enable
TXEN
SYNC
SENB
BRGH
TRMT
TX9D
201ASP
Slide 132
RCSTA Register
SPEN
RX9
SREN
CREN
ADDEN
Bit
SPEN
FERR
OERR
RX9D
Function
Serial Port Enable
1 = Serial port enabled (configures RX/DT and TX/CK pins as serial port pins)
0 = Serial port disabled
RX9
SREN
CREN
ADDEN
FERR
OERR
1 = Overrun error occurred (FIFO was still full when other data was
loaded)
RX9D
201ASP
Slide 133
TXIE
TXREG
Interrupt
TXIF
Set TXIF
TXEN
MSB
LSB
Transmit Shift
Register (TSR)
Baud Rate
Generator
TRMT
TX9D TX9
Clear TXIF
Pin Buffer
and Control
TX/DT
pin
SPEN
Enables Serial
Port
Slide 134
RX/DT
pin
Data
Recovery
STOP
START
RX9
Baud Rate
Generator
FIFO
RCREG
RCIF
Interrupt
201ASP
RX9D
Data Bus
Slide 135
MASTER SYNCHRONOUS
SERIAL PORT (MSSP)
MODULE
201ASP
v8.0
January
Slide
2007
136
MSSP Overview
z
201ASP
Slide 137
I2C Conditions
z
Conditions :
START (S)
STOP (P)
SDA
SCL
SDA pulled
released
LOW
while SCL is
still HIGH
Recipient
Stop
SDA
condition
goes
doesLOW
quickly
not drive
during
followed
SDA
th clock
pulse of SCL
by a9Start
LOW
condition
ACKNOWLEDGE (A)
RESTART (R)
201ASP
Slide 138
+5V
SCL
MASTER
SDA
READ
WRITE
STOP
GOTO
DATA
MODE
ADDRESS
BUSY
PIC
LISTEN
EEPROM
SLAVE
START
RESTART
MEMORY
STOP
ACK
NACK
ADDRESS
ADDRESS
BUSY
LISTEN
SLAVES
201ASP
LISTEN
EEPROM
DATA
ACK
Slide 139
MSSP Control
Registers
2
(I C mode)
CKE
D/A
CONTROL BITS
BIT
SMP
CKE
D/A
P
S
R/W
UA
BF
R/W
UA
BF
FUNCTION
Slew Rate Control bit
Not used in I2C mode
Last byte Rx/Tx was data or address
Stop Condition Detected
Start Condition Detected
Slave :READ/WRITE or Master = transmit in progress
Address needs to be updated
The SSPBUF register is full
201ASP
Slide 140
MSSP Control
Registers
2
(I C mode)
CKE
D/A
CONTROL BITS
BIT
SMP
CKE
D/A
P
S
R/W
UA
BF
R/W
UA
BF
FUNCTION
Slew Rate Control bit
Not used in I2C mode
Last byte Rx/Tx was data or address
Stop Condition Detected
Start Condition Detected
Slave :READ/WRITE or Master = transmit in progress
Address needs to be updated
The SSPBUF register is full
201ASP
Slide 141
MSSP Control
Registers
2
(I C mode)
BIT
FUNCTION
WCOL
SSPOV
SSPEN
CKP
Enables clock
SSPM3
SSPM2
SSPM1
SSPM0
201ASP
Slide 142
MSSP Control
Registers
2
(I C mode)
SSPM3
SSPM2
SSPM1
SSPM0
Mode
2 of 3:
MSSP
Control
Register
1 (SSPCON)
0
1
0
SPI Master mode, clock = FOSC/64
WCOL1 SSPOV
CKP mode,
SSPM3
SSPM1 SSPM0
1 SSPEN
SPI Master
clockSSPM2
= TMR2 output/2
I2C Slave
mode,Collision
7-bit address
Write
Detected
BIT
1
WCOL
1
SSPOV
0
clock = SCK pin, SS pin control enabled
CONTROL
BITSSPI Slave mode, DETECTION
BITS (FLAGS)
Reserved
CKP
0
Reserved
0
SSPM3
SSPM2
Reserved
Reserved
I2C Slave mode, 7-bit address with Start and Stop bit
interrupts enabled
I2C Slave mode, 10-bit address with Start and Stop bit
interrupts enabled
1
1
SSPEN
SSPM1
1
SSPM0
Slide 143
MSSP Control
Registers
2
(I C mode)
ACKEN
CONTROL BITS
RCEN
PEN
RSEN
SEN
BIT
FUNCTION
GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN
Initates aa START
Initiates
START condition
condition
201ASP
Slide 144
MSSP Control
Registers
2
(I C mode)
ACKEN
CONTROL BITS
RCEN
PEN
RSEN
SEN
BIT
FUNCTION
GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN
Initates aa START
Initiates
START condition
condition
201ASP
Slide 145
201ASP
Slide 146
Master mode:
Fosc
BAUD RATE =
4 ( SPADD + 1)
*NOTE: FOSC is the frequency of the oscillator
not the Instruction Clock TCY
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 147
MSSP Interrupts
z
START condition
STOP condition
Tx or Rx complete
Acknowledge transmit
RESTART condition
201ASP
Slide 148
201ASP
v8.0
January
Slide
2007
149
201ASP
Slide 150
201ASP
Slide 151
Loop
Read Temperature
201ASP
Slide 152
201ASP
Slide 153
SSPSTAT
SSPCON
SSPCON2
201ASP
Slide 154
SSPCON,SSPEN
;-------------------------------------------------------------BANKSEL
bsf
btfsc
goto
SSPCON2
SSPCON2,SEN
SSPCON2,SEN
$-1
;
;
;
;
Slide 155
Multiple Interrupt
Lab
201ASP
v8.0
January
Slide
2007
156
201ASP
Slide 157
Lab Overview
Main Program
Set up CCP as Output
Compare just as in Lab 6
Enable Timer1 and
PORTC as In Lab 6
Setup PORTB and enable
External Interrupts on
S3as in Lab 1
NOP
201ASP
Slide 158
Lab Overview
INT_ISR
CCP_ISR
Call debounce
Delay routine
Clear IF
Put -1 in WREG
Toggle variable
Called
push_flag
push_flag
Set ?
Clear IF
Put 0 in WREG
Return to Main
Add WREG to
CCPR1L
Return to Main
2007 Microchip Technology Incorporated. All Rights Reserved.
201ASP
Slide 159
Interrupt Handler
NO
YES
YES
Go to CCP
service routine
NO
Service External
Interrupt
Return to Main
201ASP
Slide 160
Lab Specifics
z
C:\RTC\201_ASP\Lab8-MXINT
INT_ISR
CCP_ISR
201ASP
Slide 161
201ASP
Slide 162
Lab Solution
Int_Service_Routine
call
save_regs;
btfsc
goto
btfsc
goto
Finish_Int
call
INTCON,INTF
INTE_ISR
PIR1,CCP1IF
CCP_ISR
Restore_Regs
retfie
201ASP
Slide 163
bsf
PIE1,CCP1IE
bsf
bsf
bsf
bcf
INTCON,INTE
INTCON,GIE
INTCON,PEIE
STATUS,RP0
;### enable
;### enable
;### enable
; return to
INTE interrupt
global interrupts
peripheral interrupts
BANK0
201ASP
Slide 164
Lab Questions
Question:
Why is there a noticeable silence when S3 is
pushed?
Answer:
Since debounce is called during an interrupt
and the GIE bit is cleared, the CCP1 interrupt
that toggles the buzzer is not allowed to
operate. Therefore, the buzzer goes quiet.
201ASP
Slide 165
201ASP
Slide 166
201ASP Wrap-Up
201ASP
v8.0
January
Slide
2007
167
I/O ports
Interrupt structure and processing
Timers (timer0, timer1, timer2)
CCP Module ( Output Compare, Input Capture,
PWM)
Comparators and Analog-to-Digital Converters
z
Voltage Reference
201ASP
Slide 168
Final Word
z
Register Description
and Configuration
Enhanced or
Special Features
201ASP
Slide 169
Resources
z
201ASP
Slide 170
Thank You!!
201ASP
v8.0
January
Slide
2007
171