YOMEDIA
ADSENSE
BÀI 4 Tên bài: BỘ ĐỊNH THỜI
261
lượt xem 59
download
lượt xem 59
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Bài này trình bày về bộ định thời (timer) trong 8051, đây là một trong các chức năng cơ bản được tích hợp trong hầu hết các họ vi điều khiển Nội dung gồm cả lý thuyết và thực hành trên bộ thực tập UNIKIT, các bài thực hành được sắp xếp từ dể đến khó kèm theo các ví dụ ứng dụng thực tế giúp người học hiểu được tính năng và phạm vi ứng dụng của bộ định thời cho các lập trình ứng dụng hướng điều khiển....
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: BÀI 4 Tên bài: BỘ ĐỊNH THỜI
- 1 BÀI 4 BỘ ĐỊNH THỜI Tên bài: GIỚI THIỆU Bài này trình bày về bộ định thời (timer) trong 8051, đây là một trong các chức năng cơ bản được tích hợp trong hầu hết các họ vi điều khiển Nội dung gồm cả lý thuyết và thực hành trên bộ thực tập UNIKIT, các bài thực hành được sắp xếp từ dể đến khó kèm theo các ví dụ ứng dụng thực tế giúp người học hiểu được tính năng và phạm vi ứng dụng của bộ định thời cho các lập trình ứng dụng hướng điều khiển. MỤC TIÊU THỰC HIỆN • Hiểu được cấu tạo và các chế độ làm việc của bộ định thời 8051 • Biết cách khởi tạo bộ định thời • Biết cách đọc bộ định thời trong khi hoạt động • Ứng dụng được bộ định thời trong lập trình hướng điều khiển NỘI DUNG CHÍNH Nội dung bài học tập trung về các chủ đề chính như sau: • Cấu tạo và các chế độ làm việc của bộ định thời • Các thanh ghi chức năng đặc biệt liên quan đến bộ định thời • Các nguồn tín hiệu kích • Phương pháp khởi tạo bộ định thời • Phương pháp truy xuất dử liệu bộ định thời • Các ứng dụng thông dụng
- 2 1. MỞ ĐẦU Bộ định thờI (timer) là một mạch chia gồm nhiều FF ghép lại với nhau với tín hiệu vào là xung đồng hồ, xung này được chia 2 ở tầng FF đầu tiên, sau đó lại được đưa đến n các tầng tiếp theo, với n tầng FF số chia sẻ là 2 , ngỏ ra của tầng cuối cùng là FF tràn của bộ định thời còn gọi là cờ tràn, cờ này được kiểm tra bởi phần mềm và có thể tạo ra một ngắt. Trị nhị phân của các FF chính là số xung đồng hồ đếm được (hoặc số sự kiện) kể từ khi bộ định thời được khởi động. VD một timer 16 bít có thể đếm được từ 0000H đến FFFFH, cờ tràn sẻ bị set khi có tràn từ FFFFH đến 0000H. Hoạt động của một bộ định thời đơn giản được mô tả ở hình 4.1 đây là một bộ định thời 3 bít, mỗi tầng là 1 D-FF tác động cạnh âm với chức năng chia 2 (ngỏ ra Q nối đến ngỏ vào D), FF cò là một chốt loại D, cờ này được set bởi tầng cuối cùng của bộ định thời. Giản đồ thời gian ở hình 4.1b cho thấy tầng đầu tiên Q0 chia 2 tần số xung đồng hồ, tầng thứ nhì chia 4 và cứ thế tiếp tục. Số đếm được biểu diển bằng số thập phân để dể thay đổi bằng cách kiểm tra trạng thái của 3 FF. VD số đếm là 4 khi Q2 = 1; Q1 = 0; Q0 = 0 (410 = 1002) Bộ định thời được áp dụng trong hầu hết các ứng dụng hướng điều khiển và timer trong 8051 cũng không ngoại lệ. 8051 có 2 bộ định thời 16 bít với 4 chế độ làm việc khác nhau. Trong 8052 còn có thêm timer thứ ba 16 bít vớI 3 chế độ làm việc. Công dụng của timer là (a) đếm thờI gian (định thời) và (b) đếm sự kiện hoặc (c) tạo tốc độ Baud cho cổng nối tiếp bên trong 8051. Vì mỗi bộ định thời gồm 16 bít nên tàng cuối cùng thứ 16 sẻ 16 chia tần số xung đồng hồ cho 2 = 65.536. Flag D Q D Q D Q D Q Clock Q0 Q1 Q2 Q LSB MSB clock Q0 Q1 Q2 0 1 2 3 4 5 6 7 0 Số đếm Flag Hình 4.1 Bộ đếm 3 bít Trong ứng dụng định thờI, một bộ định thời được lập trình để set cờ tràn của nó tương ứng với khoảng thời gian đặt trước, cờ này được dùng để đồng bộ hóa chương trình nhằm thực hiện một thao tác nào đó như là: Kiểm tra trạng thái các ngỏ vào hoặc
- gởi dử liệu đến các ngỏ ra, các ứng dụng khóa có thể dùng xung đồng hồ chuẩn của timer để đo thời gian giữa hai thời điễm VD: Đo độ rộng xung. Khả năng đếm sự kiện được dùng để xác định số lần xảy ra của một sự kiện thay vì đo khoảng thời gian giữa các sự kiện. Một sự kiện là một tác nhân kích thích bên ngoài nào đó tạo ra một sự chuyển tiếp từ 1 xuống 0 tại 1 chân của 8051. Các bộ định thời cũng được dùng để tạo ra một đồng hồ tốc độ baud cho cổng nối tiếp tích hợp bên trong 8051. 2. THANH GHI SFR CỦA TIMER Các bộ định thời được truy xuất qua 6 thanh ghi SFR (bảng 4.1) và thêm 5 thanh ghi SFR khác để truy xuất timer thứ ba trong 8052. 2.1 Thanh ghi chế độ (TMOD) Thanh ghi TMOD gồm hai nhóm 4 bít có chức năng chọn chế độ làm việc cho hai timer 0 và 1 (bảng 4.2 và 4.3). BẢNG 4.1 Các thanh ghi SFR của timer SFR của timer Chức năng Địa chỉ Định địa chỉ bít Điều khiển TCON 88H Có Chế độ TMOD 89H Không Byte thấp timer 0 TL0 8AH Không Byte thấp timer 1 TL1 8BH Không TH0 Byte cao timer 0 8CH Không TH1 Byte cao timer 1 8DH Không Điều khiển timer 2 T2CON* C8H Có Capture byte thấp RCAP2L* CAH Không RCAP2H* Capture byte cao CBH Không TL2* Byte thấp timer 2 CCH Không TH2* Byte cao timer 2 CDH Không * Chỉ có trong 8032 và 8052 BẢNG 4.2 Thanh ghi TMOD Mô tả Bít Tên Timer 7 GATE 1 GATE = 1, timer chỉ hoạt động trong khi INT1 = 1 6 Bít chọn nguồn xung kích 1 C/ T 0 = định thờI 1 = đếm sự kiện Mode bit 1 (bảng 4.3) 5 M1 1 Mode bít 0 (bảng 4.3) 4 M0 1 3 GATE 0 Timer 0 GATE bít 2 0 C/ T C/ T bít timer 0 1 M1 0 M1 bít timer 0 0 M0 0 M0 bít timer 0
- BẢNG 4.3 Các chế độ làm việc Chế độ Mô tả M1 M0 0 0 0 Timer 13 bít (8048 mode) 0 1 1 Timer 16 bít Timer 8 bít tự động nạp lại 1 0 2 Timer phân biệt 1 1 3 Timer 0: a) TL0 là timer 8 bít được điều khiển bởI các mode bít timer 0 b) TH0 là timer 8 bít được điều khiển bởI các mode bít timer 1 Timer 1: Dừng TMOD không được định địa chỉ bít mà thực ra điều này cũng không cần thiết. Thông thường thanh ghi này được khởI tạo ngay khi bắt đầu chương trình. Sau đó timer có thể dừng, hoặc hoạt động thông qua các thanh ghi SFR khác. 2.2 Thanh ghi điều khiển (TCON) Thanh ghi TCON gồm các bít trạng thái và các bít điều khiển cho hai bộ định thờI 0 và 1 (bảng 4.4). Trong đó 4 bít interrupt (TCON.0-TCON.3) sẻ được bàn đến trong bài về Interrupt. BẢNG 4.4 Thanh ghi điều khiển TCON Ký hiệu Địa chỉ bít Mô tả Bít Cờ tràn timer 1. Set bằng phần cứng khi tràn số đếm, TCON.7 TF1 8FH Clear bằng phần mềm hoặc bằng phần cứng khi xử lý ngắt Bít khởI động timer 1. Set và Clear bằng phần mềm TCON.6 TR1 8EH để khởI động hoặc dừng timer Cờ tràn timer 0 TCON.5 TF0 8DH Bít khởI động timer 0 TCON.4 TR0 8CH Cờ tác động cạnh ngắt 1 bên ngoài. Set bằng phần TCON.3 IE1 8BH cứng tạI cạnh xuống của ngỏ INT1 . Clear bằng phần mềm hoặc bằng phần cứng khi xử lý ngắt Ngắt 1 bên ngoài. Set và Clear bằng phần mềm tác TCON.2 IT1 8AH động cạnh xuống hoặc mức thấp Cờ cho phép ngắt 0 bên ngoài TCON.1 IE0 89H Cờ chọn kiểu ngắt 0 bên ngoài TCON.0 IT0 88H 3. CÁC CHẾ ĐỘ LÀM VIỆC Vì 8051 có hai bộ định thờI nên ký hiệu ``x`` được dùng để ám chỉ một trong hai bộ định thờI này, do đó THx có thể là TH1 hoặc TH0 tùy theo timer Thứ tự sắp xếp các thanh ghi TLx, THx và cờ tràn TFx được mô tả ở hình 4.2 theo từng chế độ làm việc. 3.1 Chế độ timer 13 bít (mode 0) Chế độ này nhằm tương thích vớI họ vi điều khiển trước của 8051 là 8048 (hình 4.2a). Trong chế độ này thanh ghi định thờI byte cao THx được nốI tiếp vớI 5 bít thấp của thanh ghi TLx để tạo thành bộ định thờI 13 bít, 3 bít cao của TLx không dùng.
- 3.2 Chế độ timer 16 bít (mode 1) Cũng giống như mode 0, xung đồng hồ được đưa vào cặp thanh ghi định thờI TLx/THx, khi có xung đồng hồ timer sẻ đếm lên từ 0000H, 0001H, 0002H…Hiện tượng tràn sẻ xảy ra khi số đếm từ giá trị FFFFH chuyển sang 0000H và sẻ làm cờ tràn bị set và timer tiếp tục đếm. Cờ tràn là biến TFx trong thanh ghi điều khiển TCON, cờ này được đọc và ghi bằng phần mềm (hình 4.2b). Bít có giá trị cao nhất của timer là bít 7 trong thanh ghi THx và bít thấp nhất blà bít 0 trong thanh ghi TLx, cặp thanh ghi định thờI TLx/THx có thể được đọc hoặc ghi bằng phần mềm tạI bất kỳ lúc nào. TLx THx Xung kích TFx (5 bít) (8 bít) (a) Mode 0 Xung kích TLx THx TFx (8 bít) (8 bít) (b) Mode 1 Xung kích TLx TFx (8 bít) Nạp lại THx (c) Mode 2 (8 bít) Xung kích TL1 TH1 (8 bít) (8 bít) TL0 TF0 (8 bít) Xung kích Xung kích TH0 TF1 (8 bít) (d) Mode 3 Hình 4.2 Các chế độ làm việc
- 3.3 Chế độ tự nạp lạI 8 bít (mode 2) Trong chế đọ này thanh ghi TLx là một bộ định thờI 8 bít trong khi đó thanh ghi THx chứa giá trị cần nạp lại. Khi số đếm tràn từ FFH đến 00H, lúc này không chỉ cờ tràn bị set mà giá trị của THx sẻ được nạp lạI vào TLx và quá trình đếm vẩn tiếp tục cho đến lần tràn tiếp theo. Chế độ này rất tiện lợI do việc tràn xảy ra sau một khoảng thờI gian xác định lặp lạI theo chu kỳ mỗI khi TMOD và THx được khởI tạo (hình 4.2c) 3.4 Chế độ tách biệt timer (mode 3) Ảnh hưởng của chế độ này lên hai bộ định thờI không giống nhau. Timer 0 thì được tách ra làm hai timer 8 bít đó là TL0 và TH0 hoạt động độc lập vớI nhau vớI hai cờ tràn tương ứng là TF0 cho TL0 và TF1 cho TH0. Timer 1 dừng trong chế độ này nhưng có thể được khởI động bằng cách chuyển sang các chế độ khác, chỉ có một hạn chế là cờ tràn TF1 không bị set khi timer 1 tràn vì cờ này đã được nốI đến TH0. Mode 3 được dùng chủ yếu để tạo ra thêm một timer 8 bít thứ ba trong 8051. Timer 1 có thể được điều khiển ON/OFF bằng cách chuyển qua lạI giữa mode 3 và các mode khác và có thể được dùng để tạo tốc độ baud cho cổng nốI tiếp của 8051 hoặc những yêu cầu không cần đến ngắt 4. NGUỒN CUNG CẤP XUNG CHO TIMER Hình 4.2 không cho biết bộ định thờI được kích như thế nào, có hai khả năng kích cho timer các khả năng này được chọn bằng cách viết vào bítC/ T trong thanh ghi TMOD khi khởI tạo timer. Một nguồn xung đồng hồ dùng cho chức năng định thờI và một nguồn xung khác phục vụ cho chức năng đếm sự kiện. 4.1 Chức năng định thờI (đếm thờI gian) Nếu bít C/ T = 0 thì bộ định thờI hoạt động như một bộ đếm thờI gian vớI xung vào là xung đồng hồ trong chip, một mạch chia 12 được thêm vào để giãm tần số xung đồng hồ đến giá trị phù hợp vớI hầu hết các ứng dụng. Ở chế độ này bộ định thờI được dùng để đếm thờI gian, cặp thanh ghi TLx/THx tăng dần vớI tốc độ là 1/12 tần số xung dao động trên chip, nếu tần số thạch anh là 12 MHz thì tốc độ xung đếm là 1 MHz, hiện tượng tràn xảy ra sau một số xung nhất định phụ thuộc vào giá trị khởI tạo của TLx/THx Dao động trên chíp ÷1 Xung timer 2 Chân T0 hoặc T1 0=Up (đếm thời gian) 1=Down (đếm sự kiện) C/ T Hình 4.3 Nguồn xung đếm
- 4.2 Chức năng đếm sự kiện Nếu bít C/ T = 1 thì bộ định thờI sẻ được kích từ bên ngoài bởI một xung xảy ra từ một sự kiện, số sự kiện được xác định bởI phần mềm bằng cách đọc nộI dung cặp thanh ghi TLx/THx vì nộI dung này tăng lên theo từng sự kiện. Xung kích bên ngoài được đưa vào chân đa chức năng của port 3 đó là bít 4 của port 3 (P3.4) nhận xung kích cho timer 0 và được ký hiệu là T0, chân P3.5 được ký hiệu là T1 là nơi nhận xung kích của timer 1 (hình 4.3) Ở chế độ đếm sự kiện, nộI dung thanh ghi định thờI tăng lên tạI cạnh xuống của xung kích ngoài Tx, xung kích ngoài được lấy mẫu trong khoảng thờI gian S5P2 của mỗI chu kỳ máy. Do đó, khi ngỏ vào ở mức cao trong một chu kỳ và ở mức thấp trong chu kỳ kế tiếp thì số đếm được sẻ tăng lên, giá trị mớI của bộ đếm xuất hiện trong khoảng thờI gian S3P1 của chu kỳ kế tiếp chu kỳ nhận ra sự chuyển tiếp, vì vậy phảI cần đến 2 chu kỳ (2 µS) để nhận dạng quá trình chuyển từ 1 xuống 0, suy ra tần số xung kích ngoài cao nhất là 500 KHz tương ứng vớI tần số thạch anh 12 MHz 5. KHỞI ĐỘNG, DỪNG, ĐIỀU KHIỂN TIMER Hình 4.2 trình bày các cấu hình khác nhau của thanh ghi timer TLx/THx và TFx, hai khả năng kích timer được chỉ ở hình 4.3. Phương pháp đơn giản nhất để khởI động và dừng một bộ định thờI là dùng bít điều khiển khởI động TRx trong thanh ghi TCON, TRx tự động xóa khi reset hệ thống , do đó trạng thái mặc định của các bộ định thờI là trạng thái dừng. Thanh ghi timer Xung timer 0=Up (timer dừng) 1=Down (timer chạy) TRx Hình 4.4 Điều khiển start/stop timer Bộ định thờI được khởI động khi bít Trx được set (hình 4.4). Vì TRx nằm trong thanh ghi được định địa chỉ bít TCON nên rất dể khởI động và dừng timer. VD: Timer 0 đựoc khởI động bằng lệnh sau SETB TR0 Và dừng CLR TR0 Phần mềm hợp ngữ sẻ dịch ký hiệu TR0 thành địa chỉ bít tương ứng, SETB TR0 cũng chính là SETB 8CH
- Dao động trên chíp ÷1 TL1 TH1 2 TF1 (16 bít) 0 = UP T1 (P3.5) 0 = UP 1 = DOWN 1 = DOWN C/ T TR1 GAT INT1 (P3.3) Hình 4.5 Timer 1 hoạt động ở mode 1 Một phương pháp khác để điều khiển bộ định thờI là dùng bít GATE trong TMOD và ngỏ vào từ bên ngoài INTx khi GATE = 1 thì timer cho phép điều khiển bằng INTx , khả năng này thường dùng để đo bề rộng xung như sau: Giả sử INT 0 ở mức thấp nhưng lên mức cao trong khoảng thờI gian cần đo. Trước tiên, khởI tạo timer 0 ở mode 1 là mode timer 16 bít vớI TL0/TH0 = 0000H, GATE = 1 và TR0 = 1. Khi INT 0 lên mức cao, bộ định thờI được mở cổng và đếm vớI xung 1 MHz, khi INT 0 xuống mức thấp, bộ định thờI bị khóa cổng và bề rộng xung tính bằng µS chính là số xung đếm được chứa trong TL0/TH0 ( INT 0 có thể được lập trình để tạo một ngắt khi nó trở về mức thấp) Hình 4.5 mô tả timer 1 hoạt động ở chế độ 1 là chế độ timer 16 bít gồm các thanh ghi TL1/TH1 và cờ tràn TF1, các nguồn xung kích, cách khởI động, dừng và điều khiển timer. 6. KHỞI TẠO VÀ TRUY XUẤT THANH GHI TIMER Các timer thường được khởI tạo một lần mỗI khi bắt đầu chương trình để thiết lập đúng chế độ làm việc. Sau đó, trong phần thân của chương trình các timer được khởI động, dừng, kiễm tra và xóa cờ tràn, đọc và cập nhật các thanh ghi…theo yêu cầu của ứng dụng. TMOD là thanh ghi đầu tiên được khởI tạo vì nó xác định chế độ làm việc. VD: Các lệnh sau đây sẻ thiết lập timer 1 là timer 16 bít (mode 1), và xung đếm là xung dao động hệ thống (định thờI) MOV TMOD, #00010000B Kết quả của lệnh này làm cho bít M1 = 0 và M0 = 1 (mode 1), C/ T = 0 và GATE = 0 (xung kích bên trong) và xóa mode bít của timer 0 (bảng 4.2) Dỉ nhiê, timer chỉ thực sự hoạt động khi bít TR1 = 1, nếu cần một số đếm ban đầu thì phảI khởI tạo cặp thanh ghi TL1/TH1, cần nhớ là timer luôn đếm lên và cờ tràn sẻ
- bằng 1 khi số đếm chuyển từ FFFFH xuống 0000H, để tạo thờI gian định thờI là 100 µS
- thì phảI khởI tạo số đếm nhỏ hơn 0000H một trị là +100, giá trị đúng là –100 hoặc FF9CH, các lệnh thực hiện như sau: MOV TL1, #9CH MOV TH1, #0FFH Sau đó khởI động timer SETB TR1 Cờ tràn tự động bằng 1 sau 100 µS, phần mềm có thể đợI trong một vòng lặp 100 µS bằng lệnh nhảy tạI chổ có điều kiện khi cờ tràn vẩn chưa được set WAIT: JNB TF1, WAIT Khi timer tràn thì cần thiết phảI dừng timer và xóa cờ tràn bằng phần mềm CLR TR1 CLR TF1 6.1 Đọc thờI gian đang hoạt động Trong một vài trường hợp cần phảI đọc các thanh ghi định thờI của timer trong khi timer đang hoạt động, việc làm này có thể gặp một sai số nếu như giữa hai lần đọc nộI dung byte thấp TLx và byte cao THx lạI xảy ra hiện tượng tràn số từ byte thấp lên byte cao. Cách giãi quyết là trước tiên đọc byte cao sau đến byte thấp và tiếp theo lạI đọc byte cao một lần nữa, nếu byte cao bị thay đổI thì lặp lạI quá trình đọc từ đầu, đoạn mã sau đây đọc nộI dung TLx/THx và đưa vào R6/R7 AGAIN: MOV A, TH1 MOV R6, TL1 CJNE A, TH1, AGAIN MOV R7, A 6.2 ThờI gian ngắn và thờI gian dài Một câu hỏI là 8051 có thể định thờI trong khoảng thờI gian bao lâu ? Giả sử tần số thạch anh là 12 MHz do đó xung kích cho bộ định thờI là 1 MHz Khoảng thờI gian định thờI ngắn nhất không phụ thuộc tần số xung kích timer mà phụ thuộc vào phần mềm, có nghĩa là do thờI gian thực hiện các lệnh, lệnh có thờI gian thực hiện nhanh nhất của 8051 là một chu kỳ máy hoặc 1 µS. Bảng 4.5 tóm tắt phương pháp tạo các thờI gian định thờI khác nhau. BẢNG 4.5 Cách tạo thờI gian (tần số XTAL 12 MHz) Trị tốI đa (µS) Phương pháp Phần mềm ≈ 10 Timer 8 bít tự nạp lạI 256 65.536 Timer 16 bít Không giớI hạn Timer 16 bít kết hợp vòng lặp
- Ví dụ 4-1: Chương trình tạo xung Viết chương trình tạo xung tuần hoàn tạI chân P1.0 vớI tần số cao nhất có thể được. Cho biết tần số và tỉ số giữa độ rộng xung vớI chu kỳ Tần số cao nhất có nghĩa là chu kỳ ngắn nhất. Do đó, không thể dùng bộ định thờI mà chỉ dùng phần mềm. Chương trình như sau: LOOP: SETB P1.0 : 1 chu kỳ CLR P1.0 : 1 chu kỳ SJMP LOOP : 2 chu kỳ Chu kỳ của xung là 4 µS trong đó mức cao là 1 µS và mức thấp là 3 mS, suy ra tần số 250 KHz và tỉ số độ rộng/chu kỳ là 25% (hình 4.6) SETB P1.0 CLR P1.0 SJMP loop SETB P1.0 4 µS P1.0 1 µS Hình 4.6 Dạng xung ra Từ hình 4.6 có thể tạo nên một hiểu lầm là các lệnh hình như đặt không đúng chổ nhưng thực sự không phảI vậy VD: Lệnh SETB P1.0 chỉ set port bít sau khi lệnh này kết thúc trong khoảng thờI gian S6P2. Chu kỳ tín hiệu ra có thể được kéo dài bằng cách thêm vào các lệnh NOP (no operation) vào trong vòng lặp, mỗI lệnh NOP sẻ tăng lên 1 µS. VD: Thêm 2 lệnh NOP sau lệnh SETB P1.0 sẻ làm xung ra có dạng hình vuông vớI chu kỳ là 6 µS tương đương tần số 166,7 KHz. Tuy nhiên, cách làm trên không hay lắm và cách tốt nhất để tạo thờI gian trì hoản vẩn là dùng bộ định thời Ví dụ 4-2: Tạo xung vuông 10 KHz Viết chương trình dùng timer 0 để tạo xung vuông 10 KHz tạI chân P1.0 Xung vuông 10 KHz có thời gian ở mức cao là 50 µS và mức thấp cũng là 50 µS, vì thờI gian này nhỏ hơn 256 mS nên chọn mode làm việc của timer là mode 2, mỗI khi tràn sau 50 mS một số đếm nạp lạI có trị nhỏ hơn 00H một lượng +50 hoặc nói rỏ hơn là –50 được chứa trong TH0 ; Chế độ nạp lạI 8 bít MOV TMOD, #02H ; nạp –50 vào TH0 MOV TH0, #-50 ; KhởI động timer SETB TR0 ; Chờ cờ tràn LOOP: JNB TF0, LOOP
- ; Xóa cờ tràn CLR TF0 ; Đảo port bít CPL P1.0 SJMP LOOP Chương trình dùng lệnh đảo bít CPL thay vì dùng SETB và CLR, thờI gian trì hoãn sau mỗI lần đảo bít chính là ½ chu kỳ (50 µS) theo yêu cầu, trị nạp lạI được biểu diển bằng số thâp phân –50 thay vì dùng số hexa. Lưu ý rằng cờ tràn TF0 phảI được xóa bằng phần mềm sau mỗI lần tràn. VớI thờI gian lớn hơn 256 µS thì phảI dùng bộ định thờI 16 bít (mode 1) lưu ý lúc 16 này thờI gian dầI nhất là 2 = 65.536 µS tương đương vớI 0,066 S, khuyết điễm của mode 1 là các thanh ghi định thờI phảI được khởI tạo lạI sau mỗI lần tràn chứ không tự động nạp lạI như trong mode 2. Ví dụ 4-3: Tạo xung vuông 1 KHz Viết chương trình dùng timer 0 để tạo xung vuông 1 KHz tạI chân P1.0 Xung vuông 1 KHz có thờI gian ở mức cao 500 µS và mức thấp 500 µS vì thờI gian này lớn hơn 256 µS nên phảI dùng chế độ timer 16 bít (mode 1) điễm khác nhau trong chương trình là phảI khởI tạo lạI cặp thanh ghi TL0/TH0 sau mỗI lần tràn MOV TMOD, #01H ; Mode 1 ; Byte cao của –500 LOOP: MOV TH0,#0FEH ; Byte thấp của –500 MOV TL0, #0CH ; KhởI động timer SETB TR0 ; Chờ cờ tràn WAIT: JNB TF0, WAIT ; Dừng timer CLR TR0 ; Xóa cờ tràn CLR TF0 ; Đảo port bít CPL P1.0 SJMP LOOP Có một sai lệch nhỏ về tần số của tín hiệu ra trong chương trình trên do cáclệnh thêm vào để khởI tạo lạI timer sau khi tràn, nếu muốn tần số 1 KHz được chính xác thì phảI thay đổI giá trị nạp lạI cặp thanh ghi TL0/TH0, lổI như thế sẻ không xảy ra ở chế độ nạp lạI tự động vì timer không bao giờ dừng. ThờI gian định thờI dài hơn 0,066 S có thể thực hiện bằng cách ghép timer 0 vớI timer 1 bằng phần mềm, một phương pháp thường dùng trong thực tế là kết hợp timer 16 bít vớI một vòng lặp để đếm số lần tràn. Ví dụ 4-4: Điều khiển chuông Một chuông điện được đặt tạI chân P1.7 và một công tắc chống dộI đặt ở P1.6 (hình 4.7). Viết chương trình điều khiển chuông trong vòng 1 giây khi xuất hiện cạnh xuống tạI ngỏ vào P1.6 Tạo thờI gian trì hoản bằng phần mềm là phương pháp phổ biến khi dùng vi xử lý nhưng đốI bvớI 8051 thì không cần thiết vì nó có sẳn timer bên trong. Trong ví dụ này sẻ dùng một chương trình tạo thờI gian trì hoãn 1 giây.
- 10 K +5 V 8051 SPDT SW P1.6 P1.7 Chuông 0 = ON 1 = OFF Hình 4.7 Mạch điều khiển chuông 10 K Quá trình chuyển từ 1 xuống 0 ở chân P1.6 được nhận ra bằng cách đợI giá trị 1 (JNB P1.6, LOOP) và sau đó đợI giá trị 0 (JB P1.6, WAIT), chương trình như sau ; 100 x 10.000 µS = 1 S HUNDRED EQU 100 COUNT EQU 10000 ; MOV TMOD, #01H ; LOOP: JNB P1.6, LOOP WAIT: JB P1.6, WAIT CLR P1.7 CALL DELAY SET P1.7 SJMP LOOP DELAY: MOV R7, #HUNDRED AGAIN: MOV TH0, #HIGH COUNT MOV TL0, #LOW COUNT SETB TR0 WAIT2: JNB TF0, WAIT2 CLR TF0 CLR TR0 DJNZ R7, AGAIN RET Có hai tình huống không được quan tâm đến trong ví dụ trên: Thứ nhất nếu ngỏ vào lạI chuyển trạng thái trong lúc chuông đang reo, việc chuyển trạng thái này sẻ không được nhận ra vì chương trình đang trong vòng lặp trì hoãn, thứ hai là nếu quá trình chuyển trạng thái ở ngỏ vào quá nhanh (nhỏ hơn 1 µS) thì cũng sẻ bị bỏ qua bởI lệnh JNB và JB, tình huống 1 sẻ được bàn đến trong phần bài tập và tình huống 2 được giãi quyết bằng cách dùng 1 ngỏ vào ngắt để chốt 1 cờ trạng thái khi xảy ra chuyển tiếp từ 1 xuống 0 7. TIMER 2 CỦA 8052 Trong vi mạch 8052 có thêm một timer thứ ba (timer 2) làm tăng thêm khả năng của hai bộ định thờI đã khảo sát ở trên. Như đã thấyy trong bảng 4.1 có thêm 5 thanh ghi SFR để phục vụ cho timer 2 bao gồm cặp thanh ghi định thờI TL2/TH2, thanh ghi điều khiển T2CON và các thanh ghi thu nhận RCAP2L và RCAP2H. Chế độ làm việc của timer 2 được thiết lập bởI thanh ghi T2CON (bảng 4.6) giống như timer 0 và 1, timer 2 cũng có thể đếm thờI gian hoặc đếm sự kiện, nguồn xung kích
- là xung đồng hồ bên trong hoặc xung ngoài tạI chân T2 (P1.0 của 8052). Bít C/ T2 trong T2CON chọn nguồn xung kích giống như bít C/ T trong TCON của timer 0 và 1, không phụ thuộc nguồn xung timer 2 có 3 chế độ làm việc: Tự động nạp lạI, thu nhận và tạo tốc độ baud. BẢNG 4.6 Thanh ghi điều khiển T2CON Ký hiệu Địa chỉ bít Mô tả Bít Cờ tràn timer 2 (không set khi TCLK hoặc T2CON.7 TF2 CFH RCLK = 1) Cờ ngoài timer 2 (set khi có sự thu T2CON.6 EXF2 CEH nhận hoặc nạp lại xảy ra bởi sườn xuống tại T2EX và EXEN2 = 1. Khi các ngắt timer được cho phép, EXF2 = 1 sẻ làm CPU trỏ đến ISR, cờ này bị xóa bằng phần mềm Xung thu nhận của timer 2, khi set timer 2 T2CON.5 RCLK CDH sẻ cung cấp tốc độ baud khi thu cho cổng nối tiếp, timer 1 cung cấp tốc độ baud khi phát Xung phát timer 2, khi set timer 2 cung cấp T2CON.4 TCLK CCH tốc độ baud khi phát và timẻ 1 cung cấp tốc độ baud khi thu Cho phép từ bên ngoài. Khi set, quá trình T2CON.3 EXEN2 CBH thu hoặc nạp lại xảy ra tại sườn xuống của T2EX Bít điều khiển timer 2 bằng phần mềm T2CON.2 TR2 CAH Bít chọn timer/counter T2CON.1 C9H C/ T2 Cờ thu/nạp. Khi set quá trình thu xảy ra tại T2CON.0 C8H C/ RL2C sườn xuống của T2EX nếu EXEN2 = 1, Khi xóa, quá trình tự động nạp lại xảy ra khi timer tràn hoặc có chuyển trạng thái tại T2EX nếu EXEN2 = 1, nếu RCLK hoặc TCLK = 1 thì bít này bị bỏ qua 7.1 Chế độ nạp lạI tự động Bít capture/reload trong T2CON cho phép lựa chọn giữa hai chế độ đầu tiên. Khi CP/RL2 = 0 chế độ của timer 2 là nạp lạI tự động vớI TL2/TH2 là cặp thanh ghi định thờI RCÁP2L và RCAP2H lưu giữ giá trị nạp lại. Không giống timer 0 và timer 1, timer 2 luôn là timer 16 bít ngay cả ở chế độ tự nạp lại. Thao tác nạp lạI xảy ra khi có tràn từ FFFFH đến 0000H trong TL2/TH2 và cờ tràn TF2 sẻ được set. Điều kiện này được xác định bằng phần mềm hoặc được lập trình để tạo ra một ngắt. Trong cả 2 cách cờ TF2 đều phảI được xóa trước khi nó bị set lại. Bằng cách set bít EXEN2 trong T2CON thì thao tác nạp lạI cũng xảy ra khi tín hiệu ở chân T2EX chuyển từ 1 xuống 0, đây là chân đa chức năng P1.1 của 8052, cạnh xuống tạI T2EX cũng set một cờ mớI (EXF2) của timer 2. Cùng vớI TF2, EXF2 cũng được kiểm tra bằng phần mềm hoặc tạo ra một ngắt, EXF2 phảI được xóa bằng phần mềm. Hình 4.8 trình bày timer 2 ở chế độ tự động nạp lại.
- Dao động trên chíp ÷1 TL2 TH2 2 TF2 0 = UP T2 (P1.0) Nạp lại 1 = DOWN C/ T2 RCA RCA TR2 P2L P2H T2EX (P1.1) EXF2 0 = UP EXEN2 1 = DOWN Hình 4.8 Timer 2 mode tự nạp lại 16 bít 7.2 Chế độ thu (capture) Khi CP/RL2 = 1 bộ định thờI sẻ chuyển sang chế độ thu nhận, timer 2 hoạt động như một timer 16 bít và set bít TF2 khi khi có tràn từ FFFFH đến 0000H trong cặp thanh ghi TL2/TH2, trạng thái của TF2 được kiểm tra bằng phần mềm hoặc tạo một ngắt. Để cho phép tính năng này phảI set bít EXEN2 trong T2CON, nếu EXEN2 = 1, sườn xuống tạI T2EX (P1.1) sẻ đưa giá trị trong cặp thanh ghi định thờI TL2/TH2 vào thanh ghi RCAP2L và RCAP2H bằng xung đồng hồ, cờ EXF2 cũng được set và như đã nói ở trên cờ này được kiễm tra bằng phần mềm hoặc dùng để tạo một ngắt. Hình 4.9 mô tả timer 2 trong chế độ bắt. 7.3 Tạo tốc độ baud Một ứng dụng khác của các timer là tạo tốc độ baud cho cổng nốI tiếp bên trong IC, việc này được thực hiện bằng timer 1 trong 8051 hoặc timer 1 và/hoặc timer 2 trong 8052, hoạt động này được bàn đến ở bài 5 8. TÓM TẮT Việc giãi quyết yêu cầu định thờI bằng phần mềm đã được trình bày như trên, nhưng cách này có hạn chế là làm mất thờI gian của CPU, các chương trình lớn dùng vòng lặp để chờ cờ tràn rất tốt cho học tập nhưng trong thực tế các ứng dụng hướng điều khiển dùng vi điều khiển thông thường CPU còn phảI thực hiện các công việc khác cũng như phảI đáp ứng vớI các sự kiện từ bên ngoài VD: Một nhân viên nhập vào một thông số từ bàn phím, bài học về interupt sẻ giớI thiệu cách dùng timer trong môi trường điều khiển bằng ngắt, cờ tràn timer sẻ không được kiễm tra bằng vòng lặp phần mềm mà nó sẻ tạo ra một ngắt, một chương trình khác sẻ tạm dừng chương trình chính để thực hiện công việc ảnh hưởng bởI ngắt định thời. Nhờ các ngắt mà nhiều công việc xem như được
- thực hiện cùng một lúc.
- Dao động trên chíp ÷1 TL2 TH2 2 TF2 0 = UP T2 (P1.0) 1 = DOWN C/ T2 Thu RCA RCA TR2 P2L P2H T2EX (P1.1) EXF2 0 = UP EXEN2 1 = DOWN Hình 4.9 Timer 2 mode thu 16 bít 9. BÀI TẬP Viết chương trình điều khiển 8051 tạo xung vuông tạI P1.5 có tần số 100 1. KHz (lưu ý: Không dùng timer). Viết lạI lờI giãi ở ví dụ 4-4 bằng cách thêm chế độ restart, nếu ở ngỏ vào lạI 2. xuất hiện sườn xuống trong khi chuông đang reo, thì vòng lặp định thờI sẻ restart lạI từ đầu để kéo dài thêm 1 S khác như mô tả ở hình 4.10. restart SW (input) Chuông 1 giây 1 giây Hình 4.10 Mạch chuông cải tiến
- Viết chương trình tạo xung vuông 12 KHz tạI P1.2 dùng timer 0. 3. Thiết kế ứng dụng ``cửa xoay`` dùng timer 1 để khách hàng thứ 10.000 đã 4. đi vào một khu chợ trời. Giả sử (a) cãm biến cửa xoay được nốI đến ngỏ vào T1 và sẻ tạo ra một xung mỗI khi có 1 ngườI đi vào và (b) một đèn báo được nốI đến P1.7 và sẻ sáng khi P1.7 = 1 (hình 4.11) 1 = ON 0 = OFF 8051 T1(P3.5) P1.7 Cãm biến cửa Hình 4.11 Mạch cảnh báo cửa Theo chuẩn thế giớI tần số chuẩn để điều chỉnh để điều chỉnh các nhạc cụ 5. là nốt ``A`` có tần số 440 Hz. Viết chương trình tạo âm thanh này cung cấp cho loa đặt tạI chân P1.1 (hình 4.12). Do việc làm tròn của TL1/TH1 nên sẻ xuất hiện sai số. Hãy cho biết tần số thực sự nhận được tạI ngỏ ra là bao nhiêu ? Sai số tính theo phần trăm ? VớI chương trình đẫ viết để có được tần số chính xác 440 Hz thì tần số thạch anh phảI là bao nhiêu ? +5 V 8051 P1.1 7404 Hình 4.12 Mạch tạo âm thanh Viết chương trình tạo xung 500 Hz tạI P1.0 dùng timer 0, dạng sóng ra có 6. duty cycle là 30%.
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn