Sử Dụng Timer Tạo Khoảng Thời Gian Trễ - Learn By Sharing
Có thể bạn quan tâm
Trong bài viết trước mình đã giới thiệu về các thanh ghi cũng như cách điều khiển timer. Hôm nay mình sẽ hướng dẫn cách để tạo một khoảng thời gian trễ dùng timer, cũng như tạo một xung vuông đối xứng bằng khoảng thời gian trễ này. Bắt đầu nào 😀
Timer ở chế độ 1 và 2 thường được sử dụng nhiều trong các ứng dụng có timer. Để cài đặt timer hoạt động ở chế độ nào thì ta cần quan tâm đến thanh ghi TMOD
ví dụ sử dụng timer 1, chế độ 1 ( 16 bit ) thì ta có lệnh :
mov TMOD,#00010000b ( ASM code) hoặc TMOD = 0x10 ( C code ).
Sau khi cài đặt chế độ định thời cho timer ta tiến hành nạp các giá trị định thời cho các thanh ghi TH0, TL0 ( timer 0), TH1,TL1 ( timer 1).
Nếu sử dụng thạnh anh ngoài có tần số là 12MHz thì tương ứng với 1 chu kì máy= 1 mirco second (uS). Đối với thạch anh 11.0592MHz thì 1 chu kì máy = 1.0850 microsecond (uS).
Ví dụ: muốn tạo khoảng thời gian trễ là 50 milisecond (mS) dùng timer 1, ta cần xác định được bao nhiêu chu kì máy để tạo ra 1 milisecond. Ta có 1 mS = 1000 uS, do đó số cần phải nạp vào thanh ghi TH1 và TL1 sẽ là:
- đối với thạch anh 12Mhz : 50000/ 1 = 50000 chu kì máy, lấy 65535-50000=15535 = 3cAF hexa
- đối với thạch anh 11.0592Mhz : 50000/1.0850 ~= 46583 chu kì máy, lấy 65535-46583= 18952 = 4A08 hexa
Do số chu kì máy lớn hơn 8bit ( tối đa 255 ) nên ta chọn timer 1 hoạt động ở chế độ 1 ( 16bit- tối đa 65535 ).TH1 và TL1 là hai thanh ghi ghép 16 bit ( TH – byte cao, TL-byte thấp). Nên ta cần nạp vào TH1 =3Ch, TL0=0AFh.
Sau khi xác định được giá trị cần nạp cho 2 thanh ghi dữ liệu, ta sẽ cho timer bắt đầu chạy bằng cách đưa bit TR1 lên mức 1, và cần liên tục kiểm tra cờ tràn TF1, khi timer tràn TF1 sẽ được tự động đưa lên 1. Sau đó cần phải xoá cờ tràn (chế độ 2 không cần xoá cờ tràn) nếu muốn tiếp tục .
Chương trình tạo hiệu ứng nhấp nháy LED code ASM org 00h; MAIN: setb P2.0 ; tat LED call delay ; đợi 50ms clr P2.0 ; bật LED call delay ; đợi 50ms sjmp MAIN ; lập lại ; chương trình con delay delay: mov TMOD,#10h ; timer 1, mode 1 (16 bit ) mov TH1,#3Ch ; or mov TH1,#high(-50000),thời gian delay 50ms mov TL1,#0AFh ; or mov TL1,#low(-50000), setb TR1 ; cho phép timer chạy jnb TF1,$ ; nhảy tại chỗ, không làm gì clr TR1 ; nếu timer tràn thì dừng timer clr TF1 ; xoá cờ tràn ret ; kết thúc chương trình con delay end ; kết thúc chương trình chính=============================================
// code C #include void delay() { TMOD= 0x10; // timer 1, mode 1 TH1=0x3C; TL1=0xAF; TR1=1; while(!TF1){} TR1=0; TF1=0; } void main() { while(1) { P2_0=1; delay(); P2^0=0; delay(); } }
Thời gian tối đa mà timer có thể định thời được là 65535 chu kì máy nên nếu muốn tạo những khoảng thời gian lâu hơn thì cần dùng thêm vòng lặp. Ví dụ : muốn delay 1s thì ta chỉ cần cho timer chạy 50ms, và lặp lại 20 lần.
delay: mov R4,#20 ; số lần lặp loop: mov TMOD,#10h ; timer 1, mode 1 (16 bit ) mov TH1,#3Ch ; or mov TH1,#high(-50000),thời gian delay 50ms mov TL1,#0AFh ; or mov TL1,#low(-50000), setb TR1 ; cho phép timer chạy jnb TF1,$ ; nhảy tại chỗ, không làm gì clr TR1 ; nếu timer tràn thì dừng timer clr TF1 ; xoá cờ tràn djnz R4,loop ret ; kết thúc chương trình con delay end
Khoảng thời gian delay trên chỉ là tương đối, vì trong đó còn khoảng thời gian thực thi một số lệnh khác (vd : mov R4,#20, djnz R4,loop,…) nên để đạt được thời gian chính xác ta cần tính luôn thời gian của các lệnh này rồi mới chọn thông số định thời sao cho đúng giá trị mong muốn. Thực tế, để tạo delay ta chỉ cần dùng các vòng lặp lồng vào nhau, nhằm tiết kiệm timer cho những mục đích khác.
Chia sẻ:
- X
Từ khóa » Chương Trình Delay 8051
-
CHƯƠNG TRÌNH VÒNG LẶP DELAY TRONG VI ĐIỀU KHIỂN 8051
-
Tạo độ Trễ Sử Dụng Vi điều Khiển 8051 - ĐIỆN TỬ TƯƠNG LAI
-
Tính Toán Vòng Lặp Tạo Trễ Cho Vi điều Khiển Họ 8051 Bằng Code ...
-
Viết DELAY Trong 8051 - YouTube
-
Tạo Chương Trình Trễ 1 Giây Cho 89c51
-
Tổng Hợp Các Code Chương Trình Mẫu 8051, 89S, STM - Mạch điện Tử
-
Chương Trình Delay 1S Dùng Timer. - ECHIPKOOL SHOP
-
Tạo Delay Dùng Timer 8051 - [Mobile] Câu Lạc Bộ Sáng Tạo
-
Hàm Delay Cho 8051 Với Thạch Anh 12Mhz - ECHIPKOOL SHOP
-
Bài 4-2: Thực Hành Viết Chương Trình điều Khiển LED Sáng
-
De Cuong Ung Dung Lap Trinh C Cho 8051
-
Code Lập Trình Vi Điều Khiển 8051 Cơ Bản ASM - Diễn đàn Cơ điện Tử