Lập trình bộ định thời (TIMER)
Số trang: 27
Loại file: pdf
Dung lượng: 257.07 KB
Lượt xem: 10
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Khi một ngắt xuất hiện và được CPU chấp nhận, chương trình chínhbị ngắt. Các thao tác sau đây xảy ra:- Hoàn tất việc thực thi lệnh hiện hành- Cất bộ đếm chương trình (PC) vào stack- Trạng thái của ngắt hiện hành được lưu giữ lại- Bộ đếm chương trình PC sẽ nạp địa chỉ của chương trình conphục vụ ngắt và đi thực hiện.- Thực hiện xong sẽ quay về chương trình chính tại vị trí nó bịngắt và thực hiện tiếp chương trình chính....
Nội dung trích xuất từ tài liệu:
Lập trình bộ định thời (TIMER)Lập trình bộ định thời (TIMER) Giới thiệu bộ định thời1. Các thanh ghi của bộ định thời - Timer 0: TH0, TL0 - Timer 1: TH1, TL1 - Các thanh ghi trạng thái và cài đặt chế độ hoạt động cho các bộ định thời: + TCON: Điều khiển + TMOD: Chọn chế độVị trí của các bộ định thời trong sơ đồ khối của chip 89X51/52 Các bộ định thờiVỊ TRÍ CÁC THANH GHI CỦA BỘ ĐỊNH THỜI TRONG VÙNG NHỚ ĐẶC BIỆT- SFRThanh ghi TMOD: Timer Mode Chọn chế độ hoạt độngTMOD D7 D6 D5 D4 D3 D2 D1 D0GATE M1 GATE M1 C/T M0 C/T M0 Chọn chế độ hoạt động Chọn chế độ hoạt động cho TIMER1 cho TIMER0Bit M0, M1 – của thanh ghi TMODTMODGATE C/T M1 M0 GATE C/T M1 M0 M1 M0 Chế độ Mô tả 0 0 0 Chế độ định thời 13 bit 0 1 1 Chế độ định thời 16 bit 1 0 2 Chế độ tự động nạp lại 8-bit 1 1 3 Chế độ định thời chia xẻThanh ghi TCON – Timer/Counter Control Register TCON D7 D6 D5 D4 D3 D2 D1 D0 TF1 TF0 IE1 IE0 TR1 TR0 IT1 IT0 Cờ ngắt Cờ ngắt Cờ ngắt Cờ ngắt của của ngoài 1 ngoài 0 Timer1 Timer0 Chế độ hoạt động của Timer- Chế độ 0: Chế độ định thời 13 bit- Chế độ 1: Chế độ định thời 16 bit - THx, TLx chứa giá trị đếm hiện tại của bộ định thời- Chế độ 2: Chế độ tự nạp lại 8-bit - Byte thấp giữ giá trị đếm hiện tại - Byte cao giữ giá trị nạp lại- Chế độ 3: Chế độ định thời chia xẻ Lập trình cho bộ định thời Timer 0• Ví dụ 1: lập trình cho bộ định thời 0 hoạt động ở chế độ 1, 16 bit, có thời gian tràn là 500us (sử dụng thạch 12Mhz). – Bước 1: Chọn chế độ hoạt động cho Timer 0 TMOD = 00000001B (0x01) – Bước 2: Nạp giá trị tràn cho các thanh ghi TH0, TL0 Vì bộ định thời đếm lên 1 đơn vị sau mỗi chu kỳ máy nên bộ định thời sẽ tràn sau 500 chu kỳ máy khi nạp vào TH0, TL0 giá trị bằng 65536 – 500 = 65036 tương đương 0FE0Ch TH0 = 0xFE; // MOV TH0, #0FEh TL0 = 0X0C; // MOV TL0, #0Ch - Bước 3: Khởi động bộ định thời T0 TF0 = 0; // (CLR TF0) Xóa cờ tràn TR0 = 1; // (SETB TR0) Khởi động bộ định thời - Bước 4: Chờ bộ định thời tràn while(!TF0) continue; // JNB TF0, $ - Bước 5: Nếu tiếp tục muốn sử dụng bộ định thời: Dừng bộ định thời (TR0 = 0), nạp lại giá trị cho TH0, TL0, khởi động lại (TR0 = 1).TMOD GATE C/T M1 M0 GATE C/T M1 M0 Chương trình hoàn chỉnh ví dụ 1 C ASMTMOD = 00000001B MOV TMOD, #00000001BTH0 = 0xFE; MOV TH0, #0FEhTL0 = 0x0C; MOV TL0, #0ChTF0 = 0; // Xóa cờ tràn CLR TF0; Xóa cờ tràn// Khởi động bộ định thời ;Khởi động bộ định thờiTR0 = 1; SETB TR1// Chờ cờ tràn bật 1 ; Chờ cờ tràn bật 1while(!TF0) continue; JNB TF0, $// Dừng bộ định thời ; Dừng bộ định thờiTR0 = 0; CLR TR0// Nạp lại giá trị ; Nạp lại giá trịTH0 = 0xFE; MOV TH0, #0FEh;TL0 = 0x0C; MOV TL0, #0Ch;... ...// Khởi động bộ định thời // Khởi động bộ định thờiTR0 = 1; SETB TR0Lập trình cho bộ định thời Timer 0 – (tip)• Ví dụ 2: lập trình cho bộ định thời 0 hoạt động ở chế độ 2, 8-bit tự nạp lại, có thời gian tràn là 200us (sử dụng thạch 12Mhz). – Bước 1: Chọn chế độ hoạt động cho Timer 0 TMOD = 00000010B (0x02) – Bước 2: Nạp giá trị tràn cho các thanh ghi TH0, TL0 Ở chế độ 2, thanh ghi TH0 sẽ giữ giá trị nạp lại, vậy TH0 = 255 - 200; // MOV TH0, #55 TL0 = 255 - 200; // MOV TL0, #55 - Bước 3: Khởi động bộ định thời T0 + TF0 = 0; // (CLR TF0) Xóa cờ tràn + TR0 = 1; // (SETB TR0) Khởi động bộ định thời - Bước 4: Chờ bộ định thời tràn - while(!TF0) continue; // JNB TF0, $ - Bước 5: Xóa cờ tràn (TF0 = 0), tiếp tục đợi cờ tràn bật 1 do thanh ghi TL0 tự động được nạp lại. Chương trình hoàn chỉnh ví dụ 2 C ASMTMOD = 0x02; MOV TMOD, #00000010BTH0 = 55; MOV TH0, #55TL0 = 55; MOV TL0, #55TF0 = 0; // Xóa cờ tràn CLR TF0; Xóa cờ tràn// Khởi động bộ định thời ;Khởi động bộ định thờiTR0 = 1; SETB TR1// Chờ cờ tràn bật 1 ; Chờ cờ tràn bật 1while(!TF0) continue; JNB TF0, $// Dừng bộ định thời ; Dừng bộ định thờiTR0 = 0; CLR TR0... ...// Khởi động bộ định thời // Khởi động bộ định thờiTR0 = 1; SETB TR0 Tạo trễ sử dụng TimerMAIN: void main() {MOV TMOD, #00000010B TMOD = 0x02;MOV TH0, #55 while(1) {MOV TL0, #55 P1_0 = !P1_0;AGAIN: delay(55);CPL P1.0 }CALL DELAYJMP AGAIN void delay(unsigned char us){ TH0 = us;DELAY: TL0 = us;CLR TF0; Xóa cờ tràn;Khởi động bộ định thời TF0 = 0 ; Xóa cờ trànSETB TR1 ;Khởi động bộ định thời; Chờ cờ tràn bật 1 TR1 = 1;JNB TF0, $ ; Chờ cờ tràn bật 1; Dừng bộ định thời while(!TF0) continue;CLR TR0 ; Dừng bộ định thờ ...
Nội dung trích xuất từ tài liệu:
Lập trình bộ định thời (TIMER)Lập trình bộ định thời (TIMER) Giới thiệu bộ định thời1. Các thanh ghi của bộ định thời - Timer 0: TH0, TL0 - Timer 1: TH1, TL1 - Các thanh ghi trạng thái và cài đặt chế độ hoạt động cho các bộ định thời: + TCON: Điều khiển + TMOD: Chọn chế độVị trí của các bộ định thời trong sơ đồ khối của chip 89X51/52 Các bộ định thờiVỊ TRÍ CÁC THANH GHI CỦA BỘ ĐỊNH THỜI TRONG VÙNG NHỚ ĐẶC BIỆT- SFRThanh ghi TMOD: Timer Mode Chọn chế độ hoạt độngTMOD D7 D6 D5 D4 D3 D2 D1 D0GATE M1 GATE M1 C/T M0 C/T M0 Chọn chế độ hoạt động Chọn chế độ hoạt động cho TIMER1 cho TIMER0Bit M0, M1 – của thanh ghi TMODTMODGATE C/T M1 M0 GATE C/T M1 M0 M1 M0 Chế độ Mô tả 0 0 0 Chế độ định thời 13 bit 0 1 1 Chế độ định thời 16 bit 1 0 2 Chế độ tự động nạp lại 8-bit 1 1 3 Chế độ định thời chia xẻThanh ghi TCON – Timer/Counter Control Register TCON D7 D6 D5 D4 D3 D2 D1 D0 TF1 TF0 IE1 IE0 TR1 TR0 IT1 IT0 Cờ ngắt Cờ ngắt Cờ ngắt Cờ ngắt của của ngoài 1 ngoài 0 Timer1 Timer0 Chế độ hoạt động của Timer- Chế độ 0: Chế độ định thời 13 bit- Chế độ 1: Chế độ định thời 16 bit - THx, TLx chứa giá trị đếm hiện tại của bộ định thời- Chế độ 2: Chế độ tự nạp lại 8-bit - Byte thấp giữ giá trị đếm hiện tại - Byte cao giữ giá trị nạp lại- Chế độ 3: Chế độ định thời chia xẻ Lập trình cho bộ định thời Timer 0• Ví dụ 1: lập trình cho bộ định thời 0 hoạt động ở chế độ 1, 16 bit, có thời gian tràn là 500us (sử dụng thạch 12Mhz). – Bước 1: Chọn chế độ hoạt động cho Timer 0 TMOD = 00000001B (0x01) – Bước 2: Nạp giá trị tràn cho các thanh ghi TH0, TL0 Vì bộ định thời đếm lên 1 đơn vị sau mỗi chu kỳ máy nên bộ định thời sẽ tràn sau 500 chu kỳ máy khi nạp vào TH0, TL0 giá trị bằng 65536 – 500 = 65036 tương đương 0FE0Ch TH0 = 0xFE; // MOV TH0, #0FEh TL0 = 0X0C; // MOV TL0, #0Ch - Bước 3: Khởi động bộ định thời T0 TF0 = 0; // (CLR TF0) Xóa cờ tràn TR0 = 1; // (SETB TR0) Khởi động bộ định thời - Bước 4: Chờ bộ định thời tràn while(!TF0) continue; // JNB TF0, $ - Bước 5: Nếu tiếp tục muốn sử dụng bộ định thời: Dừng bộ định thời (TR0 = 0), nạp lại giá trị cho TH0, TL0, khởi động lại (TR0 = 1).TMOD GATE C/T M1 M0 GATE C/T M1 M0 Chương trình hoàn chỉnh ví dụ 1 C ASMTMOD = 00000001B MOV TMOD, #00000001BTH0 = 0xFE; MOV TH0, #0FEhTL0 = 0x0C; MOV TL0, #0ChTF0 = 0; // Xóa cờ tràn CLR TF0; Xóa cờ tràn// Khởi động bộ định thời ;Khởi động bộ định thờiTR0 = 1; SETB TR1// Chờ cờ tràn bật 1 ; Chờ cờ tràn bật 1while(!TF0) continue; JNB TF0, $// Dừng bộ định thời ; Dừng bộ định thờiTR0 = 0; CLR TR0// Nạp lại giá trị ; Nạp lại giá trịTH0 = 0xFE; MOV TH0, #0FEh;TL0 = 0x0C; MOV TL0, #0Ch;... ...// Khởi động bộ định thời // Khởi động bộ định thờiTR0 = 1; SETB TR0Lập trình cho bộ định thời Timer 0 – (tip)• Ví dụ 2: lập trình cho bộ định thời 0 hoạt động ở chế độ 2, 8-bit tự nạp lại, có thời gian tràn là 200us (sử dụng thạch 12Mhz). – Bước 1: Chọn chế độ hoạt động cho Timer 0 TMOD = 00000010B (0x02) – Bước 2: Nạp giá trị tràn cho các thanh ghi TH0, TL0 Ở chế độ 2, thanh ghi TH0 sẽ giữ giá trị nạp lại, vậy TH0 = 255 - 200; // MOV TH0, #55 TL0 = 255 - 200; // MOV TL0, #55 - Bước 3: Khởi động bộ định thời T0 + TF0 = 0; // (CLR TF0) Xóa cờ tràn + TR0 = 1; // (SETB TR0) Khởi động bộ định thời - Bước 4: Chờ bộ định thời tràn - while(!TF0) continue; // JNB TF0, $ - Bước 5: Xóa cờ tràn (TF0 = 0), tiếp tục đợi cờ tràn bật 1 do thanh ghi TL0 tự động được nạp lại. Chương trình hoàn chỉnh ví dụ 2 C ASMTMOD = 0x02; MOV TMOD, #00000010BTH0 = 55; MOV TH0, #55TL0 = 55; MOV TL0, #55TF0 = 0; // Xóa cờ tràn CLR TF0; Xóa cờ tràn// Khởi động bộ định thời ;Khởi động bộ định thờiTR0 = 1; SETB TR1// Chờ cờ tràn bật 1 ; Chờ cờ tràn bật 1while(!TF0) continue; JNB TF0, $// Dừng bộ định thời ; Dừng bộ định thờiTR0 = 0; CLR TR0... ...// Khởi động bộ định thời // Khởi động bộ định thờiTR0 = 1; SETB TR0 Tạo trễ sử dụng TimerMAIN: void main() {MOV TMOD, #00000010B TMOD = 0x02;MOV TH0, #55 while(1) {MOV TL0, #55 P1_0 = !P1_0;AGAIN: delay(55);CPL P1.0 }CALL DELAYJMP AGAIN void delay(unsigned char us){ TH0 = us;DELAY: TL0 = us;CLR TF0; Xóa cờ tràn;Khởi động bộ định thời TF0 = 0 ; Xóa cờ trànSETB TR1 ;Khởi động bộ định thời; Chờ cờ tràn bật 1 TR1 = 1;JNB TF0, $ ; Chờ cờ tràn bật 1; Dừng bộ định thời while(!TF0) continue;CLR TR0 ; Dừng bộ định thờ ...
Tìm kiếm theo từ khóa liên quan:
ngôn ngữ C++ kỹ thuật máy tính lập trình máy tính kinh nghiệm lập trình ngôn ngữ lập trình thủ thuật lập trình mẹo lập trìnhGợi ý tài liệu liên quan:
-
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 257 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 247 0 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 246 0 0 -
Giáo trình Lập trình cơ bản với C++: Phần 1
77 trang 229 0 0 -
Bài giảng Tin học lớp 11 bài 1: Giới thiệu ngôn ngữ lập trình C#
15 trang 222 0 0 -
Bài giảng Một số hướng nghiên cứu và ứng dụng - Lê Thanh Hương
13 trang 209 0 0 -
Thủ thuật giúp giải phóng dung lượng ổ cứng
4 trang 208 0 0 -
Giáo án Tin học lớp 11 (Trọn bộ cả năm)
125 trang 199 1 0 -
15 trang 195 0 0
-
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 187 0 0