Tải bản đầy đủ (.pdf) (50 trang)

TÀI LIỆU MÔN KĨ THUẬT VI XỬ LÍ PIC18F4520

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.27 MB, 50 trang )

BÀI 7. BIẾN ĐỔI TƯƠNG TỰ - SỐ (ADC)
Mục tiêu của bài học:
(1) Trình bày được một số khái niệm, đặc điểm và hoạt động của ADC;
(2) Trình bày được đặc điểm, hoạt động và tính chọn giá trị cho các thanh
ghi của bộ ADC trên PIC18F4520;
(3) Thiết lập và điều khiển chuyển đổi tương tự - số sử dụng thư viện
ADC.h;
(4) Lập trình ứng dụng chuyển đổi tương tự - số và hiển thị kết quả trên led
đơn; Lập trình đo điện áp và điều khiển thiết bị.
7.1. Giới thiệu bộ chuyển đổi tương tự - số (ADC)
- Bộ chuyển đổi tương tự sang số – ADC (Analog to Digital Converter),
lấy mức điện thế vào tương tự, sau một khoảng thời gian sẽ sinh ra mã
đầu ra dạng số.
- Đầu vào tưng tự: VA
- Lệnh START: Ra lệnh bắt đầu biến đổi
- ECO: Tín hiệu báo chuyển đổi xong
- VA > VAX: dừng chuyển đổi
- Xung Clock: xung nhịp chuyển đổi ADC
- Độ phân giải: được biểu thị bằng số bit của tín hiệu số đầu ra. Số lượng
bit càng nhiều sai số lượng tử càng nhỏ, độ chính xác càng cao. Thông
thường số bit đầu ra là 4, 8, 16, 32 bit …
- Điện áp tham chiếu: Là giải điện áp sử dụng để so sánh với tín hiệu đầu
vào, bao gồm điện áp tham chiếu trên(+) VREF+; và điện áp tháp chiếu
dưới(-) VREF- .
- Tốc độ chuyển đổi: Tốc độ chuyển đổi được xác định bởi thời gian cần
thiết hồn thành một lần chuyển đổi A/D.
- Cơng thức chuyển đổi tương tự - số
𝑽𝑨 =

𝑫𝒐𝒖𝒕 ∗(𝑽𝒓𝒆𝒇+ − 𝑽𝒓𝒆𝒇− )
+ 𝑽𝒓𝒆𝒇−


𝟐𝒏 −𝟏

VA

Điện áp vào tương tự

Dout

Đầu ra số (10 bit)

𝑉𝑟𝑒𝑓+

Điện áp thap chiếu trên (+)


𝑉𝑟𝑒𝑓−

Điện áp tham chiếu dưới (-)

7.2. Bộ ADC trên vi điều khiển PIC18F4520
- Giới thiệu:
 Một bộ biến đổi ADC 10 bit;
 13 kênh đầu vào AN0-AN12, chuyển kênh bằng phần mềm;
 Điện áp tham chiếu có thể lựa chọn từ nguồn cấp(VSS, VDD) hoạc
bên ngoài (AN2, AN3) bằng phần mềm;
 Nguồn xung được lấy từ FOSC.
- Lựa chọn hệ số chia tần cho ADC

- Lựa chọn cách ghi giá trị số trên thanh ghi


+ Ghi dồn bên phải: 10 bit ADC lưu vào D9 đến D0 của 2 thanh ghi chứa
+ Ghi dồn bên trái: 10 bit ADC lưu vào D15 đến D6 của 2 thanh ghi chứa
7.3 Lựa cọn giá trị cho ADCON1

Ví dụ: Thiết lập giá trị của than ghi ADCON1 để AN3 là đầu vào tương tự?


Để lựa chọn cho AN3 là đầu vào tương tự thì PCFG3:PCFG0 có thể thiết
lập các giá trị từ 0000 đến 1011. Nếu cần sử dụng AN4 đến AN12 là đầu vào/ra
số thì thiết lập giá trị cho PCFG3:PCFG0 là 1011.
Vì vậy: ADCON1 = 0b00001011; hay portconfig = 11.


7.4. Ví dụ áp dụng
- Mạch điện

- Yêu cầu:
Cho sơ đồ mạch điện mơ phỏng như hình bên. Lập trình chuyển đổi tín
hiệu tương tự từ AN0 sang số. Tám bit trọng số thấp D7-D0 của giá trị số
được gán trên PORTC; 2 bit trọng số cao D9, D8 được gán trên D1, D0 của
PORTD, FOSC=8MHz.


- Chương trình điều khiển

- Kết quả mơ phỏng

Dout = 0b1011111111 = 767 (D)
Vref+ = 5V; Vref- = 0V



Nên : VA = (767 * 5)/1023 = 3.74877 (V),
Nhận xét: Điện áp đo được bằng vi điều khiển đúng với điện áp đo trên đồng hồ
là 3.5V.


BÀI 8. ĐIỀU CHẾ ĐỘ RỘNG XUNG (PWM)
Mục tiêu của bài học
(1) Trình bày được một số khái niệm và ứng dụng của xung PWM;
(2) Trình bày được đặc điểm, hoạt động và tính chọn giá trị cho các thanh ghi
của bộ điều chế độ rộng xung (PWM) trên PIC18F4520;
(3) Lập trình điều khiển PWM sử dụng thư viện pwm.h;
(4) Lập trình ứng dụng tạo xung PWM trên kênh CCP1 để điều khiển tốc độ
MOTOR một chiều.
8.1. Một số khái niệm, quy ước chung
- Điều chế độ rộng xung (PWM) được viết tắt bởi cụm từ tiếng Anh (PulseWidth Modulation). Đây là phương pháp điều chế độ rộng của xung vng có
chu kỳ khơng đổi.

- Ứng dụng của xung PWM:
• Điều khiển góc quay của động cơ RC Servo
• Trong viễn thơng, PWM là một dạng điều chế tín hiệu, trong đó độ rộng
xung tương ứng với các giá trị dữ liệu cụ thể được mã hoá ở một đầu và
được giải mã ở đầu kia
• Điều khiển độ sáng của đèn (đèn nền màn hình LCD, độ sáng led quảng
cáo…)
• Điều khiển tốc độ motor DC( robot, xe đạp điện…)


• Điều chỉnh điện áp
8.2. Bộ tạo xung PWM trên PIC18F4520


- Chu kì là khoảng cách từ S tới S. Tín hiệu S được tạo bởi sự so sánh bằng giữa
bộ đếm TMR2 với giá trị của thanh ghi PR2.
- Độ rộng là khoảng cách từ S tới R. Tín hiệu R được tạo bởi sự so sánh bằng
giữa bộ đếm TMR2 với 10 bit (CCPRxL:CCPxCON<5:4>).
- Thiết lập chu kì

- Thiết lập độ rộng

Chú ý: 1

- Thiết lập hệ số chia tần cho Timer2 bằng thanh ghi T2CON

Ví dụ: đoạn chương trình thiết lập hệ số chia 1 cho Timer2 là:
T2CONbits.T2CKPS1=0;
T2CONbits.T2CKPS0=0;
8.3. Điều khiển PWM sử dụng thư viên pwm.h
- Các hàm trong thư viện ADC.h

Tra cứu nội dung các hàm trên tong Tài liệu tra cứu PIC, Giáo trình Vi
điều khiển PIC hoạc tài liệu hướng dẫn sử dụng thư viện MCC18.


8.4. Ví dụ áp dụng
- Mạch điện

- Yêu cầu:
Cho sơ đồ mạch điện như hình trên:
Với FOSC = 8MHz, lập trình tạo xung PWM1(CCP1) có tần số 1KHz, độ rộng

xung bằng 70% chu kì.


- Chương trình điều khiển

- Kết quả mơ phỏng


BÀI 3. NGẮT NGOÀI
Mục tiêu bài học:
Sinh viên nhớ và hiểu:
₋ Khái quát về ngắt
+ Khái niệm về ngắt
+ Lý do cần sử dụng ngắt
₋ Ngắt ngoài trên PIC18F4520
+ Các vector
+ Các nguồn ngắt
₋ Quá trình thực hiện ngắt của vi điều khiển
₋ Các bit điều khiển ngắt ngoài;
₋ Các bước lập trình sử dụng ngắt ngồi.
Sinh viên vận dụng các kiến thức đã học để lập trình, mơ phỏng hoạt
động của ngắt ngoài, bao gồm:
- 01 nguồn ngắt với mức ưu tiên cao;
- 01 nguồn ngắt với mức ưu tiên thấp;*
- 02 nguồn ngắt với mức ưu tiên khác nhau.*
*: Học trực tiếp (trên lớp).
3.1. Khái quát về ngắt
Khái niệm chung: Ngắt là tạm thời dừng công việc hiện tại và chuyển sang thực
hiện một nhiệm vụ khác (thường là cấp thiết, quan trọng hơn) sau đó lại quay lại
thực hiện tiếp công việc cũ (đang thực hiện dở).

Khái niệm ngắt ở vi điều khiển: Khi vi điều khiển đang thực hiện các lệnh ở
chương trình chính (CTC), nếu có tín hiệu ngắt (giả thiết là trước đó đã cho phép
ngắt), vi điều khiển sẽ thực hiện nốt lệnh đang thực hiện dở (giả sử là lệnh thứ n)
và tạm dừng CTC, chuyển sang thực hiện chương trình con phục vụ ngắt
(CTCPVN). Sau khi thực hiện xong CTCPVN, vi điều khiển lại quay trở lại thực
hiện tiếp các lệnh ở CTC (từ lệnh thứ n+1).


Vai trò của khối xử lý ngắt: Giúp cho vi điều khiển trở nên “đa nhiệm” hơn, ví
dụ: Vừa có thể thực hiện điều khiển tuần tự, vừa có thể trao đổi dữ liệu.
3.2. Ngắt ngồi trên PIC18F4520
- PIC18F4520 có 02 vector ngắt khác nhau, bao gồm:
+ 0x0008: vector ngắt ưu tiên cao;
+ 0x0018: vector ngắt ưu tiên thấp. (xem thêm mục 4.2 trong giáo trình
hoặc mục 9.0 trong tài liệu PIC18F4520 datasheet)
- PIC18F4520 có 15 nguồn ngắt khác nhau (xem thêm mục 4.2 trong giáo trình
hoặc mục 9.0 trong tài liệu PIC18F4520 datasheet.
- Ngắt ngoài (External Interrupt): Là ngắt gây ra bởi nguyên nhân đến từ bên bên
ngoài vi điều khiển. PIC184520 có 3 nguồn ngắt ngồi, gọi tắt là INT0, INT1 và
INT2. Để gây ra ngắt cần có mạch điện bên ngoài tạo ra sự chuyển mức logic từ
“0” sang “1” (thường được gọi là sườn dương) hoặc sự chuyển mức logic từ “1”
sang “0” (thường được gọi là sườn âm) đưa đến chân RB0/INT0 hoặc RB1/INT1
hoặc RB2/INT2
3.3. Quá trình thực hiện ngắt của vi điều khiển
Khái niệm về con trỏ lệnh: Là một thanh ghi đặc biệt, luôn trỏ và lệnh tiếp theo
sẽ được thực hiện. Khi hoạt động, vi điều khiển đọc (lấy) mã lệnh ở ơ nhớ trong
bộ nhớ chương trình có địa chỉ tương ứng với giá trị của IP để giải mã và thực
hiện lệnh.

Quá trình thực hiện ngắt của vi điều khiển:

Giả thiết tín hiệu ngắt đến khi vi điều khiển đang thực hiện ở lệnh thứ N trong
CTC, khi đó vi điều khiển sẽ thực hiện theo trình tự sau:
- Thực hiện nốt lệnh thứ N; lưu giá trị của các thanh ghi vào ngăn xếp, trong đó
có IP=0xabcd;


- Chuyển sang thực hiện CTCPVN bằng cách gán cho IP giá trị 0x0008 (nếu là
ngắt có mức ưu tiên cao) hoặc 0x0018 (nếu là ngắt có mức ưu tiên thấp).
- Sau khi thực hiện xong các lệnh của CTCPVN, vi điều khiển quay lại thực hiện
tiếp các lệnh của CTC bằng cách gán cho IP giá trị 0xabcd+1 (nếu lệnh thứ N
được mã hóa bằng 1 byte) đồng thời phục hồi lại giá trị của các thanh khi khác.
3.4. Các bit điều khiển ngắt ngoài
Các bit điều khiển ngắt ngoài nằm trong các thanh ghi sau (xem thêm mục 4.4
trong giáo trình hoặc mục 9.1-9.6 trong tài liệu PIC18F4520 datasheet):
- Thanh ghi ADCON1:
Thiết lập các chân AN0-AN12 là vào/ra số hoặc vào tương tự.

bit 7



VCFG1

VCFG0

PCFG3

PCFG2

PCFG1


PCFG0
bit 0

- Thanh ghi TRISB:
Thiết lập các chân RB0-RB7 có chiều vào hoặc ra (số).
Khi sử dụng các nguồn ngắt ngoài INT0, INT1 hoặc INT2, cần thiết lập chiều
vào cho các chân RB0/INT0, RB1/INT1 hoặc RB2/INT2.
Ví dụ: Khi sử dụng nguồn ngắt INT1 cần viết:
TRISB=0bxxxxxx1x;
Trong đó: x có thể là 0 hoặc 1 nếu các chân RB0, RB2-RB7 không được sử dụng.
- Thanh ghi INTCON:
GIE/GIEH PEIE/GIEL
bit 7

TMR0IE

INT0IE

RBIE

TMR0IF

INT0IF

RBIF(1)
bit 0




RBIP
bit 0

- Thanh ghi INTCON2
RBPU
bit 7

INTEDG0 INTEDG1 INTEDG2



TMR0IP

- Thanh ghi INTCON3
INT2IP
bit 7

INT1IP



INT2IE

INT1IE



INT2IF

INT1IF

bit 0



/RI

/TO

/PD

/POR

/BOR
bit 0

- Thanh ghi RCON
IPEN
bit 7

SBOREN


3.5. Các bước lập trình sử dụng ngắt ngồi
3.5.1. Khung chương trình có sử dụng ngắt và cách viết
Ngồi các phần tương tự như một chương trình khơng sử dụng ngắt (khai báo thư
viện, biến/hằng số, cấu hình, chương trình chính), khung chương trình có sử dụng
ngắt có thêm 02 điểm để viết các CTCPVN (phần tô vàng bên dưới) tương ứng
với ngắt có mức ưu tiên cao (vector 0x0008) và ngắt có mức ưu tiên thấp (vector
0x0018), cụ thể như sau:
//khai báo thu viện

//Cấu hình hệ thống
void low_isr(void);
void high_isr(void);
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{_asm GOTO low_isr _endasm}
#pragma code
#pragma interruptlow low_isr
void low_isr (void)
{
// Các lệnh của CTCPVN với mức ưu tiên thấp
}
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{_asm GOTO high_isr _endasm}
#pragma code
#pragma interrupt high_isr
void high_isr (void)
{
//Các lệnh của CTCPVN với mức ưu tiên cao
}


void main()
{
// Các lệnh khởi tạo ngắt
// Các lệnh khác thuộc CTC
}

TIPs: Sử dụng “Tài liệu tra cứu PIC” hoặc tài liệu “MPLAB® C18

C COMPILER USER’S GUIDE” để viết khung chương trình:
- Nhập từ khóa vector=0x08, copy phần khung CTCPVN ở mục 2.9.2.3:

- Dán (paste) vào sau các câu lệnh cấu hình (#pragma):


Khi biên dịch, các phần khác nhau trong khung chương trình trên sẽ được trình
biên dịch bố trí vào các vị trí khác nhau trong bộ nhớ chương trình, cụ thể như
sau:
Reset vector
//mã của lệnh chuyển tới

0x0000
thực hiện hàm main

High-Priority Interrupt Vector

0x0008

{_asm GOTO high_isr _endasm}

High-Low Interrupt Vector

0x0018

{_asm GOTO low_isr _endasm}

void main()
{
// Các lệnh thuộc CTC

}
void high_isr (void)
{
//Các lệnh của CTCPVN với mức ưu tiên cao
}
void low_isr (void)
{
//Các lệnh của CTCPVN với mức ưu tiên thấp
}

Vùng
địa
chỉ
do
trình
biên
dịch
gán

0x3FFF
Khi reset, vi điều khiển sẽ đọc mã lênh ở địa chỉ 0x0000. Do vùng nhớ dành cho
reset vector chỉ gồm 08 byte có địa chỉ từ 0x0000 đến 0x0007 nên không đủ để
chứa mã lệnh của chương trình chính. Bởi vậy ở đây chỉ chứa mã của lệnh gọi tới
hàm main. Tương tự như vậy, vùng nhớ dành cho High-Priority Interrupt Vector
và Low-Priority Interrupt Vector thường cũng khơng đủ để viết các lệnh của
CTCPVN có mức ưu tiên cao và CTCPVN có mức ưu tiên thấp nên ở đây chi
chứa mã của lệnh gọi tới các hàm high_isr và low_isr.
3.5.2. Viết các lệnh của chương trình chính.
a. Khởi tạo ngắt
Ngồi viết các lệnh khởi tạo giá trị thích hợp cho ADCON1 và TRISB, để khởi

tạo ngắt cần tác động đến các bit GIE, INTxIE và INTEDGx. Khi xảy ra ngắt, bit
cờ ngắt tương ứng (INTxIF) sẽ được đặt bằng 1. Để biết các bit GIE, INTxIE,


INTEDGx và INTxIF thuộc thanh ghi nào cần nhớ các từ khóa GIE, INTxIE,
INTEDGx và INTxIF (x=0, 1 hoặc 2) và tra cứu trong “Tài liệu tra cứu PIC” hoặc
tài liệu “PIC18F4520 Data Sheet”. Hình dưới minh họa cách sử dụng tài liệu
“PIC18F4520 Data Sheet” để tra cứu bit INT0IE.

b. Các lệnh theo đề bài
Các lệnh được viết ở chương trình chính sẽ là “các cơng việc tuần tự, lặp lại”. Ví
dụ với u bài tốn sau:
U1

Giả thiết có mạch điện mơ phỏng
R1

như hình bên. Viết chương trình

PB

điều khiển:

R2

- Các LED1-4 sáng tuần

R4

tự theo chu trình như hình dưới;


560

- LED5 sáng trong thời gian ~1s
khi nhấn PB.

4k7

LED1

33
34
35
36
37
38
39
40

560

R3
560

560

R5
R6
560


2
3
4
5
6
7
14
13

RA0/AN0/C1INRC0/T1OSO/T13CKI
RA1/AN1/C2INRC1/T1OSI/CCP2B
RA2/AN2/C2IN+/VREF-/CVREF
RC2/CCP1/P1A
RA3/AN3/C1IN+/VREF+
RC3/SCK/SCL
RA4/T0CKI/C1OUT
RC4/SDI/SDA
RA5/AN4/SS/HLVDIN/C2OUT
RC5/SDO
RA6/OSC2/CLKO
RC6/TX/CK
RA7/OSC1/CLKI
RC7/RX/DT
RB0/AN12/FLT0/INT0
RB1/AN10/INT1
RB2/AN8/INT2
RB3/AN9/CCP2A
RB4/KBI0/AN11
RB5/KBI1/PGM
RB6/KBI2/PGC

RB7/KBI3/PGD

RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5/P1B
RD6/PSP6/P1C
RD7/PSP7/P1D
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
RE3/MCLR/VPP

LED5

15
16
17
18
23
24
25
26
19
20
21
22
27

28
29
30
8
9
10
1

R7
10k

PIC18F4520

Các lệnh được viết ở chương trình chính sẽ là “điều khiển các LED1-4 sáng tuần
tự theo chu trình”
3.5.3. Viết các lệnh của CTCPVN.


Các lệnh được viết ở CTCPVN sẽ là “các công việc được thực hiện khi xảy ra
ngắt”.
Ví dụ với bài toán trên, nếu ngắt INT2 được khởi tạo, khi nhấn PB sẽ gây ra ngắt.
Vì vậy, “điều khiển LED5 sáng trong thời gian ~1s” sẽ được đặt ở CTCPVN.
3.6. Lập trình, mơ phỏng hoạt động của ngắt ngồi
Từ các phân tích nêu trong mục 3.5, thuật tốn của bài tốn được trình bày như
sau:
CTC

CTCPVN

Begin


Từ CTC

Khởi tạo:
- Vào/ra số;
- RB2: vào; RB3-RB7: ra
- Cho phép ngắt INT2, ngắt bằng
sườn âm

Xóa cờ ngắt;
Điều khiển LED5 sáng trong ~1s
Về CTC

Điều khiển LED1-LED4 sáng theo
chu trình

Điều kiện kết
thúc?

Đ
End

S


Thể hiện bằng câu lệnh:
Viết ở CTC:

Khởi tạo:
- Vào/ra số;

- RB2: vào; RB3-RB7: ra
- Choởphép
ngắt INT2, ngắt bằng
Viết
CTCPVN:
sườn âm

Điều khiển LED1-LED4 sáng theo
chu trình

ADCON1=0x0F;
TRISB=0b00000111;
INTCONbits. GIE=1;
INTCON3bits.INT2IE=1;
INTCON2bits.INTEDG2=0;

while(1)
{
PORTB=0b0000100; //LED1 sáng
DelayKTCYx(100); // trễ
PORTB=0b0001000; //LED2 sáng
DelayKTCYx(100); // trễ
PORTB=0b0010000; //LED3 sáng
DelayKTCYx(100); // trễ
PORTB=0b0100000; //LED4 sáng
DelayKTCYx(100); // trễ
}

Viết ở CTCPVN:


Xóa cờ ngắt;
Điều khiển LED5 sáng trong ~1s

INTCON3bits.INT2IF=0;
LED5=1;
Delay10KTCYx(100);
LED5=0;


Phần 1: Sử dụng trình dịch, phần mềm mơ phỏng; ghép nối phần cứng; lập trình điều
khiển vào/ra
Chú ý:
-

Các chân vào/ra được thay đổi để đảm bảo tất cả các đề thi không trùng lặp nhau.

Câu 1.1. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- 04 LED đơn LED1 - LED4 nối lần lượt với các chân
RD0 - RD3 theo sơ đồ như hình bên;
- Nút nhấn PB1 nối với RB0 theo sơ đồ như hình bên.

R

I/O pin

LED

560


VCC
R

I/O pin
PB

4k7

b. Vẽ lưu đồ thuật tốn và viết chương trình theo u cầu:
- Khi PB1 ở trạng thái nhả: các LED sáng/tắt theo chu trình sau:
LED1 sáng, các LED
khác tắt trong ≈ 1 giây

LED2 sáng, các LED
khác tắt trong ≈ 1 giây

LED3 sáng, các LED
khác tắt trong ≈ 1 giây

LED4 sáng, các LED
khác tắt trong ≈ 1 giây

- Khi PB1 ở trạng thái nhấn, tất cả các LED tắt.
Câu 1.2. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- 04 LED đơn LED1 - LED4 nối lần lượt với các chân
RD0 - RD3 theo sơ đồ như hình bên;
- Nút nhấn PB1 nối với RB0 theo sơ đồ như hình bên.

R


I/O pin

LED

560
I/O pin
PB

VCC
R
4k7

b. Vẽ lưu đồ thuật tốn và viết chương trình theo yêu cầu:
- Khi bật nguồn hoặc reset: 4 LED tắt;
- Nhấn PB1 một lần, LED1 sáng, các LED khác tắt; nhấn PB1 hai lần, LED2 sáng, các LED
khác tắt; nhấn PB1 ba lần, LED3 sáng, các LED khác tắt; nhấn PB1 bốn lần, LED4 sáng,
các LED khác tắt; nhấn PB1 từ năm lần trở lên, tất cả các LED sáng;


Câu 1.3. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- 04 LED đơn LED1 - LED4 nối lần lượt với các chân
RD0 - RD3 theo sơ đồ như hình bên;
- Nút nhấn PB1 nối với RB0 theo sơ đồ như hình bên.

R

I/O pin


LED

560

VCC
R

I/O pin
PB

4k7

b. Vẽ lưu đồ thuật tốn và viết chương trình theo yêu cầu:
- Khi bật nguồn hoặc reset: 4 LED tắt;
- Đếm số lần nhấn PB1 và hiển thị số dư của phép chia

ố ầ



dưới dạng số nhị

phân trên 4 LED (LED sáng tương ứng bit “1”, tắt tương ứng bit “0”). Giả thiết số lần nhấn
không lớn hơn 255 lần.

Câu 1.4. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- 04 LED đơn LED1 - LED4 nối lần lượt với các chân
RD0 - RD3 theo sơ đồ như hình bên;
- Nút nhấn PB1 nối với RB0; nút nhấn PB2 nối với

RB1 theo sơ đồ như hình bên.

R

I/O pin

LED

560
I/O pin
PB

VCC
R
4k7

b. Vẽ lưu đồ thuật toán và viết chương trình theo yêu cầu như bảng trạng thái sau:
Trạng thái PB1
Nhấn
Nhấn
Nhả
Nhả

Trạng thái PB2
Nhấn
Nhả
Nhấn
Nhả

LED1

Sáng
Tắt
Tắt
Tắt

LED2
Tắt
Sáng
Tắt
Tắt

LED3
Tắt
Tắt
Sáng
Tắt

LED4
Tắt
Tắt
Tắt
Sáng


Câu 1.5. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- LED1 nối với chân RD2; LED2 nối với chân RD3 theo
sơ đồ như hình bên;
- Nút nhấn PB1 nối với RB0; nút nhấn PB2 nối với
RB1 theo sơ đồ như hình bên.


R

I/O pin

560
I/O pin
PB

b. Vẽ lưu đồ thuật tốn và viết chương trình theo yêu cầu như sau:
- Khi PB1 ở trạng thái nhả: LED1 và LED2 tắt;
- Khi PB1 ở trạng thái nhấn:
Số lần nhấn PB2
0 lần
1 lần
2 lần
Từ 3 lần trở lên

LED1
Tắt
Tắt
Sáng
Sáng

LED

LED2
Tắt
Sáng
Tắt

Sáng

VCC
R
4k7


Phần 2: Thiết kế các ứng dụng sử dụng Ngắt, Timer, PWM, ADC, USART
2.1. Thiết kế các ứng dụng sử dụng ngắt ngoài
Câu 2.1.1. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- LED1 nối với chân RC1; LED2 nối với chân RC2 theo
sơ đồ như hình bên;
- Nút nhấn PB1 nối với chân RB0/INT0 theo sơ đồ như
hình bên.

I/O pin

R

LED

560

VCC
R

INTx
PB


4k7

b. Vẽ lưu đồ thuật tốn và viết chương trình theo yêu cầu như sau:
- Khi bật nguồn hoặc reset: LED1 sáng/tắt liên tục.
- Khi nhấn PB1, LED1 lập tức ngừng sáng/tắt, LED2 sáng/tắt 5 lần sau đó sau đó tắt và
LED1 tiếp tục sáng/tắt.
Thời gian sáng/tắt của LED: ≈1 giây.
Câu 2.1.2. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- LED1÷LED4 nối với các chân RD0÷RD3 theo sơ đồ
như hình bên;
- Nút nhấn PB1 nối với chân RB1/INT1 theo sơ đồ như
hình bên.

I/O pin

R

LED

560

VCC
R

INTx
PB

4k7


b. Vẽ lưu đồ thuật tốn và viết chương trình theo yêu cầu như sau:
LED4 sáng/tắt liên tục với thời gian sáng/tắt: ≈1 giây trong khi LED1÷LED3 hiển thị số lần
nhấn PB1 dưới dạng số nhị phân (LED sáng tương ứng với bit “1”; LED tắt tương ứng với
bit “0”). Giả thiết số lần nhấn PB1 không lớn hơn 7 lần.

2.2. Thiết kế các ứng dụng sử dụng timer
Câu 2.2.1. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
Chân RD0 nối với máy hiện sóng (oscilloscope) như hình bên

I/O pin

oscilloscope

b. Xác định hệ số chia tần, giá trị khởi tạo cho timer và viết chương trình theo yêu cầu như
sau:
Sử dụng Timer0 tạo xung có tần số 50Hz trên chân RD0, biết FOSC=12 Mhz.


Câu 2.2.2. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
- LED1÷LED8 nối với các chân RD0÷RD7 theo sơ đồ như hình bên;
- Nút nhấn PB1 nối với chân RC0/T13CKI theo sơ đồ như hình bên.

R

I/O pin

LED


560
TxCKI
PB

VCC
R
4k7

b. Xác định hệ số chia tần, giá trị khởi tạo cho timer, chế độ hoạt động của timer và viết
chương trình theo yêu cầu như sau:
Sử dụng Timer1 đếm số lần nhấn PB1 và hiển thị số lần nhấn dưới dạng số nhị phân trên
LED1÷LED8 (LED sáng tương ứng với bit “1”; LED tắt tương ứng với bit “0”). Giả thiết số
lần nhấn không quá 255 lần.
2.3. Thiết kế các ứng dụng sử dụng PWM
Câu 2.3.1. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
Chân RC2/CCP1 nối với máy hiện sóng (oscilloscope) như hình bên;
PIC18F4520 hoạt động ở tần số 12Mhz.

CCPx

oscilloscope

b. Xác định hệ số chia tần, giá trị khởi tạo cho PR2 (hoặc đối số của hàm OpenPWMx), giá
trị khởi tạo cho CCPRxL:CCPxCON<5:4> (hoặc đối số của hàm SetDCPWMx) và viết
chương trình theo yêu cầu như sau:
Tạo xung trên chân CCP1 có chu kỳ 300µs, độ rộng nửa chu kỳ dương 120µs..
Câu 2.3.2. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
Chân RB3/CCP2A nối với máy hiện sóng (oscilloscope) như hình bên;

PIC18F4520 hoạt động ở tần số 12Mhz.

CCPx

oscilloscope

b. Xác định hệ số chia tần, giá trị khởi tạo cho PR2 (hoặc đối số của hàm OpenPWMx), giá
trị khởi tạo cho CCPRxL:CCPxCON<5:4> (hoặc đối số của hàm SetDCPWMx) và viết
chương trình theo yêu cầu như sau:
Tạo xung trên chân CCP2A có chu kỳ 800µs, độ rộng nửa chu kỳ dương: 240µs
Câu 2.3.3. Vẽ, lắp ráp mạch điện và lập trình theo yêu cầu:
a. Vẽ, lắp ráp mạch điện như sau:
Chân RC1/CCP2B nối với máy hiện sóng (oscilloscope) như hình bên;
PIC18F4520 hoạt động ở tần số 12Mhz.

CCPx

oscilloscope

b. Xác định hệ số chia tần, giá trị khởi tạo cho PR2 (hoặc đối số của hàm OpenPWMx), giá
trị khởi tạo cho CCPRxL:CCPxCON<5:4> (hoặc đối số của hàm SetDCPWMx) và viết
chương trình theo yêu cầu như sau:
Tạo xung trên chân CCP2B có chu kỳ 80µs, độ rộng nửa chu kỳ dương: 20µs


×