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 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 TXDRXD 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 StartStop 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 StartStop để 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


Next previous home

0 nhận xét:

Đăng nhận xét