1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Timer counter interrupt

27 501 5
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 257,07 KB

Nội dung

Lập trình Timer Counter cho 8051

Lập trình định thời (TIMER) Giới thiệu định thời Các ghi định thời - Timer 0: TH0, TL0 - Timer 1: TH1, TL1 - Các ghi trạng thái cài đặt chế độ hoạt động cho định thời: + TCON: Điều khiển + TMOD: Chọn chế độ Vị trí định thời sơ đồ khối chip 89X51/52 Các định thời VỊ TRÍ CÁC THANH GHI CỦA BỘ ĐỊNH THỜI TRONG VÙNG NHỚ ĐẶC BIỆT- SFR Thanh ghi TMOD: Timer Mode Chọn chế độ hoạt động TMOD D7 D6 D5 GATE M1 C/T Chọn chế độ hoạt động cho TIMER1 D4 D3 D2 GATE M0 D1 D0 M1 C/T M0 Chọn chế độ hoạt động cho TIMER0 Bit M0, M1 – ghi TMOD TMOD GATE C/T M1 M0 M1 M0 Chế độ 0 1 1 GATE C/T M1 M0 Mô tả Chế độ định thời 13 bit Chế độ định thời 16 bit Chế độ tự động nạp lại 8-bit Chế độ định thời chia xẻ Thanh ghi TCON – Timer/Counter Control Register TCON D7 D6 TF1 D5 TF0 TR1 Cờ ngắt Timer1 D4 D3 IE1 TR0 Cờ ngắt Timer0 D2 D1 IE0 IT1 Cờ ngắt D0 IT0 Cờ ngắt Chế độ hoạt động Timer - Chế độ 0: Chế độ định thời 13 bit - Chế độ 1: Chế độ định thời 16 bit - THx, TLx chứa giá trị đếm định thời - Chế độ 2: Chế độ tự nạp lại 8-bit - Byte thấp giữ giá trị đếm - Byte cao giữ giá trị nạp lại - Chế độ 3: Chế độ định thời chia xẻ Lập trình cho định thời Timer • Ví dụ 1: lập trình cho định thời hoạt động chế độ 1, 16 bit, có thời gian tràn 500us (sử dụng thạch 12Mhz) – Bước 1: Chọn chế độ hoạt động cho Timer TMOD = 00000001B (0x01) – Bước 2: Nạp giá trị tràn cho ghi TH0, TL0 Vì định thời đếm lên đơn vị sau chu kỳ máy nên định thời tràn sau 500 chu kỳ máy nạp vào TH0, TL0 giá trị 65536 – 500 = 65036 tương đương 0FE0Ch TH0 = 0xFE; // MOV TH0, #0FEh TL0 = 0X0C; // MOV TL0, #0Ch - Bước 3: Khởi động định thời T0 TF0 = 0; // (CLR TF0) Xóa cờ tràn TR0 = 1; // (SETB TR0) Khởi động định thời - Bước 4: Chờ định thời tràn while(!TF0) continue; // JNB TF0, $ - Bước 5: Nếu tiếp tục muốn sử dụng định thời: Dừng đị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 hồn chỉnh ví dụ C TMOD = 00000001B TH0 = 0xFE; TL0 = 0x0C; TF0 = 0; // Xóa cờ tràn // Khởi động định thời TR0 = 1; // Chờ cờ tràn bật while(!TF0) continue; // Dừng định thời TR0 = 0; // Nạp lại giá trị TH0 = 0xFE; TL0 = 0x0C; // Khởi động định thời TR0 = 1; ASM MOV TMOD, #00000001B MOV TH0, #0FEh MOV TL0, #0Ch CLR TF0; Xóa cờ tràn ;Khởi động định thời SETB TR1 ; Chờ cờ tràn bật JNB TF0, $ ; Dừng định thời CLR TR0 ; Nạp lại giá trị MOV TH0, #0FEh; MOV TL0, #0Ch; // Khởi động định thời SETB TR0 Tạo trễ sử dụng Timer MAIN: MOV MOV MOV AGAIN: CPL CALL JMP TMOD, #00000010B TH0, #55 TL0, #55 P1.0 DELAY AGAIN DELAY: CLR TF0; Xóa cờ tràn ;Khởi động định thời SETB TR1 ; Chờ cờ tràn bật JNB TF0, $ ; Dừng định thời CLR TR0 RET void main() { TMOD = 0x02; while(1) { P1_0 = !P1_0; delay(55); } void delay(unsigned char us){ TH0 = us; TL0 = us; TF0 = ; Xóa cờ tràn ;Khởi động định thời TR1 = 1; ; Chờ cờ tràn bật while(!TF0) continue; ; Dừng định thời TR0 = 0; } NGẮT • Giới thiệu ngắt • Các loại ngắt bảng vector ngắt: • • • • • • • Reset hệ thống Ngắt Timer Ngắt Timer Cổng nối tiếp Timer RST Địa vector ngắt IE0 TF0 IE1 TF1 RI TI TF2 EXF2 • Các ghi cấu hình ngắt • Lập trình ngắt 0000H 0003H 000BH 0013H 001BH 0023H 002BH Xử lý CPU ngắt Khi ngắt xuất CPU chấp nhận, chương trình bị ngắt Các thao tác sau xảy ra: - Hoàn tất việc thực thi lệnh hành - Cất đếm chương trình (PC) vào stack - Trạng thái ngắt hành lưu giữ lại - Bộ đếm chương trình PC nạp địa chương trình phục vụ ngắt thực - Thực xong quay chương trình vị trí bị ngắt thực tiếp chương trình Thanh ghi cho phép ngắt IE (Interrupt Enable Register) IE D7 D6 D5 EA D4 ET2 ES Cho phép ngắt Timer Không sử dụng D2 ET1 Cho phép ngắt toàn cục D3 D1 ET0 EX1 Cho phép ngắt Timer Cho phép ngắt port nối tiếp D0 EX0 Cho phép ngắt Timer Cho phép ngắt Cho phép ngắt Thanh ghi ưu tiên ngắt IP (Interrupt Priority Register) IP D7 D6 D5 D4 D3 PT2 Không sử dụng D2 PT1 Không sử dụng PS Ưu tiên ngắt cho Timer D1 PT0 PX1 Ưu tiên ngắt cho Timer Ưu tiên ngắt port nối tiếp D0 PX0 Ưu tiên ngắt cho Timer Ưu tiên ngắt Ưu tiên ngắt ngồi LẬP TRÌNH NGẮT Lập trình với ngắt timer – Timer – Timer Lập trình với ngắt ngồi – Ngắt ngồi – Ngắt – Ngắt theo sườn xuống theo mức Ưu tiên ngắt – Thứ tự ưu tiên thực ngắt – Lập trình theo đổi ưu tiên ngắt Lập trình ngắt timer IE – Interrupt Enable Register EA - ET2 ES ET1 EX1 ET0 EX0 • Bước 1: Chọn chế độ hoạt động timer phần lập trình cho timer • Bước 2: Cho phép ngắt: – Cho phép ngắt timer ET0 = 1; // Nếu sử dụng ngắt timer ET1 = 1; // Nếu sử dụng ngắt timer – Cho phép ngt toàn cc EA = 1; // Bắt buộc phải có sử dụng ngắt • Bước 3: Viết chương trình phục vụ ngắt Timer Chương trình phục vụ ngắt timer đặt vector ngắt 000Bh (Timer 0) 001Bh (Timer 1) Các chương trình phục vụ ngắt giống chương trình khác, nhiên kết thúc lệnh RETI (Return from Interrupt) thay lệnh RET Ví dụ 1: Viết chương trình nháy LED nối chân P1.0 với chu kỳ 500us sử dụng ngắt timer Sử dụng thạch anh 12Mhz ASM C ORG 0000H LJMP MAIN ORG 001BH LJMP T0_ISR ORG 0030H MAIN: MOV TMOD, #00000010B; Chế độ MOV TH0, #55 MOV TL0, #55 CLR TF0; Xóa cờ tràn SETB ET0 SETB EA SETB TR0; Khởi động Timer JMP $ T0_ISR: CPL P1.0 RETI void main() { TMOD = 0x02; // Timer chế độ TH0 = 5; TL0 = 5; // Nạp giá trị cho TH0, TF0 = 0; // Xóa cờ tràn ET0 = 1; EA =1; TR0 = 1; // Khởi động Timer while(1) continue; } void T0_ISR() interrupt { P1_0 = !P1_0; } ... xẻ Thanh ghi TCON – Timer/ Counter Control Register TCON D7 D6 TF1 D5 TF0 TR1 Cờ ngắt Timer1 D4 D3 IE1 TR0 Cờ ngắt Timer0 D2 D1 IE0 IT1 Cờ ngắt D0 IT0 Cờ ngắt Chế độ hoạt động Timer - Chế độ 0:... PT0 PX1 Ưu tiên ngắt cho Timer Ưu tiên ngắt port nối tiếp D0 PX0 Ưu tiên ngắt cho Timer Ưu tiên ngắt Ưu tiên ngắt ngồi LẬP TRÌNH NGẮT Lập trình với ngắt timer – Timer – Timer Lập trình với ngắt... trình ngắt timer IE – Interrupt Enable Register EA - ET2 ES ET1 EX1 ET0 EX0 • Bước 1: Chọn chế độ hoạt động timer phần lập trình cho timer • Bước 2: Cho phép ngắt: – Cho phép ngắt timer ET0 =

Ngày đăng: 05/09/2013, 21:46

HÌNH ẢNH LIÊN QUAN

• Các loại ngắt và bảng vector ngắt: - Timer   counter   interrupt
c loại ngắt và bảng vector ngắt: (Trang 14)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN