AT89C51 cĩ 1 port nối tiếp trong chíp cĩ thể hoạt động ở nhiều chế độ trên một dãi tần số rộng .Chức năng chủ yếu của port nối tiếp là thưc hiện chuyển đổi song song sang nối tiếp đối với dữ liệu xuất ,và chuyển đổi nối tiếp sang song song với dữ liệu nhập.
Truy xuất phần cứng đến port nối tiếp qua các chân TXD và RXD .Các chân này cĩ các chức năng khác với 2 bit của port 3 ,P3.1 ở chân 11(TXD ) và P3.0 ở chân 10 (RXD).
Port nối tiếp cho hoạt động song cơng ( thu và phát đồng thời) ,và đệm lúc thu ,cho phép 1 ký tự sẽ được thu và được giữ trong khi ký tự thứ 2 được nhận .
Hai thanh ghi chức năng đặc biệt cung cấp truy xuất phần mềm đến port nối tiếp là SBUF và SCON . Bộ đệm port nối tiếp (SBUF) ở địa chỉ 99H thật sự là 2 bộ đệm.Viết vào SBUF nạp dữ liệu sẽ được phát, và đọc SBUF truy xuất dữ liệu thu được. Đây là 2 thanh ghi riêng biệt :thanh ghi chỉ ghi để phát và thanh ghi chỉ đọc để thu.
TXD(P3.1) RXD(P3.0)
SBUF(chỉ ghi) D Thanh ghi dịch
CLK Q CLK
Xung nhịp Xung nhịp
tốc độ baud(phát) tốc độ baud(thu) SBUF(chỉ đọc)
Bus nội 8051
Hình: Sơ đồ khối port nối tiếp
Thanh ghi điều khiển port nối tiếp (SCON) ở địa chỉ 98H là thanh ghi cĩ địa chỉ bit chứa các bit trạng thái và các bit điều khiển .Các bit điều khiển đặt chế độ hoạt động cho port nối tiếp, các bit trạng thái chỉ kết thúc phát hoặc thu ký tự. Các bit trạng thái cĩ thể được kiểm tra bằng phần mềm hoặc cĩ thể được lập trình để tạo interrupt .
Tần số làm việc của port nối tiếp (tốc độ baud) cĩ thể cố định (lấy từ dao động trên chip 8051) hoặc thay đổi được (timer 1 cung cấp xung nhịp tốc độ baud và phải được lập trình ) .
2.Thanh ghi điều khiển port nối tiếp :
Chế độ hoạt động của port nối tiếp được đặt bằng cách ghi vào thanh ghi chế độ port nối tiếp (SCON) ở địa chỉ 98H. Trước khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ …
• Bảng tĩm tắt thanh ghi chế độ port nối tiếp :
Bit Ký hiệu Địa chỉ Mơ tả
SCON.7 SCON .6 SCON.5 SCON.4 SCON.3 SCON.2 SCON.1 SCON.0 SM0 SM1 SM2 SM3 SM4 SM5 SM6 SM7 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
Bit 0 của chế độ port nối tiếp Bit 1 của chế độ port nối tiếp
Bit 2 của ché độ port nối tiếp. Cho phép truyền thơng đa xử lý trong các chế độ 2 và 3 ; RI sẽ khơng bị tác động nếu bit thứ 9 thu được là 0.
Cho phép bộ thu, phải được đặt lên 1để thu (nhận) các ký tự.
Bit 8 phát ,bit thứ 9 được phát trong chế độ 2 & 3. Được đặt / xố bằng phần mềm.
Bit 8 thu, bit thứ 9 thu được.
Cờ interrupt phát. Đặt lên 1 ở kết thúc phát ký tự; Được xố bằng phần mềm.
Cờ interrupt thu.Đặt lên 1 khi kết thúc thu ký tự, được xố bằng phần mềm.
• Bảng các chế độ port nối tiếp :
SM1 SM0 Chế độ Mơ tả Tốc độ baud
0 0 0 Thanh ghi dịch Cố định (tần số dao động/12)
0 1 1 UART 8 bit Thay đổi (đặt bằng timer)
1 0 2 UART 9 bit Cố định (tần số dao động /12 hoặc
chia cho 64.
1 1 3 UART 9 bit Thay đổi (đặt bằng timer)
3. Các chế độ hoạt động :
Port nối tiếp cĩ 4 chế độ hoạt động , được chọn qua các bit SM0 & SM1 trong SCON. Ba trong các chế độ cho phép truyền thơng bất đồng bộ, với mỗi ký tự được thu hoặc phát được đĩng khung bằng 1 bit start và 1 bit stop . Ở chế độ thứ tư , port nối tiếp hoạt động như một thanh ghi đơn giản.
a. Thanh ghi dịch 8 bit (chế độ 0) :
Dữ liệu nối tiếp vào và ra qua RXD và TXD xuất xung nhịp dịch. Tám bit được phát hoặc thu với bit đầu tiên là LSB . Tốc độ baud cố định ở 1/12 tần số dao động trên chip (chế độ này đường RXD được dùng để nhập và xuất dữ liệu, đường TXD dùng làm xung nhịp).
Việc phát đi được khởi động bằng bất cứ lệnh nào mà ghi dữ liệu vào SBUF. Dữ liệu được dịch ra ngồi trên đường RXD với các xung nhịp được gởi ra đường TXD. Việc thu được khởi động khi bit cho phép bộ thu (REN ) là 1 và bit interrupt thu (RI) là 0. Cần đặt REN ở bắt đầu chương trình để khởi động port nồi tiếp, và rồi xố RI để bắt đầu hoạt động nhập dữ liệu. Khi RI bị xố, các xung nhịp được ghi ra đường TXD, bắt đầu chu kỳ máy sau, và dữ liệu theo xung nhịp ở đường RXD. Lấy xung nhịp cho dữ liệu vào port nối tiếp xảy ra ở cạnh dương của TXD.
Một ứng dụng của chế độ thanh ghi dịch là mở rộng khả năng xuất của 8051.IC thanh ghi dịch nối tiếp ra song song cĩ thể được nối vào các đường TXD và RXD của 8051 để cung cấp thêm 8 đường ra.
Thêm 8 ngõ ra
b. UART 8 bit với tốc độ baud thay đổi được (chế độ 1) :
Ở chế độ 1, port nối tiếp của AT89C51 làm việc như 1 UART 8 bit với tốc độ baud thay đổi được. Hoạt động chủ yếu của UART (bộ phát /thu bất đồng bộ vạn năng) là chuyển đổi song song sang nối tiếp với dữ liệu xuất và chuyển đổi nối tiếp ra song song với dữ liệu nhập.
Ở chế độ 1, 10 bit được phát trên TXD hoặc thu trên RXD là :1 bit start (luơn là 0), 8 bit dữ liệu (LSB đầu tiên) , và 1 bit stop (luơn là 1). Với hoạt động thu (nhận), bit stop được đưa vào RB8 trong SCON. Trong AT89C51, tốc độ baud được đặt bằng tốc độ báo tràn timer 1.
Tạo xung nhịp và đồng bộ hố các thanh ghi dịch port nối tiếp trong các chế độ 1,2 và 3 được thiết lập bằng bộ đếm 4 bit chia cho 16, ngõ ra là xung nhịp tốc độ baud. Ngõ vào của counter này được chọn qua phần mềm.
SV : TRIỆU QUANG MINH Trang 33
AT89C51
TXD (P3.1) RXD (P3.0)
Clock Thanh ghi Dữ liệu dịch
Truyền dữ liệu được khởi động bằng cách ghi vào SBUF, nhưng thật sự khơng bắt đầu chạy cho đến khi sự thay thế kế của bộ đếm (chia cho 16) cung cấp tốc độ baud cổng nối tiếp. Cờ interrupt phát/truyền (TI) được đặt lên 1 khi xuất hiện bit stop trên TXD.
Việc thu dữ liệu được khởi động bằng 1 chuyển trạng thái từ 1 xuống 0 trên RXD. Bộ đếm 16 tức thời được xố để đồng bộ số đếm với luồng bit đến.
c. UART 9 bit với tốc độ baud cố định (chế độ 2) :
Ở chế độ 2, 11 bit được phát hoặc thu : 1 bit start, 8 bit dữ liệu, bit dữ liệu thứ 9 cĩ thể lập trình được, và 1 bit sop. Khi phát, bit thứ 9 là bất cứ gì đã được đưa vào TB8 trong SCON (cĩ thể là bit parity). Khi thu, bit thứ 9 thu được thì ở RB8. Tốc độ baud ở chế độ 2 là 1/32 hoặc 1/16 tần số dao động.
d. UART 9 bit với tốc độ baud thay đổi được (chế độ 3) :
Chế độ này giống chế độ 2 ngoại trừ tốc độ baud cĩ thể lập trình được và được cung cấp bởi timer.
4. Khởi động và truy xuất các thanh ghi cổng nối tiếp :a. Cho phép thu : a. Cho phép thu :
Bit cho phép bộ thu (REN) trong SCON phải được đặt lên 1 bằng phần mềm để cho phép thu các ký tự. Cĩ thể thực hiện theo cách sau :
SETB REN
Hoặc MOV SCON,#xxx1xxxxB b. Bit dữ liệu thứ 9 :
Bit dữ liệu thứ 9 cần phát trong các chế độ 2 và 3 phải được nạp vào TB8 bằng phần mềm. Bit dữ liệu thứ 9 khi thu được đặt ở RB8.
c. Thêm một bit parity :
Thường sử dụng bit dữ liệu thứ 9 để thêm parity vào ký tự. Thí dụ , nếu truyền thơng cần 8 bit dữ liệu cộng thêm kiểm tra chẵn, cĩ thể sử dụng các lệnh sau để truyền 8 bit trong thanh ghi tích luỹ với kiểm tra chẵn thêm vào bit thứ 9 :
MOV C,P ; Đặt bit parity chẵn vào TB8 MOV TB8,C ; nĩ trở thành bit dữ liệu thứ 9 MOV SBUF,A ; Chuyển 8 bit từ Acc vào SBUF
Nếâu cần parity lẻ thì ta thêm lệnh CPL C vào.
Sử dụng parity khơng bị giới hạn ở chế độ 2 và 3. Ở chế độ 1, 8 bit dữ liệu được truyền cĩ thể bao gồm 7 bit dữ liệu cộng thêm bit parity :
CLR Acc.7 ; Bảo đảm MSB được xố parity chẵn ở trong P MOV C,P ;
MOV Acc.7,C ; Đặt parity chẵn vào MSB
MOV SBUF,A ; Gởi ký tự đi 7 bit dữ liệu cộng parity chẵn d. Các cờ interrupt :
Hai cờ interrupt thu và phát (RI và TI) trong SCON được đặt lên 1 bằng phần cứng, nhưng phải được xố bằng phần mềm.
Thường RI được đặt lên 1 khi kết thúc thu ký tự và chỉ “bộ đệm thu tràn”. Nếu phần mềm muốn nhập 1 ký tự từ thiết bị được nối vào cổng nối tiếp, nĩ phải đợi RI được đặt lên 1, rồi xố RI và đọc ký tự từ SBUF :
WAIT : JNB RI,WAIT ; Kiểm tra RI cho đến khi nĩ = 1 CLR RI ; Xố RI
MOV A,SBUF ; Đọc ký tự
TI được đặt lên 1 ở cuối lúc truyền (phát) ký tự và chỉ “bộ đệm phát trống”. Nếu phần mềm muốn gửi 1 ký tự đến 1 thiết bị được nối vào cổng nối tiếp, nĩ phải kiểm tra xem cổng nối tiếp sẵn sàng chưa :
WAIT : JNB TI,WAIT ; Kiểm tra TI cho đến khi nĩ =1 CLR TI ; Xố TI
MOV SBUF,A ; Gửi ký tự đi
5. Truyền thơng đa xử lý :
Các chế độ 2 & 3 đặt biệt dùng cho truyền thơng đa xử lý. Trong các chế độ này, thu 9 bit dữ liệu vàbit thứ 9 ở RB8. Port cĩ thể được lập trình để khi nhận được bit stop, interrupt cổng nối tiếp được tác động chỉ nếu RB8 =1. Đặc tính này được cho phép bằng cách đặt bit SM2 ở SCON. Ứng dụng của việc này trong mơi trường nối mạng dùng nhiều 8051 theo sắp xếp chủ (master)/ tớ (slave).
SM2 khơng cĩ ảnh hưởng trongchế độ 0, và trong chế độ 1 cĩ thể sử dụng nĩ để kiểm tra sự hợp lệ của bit stop. Khi nhận ở chế độ 1, nếu SM2 =1, interrupt thu sẽ khơng được tác động trừ khi nhận được bit stop hợp lệ.
6.Tốc độ baud cổng nối tiếp :
Tốc độ baud cố định ở chế độ 0 và 2.Trong chế độ 0, nĩ luơn là tần số dao động trên chip được chia cho 12. Giả sử với tần số dao động danh định là 12 MHz, thì tốc độ baud chế độ 0 là 1 MHz.
Hình :Các nguồn tạo xung nhịp cổng nối tiếp
Dao động trên chip Xung nhịp tốc độ baud a) Chế độ 0
SMOD=0 Dao động trên chip
SMOD=1 b) Chế độ 2 SMOD=0 Tràn của timer 1 SMOD=1 c) Chế độ 1 và 3
Mặc nhiên sau reset hệ thống, tốc độ baud chế độ 2 là tần số dao động chia 64.Tốc độ baud cũng bị ảnh hưởng bởi 1 bit trong thanh ghi điều khiển nguồn cấp , PCON .Bit 7 của PCON là bit SMOD . Đặt bit SMOD lên 1 làm gấp đơi tốc độ baud trong các chế độ 1 ,2 và 3. Vì PCON khơng cĩ định địa chỉ theo bit , việc đặt bit SMOD lên 1 khơng bị ảnh hưởng đến các bit PCON khác thì cần tác vụ “ đọc – sửa – đổi – ghi “. Các lệnh sau đặt SMOD lên 1:
MOV A,PCON ; Lấy giá trị hiện thời của PCON SETB Acc.7 ; Đặt bit 7 (SMOD) lên 1
MOV PCON,A ; Ghi giá trị ngược về PCON
Các tốc độ baud trong chế độ 1 và 3 được xác định bằng tốc độ tràn của timer 1. Vì timer hoạt động ở tần số tương đối cao, tràn được chia thêm cho 32 (hoặc 16 nếu SMOD=1) trước khi cung cấp xung nhịp tốc độ baud cho cổng nối tiếp.
• Sử dụng timer 1 làm xung nhịp tốc độ baud :
Xét AT89C51, cách thơng dụng để tạo tốc độ baud là khởi động TMOD cho chế độ 8 bit tự động nạp lại (timer chế độ 2) và đặt giá trị nạp lại đúng vào TH1 để cho tốc độ tràn đúng cho tốc độ baud. TMOD được khởi động như sau :
MOV TMOD,#0010xxxxB
Cũng cĩ thể đạt được các tốc độ baud thấp bằng cách sử dụng timer chế độ 1 với TMOD=0001xxxxB. Tuy nhiên các thanh ghi TH1/TL1 phải được khởi động lại sau mỗi
SV : TRIỆU QUANG MINH Trang 37
Chia 64 Chia 32 Xung nhịp tốc dộ baud Chia 32 Chia 16 Xung nhịp tốc độ baud
lần tràn. Một lựa chọn khác là cấp xung nhịp cho timer 1 từ ngồi dùng T1(P3.5). Và luơn luơn tốc độ baud là tốc độ tràn của timer 1 được chia cho 32 (hoặc chia 16 nếu SMOD=1).
Trong các chế độ 1 và 3 : Tốc độ baud = Tốc độ tràn của timer 1 / 32
Tổng quát thì cho phép dung sai 5% trong truyền thơng bất đồng bộ (start/stop) . Cĩ thể cĩ được tốc độ baud chính xác dùng thạch anh 11.095 MHz . Bảng 6 – 3 tĩm tắt các giá trị nạp lại cho các tốc độ baud thơng dụng nhất , dùng thạch anh 12MHz hoặc 11.059MHz .
Bảng 6-3 : Tĩm tắt tốc độ baud .
Tốc độ baud
Tần số thạch anh SMOD Giá trị nạp lại vào
TH1 Tốc độ baud thật Sai số 9600 2400 1200 19200 9600 2400 1200 12.000MHz 12.000MHz 11.059MHz 11.059MHz 11.059MHz 11.059MHz 1 0 0 1 0 0 0 -7 ( F9H ) -13 ( F3H ) -26 ( E6H ) -3 ( FDH ) -3 (FDH ) -12 (F4H ) -24 (E8H) 8923 2404 1202 19200 9600 2400 1200 7% 0.16% 0.16% 0 0 0 0 V. TẬP LỆNH CỦA µ CAT89C51 :
Tập lệnh của µCAT89C51 gồm cĩ 225 lệnh gồm 139 lệnh một byte, 92 lệnh byte và 24 lệnh 3 byte.
Các chế độ đánh địa chỉ : Trong tập lệnh cĩ 8 chế độ đánh địa chỉ:
a. Địa chỉ thanh ghi (Register Addressing):
µC AT89C51 cĩ bốn bank thanh ghi, mỗi bank thanh ghi cĩ 8 thanh ghi đánh từ R0 đến R7. Tại mỗi thời điểm chỉ cĩ một bank thanh ghi được tích cực. Muốn chọn bank thanh ghi nào ta chỉ cần gán các bit nhị phân thích hợp vào RSI(PSW.4) và PRO(PSW.3) trong thanh ghi trạng thái chương trình (PSW).
Ngồi ra, một thanh ghi cĩ chức năng đặc biệt như 8 thanh ghi tích lũy, con trỏ dữ liệu,…… cũng được xác định trong các lệnh nên khơng cần các bit địa chỉ. Trong các lệnh này thanh ghi tích lũy được ký hiệu là”A”, con trỏ dữ liệu là”DTPR”, thanh ghi đếm chương trình “PC”, cờ nhớ là”C”, cặp thanh ghi tích lũy là”A,B”.
Địa chỉ thanh ghi.
b. Địa chỉ trực tiếp (Direct Addressing):
Trong chế độ này, các thanh ghi bên trong µCAT89C51 được đánh địa chỉ trực tiếp bằng 8 bit địa chỉ nằm trong byte thứ hai của mã lệnh.
Địa chỉ trực tiếp
Dù vậy trình tự hợp dịch cho phép gọi tên các thanh ghi cĩ chức năng đặc biệt (cĩ địa chỉ trực tiếp từ 80H đến FFH). Ví dụ, Port cho Port 0, TMOD cho thanh ghi chế độ Timer, …
c. Địa chỉ gián tiếp (Indirect Addressing):
RO và RI được dùng để chỉ địa chỉ ơ nhớ mà tác động đến. Người ta qui ước dùng dấu @ trước RO và RI
Địa chỉ gián tiếp
d. Địa chỉ tức thời : Người ta dùng dấu # trước tốn hạng tức thời.Các tốn hạng đĩ cĩ thể là một hằng số, một ký số hay một biểu thức tốn học… Trình hợp dịch sẽ tự động tính tốn và thay thế dữ liệu trực tiếp vào mã lệnh.
Địa chỉ tức thời
e. Địa chỉ tương đối (Relaytive Addessing):
Địa chỉ tương đối được dùng trong các lệnh nhảy. µC8031/8051 dùng giá trị 8 bit cĩ dấu để cộng thanh đếm chương trình (PC). Tầm nhảy của lệnh này trong khoảng từ –128
SV : TRIỆU QUANG MINH Trang 39
Mã lệnh n n n
Địa chỉ trực tiếp Mã lệnh
Mã lệnh i
đến 127 ơ nhớ. Trước khi cộng, thanh ghi PC sẽ tăng đến địa chỉ của lệnh nhảy rồi tính tốn địa chỉ offset cần thiết để nhảy đến địa chỉ yêu cầu. Như vậy địa chỉ mới là địa chỉ tương đối so với lệnh kế chứ khơng phải lệnh nhảy. Thường lệnh này cĩ liên quan đến nhãn được định nghĩa trước.
Địa chỉ tương đối
f. Địa chỉ tuyệt đối (Absolute Addessing):
Địa chỉ tuyệt đối dùng trong các lệnh ACALL và AJMP. Các lệnh 2 Byte dùng để rẽ nhánh vào một trang 2 Kbyte của bộ nhớ chương trình bằng cách cấp 11 bit địa chỉ thấp (A0..A10) để xác định địa chỉ đích trong trang mã. Cịn 5 bit cao của địa chỉ đích