bài giảng về vi điều khiển 8051

6 857 4
bài giảng về vi điều khiển 8051

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

Thông tin tài liệu

NỘI DUNG BÀI GIẢNG CHƯƠNG 1: BỘ VI ĐIỀU KHIỂN 80C51/89C51 Bài 1.6: Khối tạo thời gian và bộ đếm Timer/Counter 1.6.1. Tổng quan về Timer/Counter + Chức năng chính của bộ Timer/Counter, đúng như tên gọi, là định thời (tạo thời gian, đo thời gian), và đếm sự kiện bên ngoài. + 8051 có 2 bộ Timer/Counter là T0 và T1, đều là 2 bộ Timer 16 bit. Chúng có thể hoạt động với tần số bên trong (lấy từ thạch anh), cũng có thể hoạt động với tần số bên ngoài, đưa vào đầu vào của bộ Timer. + Chức năng Counter có thể dùng để đếm sản phẩm, hay đo độ rộng xung. Ví dụ: đếm số xe ra, vào bãi gửi xe. 1.6.2. Giới thiệu các thanh ghi của bộ Timer a) Thanh ghi vận hành TH0, TL0, TH1, TL1 Đây chính là các thanh ghi chứa giá trị vận hành của bộ Timer. Dùng kết hợp 2 thanh ghi 8 bit giống như là 1 thanh ghi 16 bit với 2 byte: byte thấp và byte cao. Thanh ghi byte thấp của bộ Timer 0 được gọi là TL0 (Timer 0 bow byte), thanh ghi byte cao được gọi là TH0 (Timer 0 high byte), và tương tự đối với Timer 1. H6. 1 Thanh ghi vận hành của bộ Timer 0 H6. 2 Thanh ghi vận hành của bộ Timer 1 Cứ mỗi lần xuất hiện 1 tín hiệu “kích”, thì giá trị của thanh ghi vận hành (thanh ghi 16 bit) sẽ được tăng lên 1 đơn vị. Giá trị MAX mà thanh ghi này có thể đạt được thì tùy vào chế độ vận hành của bộ Timer. Sau khi đạt giá trị MAX thì thanh ghi sẽ tự động được reset về 0. Các thanh ghi này đều có thể đọc hoặc ghi tại bất kì thời điểm nào. b) Thanh ghi TMOD Đây là thanh ghi thiết lập các chế độ hoạt động của 2 bộ Timer. Thanh ghi TMOD là thanh ghi 8 bit, trong đó 4 bit thấp dùng để thiết lập cho Timer 0, và 4 bit cao dành cho Timer 1 H6. 3 Thanh ghi TMOD + 2 bit M1, M0: Đây là các bit cài đặt chế độ hoạt động cho các bộ Timer, như bảng dưới đây: M1 M0 Chế độ Ý nghĩa 0 0 0 Bộ định thời 13 bit 0 1 1 Bộ định thời 16 bit 1 0 2 Bộ định thời 8 bit tự nạp lại 1 1 3 Chế độ bộ định thời chia tách + Bit C/T Bit này quyết định xem bộ định thời được dùng như 1 máy tạo độ trễ hay là bộ đếm sự kiện. Nếu bit C/T=0 thì bộ định thời được dùng như bộ tạo độ trễ thời gian. Khi đó nguồn xung clock cấp cho bộ Timer hoạt động sẽ bằng 1/12 tần số của thạch anh trên mạch. Nếu bit C/T=1 thì bộ định thời được dùng như 1 bộ đếm sự kiện bên ngoài. Khi đó nó sẽ dùng nguồn clock ngoài để vận hành. + Bit GATE Một bộ Timer không thể tự động hoạt động hay dừng, mà ta phải thực hiện một lệnh. Một số bộ định thời thực hiện điều này bằng phần cứng, một số thì thực hiện bằng phần mềm, một số thì có thể thực hiện bằng cả 2 cách. Các bộ định thời trên 8051 có thể thực hiện bằng cả 2 cách này. Bit GATE dùng để quyết định việc khởi động hay dừng bộ Timer bằng phần cứng hay phần mềm. Nếu bit GATE=0 tức là ta cần khởi động hoặc dừng bộ Timer bằng phần mềm. Việc này được điều khiển bởi bit TR trong thanh ghi TCON. Nếu bit GATE=1 tức là ta cần khởi động hoặc dừng bộ Timer bằng phần cứng. Khi đó chân P2.3 điều khiển cho Timer 0 và P3.3 điều khiển cho Timer 1. Khi đưa chân tương ứng lên 1 (sử dụng công tắc chuyển mạch) thì bộ Timer tương ứng sẽ được chạy, và đưa xuống 0 thì Timer sẽ dừng. c) Thanh ghi TCON Đây là thanh ghi điều khiển hoạt động của Timer/Counter H6. 4 Thanh ghi TCON 4 bit thấp để phục vụ cho ngắt ngoài, chúng ta không cần quan tâm ở đây. Bit TR0: đây là bit dùng để điều khiển việc chạy/dừng của Timer 0 (1 là chạy, 0 là dừng). Bit TF0: đây là bit cờ báo hiệu tràn Timer 0. Khi có hiện tượng tràn xảy ra thì bit này sẽ tự động được lên 1. Bit TR1 và TF1: 2 bit dùng cho Timer 1, hoạt động tương tự như TR0, TF0. 1.6.3. Các chế độ hoạt động của Timer/Counter. a) Mode 1 Để Timer/Counter hoạt động ở mode 1 thì ta cần đặt các bit M1=0; M0=1. Mỗi lần có tín hiệu clock thì giá trị của thanh ghi vận hành T (gồm 2 thanh ghi TH và TL) sẽ được tăng lên 1 đơn vị, và có thể tăng đến mức TOP là FFFFH (giá trị thập phân là 65535). Khi đó, ở nhịp xung tiếp theo thì bộ Timer bị tràn và quay trở về 0000, đồng thời cờ TF0 được bật lên. H6. 5 Sơ đồ hoạt động của Mode 1 Cờ TF cho ta biết thời điểm mà Timer bị tràn. Ta có thể lập trình để đếm thời gian, cách tính toán như sau: Clock cấp cho Timer hoạt động bằng 1/12 tần số thạch anh, nếu ta dùng thạch anh 12MHz thì tần số của Timer sẽ là 1MHz, tức là cần 1us để thanh ghi vận hành TH0, TL0 tăng lên 1 đơn vị. Nếu thanh ghi vận hành xuất phát từ 0000 thì sẽ cần 65536 xung nhịp để tràn, như vậy thời gian cho 1 lần tràn sẽ là 65536us. Ta có thể tính toán để cho thời gian này đẹp hơn bằng cách không cho bộ Timer vận hành từ 0000 nữa, mà là 1 giá trị nằm giữa 0000 và FFFF. Giả sử ta chọn là 5536 thì thời gian cho 1 lần tràn sẽ là 65535-5536+1=60000(us)=60(ms). Tuy nhiên sau khi tràn thì thanh ghi vận hành TH0 và TL0 lại tự reset về 0. Do đó để chu kì tiếp theo vận hành tiếp từ giá trị 5536 thì ta phải gán giá trị cho TH0 và TL0 bằng phần mềm ngay khi bộ Timer bị tràn. 5536 tính theo hệ hexa sẽ là 15A0H, do đó ta sẽ phải gán TH0=15H và TL0=A0H. Như vậy: thời gian lớn nhất có thể có được khi Timer tràn là 65536us. Tuy nhiên cũng có lúc ta cần khoảng thời gian lớn hơn như thế. Thế thì cần phải dùng 1 biến đếm đếm số lần tràn, và dựa vào biến đấy để tính toán ra thời gian. Ví dụ: ta cần đo khoảng thời gian là 1s. Ta chọn giá trị khởi tạo cho thanh ghi vận hành từ 3CB0H (15536). Thời gian cho 1 lần tràn sẽ là 65535- 15536+1=50000(us)=50(ms). Mỗi lần tràn ta cho 1 biến dem tăng lên 1 đơn vị. Vậy để có được thời gian 1(s) thì ta cần 1000/50=20 lần tràn, tức khi biến dem mang giá trị là 20 thì ta sẽ có được khoảng thời gian là 1(s). Các bước lập trình ở chế độ Mode 1 để tạo thời gian trễ: 1. Cài đặt giá trị cho thanh ghi TMOD: bộ Timer nào (Timer 0 hay Timer 1) được sử dụng và Mode nào được sử dụng. 2. Nạp giá trị vận hành ban đầu cho các thanh ghi TH và TL. 3. Khởi động bộ Timer bằng cách SET bit TR trong thanh ghi TCON 4. Xét xem khi nào thì cờ TF được bật lên, thoát vòng lặp. 5. Dừng bộ định thời bằng cách xóa bit TR. 6. Xóa cờ TF chuẩn bị cho vòng kế tiếp. 7. Quay trở lại bước 2 để nạp lại giá trị cho TH, TL. b) Mode 0 Để Timer/Counter hoạt động ở mode 1 thì ta cần đặt các bit M1=0; M0=0. Về cách thức hoạt động thì Mode 0 giống hệt Mode 1, chỉ khác là bộ Timer 16 bit được thay thế băng bộ Timer 13 bit, tức giá trị lớn nhất TOP=1FFFH c) Mode 2 Ở mode này thì Timer chỉ hoạt động với 8 bit, tức là giá trị lớn nhất mà thanh ghi vận hành có thể đạt được là FFH. Đối với Mode 0 và Mode 1 thì mỗi lần Timer bị tràn ta lại phải nạp lại giá trị cho 2 thanh ghi TH, TL. Nhưng ở Mode này thì việc này được tiến hành tự động. Đầu tiên, ta nạp 1 giá trị ban đầu cho thanh ghi TH. Sau đó khi ta khởi động cho Timer chạy thì thanh ghi TL sẽ lấy giá trị của TH làm giá trị ban đầu. Khi bộ Timer bị tràn thì cờ TF được bật lên, đồng thời thanh ghi TL sẽ lấy giá trị của TH (không thay đổi) làm giá trị khởi đầu cho quá trình đếm tiếp theo. Như vậy thì việc nạp lại giá trị khởi tạo cho bộ Timer được tiến hành 1 cách tự động mà không cần can thiệp của người lập trình. Cách tính toán thời gian thì cũng giống như ở Mode 1, khi tính toán thì chú ý mức TOP bây giờ là FFH chứ không phải là FFFFH. d) Mode 3 Mode 3 được gọi là chế độ Timer chia tách. Ở Mode này thì Timer 1 không hoạt động, còn Timer 0 được tách ra làm 2 Timer 8 bit. Khi đó TL0 và TH0 hoạt động độc lập nhau, với các cờ báo tràn TF0 dành cho TL0, và TF1 dành cho TH0. Khi cho Timer 0 chạy ở Mode 3 thì vẫn có thể cho Timer 1 chạy ở Mode khác (0,1,2), giống như là ta có 3 Timer đồng thời vậy. Tuy nhiên cờ báo tràn của Timer 1 khi đó (TF1) sẽ không bị ảnh hưởng bởi việc tràn của Timer 1 nữa, vì khi đó nó được dùng làm cờ báo tràn cho TH0. Bộ Timer 1 khi đó có thể được sử dụng bởi PORT nối tiếp (làm nhiệm vụ của bộ tạo xung baud), hoặc được sử dụng theo cách mà không yêu cầu ngắt. 1.6.4. Chế độ Counter (bộ đếm) Khi ta thiết lập bit C/T trong thanh ghi TMOD=1 thì bộ định thời dùng nguồn clock ngoài để hoạt động. Tức là thanh ghi vận hành TH và TL sẽ không tăng 1 cách tự động sau 1 khoảng thời gian nữa mà khi có xung tác động vào đầu vào của bộ Timer thì thanh ghi này mới tăng. Do đó bộ Timer với cách thức vận hành như thế này được gọi là bộ đếm sự kiện. Chân đầu vào của Timer 0 có tên là T0, và của Timer 1 có tên là T1. Các chế độ hoạt động của bộ đếm cũng giống hệt như trên, tuy nhiên ta không dùng chế độ này để đếm thời gian được, mà dựa vào giá trị của 2 thanh ghi TH, TL để đếm sự kiện. Cứ mỗi sự kiện xảy ra sẽ được chuyển hóa thành 1 xung, giá trị của thanh ghi TL sẽ được tăng lên 1, và dựa vào giá trị của 2 thanh ghi TH, TL để đếm số sự kiện xảy ra. . NỘI DUNG BÀI GIẢNG CHƯƠNG 1: BỘ VI ĐIỀU KHIỂN 80C51/89C51 Bài 1.6: Khối tạo thời gian và bộ đếm Timer/Counter 1.6.1. Tổng quan về Timer/Counter + Chức năng chính. thanh ghi điều khiển hoạt động của Timer/Counter H6. 4 Thanh ghi TCON 4 bit thấp để phục vụ cho ngắt ngoài, chúng ta không cần quan tâm ở đây. Bit TR0: đây là bit dùng để điều khiển vi c chạy/dừng. tức là ta cần khởi động hoặc dừng bộ Timer bằng phần cứng. Khi đó chân P2.3 điều khiển cho Timer 0 và P3.3 điều khiển cho Timer 1. Khi đưa chân tương ứng lên 1 (sử dụng công tắc chuyển mạch)

Ngày đăng: 18/08/2014, 22:34

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