Professional Documents
Culture Documents
Slide Bai Giang
Slide Bai Giang
Mục tiêu:
• Sinh viên nhớ và hiểu:
(1) Khái quát về hoạt động định thời/đếm
(2) Cấu tạo và nguyên lý hoạt động của các bộ đếm
(3) Ứng dụng của bộ đếm
(4) Timer0
(5) Các bước lập trình sử dụng Timer0.
• 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 Timer0,
Timer1*, Timer2*, Timer3* (bao gồm lập trình tạo khoảng thời gian xác định và lập
trình đếm sự kiện).
*: Học trên lớp
Sinh viên nên thực hiện bài học bằng việc kết hợp xem clip, xem đề cương bài giảng và đọc các
nội dung trong giáo trình đã được chỉ ra trong đề cương bài giảng.
Bài 4. Các bộ định thời/đếm #3
(1) Khái quát về hoạt động định thời/đếm
• Khái niệm về hoạt động định thời/đếm:
Hoạt động định thời: tạo ra các khoảng thời gian xác định.
Hoạt động đếm: đếm các sự kiện xảy ra.
Hoạt động định thời/đếm trên vi điều khiển PIC18F4520 được phân biệt dựa vào nguồn xung
clock đầu vào của các bộ Timer:
Chế độ định thời: nguồn xung clock đầu vào phải ổn định (xung nhịp của vi điều khiển).
Chế độ đếm: nguồn xung clock đầu vào là xung ngoài (thường là các sự kiện xảy ra ngẫu nhiên)
đưa đến vi điều khiển.
Bài 4. Các bộ định thời/đếm #4
(1) Khái quát về hoạt động định thời/đếm
• Tại sao cần các bộ định thời/đếm?
Giảm được các tác vụ lặp đi lặp lại chỉ để nhằm tạo khoảng thời gian xác định
Linh hoạt trong việc khai thác tài nguyên của vi điều khiển
Thuận lợi cho việc triển khai đa tác vụ trên vi điều khiển.
Tạo khoảng thời gian xác định dùng lệnh NOP Tạo khoảng thời gian xác định dùng timer
NOP Task1
NOP Task2
… …
NOP TaskN
Trong khoảng thời gian này, vi điều khiển Trong khoảng thời gian này, vi điều khiển
không thực hiện tác vụ nào khác thực hiện được nhiều tác vụ khác
Bài 4. Các bộ định thời/đếm #5
(2) Cấu tạo và hoạt động các bộ Timer
• Cấu tạo các bộ Timer:
Một bộ Timer n-bit được tạo thành bởi n flip-flop mắc nối tiếp nhau (tham khảo lại học phần
Điện tử số về các mạch dãy).
Tín hiệu xung được đưa vào flip-flop đầu tiên.
Đầu ra của n flip-flop là thể hiện giá trị hiện thời của n bit của bộ đếm.
Mô phỏng mạch đếm dùng JK-FF
U1:A U1:B U2:A U2:B U3:A U3:B
74107 74107 74107 74107 74107 74107
1 3 8 5 1 3 8 5 1 3 8 5
J Q J Q J Q J Q J Q J Q
U1:A(CLK)
12 9 12 9 12 9
CLK CLK CLK CLK CLK CLK
4 2 11 6 4 2 11 6 4 2 11 6
K Q K Q K Q K Q K Q K Q
R
R
D1 D2 D3 D4 D5 D6
13
10
13
10
13
10
LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW LED-YELLOW
R1 R2 R3 R4 R5 R6
330 330 330 330 330 330
Bài 4. Các bộ định thời/đếm #6
(2) Cấu tạo và hoạt động các bộ Timer
• Hoạt động của Timer:
Bộ Timer sẽ đếm tiến hoặc lùi (VĐK PIC18F4520 chỉ có chế độ đếm tiến) khi xuất hiện
chuyển mức tín hiệu của nguồn xung clock đầu vào (sườn dương hoặc sườn âm).
• Trình tự điều khiển Timer:
o Chọn nguồn xung đầu vào
o Đặt giá trị khởi tạo (giá trị ban đầu của các thanh ghi chứa số đếm)
o Bật Timer
o Đếm tiến từ giá trị khởi tạo đến khi xảy ra tràn
o Khi tràn: TMRxIF=1 (x = 0,1,2,3 tương ứng với 4 bộ Timer)
o Gửi yêu cầu ngắt đến CPU (nếu có dùng ngắt)
Bài 4. Các bộ định thời/đếm #7
(2) Cấu tạo và nguyên lý hoạt động các bộ Timer
• Hoạt động của Timer (tiếp):
Ví dụ hoạt động bộ đếm 16 bit:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Decimal
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 3
… … … … … … … … … … … … … … … … …
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 65534
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 65535
Tràn 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
Bài 4. Các bộ định thời/đếm #8
(3) Ứng dụng của timer/counter
• Các bộ Timer được ứng dụng nhiều trong đo lường và điều khiển
Tạo xung, hẹn thời gian bật/tắt của một thiết bị
Điều chế độ rộng xung
Đo tần số
Đếm sản phẩm
…
Bài 4. Các bộ định thời/đếm #9
(4) Timer0
Vi điều khiển PIC18F4520 có 4 bộ Timer hoạt động ở các chế độ đếm và định thời.
Timer0 có thể hoạt động ở chế độ 8 bit hoặc 16 bit, định thời hoặc chế độ đếm
phụ thuộc vào việc cấu hình bằng phần mềm.
• Các thanh ghi liên quan đến Timer0 (không sử dụng ngắt)
Bài 4. Các bộ định thời/đếm #10
(4) Timer0
• Các chế độ hoạt động của Timer0
Chế độ 8 bit:
RA4
Bài 4. Các bộ định thời/đếm #11
(4) Timer0
• Các chế độ hoạt động của Timer0
Chế độ 16 bit:
RA4
Bài 4. Các bộ định thời/đếm #12
(5) Lập trình cho Timer0
• Các bước lập trình cho Timer0
Viết khung chương trình theo đúng định dạng
Viết các lệnh của chương trình chính:
- B1: Khởi tạo các PORT (ADCON1, TRIS)
- B2: Khởi tạo thanh ghi T0CON
- B3: Nạp giá trị bắt đầu cho các thanh ghi TMR0H và TMR0L đáp ứng yêu cầu đề bài
- B4: Set bit TMR0ON lên 1 để Timer0 bắt đầu đếm và các lệnh thực hiện yêu cầu của đề bài
Bài 4. Các bộ định thời/đếm #13
(5) Lập trình cho Timer0
• Lập trình tạo khoảng thời gian xác định cho Timer0
Cho mạch điện như hình vẽ, lập trình điều khiển để LED D1 sáng nhấp nháy với chu kỳ 1 giây
(giả sử vi điều khiển hoạt động ở tần số Fosc=4MHz)
• Thực hiện bài toán U1
2 15
R1
10k
U1
2 15
RA0/AN0/C1IN- RC0/T1OSO/T13CKI
3 16
RA1/AN1/C2IN- RC1/T1OSI/CCP2B
4 17
RA2/AN2/C2IN+/VREF-/CVREF RC2/CCP1/P1A
5 18
RA3/AN3/C1IN+/VREF+ RC3/SCK/SCL
6 23
RA4/T0CKI/C1OUT RC4/SDI/SDA
7 24
RA5/AN4/SS/HLVDIN/C2OUT RC5/SDO
14 25
RA6/OSC2/CLKO RC6/TX/CK
13 26
RA7/OSC1/CLKI RC7/RX/DT
33 19
RB0/AN12/FLT0/INT0 RD0/PSP0
34 20
RB1/AN10/INT1 RD1/PSP1
35 21
RB2/AN8/INT2 RD2/PSP2
36 22
RB3/AN9/CCP2A RD3/PSP3
37 27
RB4/KBI0/AN11 RD4/PSP4
38 28
RB5/KBI1/PGM RD5/PSP5/P1B
39 29
RB6/KBI2/PGC RD6/PSP6/P1C
40 30
RB7/KBI3/PGD RD7/PSP7/P1D
+5V
8
RE0/RD/AN5
9
RE1/WR/AN6
D8 D7 D6 D5 D4 D3 D2 D1 RE2/CS/AN7
10
LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GREEN 1
RE3/MCLR/VPP
PIC18F4520
R9 R8 R7 R6 R5 R4 R3 R2
330 330 330 330 330 330 330 330
Bài 4. Các bộ định thời/đếm #19
(5) Lập trình cho Timer0
• Lập trình đếm sự kiện ngoài sử dụng Timer0
Cho mạch điện như hình vẽ, lập trình điều khiển sử dụng Timer0 đếm số lần nhấn nút, hiển
thị số lần đếm được dưới dạng số nhị phân trên 8 LED (D8: MSB, D1: LSB).
• Thực hiện bài toán
B1: khởi tạo các PORT
Các LED nối với PORTB, cần thiết lập PORTB để các chân có chiều ra -> TRISB = 0x00
Nút nhấn nối với chân RA4, cần thiết lập PORTA để chân RA4 có chiều vào ->
TRISAbits.TRISA4 = 1
B2: Khởi tạo thanh ghi T0CON: T0CON = 01111000b
Bài 4. Các bộ định thời/đếm #20
(5) Lập trình cho Timer0
• Lập trình đếm sự kiện ngoài sử dụng Timer0
Cho mạch điện như hình vẽ, lập trình điều khiển sử dụng Timer0 đếm số lần nhấn nút, hiển
thị số lần đếm được dưới dạng số nhị phân trên 8 LED (D8: MSB, D1: LSB).
• Thực hiện bài toán
B3: Tính toán giá trị nạp lại cho thanh ghi TMR0L (chỉ sử dụng thanh ghi này do lựa
chọn Timer0 làm việc ở chế độ 8 bit): Với yêu cầu của đề bài thì TMR0L được khởi tạo
là 0.
B4: Viết chương trình điều khiển theo yêu cầu của bài toán (xem chương trình đầy đủ
trong đề cương bài giảng).
• Thảo luận
Nếu muốn timer đếm tăng mỗi khi nhả nút thì cần sửa lại chương trình điều khiển ở lệnh
nào? SV tự sửa và chạy mô phỏng chương trình để kiểm tra.
Bài 4. Các bộ định thời/đếm #21