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
Gmail: dienturid@gmail.com
0 nhận xét:
Đăng nhận xét