Nhận làm đồ án VĐK các loại ( 8051, AVR, PIC) Tư vấn - Hướng dẫn - lập trình

Chủ Nhật, 11 tháng 1, 2015

8051 basic

8051- part 2


Chào các bạn trong phần 2 này nhóm điện tử RID sẽ hướng dẫn các bạn 3 chức năng quan trọng của vi điều khiển 8051: Timer/couter; ngắt; cổng vào ra nối tiếp.
   
I.     Timer/couter
8051 có 2 timer thường dùng phổ biến là timer0 và timer1 và bộ timer2. Ở bài này mình sẽ giới thiệu các bạn các thanh ghi của timer0, timer1 và timer2 cũng như các chế độ hoạt động.
1.   Timer0, timer1

·      Thanh ghi chế độ định thời (TMOD)


Bit của thanh ghi này có các chức năng sau đây:
GATE1: cho phép và vô hiệu hóa Timer 1 bằng phương tiện của một tín hiệu mang đến cho pin INT1 (P3.3):
o   1 - Timer 1 hoạt động chỉ nếu bit INT1 được thiết lập.
o   0 - Timer 1 hoạt động bất kể trạng thái logic của bit INT1.
C/T1: chọn xung được tính bằng thời / bộ đếm 1:
o   1 - Timer đếm xung mang đến cho pin T1 (P3.5).
o   0 - Timer đếm xung từ dao động nội bộ.
T1M1, T1M0: Hai bit chọn chế độ hoạt động của Timer 1.


GATE0: Cho phép và vô hiệu hóa Timer 1 bằng cách sử dụng một tín hiệu mang đến cho pin INT0 (P3.2):
o  1 - Timer 0 hoạt động chỉ nếu bit INT0 được thiết lập.
o  0 - Timer 0 hoạt động bất kể trạng thái logic của bit INT0.
C/T0: Chọn xung được tính tăng 0 thời / bộ đếm:
o  1 - Timer đếm xung mang đến cho pin T0 (P3.4).
o  0 - Timer đếm xung từ dao động nội bộ.
T0M1, T0M0: Hai bit chọn chế độ hoạt động số 0 Timer.


Timer 0 ở chế độ 0 (13-bit timer)
Đây là một của hiếm đang được lưu giữ chỉ cho mục đích của tính tương thích với các phiên bản previuos của vi điều khiển. Chế độ này cấu hình timer 0 như là một bộ đếm thời gian 13-bit trong đó bao gồm tất cả 8 bit của TH0 và thấp hơn 5 bit TL0. Kết quả là: Timer0 sử dụng chỉ có 13 trong số 16 bit. Nó hoạt động như thế nào? Mỗi xung tới gây ra các bit đăng ký thấp hơn để thay đổi trạng thái của nó. Sau khi nhận được xung 32, đăng ký này được nạp và tự động được xóa, trong khi các byte cao hơn (TH0) được tăng thêm 1. Quá trình này được lặp đi lặp lại cho đến khi đăng ký tính 8192 xung. Sau đó, cả hai đăng ký được xóa và đếm bắt đầu từ 0.


Timer 0 ở chế độ 1 (16-bit timer)
Chế độ 1 cấu hình timer 0 như một bộ đếm thời gian 16-bit bao gồm tất cả các bit của cả hai ghi TH0 và TL0. Đó là lý do tại sao điều này là một trong các phương thức được sử dụng phổ biến nhất. Bộ đếm thời gian hoạt động trong cùng một cách như trong chế độ 0, với sự khác biệt mà sổ đăng ký tính lên đến 65536 cho phép 16 bit.


Timer 0 ở chế độ 2 (Auto-Reload hẹn giờ)
Mode 2 cấu hình timer 0 như là một bộ đếm thời gian 8-bit. Trên thực tế, timer 0 chỉ sử dụng một đăng ký 8-bit để đếm và không bao giờ tính từ 0, nhưng từ một giá trị tùy ý (0-255) được lưu trữ trong một (TH0) đăng ký.
Ví dụ sau đây cho thấy những ưu điểm của chế độ này. Giả sử nó là cần thiết để liên tục đếm lên 55 xung tạo ra bởi đồng hồ.
Nếu chế độ 1 hoặc chế độ 0 được sử dụng, là cần thiết để viết số 200 đến sổ đăng ký hẹn giờ và liên tục kiểm tra xem một tràn đã xảy ra, tức là họ đạt giá trị 255. Khi điều đó xảy ra, giá trị cần nạp lại bằng phần mềm lập trình và 200 được nạp vào. Trong khi đăng ký TL0 được tải, thay vì bị xóa, nội dung của TH0 sẽ được nạp lại cho nó. 



Timer 0 ở chế độ 3 (Split hẹn giờ)
Chế độ 3 là chế độ tách Timer và là sự khác biệt cho mỗi Timer. Timer0 ở chế độ 3 được chia làm 2 timer 8 bit. TL0 và TH0 hoạt động như những Timer – 8bit riêng lẻ với các cờ tràn tương ứng: TL0 gắn với cờ tràn TF0, Th0 gắn với cờ tràn TF1.
Timer1 bị dừng lại ở chế độ 3 nhưng có thể được khởi động bởi việc ngắt nó vào một trong các chế độ khác (Do khuyết điểm là cờ tràn TF1 của Timer1 không bị ảnh hưởng vì cờ này đã được dùng bởi TH0). Khi Timer0 ở chế độ 3, thì Timer1 có thể hoạt động hoặc ngưng bằng cách chuyển Timer1 ra khỏi chế độ 3 hoặc vào chế độ 3. Timer 1 có thể được sử dụng bởi Port nối tiếp (lúc này Timer 1 làm nhiệm vụ của bộ tạo xung clock tốc độ baud) hoặc sử dụng theo một cách nào đó nhưng không yêu cầu ngắt (vì Timer 1 không còn nối đến TF1).


Với Timer1 các chế độ cũng tương tự Timer0
·      Thanh ghi TCON :




Làm thế nào để nạp cho timer và cách tính được thời gian từ lúc nạp đến lúc tràn theo ý muốn    
Ta có thời gian đếm từng giá trị của timer tương ứng thời gian chạy của chíp bằng tần số thạch anh /12. Ta thường sử dụng thạch anh 12Mhz => 1 giá trị đếm ~ 1us. Giả sử ta muốn timer đếm sau 50 ms thì tràn. 50ms=50000 us=0.05 s. Cụ thể ở đây tôi ví dụ với timer 0
Do thanh ghi TH0 và TL0 có thể đếm tối đa 65536 giá trị với chế độ 16 bit do đó để đếm được 50000. Timer sẽ phải đếm từ 65536 – 50000 = 15536.


Để nạp được giá trị xuất phát để timer bắt đầu đếm cho 2 thanh ghi TH0 và TL0 ta làm như sau :



Theo như hình trên chắc các bạn cũng đã hiểu :

TH0=65536/256;  ( 65536 chia lấy phần nguyên =60)
TL0=65536%256; ( 65536 chia lấy phần dư = 176)
Còn 1 cách nạp khác là các bạn sử dụng giá trị mà chúng ta mong muốn timer đếm luôn :
TH0=-15536/256;
TL0=-15536%256;
Cách viết này tương tự thực chất:  -15536 = giá trị timer tràn (65536) - 15536

1.   Timer 2
·      T2CON
Ở phần này tôi sẽ không đi sâu vào các chế độ hoạt động của timer 2 mà chỉ giới thiệu qua chức năng các bít của thanh ghi của timer2. Các bạn có thể tìm ở mục tài liệu tìm cho mình tài liệu của 8051 để xem rõ hơn.


TF2 :   Cờ báo tràn Timer2, được đặt khi timer2 tràn và được xóa bởi phần mềm.   TF2 không được thiết lập khi RCLK và TCLK được thiết đặt bằng 1.
EXF2 : Cờ ngắt ngoài ủa Timer2, nếu ngắt được lập trình cho phép, EXF2=1 cũng gây là ngắt trên timer2.
RCLK : Bít chọn timer cung cấp xung nhịp cho đường nhận của cổng nối tiếp.    Nếu :
RCLK=1 timer 2 sẽ cung cấp tốc độ baud cho cổng nối tiếp
RCLK=0 timer 1 sẽ cung cấp tốc độ Baud cho cổng nối tiếp (chế độ 1 và 3)
TCLK : Bít chọn timer cung cấp xung nhịp cho đường truyền của cổng nối tiếp.Nếu :
TCLK=1 Timer 2 sẽ cung cấp tốc độ baud cho cổng nối tiếpở đường truyền.
TCLK=0 Timer 1 sẽ cung cấp tốc độ baud cho cổng nối tiếp ở đường truyền
EXEN2: Bít điều khiển hoạt động của Timer2, khi EXEN2=1. Việc nạp lại hoặc thu nhận diễn ra khi có sự chuyển đổi trạng thái từ 1 sang 0 ở chân T2EX. Với điều kiện T2 không sử dụng để cung cấp tốc độ baud cho cổng nối tiếp.
TR2 : Bít điều khiển hoạt động của timer (tương tự như với TR0 và TR1)
C/#T2: Bít chọn chế độ đếm hoặc định thời của Timer2 (Tương tự C/#T1,0)
CP/#RL2 : Bít chọn chế độ thu nhận hay nạp lại của Timer2. Khi CP/#RL2C được thiết lập bằng 1, việc thu nhận được thực hiện khi có sườn xuống ở chân T2EX và bít EXEN2 được đặt bằng 1. Với CP/#RL2C được thiết lập bằng 0, việc nạp lại được thực hiện hoặc khi timer tràn hoặc khi có sườn xuống T2EX với bít EXEN2 được đặt bằng 1. Nếu RCLK và TCLK được được đặt bằng 1 thì bít này được bỏ qua. Timer2 tự nạp lại khi tràn.

·      T2MOD :
Ta chỉ cần quan tâm tới 2 bit :
+ T2MOD.1 : T2OE : Cho phép đầu ra sử dụng Timer2 để tạo xung ( Chế độ tạo xung – clock out)
+ T2MOD.0 : DCEN :  Bit cho phép Timer 2 hoạt động như một bộ đếm tiến/lùi.
+ Phù vậy là chúng ta đã đi xong cơ bản các chế độ Timer của  8051. Trong bài tiếp theo chúng ta sẽ cùng tìm hiểu 2 phần còn lại của 8051 đó là : Ngắt và giao tiếp truyền thông nối tiếp. ^^!



Mọi thắc mắc vui lòng liên hệ qua: 
Facebook: Rid HaUI

Next previous home

0 nhận xét:

Đăng nhận xét