Danh mục

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    
10.10.2023

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ờ ...

Tài liệu được xem nhiều: