8051 - part 3
Chào các bạn : Ở 2 bài trước chúng ta đã
tìm hiểu về cầu trúc tổng quan và bộ định thời Timer của 8051. Trong bài 3 này
tôi xin giới thiệu đến các bạn giao tiếp truyền thông nối tiếp một phương thức
giao tiếp rất phổ biến hiện nay.
I.
Giao
tiếp truyền thông nối tiếp không đồng bộ
Một trong những tính năng của vi điều khiển làm cho
nó mạnh mẽ như vậy đó là một UART tích hợp, được biết đến như là bộ truyền nhận
nối tiếp không đồng bộ. Để hiểu rõ hơn về chuẩn giao tiếp USART hay UART bạn
hãy xem mục “ VĐK CƠ BẢN” mục “Các Chuẩn giao tiếp”. Tất cả công việc chúng ta
cần làn đó là chọn chế độ cho cổng nối tiếp và tốc độ truyền. Trong 8051 có các
chân TXDvà RXD là một phần cổng P3 ( P3.0 chân 10 và P3.1 chân 11) hoạt động với
mức logic TTL (mức logic cao “1” tương ứng VCC và mức logic thấp “0” tương
ứng GND)
II.
Thiết
lập các thanh ghi
Ø Thanh ghi SBUF
SBUF là
thanh ghi 8 bit được dùng riêng cho truyền thông nối tiếp trong 8051.
Đối với một byte dữ liệu muốn truyền qua đường TxD thì nó phải
được đặt trong thanh ghi SBUF. Tương tự, SBUF cũng
giữ một byte dữ liệu khi nó được nhận từ đường RxDcủa 8051:
Khi một byte được ghi vào thanh ghi SBUF nó
sẽ được đóng khung với các bit Start, Stop và được
truyền nối tiếp quan chân TxD.
Khi các bit được nhận nối tiếp từ RxD thì
8051 mở khung đó để loại trừ các bit Start, Stop để lấy
ra một byte từ dữ liệu nhận được và đặt byte đó vào thanh ghi SBUF.
Ø Thanh ghi SCON
Là thanh ghi 8 bit dùng để lập trình việc đóng khung
dữ liệu, xác định các chế độ làm việc của truyền thông nối tiếp, SCON là thanh ghi có thể đánh địa chỉ
theo bit.
·
Bảng mô tả các bít của
thanh ghi SCON :
Chức
năng của các bít :
·
Bít
SM0, SM1 : Đây là các bít D7 và D6 của thanh ghi
SCON dùng để xác định các chế độ đóng khung dữ liệu, có 4 chế độ :
Chú ý:Tốc
độ truyền trong bảng sẽ được nhân đôi nếu bít PCON.7(Bít SMOD) được thiết lập
lên 1, mặc định của hệ thống là PCON.7=0.
Trong 4 chế độ trên ta thường chỉ quan tâm đến chế độ
1. Khi chế độ 1 được chọn thì dữ liệu được đóng khung thành 10 bit : gồm 1 bít start, sau đó là 8 bit
dữ liệu và cuối cùng là 1 bit stop.
Qua trọng hơn là chế độ nối tiếp 1 cho phép tốc độ Baud thay đổi và được thiết
lập bởi Timer1 của 8051.
·
Bít
SM2: là bít D5 của thanh ghi SCON. Bit này
cho phép khả năng đa xử lí của 8051. Đối với các ứng dụng của chúng ta, đặt
SM2=0, vì ta không sử dụng 8051 trong môi trường đa xử lí.
·
Bit
REN: Receive Enable – là bít cho phép nhận (bit D4 của thanh ghi SCON). Khi bit REN ở mức
cao nó cho phép 8051 nhận dữ liệu trên chân RXD của nó. Và kết quả là nếu ta muốn 8051 vừa truyền vừa nhận dữ
liệu thì bít REN phải được đặt lên 1. Bít này khống chế mọi việc nhận dữ liệu nối
tiếp nên nó là bít cực kì quan trọng.
·
Bit
TB8 và RB8 : Được dùng trong chế độ nối tiếp 2
và 3. Ta đặt TB8=0 và RB8=0 vì nó không được sử dụng trong các ứng dụng của
mình.
Bổ sung thêm, trong chế độ 2 và 3 thì có 9 bít dữ liệu
được truyền đi hoặc nhận về Bít TB8 sẽ chứa bít dữ liệu thứ 9 khi truyền, còn
bít RB8 sẽ chứa bít dữ liệu thứ 9 khi nhận.
·
Các
bit TI và RI: là các bít D1 và D0 của thanh ghi
SCON. Các bit này khá quan trọng trong thanh ghi SCON.
Khi 8051 kết thúc truyền một kí tự 8 bit nó sẽ bật cờ
TI lên để báo rằng nó sẵn sàng truyền 1 byte khác. Bit TI được bật lên trước
bit STOP.
Khi 8051 nhận được dữ liệu nối tiếp qua chân RXD và
nó tách các bit START và STOP để lấy 8 bit dữ liệu để đặt vào SBUF, sau khi
hoàn tất nó bật cờ RI để báo rằng nó đã nhận xong 1 Byte và cần phải lấy đi
không sẽ mất dữ liệu. Cờ RI được bật khi đang tách bít STOP.
I.
Thiết
lập tốc độ Baud trong 8051
Khi các chế độ cổng nối tiếp đã được cấu hình, việc
tiếp theo chúng ta cần làm là thiết lập tốc độ Baud cho các cổng nối tiếp. Việc
thiết lập này chỉ áp dụng cho chế độ serial port 1 và 3 còn ở chế độ 0 và 2 tốc
độ truyền luôn được xác định dựa trên tần số dao động của thạch anh.
·
Trong chế độ 0: tốc độ
truyền luôn là tần số thạch anh chia cho 12. Nếu bạn đang sử dụng thạch anh có
tần số 11.059 Mhz tốc độ truyền của chế độ 0 sẽ luôn là ~921.583 baud
·
Trong chế độ 2: Tốc độ
truyền luôn là tần số dao động chia cho 64. Do đó với thạch anh có tần số
11.059 Mhz sẽ có tốc độ truyền 172.797 Baud
·
Trong chế độ 1 và 3: Tốc
độ truyền được xác định bằng cách cài timer1, phương pháp phổ biến nhất là cài
đặt Timer1 ở chế độ tự động nạp lại 8 bít (chế độ 2 timer) thiết lập giá trị nạp
lại cho TH1 để tạo ra một tốc độ truyền.
·
Như ta đã biết trước
đây, 8051 chia tần số thạch anh cho 12 để lấy tần số chu kì máy. Bộ UART truyền
thông nối tiếp của 8051 lại chia tần số chu kì máy cho 32 một lần nữa trước khi
nó được dùng làm bộ định thời Timer1 để tạo ra tốc độ baud
Nhân đôi tốc độ Baud trong 8051
Có hai cách để tăng tốc độ Baud truyền dữ liệu trong
8051
1. Sử dụng tần số thạch anh cao hơn
2.
thay đổi một bit trong thanh ghi điều khiển công suất PCON (POWER Control)
Phương án 1 không khả thi trong nhiều trường hợp vì
tần số thạch anh của hệ thống là cố định. Do vậy ta sẽ tập trung phương án 2 :
Nhân đôi tốc độ baud bằng phần mềm
Điều này được thực hiện bằng thanh ghi PCON. Trong
thanh ghi 8 bit này một số bit không được dùng để điều khiển công suất của
8051. Bít dành cho truyền thông nối tiếp là bít D7 (bit SMOD). Trạng thái mặc định
SMOD của PCON ở mức thấp (0). Chúng ta có thể đặt nó lên bằng 1 bằng phần mềm
do đó có thể nhận đôi tốc độ Baud.
·
SMOD=0 : 8051 chia 1/12
tần số thạch anh cho 32 và sử dụng nó cho bộ timer1 để thiết lập tốc độ baud.
Đây là giá trị mặc định của SMOD khi 8051 bật nguồn.
·
SMOD=1 : 8051 chia 1/12
tần số thạch anh cho 16. Và đây là tần số được Timer1 dùng để thiết lập tốc độ
Baud.
Để xác định giá trị cài đặt trong TH1, với 1 tốc độ
baud nhất định được tạo ra chúng ta sẽ sử dụng biểu thức tính toán sau đây ứng
với 2 trạng thái của bít PCON.7=0.
·
PCON.7=0 :
TH1 = 256 - ((Crystal / (12*32)) / Baud) = 256 - ((Crystal / 384) /
Baud)
·
PCON.7=1:
TH1
= 256 - ((2*Crystal / (12*32)) / Baud) = 256 - ((Crystal / 192) / Baud)
Ví dụ 1:
Nếu
chúng ta có một tinh thể thạch anh tần số 11.059Mhz và chúng
ta muốn cấu hình cho cổng nối tiếp đạt tốc độ 19200 baud, thì ta sử
dụng phương trình 1:
TH1 = 256 - ((Crystal / 384) / Baud)
TH1 = 256 - ((11059000/384) / 19200)
TH1 = 256 - ((28799) / 19200)
TH1 = 256-1,5 = 254,5
Như
bạn có thể thấy: để có được tốc độ 19200 baud trên
một tinh thể thạch anh 11.059Mhz ta phải cài đặt TH1 một giá
trị 254,5. Nhưng giá trị trong các thanh ghi lại là 1 số nguyên.
Nếu chúng ta thiết lập là 254, chúng ta sẽ có tốc độ 14400
baud và nếu chúng ta thiết lập là 255, chúng ta sẽ có tốc
độ 28800 baud. Như vậy dường như chúng ta không thể cài đặt chính
xác tốc độ baud được ?!! L
Nhưng
ta lại có một cách khác để cài đặt được tốc độ 19200 baud.J Chúng
ta đơn giản chỉ cần đặt bit PCON.7=1 (bit SMOD).
Khi đó ta đã tăng gấp đôi tốc độ baudvà sử dụng phương
trình 2 được đề cập ở trên. Vì vậy chúng ta có:
TH1 = 256 - ((Crystal / 192) / Baud)
TH1 = 256 - ((11059000/192) / 19200)
TH1 = 256 - ((57.699) / 19.200)
TH1 = 256 - 3 = 253
Vậy:
để có được tốc độ 19200 baud với một tinh thể thạch anh tần số11.059MHz chúng
ta phải:
1. Cấu hình chế độ Serial Port 1 hoặc 3.
2. Cấu hình Timer 1 ở chế
độ 2 (8-bit tự động nạp lại).
3. Cài đặt TH1 giá trị 253 (FDH).
4. Set bit PCON.7=1 (SMOD)
để tăng gấp đôi tốc độ truyền (19200 baud).
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