Professional Documents
Culture Documents
C7. CCP Module
C7. CCP Module
C7. CCP Module
HỒ CHÍ MINH
KHOA CÔNG NGHỆ ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ MÁY TÍNH
CHƯƠNG 7
MODUL CCP
(CAPTURE/COMPARE/PWM)
1
CHƯƠNG 6: MODUL CCP
Nội dung bao gồm:
Ø Tổng quan về modul CCP
l Capture: Bắt sự kiện
l Compare: So sánh
l PWM: Điều chế độ rộng xung
Ø Các thanh ghi của modul CCP
Ø Giới thiệu sơ lược về chế độ Capture
Ø Giới thiệu sơ lược về chế độ Compare
Ø Giới thiệu sơ lược về chế độ PWM
Ø Các tính năng nâng cao của modul CCP1
Ø Ví dụ minh họa và bài tập ứng dụng.
2
TỔNG QUAN VỀ MODUL CCP
Ø PIC16F887 có 2 modul CCP (CCP1 và
CCP2). Cách thức cấu hình và hoạt động
hoàn toàn tương tự nhau trong chế độ bình
thường, ngoại trừ các tính năng nâng cao
PWM chỉ có trên CCP1
Ø Các Timer sử dụng cho modul CCP.
5
THANH GHI CỦA MODUL CCP
CCPx CCPx CCPx CCPx Chế độ cho modul CCPx
M3 M2 M1 M0
0 0 0 0 Tắt Capture/Compare/PWM (reset modul CCP)
0 0 0 1 Không dùng
0 0 1 0 Chế độ Compare, đảo ngõ ra khi bằng nhau
0 0 1 1 Không dùng
0 1 0 0 Chế độ Capture, tại mỗi cạnh xuống
0 1 0 1 Chế độ Capture, tại mỗi cạnh lên
0 1 1 0 Chế độ Capture, tại mỗi cạnh lên thứ 4
0 1 1 1 Chế độ Capture, tại mỗi cạnh lên thứ 16
1 0 0 0 Chế độ Compare, đặt ngõ ra khi bằng nhau
1 0 0 1 Chế độ Compare, xóa ngõ ra khi bằng nhau
1 0 1 0 Chế độ Compare, tạo ngắt phần mềm khi bằng nhau
1 0 1 1 Chế độ Compare, kích sự kiện đặc biệt
1 1 0 0 Chế độ PWM; P1A, P1C active-high; P1B, P1D active-high
1 1 0 1 Chế độ PWM; P1A, P1C active-high; P1B, P1D active-low
1 1 1 0 Chế độ PWM; P1A, P1C active-low; P1B, P1D active-high
6
1 1 1 1 Chế độ PWM; P1A, P1C active-low; P1B, P1D active-low
THANH GHI CỦA MODUL CCP
CCP1 Control Register (CCP1CON)
P1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
Prescaler CCPxIF
CCPx ÷ 1, 4, 16 trong PIRx
TMR1H TMR1L
Edge Detect
and Bộ đệm
CCPRxH CCPRxL
CCPxCON
10
SƠ ĐỒ KHỐI CHẾ ĐỘ CAPTURE
1
Prescaler CCPxIF
CCPx ÷ 1, 4, 16 trong PIRx
CCPxCON
11
MINH HỌA KHỞI ĐỘNG CAPTURE
;Tắt modul CCP 1
TMR1H
banksel CCP1CON
clrf CCP1CON 0 0 0 0 0 0 0 0
;Tắt (dừng) Timer 1 TMR1L
bcf T1CON, TMR1ON
;Xóa giá trị Timer 1 0 0 0 0 0 0 0 0
clrf TMR1H CCPR1H
clrf TMR1L
;Cấm các ngắt dùng cho CCP1
bcf PIR1, CCP1IF CCPR1L
banksel PIE1
bcf PIE1, CCP1IE
;Cấu hình chân CCP1 là ngõ vào PIR1
bsf TRISC, 2
;Khởi động bắt sự kiện tại mỗi cạnh lên thứ 4 0
banksel CCP1CON CCP1IF
movlw b’00000110’ CCP1CON
movwf CCP1CON 0 0 0 0 0 0
1 1
0 0
;Bật (khởi động) Timer 1
bsf T1CON, TMR1ON
;Kiểm tra cờ CCP1IF để bắt sự kiện (Capture) T1CON
btfss PIR1, CCP1IF 0
goto $-1
< Tiếp theo > TMR1ON
12
MINH HỌA KHỞI ĐỘNG CAPTURE
;Tắt modul CCP 1
TMR1H
banksel CCP1CON
clrf CCP1CON 0 0 0 0 0 0 0 0
;Tắt (dừng) Timer 1 TMR1L
bcf T1CON, TMR1ON
;Xóa giá trị Timer 1 0 0 10đang
TIMER 0 tăng
0 0giá0trị !!!
0
clrf TMR1H CCPR1H
clrf TMR1L
;Cấm các ngắt dùng cho CCP1
bcf PIR1, CCP1IF CCPR1L
banksel PIE1
bcf PIE1, CCP1IE
;Cấu hình chân CCP1 là ngõ vào PIR1
bsf TRISC, 2
;Khởi động bắt sự kiện tại mỗi cạnh lên thứ 4 0
banksel CCP1CON CCP1IF
movlw b’00000110’ CCP1CON
movwf CCP1CON 0 0 0 0 0 0
1 1
0 0
;Bật (khởi động) Timer 1
bsf T1CON, TMR1ON
;Kiểm tra cờ CCP1IF để bắt sự kiện (Capture) T1CON
btfss PIR1, CCP1IF 1
0
goto $-1
< Tiếp theo > TMR1ON
13
MINH HỌA KHỞI ĐỘNG CAPTURE
;Tắt modul CCP 1
TMR1H
banksel CCP1CON
clrf CCP1CON 0 0 0 0 0 0 0 0
;Tắt (dừng) Timer 1
bcf T1CON, TMR1ON
TMR1L
Phát hiện
0 0 10đang
TIMER 0 tăng
0 0giá0trị !!!
0
CCP1 cạnh lên thứ 4
;Xóa giá trị Timer 1
clrf TMR1H
clrf TMR1L 0
1 CCPR1H
;Cấm các ngắt dùng cho CCP1
bcf PIR1, CCP1IF 24
3
1nd
rd
st
th của sự kiện !!!
CCPR1L
banksel PIE1
bcf PIE1, CCP1IE
;Cấu hình chân CCP1 là ngõ vào PIR1
bsf TRISC, 2
;Khởi động bắt sự kiện tại mỗi cạnh lên thứ 4 1
0
banksel CCP1CON CCP1IF
movlw b’00000110’ CCP1CON
movwf CCP1CON 0 0 0 0 0 0
1 1
0 0
;Bật (khởi động) Timer 1
bsf T1CON, TMR1ON
;Kiểm tra cờ CCP1IF để bắt sự kiện (Capture) T1CON
btfss PIR1, CCP1IF 1
0
goto $-1
< Tiếp theo > TMR1ON
14
MINH HỌA KHỞI ĐỘNG CAPTURE
;Tắt modul CCP 1
TMR1H
banksel CCP1CON
clrf CCP1CON 0 0 0 0 0 0 0 0
;Tắt (dừng) Timer 1 TMR1L
bcf T1CON, TMR1ON
;Xóa giá trị Timer 1 Giá
0 trị
0 hiện
0 0tại 0của0Timer
0 01
clrf TMR1H CCPR1H
clrf TMR1L
;Cấm các ngắt dùng cho CCP1
bcf PIR1, CCP1IF CCPR1L
banksel PIE1
bcf PIE1, CCP1IE Giá trị hiện tại của Timer 1
;Cấu hình chân CCP1 là ngõ vào PIR1
bsf TRISC, 2
;Khởi động bắt sự kiện tại mỗi cạnh lên thứ 4 1
0
banksel CCP1CON CCP1IF
movlw b’00000110’ CCP1CON
movwf CCP1CON 0 0 0 0 0 0
1 1
0 0
;Bật (khởi động) Timer 1
bsf T1CON, TMR1ON
;Kiểm tra cờ CCP1IF để bắt sự kiện (Capture) T1CON
btfss PIR1, CCP1IF 1
0
goto $-1
< Tiếp theo > TMR1ON
15
VÍ DỤ MINH HỌA
Ø Ví dụ 1: Dựa vào sơ đồ, viết chương trình điều
khiển để đo chu kỳ của xung vuông (f = 20Hz –
25KHz) tại chân CCP1 (RC2). Sử dụng modul CCP
ở chế độ Capture để đo chu kỳ của xung vuông.
l Sơ đồ nguyên lý:
+ A
AM FM
- C
C7 Y1 D
4MHz
OSC2
U2
CLK
22p MCLR 1 15
OSC1
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16
CE BAI TAP UNG DUNG DIEU KHIEN MODUL ECCP (Capture)
RC1/T1OSI/CCP2 RST
2 17 CLK
C6 +5V
3
RA0/AN0/ULPW U/C12IN0- RC2/P1A/CCP1
18
4
RA1/AN1/C12IN1- RC3/SCK/SCL
23
+5V RP1 +5V RP2
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA +5V +5V
5 24 10K 10K
RA3/AN3/VREF+/C1IN+ RC5/SDO
22p 6 25
7
RA4/T0CKI/C1OUT RC6/TX/CK
26 U3 1 U1 1
RA5/AN4/SS/C2OUT RC7/RX/DT
R2 OSC2 14
RA6/OSC2/CLKOUT COM
10
COM
10
OSC1 13 19 1 18 D0 D0 2 RB0 1 18 B0 B0 2
10K RA7/OSC1/CLKIN RD0 1B 1C 1B 1C
20 2 17 D1 D1 3 RB1 2 17 B1 B1 3
RD1 2B 2C 2B 2C
RB0 33 21 3 16 D2 D2 4 RB2 3 16 B2 B2 4
R49 MCLR RB1 34
RB0/AN12/INT RD2
22 4
3B 3C
15 D3 D3 5 RB3 4
3B 3C
15 B3 B3 5
RB1/AN10/C12IN3- RD3 4B 4C 4B 4C
RB2 35 27 5 14 D4 D4 6 RB4 5 14 B4 B4 6
100R RB2/AN8 RD4 5B 5C 5B 5C
RB3 36 28 6 13 D5 D5 7 RB5 6 13 B5 B5 7
RB3/AN9/PGM/C12IN2- RD5/P1B 6B 6C 6B 6C
SW1 C10 RB4 37
RB4/AN11 RD6/P1C
29 7
7B 7C
12 D6 D6 8 RB6 7
7B 7C
12 B6 B6 8
RB5 38 30 8 11 D7 D7 9 RB7 8 11 B7 B7 9
0.1uF RB5/AN13/T1G RD7/P1D 8B 8C 8B 8C
RB6 39
RB6/ICSPCLK
RB7 40 8 ULN2803 ULN2803
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
10
RE2/AN7 +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V
PIC16F887
16
D7
D6
D5
D4
D3
D2
D1
D0
B7
B6
B5
B4
B3
B2
B1
B0
VÍ DỤ MINH HỌA
l Giải thuật:
17
VÍ DỤ MINH HỌA
l Cấu hình (Hi-Tech C):
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON &
MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF &
IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);
18
VÍ DỤ MINH HỌA
l Chương trình (Hi-Tech C):
unsigned int tOld, tNew; void init_interrupts(void)
unsigned int tword; {
bit edge = 0; CCP1IF = 0;
bit capture = 0; CCP1IE = 1;
void init_CCP(void) PEIE = 1;
{ GIE = 1;
CCP1CON = 0X05; }
TRISC2 = 1;
}
void init_Timer1(void)
{
TMR1H = 0;
TMR1L = 0;
T1CON = 0X01;
}
19
VÍ DỤ MINH HỌA
l Chương trình (Hi-Tech C):
void interrupt ISR(void)
{
if(CCP1IF)
{
if(!edge)
{
tOld = (256*CCPR1H)+CCPR1L;
edge = 1;
}
else
{
tNew = (256*CCPR1H)+CCPR1L;
capture = 1;
edge = 0;
}
CCP1IF = 0;
} 20
}
VÍ DỤ MINH HỌA
l Chương trình (Hi-Tech C):
void main(void) while(1)
{ {
ANSEL = 0; if(capture)
ANSELH = 0; {
CCP1IE = 0;
TRISB = 0x00; capture = 0;
TRISD = 0x00; tword = ~tOld + tNew+1;
SO SÁNH NO
TMR1H:TMR1L
= Logic CCPx
CCPRxH:CCPRxL YES ngõ ra
???
CCPRxH CCPRxL
Kích sự kiện đặc biệt
clrf TMR1L
;Cấm các ngắt dùng cho CCP1
;và đảm bảo rằng các cờ của nó được xóa
CCPR1H
banksel
bcf
PIE1
PIE1, CCP1IE
1 0 0 0 0 0 0 0
banksel PIR1 CCPR1L
bcf PIR1, CCP1IF
;Cấu hình chân CCP1 là ngõ ra
banksel TRISC
0 0 0 0 0 0 0 0
bcf TRISC, 2
;Khởi động chế độ so sánh để đặt ngõ ra khi bằng nhau T1CON
banksel CCP1CON
movlw b’00001000’ 1
0
movwf CCP1CON
;Đặt giá trị cần so sánh vào thanh ghi TMR1ON
;CCPR1H:CCPR1L CCP1CON
banksel CCPR1H
movlw b’10000000’ 0 0 0 0 1
0 0 0 0
movwf CCPR1H
clrf CCPR1L
;Bật (khởi động) Timer 1 PIR1
bsf T1CON, TMR1ON
;Kiểm tra cờ CCP1IF để biết giá trị Timer1 bằng CCPRx 0
1
btfss PIR1, CCP1IF
CCP1IF 27
goto $-1
< Tiếp theo >
VÍ DỤ MINH HỌA
Ø Ví dụ 2: Dựa vào sơ đồ, viết chương trình điều
khiển tạo xung có tần số thay đổi trong khoảng từ
122,3Hz - 244,1Hz tại chân CCP1 (RC2). Sử dụng
modul CCP ở chế độ Compare để tạo xung.
l Sơ đồ nguyên lý:
Y1 BAI TAP UNG DUNG DIEU KHIEN MODUL ECCP (PWM)
C7 4MHz
OSC2
U2
22p MCLR 1 15
RE3/MCLR/VPP RC0/T1OSO/T1CKI
OSC1 16 RC2
RC1/T1OSI/CCP2 A
2 17 RC2
C6 +5V
3
RA0/AN0/ULPW U/C12IN0- RC2/P1A/CCP1
18
RA1/AN1/C12IN1- RC3/SCK/SCL B
4 23
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24
RA3/AN3/VREF+/C1IN+ RC5/SDO C
22p 6 25
RA4/T0CKI/C1OUT RC6/TX/CK
7 26
RA5/AN4/SS/C2OUT RC7/RX/DT D
R2 OSC2 14
RA6/OSC2/CLKOUT
OSC1 13 19
10K RA7/OSC1/CLKIN RD0
20
RD1
33 21 RC2
R49 MCLR 34
RB0/AN12/INT RD2
22
CLK
RB1/AN10/C12IN3- RD3 CE
35 27
100R RB2/AN8 RD4 RST
36 28
RB3/AN9/PGM/C12IN2- RD5/P1B
SW1 C10 37
RB4/AN11 RD6/P1C
29
+5V
0.1uF 38 30
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
10
RE2/AN7
PIC16F887
BUZZER
R1 Q1
RC2
NPN
1K
28
VÍ DỤ MINH HỌA
l Giải thuật:
29
VÍ DỤ MINH HỌA
l Giải thuật:
� � 30
� = �����: ����� × × ���. = ������: ������ × × ���.
���� ����
VÍ DỤ MINH HỌA
l Cấu hình (Hi-Tech C):
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON &
MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF &
IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);
31
VÍ DỤ MINH HỌA
l Chương trình (Hi-Tech C):
void interrupt OC_interrupt(void) void init_Timer1(void)
{ {
CCP1IF = 0; T1CON = 0X30;
PORTC ^= 0X04; }
--CCPR1L;
} void init_interrupts(void)
{
void init_CCP(void) CCP1IE = 1;
{ PEIE = 1;
CCP1CON = 0X0B; GIE = 1;
CCPR1L = 0X00; }
CCPR1H = 0X01;
TRISC2 = 0;
}
32
VÍ DỤ MINH HỌA
l Chương trình (Hi-Tech C):
void main(void)
{
init_CCP();
init_Timer1();
init_interrupts();
TMR1ON = 1;
while(1);
}
33
CHẾ ĐỘ PWM
Ø Trong chế độ này, tại chân CCPx sẽ xuất ra
tín hiệu PWM (Pulse-Width Modulated)
34
CHẾ ĐỘ PWM
Ø Chu kỳ nhiệm vụ (Duty cycle), chu kỳ
(Period) và độ phân giải (Resolution) có thể
điều khiển được bằng các thanh ghi sau:
PR2 T2CON CCPRxL CCPxCON
35
CHẾ ĐỘ PWM
Ø Điều kiện cần có:
l Chân CCPx phải được cấu hình là ngõ ra
l Đặc biệt lưu ý rằng độ rộng xung PWM phải
luôn luôn nhỏ hơn chu kỳ PWM, nếu không sẽ
làm cho ngõ ra không thể thay đổi trạng thái
l Bộ chia tỉ lệ sau của Timer 2 (Postscaler) không
được dùng để tạo ra chu kỳ PWM dài hơn.
36
CHẾ ĐỘ PWM
Ø Các công thức tính toán của PWM:
l Chu kỳ PWM (PWM Period):
�
���� = ��� + � × � × × ���.
����
TPWM: Chu kỳ xung PWM (s)
fOSC: Tần số dao động (MHz)
Pre.: Giá trị hệ số Prescaler (Pre = 1, 4, 16)
[PR2]: Giá trị cần ghi vào thanh ghi PR2.
� ≤ ��� ≤ ���
37
CHẾ ĐỘ PWM
Ø Các công thức tính toán của PWM:
l Chu kỳ PWM (PWM Period):
�
���� = ��� + � × � × × ���.
����
40
THANH GHI CỦA MODUL CCP
CCP1 Control Register (CCP1CON)
P1M1 P1M0 CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
���
log � × ��� + �
=
log 2
Res: Độ phân giải PWM (bit)
[PR2]: Giá trị của thanh ghi PR2.
1.22 4.88 19.53 78.12 156.3 208.3
TẦN SỐ PWM
KHZ KHZ KHZ KHZ KHZ KHZ
Prescale Timer 2 16 4 1 1 1 1
Giá trị PR2 FFh FFh FFh 3Fh 1Fh 17h
Độ phân giải lớn nhất 10 10 10 8 7 6
���
log � × ��� + �
=
log 2
Res: Độ phân giải PWM (bit)
[PR2]: Giá trị của thanh ghi PR2.
1.22 4.90 19.61 76.92 153.85 200.0
TẦN SỐ PWM
KHZ KHZ KHZ KHZ KHZ KHZ
Prescale Timer 2 16 4 1 1 1 1
Giá trị PR2 65h 65h 65h 19h 0Ch 09h
Độ phân giải lớn nhất 8 8 8 6 5 5
CCP1
trong
chế
độ
PWM
44
SƠ ĐỒ KHỐI PWM
CCPR1L CCP1<X:Y>
Bộ đệm 10
đôi
CCPR1H LATCH
10
Chân ra CCP1
Bộ so sánh
10 R
Bộ
TMR 2 (1) chốt
8 S CCP1
Bộ so sánh
CCPR1L
Giá trị chu kỳ nhiệmCCP1<X:Y>
vụ
Bộ đệm 10
đôi
CCPR1H LATCH
10
Bắt đầu Chân ra CCP1
COMPARATOR
TMR2 = CCPR1H chu kỳ
10 R
Bộ
TMR2
TMR2đang
bị xóa
tăng
về lên
0 (1) chốt 0
1
8 S
CCP1
COMPARATOR
TMR2 = PR2
R1 Q1
RC2
NPN
1K
50
Tính toán giá trị thanh ghi
�
���� = ��� + � × � × × ���.
����
0 0 0
1 0 1
2 1 0 52
3 1 1
VÍ DỤ MINH HỌA
l Giải thuật:
53
VÍ DỤ MINH HỌA
l Cấu hình (Hi-Tech C):
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON &
MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF &
IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON);
54
VÍ DỤ MINH HỌA
l Chương trình (Hi-Tech C):
void setup_ccp(void)
{ void main(void)
TRISC2 = 1; {
ANSEL=ANSELH=0;
TMR2 = 0x00; setup_ccp();
while(1);
PR2 = 249;
}
CCPR1L = 125;
CCP1CON = 0x0C;
DC1B1=0;DC1B0=0;
TRISC2 = 0;
T2CON = 0X00;
TMR2ON =1; 55
}
BÀI TẬP ỨNG DỤNG
Ø Bài tập 1: Viết chương trình điều khiển tạo
xung PWM có fPWM = 5KHz, D = 40% tại chân
CCP2. Sử dụng modul CCP ở chế độ PWM
để tạo xung.
Ø Bài tập 2: Viết chương trình điều khiển tạo
xung PWM có fPWM = 10KHz, D1 = 80% tại
chân CCP1 và D2 = 20% tại chân CCP2. Sử
dụng modul CCP ở chế độ PWM để tạo
xung.
Biết rằng fosc = 4MHz
56
BÀI TẬP ỨNG DỤNG
Ø Bài
tập 3: Viết chương trình điều khiển tạo
xung PWM có fPWM = 8KHz, D1 = 60% tại
chân CCP1 và D2 = 40% tại chân CCP2.
Sử dụng modul CCP ở chế độ PWM để tạo
xung.
Biết rằng fosc = 4MHz
Bài tập 4 :Thiết kế mạch điện tạo ra 2 xung PWM có
Tần số xung PWM: fPWM = 5 kHz
Chu kì nhiệm vụ của xung tại chân RC2 là DRC2 =30%
Chu kì nhiệm vụ của xung tại chân RC1 là DRC1 =70%
Cho biết mạch điện sử dụng vi điều khiển PIC16F887 với tần
số X_TAL 4MHz.
Yêu cầu sử dụng modul CCP hoạt động ở chế độ PWM để
thực hiện yêu cầu tạo xung PWM.
a) Xác định đầu vào/ đầu ra của mạch điện. [CDRMH3]
b) Vẽ sơ đồ mạch nguyên lý.[CDRMH4]
c) Tính toán các giá trị thanh ghi sử dụng chức năng PWM
của khối CCP. [CDRMH2]
d) Vẽ lưu đồ giải thuật. [CDRMH6]
e) Viết chương trình. [CDRMH6]
Bài tập 5:Thiết kế mạch điện tạo ra 2 xung PWM có :
Tần số xung PWM: fPWM = 5 kHz
Nhấn-nhả SW4 : tạo xung PWM có chu kì nhiệm vụ tại chân
RC2 là D =40%
Nhấn-nhả SW5 :tạo xung PWM có chu kì nhiệm vụ tại chân
RC1 là D =60%
Nhấn-nhả SW6 :dừng phát xung PWM
Cho biết mạch điện sử dụng vi điều khiển PIC16F8xx, 3 nút
nhấn SW4 (nối chân RB0), SW5(nối chân RB1), SW6 (nối chân
RB2).
a) Xác định đầu vào/ đầu ra của mạch điện. [CDRMH3]
b) Vẽ sơ đồ mạch nguyên lý.[CDRMH4]
c) Tính toán các giá trị thanh ghi sử dụng chức năng PWM
của khối CCP. [CDRMH2]
d) Vẽ lưu đồ giải thuật. [CDRMH6]
e) Viết chương trình. [CDRMH6]
a) Xác định đầu vào/ đầu ra của mạch điện.
Ø PR2=?
Ø Với CCP1: D%=40% >CCPR1L,CCP1CON=?
Ø Với CCP2: D%=60% >CCPR2L,CCP2CON=?
d) Vẽ lưu đồ giải thuật.
#include <xc.h>
#define _XTAL_FREQ 4000000
__CONFIG(……..);
void main (void)
{ ANSEL=ANSEL=0;
TRISB =0X07 ; nRBPU = 0; WPUB = 0x07;
while(1)
{
if (!RB0 )
{
while(!RB0);
TRISC2 = 1;TRISC1=1;
TMR2 = 0;
PR2 = 199;
CCPR1L =80; CCP1CON = 0X0C;
TRISC2 = 0;T2CON = 0x00;TMR2ON = 1;}
else if (!RB1)
{
while(!RB1);
TRISC1 = 1; TRISC2=1;
TMR2 = 0; PR2 =199;
CCPR2L = 120;CCP2CON = 0X0C;
TRISC1 = 0;
T2CON = 0x00; TMR2ON = 1;
}
else if (!RB2 )
{
while(!RB2);
TRISC2 = 1;
TRISC1 = 1;
}