Professional Documents
Culture Documents
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 1
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Timer1 chính là Timer thuộc loại A. Hình 2.1 thể hiện cấu trúc của Timer loại A. Tính
năng độc đáo của Timer loại A cho phép nó được sử dụng như một timekeeping hoặc như
một clock hệ thống phụ (secondary system clock source).
Thanh ghi điều khiển TxCON của Timer loại A:
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 2
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Timer2 và Timer4 là Timer thuộc loại B. Hình 2.3 thể hiện cấu trúc bên trong của
Timer loại B. Timer loại B có thể ghép với Timer loại C tạo thành Timer 32 bits.
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 3
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Bảng 2.2. Bảng mô tả thanh ghi TxCON của Timer loại B.
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 4
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Timer3 và Timer5 là Timer loại C. Timer loại C có thể ghép với Timer loại B tạo thành
Timer 32 bits. Ngoài ra, Timer loại C còn có thể tạo trigger cho quá trình ADC.
Thanh ghi điều khiển TyCON của Timer loại C:
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 5
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 7
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 8
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
hoặc Timer đạt đến giá trị lưu trong thanh ghi chu kì. Khi chân TxCK xuống mức thấp,
ngắt có thể được sinh ra.
b. Thiết lập
Bit TCS được thiết lập bằng 0.
Bit TGATE (TxCON<6>) được thiết lập bằng 1.
c. Chương trình mẫu
/ * Ví dụ sau sẽ cho phép Timer2 sinh ra ngắt, nạp thanh ghi chu kì cho Timer2 và bắt đầu Timer2 với
xung clock hệ thống và chế độ gated time ở pin TxCK
Khi pin TxCK chuyển từ 1 xuống 0, ngắt sẽ được sinh ra.
Chu trình ngắt (ISR) phải xóa cờ ngắt.
*/
void Timer2_Init(void){
T2CON = 0x00;
/ / Dừng Timer2 và reset lại thanh ghi điều khiển.
TMR2 = 0x00;
/ / Xoá nội dung của Timer2
PR2 = 0xFFFF;
/ / Thiết lập thanh ghi chu kì với giá trị 0xFFFF
IPC1bits.T2IP = 0x01;
/ / Thiết lập ngắt cho Timer2 với độ ưu tiên là 1
IFS0bits.T2IF = 0;
/ / Xóa cờ ngắt của Timer2
IEC0bits.T2IE = 1;
/ / Cho phép Timer2 sinh ra ngắt
T2CONbits.TGATE = 1;
/ / Chế độ gated time
T2CONbits.TON = 1;
/ / Bắt đầu Timer2
}
/* Timer2 ISR * /
void __ attribute__ ((__interrupt__, auto_psv)) _T2Interrupt (void){
/* … * /
IFS0bits.T2IF = 0; / / Xóa cờ ngắt
}
2.4. Giới thiệu tóm tắt ngắt trong PIC24F
Ngắt trong PIC24 là một sự kiên xảy ra bên ngoài hoặc bên trong mà có thể tác động
nhanh đên CPU, làm cho CPU có thể ngưng công việc hiện tại và thực hiện công việc xử lý
sự kiện ngắt. PIC24 cho phép 118 nguồn ngắt khác nhau, mỗi nguồn ngắt được định nghĩa
duy nhất một đoạn code nhất định để phụ vụ gọi là “Interrupt Service Routine - ISR” và được
gắn kết trực tiếp thông qua một con trỏ hay một vector. Các ngắt có thể hoàn toàn không đồng
bộ với luồng thực thi của chương trình chính. Chúng có thể được kích hoạt tại bất kỳ thời
điểm nào và theo một trật tự không thể đoán trước. Đáp ứng nhanh với các ngắt là điều cần
thiết để cho phép phản ứng kịp thời với sự kiện kích hoạt và nhanh chóng quay trở lại luồng
thực hiện chương trình chính.
PIC24 có các ngắt bên ngoài như sau:
▪ 5 ngắt thông qua chân thiết bị ngoại vi.
▪ 22 ngắt dùng cho chân ngoại vi được kết nối với module Change Notification.
▪ 5 ngắt dùng cho module Capture modules.
▪ 5 ngắt dùng cho module Compare modules.
▪ 2 ngắt dùng cho UART.
▪ 4 ngắt dùng cho giao tiếp SPI và I2C.
▪ 1 ngắt dùng cho Parallel Master Port.
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 9
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Hình 2.7. Các thanh ghi dùng trong cấu hình Interrupt.
Hình 2.7 thể hiện bảng các thanh ghi dùng trong cấu hình Interrupt.
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 10
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 12
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
int main() {
TRISA = 0;
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 13
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
PORTA = 0;
Timer1_Init(62500);
while (1);
return 0;
}
Lưu ý: để timer có thể chạy đúng theo yêu cầu, sinh viên cần thiết lập dao động trên
MPLAB như hình 2.8 bên dưới.
4. Bài tập
4.1. Bài tập chuẩn bị ở nhà
1. Giải thích quy trình làm việc của Timer loại dựa trên hình 2.1.
2. Nếu muốn định thời ở khoảng thời gian 500 ms giây và 100 ms giây thì PRx sẽ
bằng bao nhiêu. Cho F = 4 Mhz và Prescale tự chọn.
Viết code C tương ứng.
3. Dựa vào file PIC24FJ128GA010 Family Data Sheet, cho biết ngắt Input Change
Notification là gì? Dựa vào file Explorer 16 Development Board User’s Guide cho
biết 2 nút nhấn S3 và S4 được kết nối với PIC24 bằng PORT gì và chân nào?
4.2. Bài tập trên lớp
1. Lập trình để hệ thống đếm lên sau 500 ms sử dụng Timer 2 ở chế độ định thời,
xuất kết quả ra led.
2. Lập trình để hệ thống thỏa mãn yêu cầu sau: Khi nhấn S3 1 lần thì LED7 chớp tốc
độ 1s, nhấn 2 lần thì chớp tốc độ s, …, nhấn 8 lần thì chớp tốc độ s, nếu nhấn 9 lần
thì quay lại trạng thái ban đầu. Lưu ý sử dụng ngắt ngoài cho SW. và ngắt timer.
3. Lập trình để hệ thống thỏa mã yêu cầu sau: Khi nhất S3 thì mạch đếm lên sau mỗi
500 ms, khi nhất S4 thì mạch đếm xuống sau mỗi 500 ms. Lưu ý sử dụng ngắt
ngoài cho SW và ngắt timer.
Gợi ý bài 2 và 3: Sử dụng ngắt ngoài Input Change Notification cho SW3 và SW4
sử dụng hàm khởi tạo và phục vụ ngắt như đoạn code bên dưới:
// CN – Change notification
void Interrupt_Init(){
TRISA = 0; // PORTA là output
TRISDbits.TRISD6 = 1; // Chân RD6 là input
TRISDbits.TRISD13 = 1; // Chân RD13 là input
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 14
Trường Đại học Khoa học Tự Nhiên Thực hành Vi điều khiển
Khoa Điện tử - Viễn thông
Bộ môn Máy Tính và Hệ Thống Nhúng – Khoa Điện Tử Viễn Thông Trang | 15