Download as pdf or txt
Download as pdf or txt
You are on page 1of 21

VI XỬ LÝ VÀ CẤU TRÚC MÁY TÍNH #1

Bài 4. CÁC BỘ ĐỊNH THỜI/ĐẾM


Bài 4. Các bộ định thời/đếm #2

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

B1: Khởi tạo các PORT


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 A

 LED D1 nối với RD0, cần thiết


6 23
RA4/T0CKI/C1OUT RC4/SDI/SDA
7 24
RA5/AN4/SS/HLVDIN/C2OUT RC5/SDO B
14 25
RA6/OSC2/CLKO RC6/TX/CK
13 26
RA7/OSC1/CLKI RC7/RX/DT C
lập PORTD để chân RD0 có chiều ra. 33
34
RB0/AN12/FLT0/INT0 RD0/PSP0
19
20
D
RB1/AN10/INT1 RD1/PSP1
35 21
RB2/AN8/INT2 RD2/PSP2
36 22
RB3/AN9/CCP2A RD3/PSP3
37
RB4/KBI0/AN11 RD4/PSP4
27 R1
38 28 330
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
RE2/CS/AN7
10 D1
1 LED-GREEN
RE3/MCLR/VPP
PIC18F4520
Bài 4. Các bộ định thời/đếm #14
(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
B2: Khởi tạo thanh ghi T0CON:
 Do yêu cầu của đề bài là D1 sáng nhấp nháy với chu kỳ 1 giây -> thời gian sáng, tắt là
0.5 giây -> cần dùng Timer0 tạo khoảng thời gian này -> xác định giá trị các bit trong
thanh ghi T0CON để thực hiện như sau:
TMR0ON T08BIT T0CS T0SE
16 bit, xung clock nội
0 0 0 0

PSA T0PS2 T0PS1 T0PS0 Chia tần 32


0 1 0 0
Bài 4. Các bộ định thời/đếm #15
(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
B3: Tính toán giá trị nạp lại cho 2 thanh ghi TMR0H và TMR0L:

FTimerClock  FOSC / 4 / PrescaleValue PrescaleValue


Delay  TimerCount *
1 FOSC / 4
TTimerClock 
FTimerClock Delay * FOSC / 4
PrescaleValue TimerCount 
 PrescaleValue
FOSC / 4 TimerRegInit  TimerMaxValue  TimerCount  1
Bài 4. Các bộ định thời/đếm #16
(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
B3: Tính toán giá trị nạp lại cho 2 thanh ghi TMR0H và TMR0L:
 Khi hệ số chia trước là 32, để tạo được thời gian xác định 0,5s -> áp dụng công thức
tính số xung cần đếm, tổng số xung clock để Timer0 đếm từ khi bắt đầu đến khi tràn là:
15625 (giá trị này phải là số nguyên)
 Tính toán giá trị nạp cho thanh ghi chứa 8 bit thấp:
TMR0L = (65536-15625)%256 (phép chia lấy phần dư)
 Tính toán giá trị nạp cho thanh ghi chứa 8 bit cao:
TMR0H = (65536-15625)/256 (phép chia lấy phần nguyên)
Bài 4. Các bộ định thời/đếm #17
(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
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).
Chạy mô phỏng kết quả
Bài 4. Các bộ định thời/đếm #18
(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).

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

• Tổng kết bài


(1) Khái niệm và sự cần thiết của hoạt động định thời/đếm
(2) Cấu tạo và nguyên lý hoạt động của các bộ timer
(3) Ứng dụng của timer/counter
(4) Timer0
(5) Lập trình sử dụng Timer0 tạo khoảng thời gian xác định và lập trình đếm sự
kiện.

You might also like