1
BÀI 5
Tên bài: C NG PORT N I TI P
Ố Ế
Ổ
GIỚI THI UỆ
Bài này trình bày về khả năng trao đ iổ dử li uệ giữa 8051 v iớ thiết bị ngo iạ vi thông cượ tích h pợ bên trong nh mằ tăng tính linh hoạt cũng như qua c ngổ giao ti pế n iố ti pế đ ph mạ vi ứng d ngụ c aủ bộ vi đi uề khiển.
N iộ dung gồm cả lý thuyết và thực hành trên bộ thực t pậ UNIKIT giao tiếp v iớ thiết máy vi tính thông qua chu nẩ RS 232… bị ngoài như: Thanh ghi d ch, ị
M CỤ TIÊU TH CỰ HI NỆ
• Hi uể đ cượ c uấ t oạ và các chế độ làm vi cệ c aủ c ngổ truy nề thông nối ti pế trong họ
• • • MCS-51 Biết cách kh iở t oạ c ngổ n iố tiêp Biết cách thu phát dử liệu n iố ti pế bằng 8051 Phư ngơ pháp t oạ t cố độ baud
NỘI DUNG CHÍNH
N iộ dung bài h cọ t pậ trung về các chủ đề chính như sau: • C uấ t oạ và các chế độ làm vi cệ c aủ c ngổ n iố tiếp • Các thanh ghi chức năng đ cặ biệt liên quan đ nế c ngổ n iố tiếp • • • Phư ngơ pháp kh iở t oạ c ngổ n iố tiếp Phư ngơ pháp thu phát dử li uệ Truy nề thông đa xử lý qua c ngổ n iố ti pế
2
1. MỞ Đ UẦ
C ngổ n iố ti pế tích h pợ trong họ 8051 có vài chế độ họat động trong một ph mạ vị tần chức năng cơ b nả c aủ c ngổ n iố ti pế là bi nế đ iổ tín hi uệ xuất từ song song sang n iố số r ng,ộ ti pế và tín hi uệ nh pậ từ n iố ti pế sang song song. Thiết bị ngọai vi giao tiếp v iớ port n iố ti pế qua các chân TXD và RXD như gi iớ thiệu iạ chân 11 (TXD) và ở bài 2. Các chân này là các chân đa chức năng c aủ port 3, bít P3.1 t P3.0 t
iạ chân 10 (RXD). Đ cặ đi mể c aủ port n iố ti pế là truyền song công tòan ph nầ (thu phát đ ngồ th i)ờ và đ cặ tính đệm dữ li uệ cho phép lưu giữ ký tử đã nh nậ trong bộ đ mệ trong khi nhận ký tự thứ hai, n uế CPU đ cọ ký tự thứ nhất trư cớ khi hoàn tất vi cệ nh nậ ký tự thứ hai thì dữ i uệ cũng không bị mất.
Có 2 thanh ghi đ cặ biệt ph cụ vụ cho c ngổ n iố ti pế đó là ghanh ghi đệm SBUF và thanh ghi đi uề khi nể SCON, bộ đ mệ port n iố tiếp có đ aị chỉ là 99H thực chất g mồ có 2 bộ đ m.ệ Ghi vào bộ đ mệ tức là n pạ dữ li uệ để xuất ra ngòai và đ cọ bộ đ mệ tức là nh nậ dữ li uề từ ngòai vào trong bộ đ m.ệ Điều này có nghĩa là có 2 thanh ghi phân biệt: Thanh ghi xuất chỉ cho phép ghi và thanh ghi nh nậ chỉ cho phép đọc. (Hình 5.1) Thanh ghi đi uề khi nể SCON có đ aị chỉ là 98H đ cượ đ nhị
cượ ki mể tra b ngằ phần m mề ho cặ có thể đư cợ l pầ trình để t oạ đ aị chỉ theo bít bao g mồ các bít tr ngạ thái và các bít đi uề khiển. Các bít đi uề khi nể sẽ xác l pậ chế độ làm vi cệ c aủ port n iố ti pế còn các bít tr ngạ thái cho biết sự kết thúc c aủ vi cệ xuất và nh pậ một ký tự, các bít tr ngạ thái có thể đ ra mốt ngắt.
ho cặ thay đổi. N uế một t cố độ baud thay đ iổ đ
T nầ số họat đ ngộ c aủ c ngổ n iố ti pế còn g iọ là tốc độ baud (t oạ ra từ dao đ ngộ trên cượ sử cượ l pậ trình thích hợp. cượ l pậ trình để cung c pấ xung đ ngồ hồ tốc chip 8051) có thể được cố đ nhị d ngụ thì timer 1 sẽ cung c pấ xung đ ngồ hồ t cố độ baud và ph iả đ (Timer 2 trong 8032 và 8052 có thể đ đ baud.) ộ
TxD (P3.1) RxD (P3.0)
SBUF D Thanh ghi d chị CLK CLK (chỉ ghi)
xung đồng h tồ ốc đ ộ baud (xuất)
xung đồng h tồ ốc độ baud (nhập)
Bus bên trong 8051
Hình 5.1 S ơ đồ khối cổng nối tiếp
SBUF (Chỉ đ c)ọ
2. THANH GHI ĐI UỀ KHIỂN
Chế độ làm vi cệ c aủ c ngổ n iố ti pế đ cượ thiết l pậ b ngằ cách ghi vào thanh ghi đi uề khi nể SCON t iạ đ aị chỉ 99H (b ngả 5.1 và b ngả 5.2).
Trư cớ khi sử d ngụ cổng n iố tiếp, SCON ph iả đư cợ kh iở tạo đúng chế độ. Ví dụ: mả l nhệ sau:
MOV SCON; # 01010010B
Sẽ kh iở t oạ c ngộ n iố ti pế làm vi cệ ở mode 1 (SMO/SM1 = 0/1) cho phép thu
(REN=1) và set cờ ngắt phát (Ti = 1) để báo cho biết là c ngổ n iố ti pế đã s nẵ sàng để xuất dữ liệu.
3. CHẾ ĐỘ LÀM VI CỆ
C ngổ n iố ti pế trong 8051 có 4 chế dộ làm vi cệ và đ cượ ch nọ b ngằ cách ghi các giá
cượ báo l
trị 1 ho cặ 0 vào các bít SMO và SM1 trong thanh ghi SCON. Ba chế độ cho phép truyền iạ b iở một Start bít và một không đ ngồ bộ trong đó m iỗ ký tự thu ho cặ phát đ Stop bít. Chế độ này tư ngơ tự như chế độ làm vi cệ c aủ cổng n iố ti pế RS232C c aủ máy vi tính. Ở chế độ thứ tư, c ngổ n iố ti pế hoạt đ ngộ như một thanh ghi d chị đ nơ giản.
5.1 Thanh ghi SCON B NGẢ
Bít Ký hi uệ Đ aị chỉ Mô tả
mode bít ˘ (b ngả 5-2) SCON.7 SM0 9FH
mode bít 1 (b ngả 5-2) SCON.6 SM1 9EH
SCON.5 SM2 9DH
mode bít 2. Cho phép truy nề thông đa xử lý trong mode 2 và 3; Ri sẽ không tác đ ngộ n uế bít nh nậ thứ 9 b ngằ 0. bít cho phép thu, ph iả set bít này để thu ký tự SCON.4 REN 9CH
SCON.3 TB8 9BH cượ set và clear b ngằ ph nầ m m.ề phát bít 8. Bít thứ 9 được phút ở mode 2 và 3, đ thu bít 8. Bít thứ 9 đ cượ thu. SCON.2 RB8 9AH
SCON.1 Ti 99H Cờ ngắt phát. Set khi kết thúc vi cệ phát ký tự, đ cượ clear b ngằ ph nầ m m.ề
SCON.0 Ri 98H Cờ ngắt thu. Set khi kết thúc vi cệ thu ký tự, đư cợ clear b ngằ ph nầ m m.ề
3.1 Thanh ghi dịch 8 bít (mode 0)
Mode o đ
cượ ch nọ b ngằ cách ghi giá trị 0 vào bít SM1 và SM0 trong thanh ghi đi uề 8 bít. Dữ li uệ n iố chuyển, 8 bít thu-
khi nể SCON, lúc này c ngổ n iố ti pế hoạt đ ngộ như một thanh ghi d chị ti pế vào và ra thông qua chân RxD và chân TxD t oạ xung d chị phát đ cượ bắt đầu v iớ bít th pấ nhất LSB (least significant bit). t T cố độ baud cố đ nhị iạ giá trị 1/12 t nầ số dao đ ngộ trên chip 8051 (lưu ý là ký hiệu cượ dùng để thu và RxD và TxD không còn đúng ý nghĩa trong chế độ này. Chân RxD đ phát dữ li uệ trong khi chân TxD thì cung c pấ xung d ch). ị
Quá trình truy nề đu cợ kh iở đ ngộ b ngằ một lệnh bất kỳ viết dữ li uệ vào SBUF, dữ li uệ được dịch ra chân RxD (P3.0) theo nh pị xung đ ngồ hồ ở chân TxD (P3.1). M iỗ bít đ cượ phát h pợ lệ tai chân RxD trong một chu kỳ máy. Trong suốt một chu kỳ máy, xung đ ngồ hồ ở mức th pấ trong kho ngả th iờ gian S3P1 và lên mức cao trong kho ngả S6P1, gi nả đồ th iờ gian dữ li uệ đ cượ vẽ ở hình 5.2.
Quá trình thu đ cượ bắt đ uầ khi bít cho phép thu REN =1 và cờ ngắt thu Ri = 0, quy t cắ
chung là set bít REN khi bắt đ uầ chư ngơ trình để kh iở tạo c ngổ n iố ti pế và sau đó xóa Ri để bắt đ uầ thu dữ liệu.
B NGẢ 5.2 Chế độ làm vi cệ
SMO SM1 MODE Mô tả T cố độ baud
Thanh ghi Cố đ nhị (t nầ số dao động chia 12) 0 0 0
8 bít UART Thay đ iổ (thiết l pậ b iở timer) 0 1 1
(tần số dao đ ngộ chia 12 1 0 2 9 bít UART Cố đ nhị ho cặ 64)
Một chu kỳ máy
S3
S4
S6
S1
S2
S5
P1
P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2
Osc
ALE
Data out
Data hợp lệ
S3P1
S6P1
Xung d chị
Phóng lớn
ALE
D0
D1
D2
D3
D4
D5
D6
D7
9 bít UART Thay đ iổ (thiết l pậ b iở timer) 1 1 3
Data
Hình 5.2 Giản đ tồ hời gian phát mode 0
Shift CLOCK (TXD)
Khi bít Ri bị xóa, xung đ ngồ hồ đư cợ cung cấp từ đư ngờ TxD và bắt đ uầ chu kỳ vào chân RxD. Đ ngươ nhiên thiết bị ngo iạ vi cung c pấ cượ d chị máy theo sau, dữ li uệ đ
ở đ ngườ TxD, vi cệ đ ngồ bộ dữ dữ li uệ vào chân RxD đư cợ đ ngồ bộ hóa v iớ xung d chị li uệ vào cổng n iố ti pế x yả ra t iạ c nhạ lên c aủ xung TxD (hình 5.3). Một ứng dụng dùng mode thanh ghi d chị từ n iố ti pế sang song song đ là mở r ngộ ngỏ ra c aủ 8051. Một vi m chạ cượ n iố đ nế TxD và RxD c aủ 8051 để t oạ ra thêm 8 ngườ xuất dữ li uệ (hình 5.4), để mở r ngộ thêm có thể n iố t ngầ (cascade) các vi m chạ ghi d chị đ ghi d chị khác v iớ vi mạch đ uầ tiên.
3.2 Ch đế ộ UART 8 bít có t c đ baud
ộ
ố
thay đ iổ (Mode 1)
Một chu kỳ máy
ALE
D7
D6
D5
D4
D3
D1
D2
D0
Data out RxD
Shift clock TxD
Hình 5.3 Giản đ tồ hời gian thu mode 0
Trong chế độ này c ngổ n iố ti pế 8051 hoạt đ ngộ như một bộ thu phát không đ ngồ bộ v nạ năng có t cố độ baud thay đ iổ viết tắt là UART. Đây là một m chạ truy nề thông dữ li uệ n iố ti pế v iớ m iỗ ký tự đư cợ bắt đ uầ b iở một start bit (mức th p)ấ và theo sau là một stop bít (mức cao), 1 bít ch nẵ - lẽ đôi khi đư cợ chèn vào giữa bít dữ li uệ cu iố cùng và stop bít. Chức năng chính c aủ UART là bi nế đ iổ dữ li uệ ra từ song song sang n iố ti pế và bi nế đ iổ dữ li uệ vào từ n iố ti pế sang song song.
Trong mode 1 mư iờ bít dữ li uệ được phát đi từ TxD ho cặ đ
cượ xác đ nhị
cượ nh nậ vào từ RxD, những bít này bao g mồ 1 start bít (luôn ở mức th p),ấ 8 bít dữ li uệ (bít đ uầ tiên là LSB) và 1 stop bít (luôn ở mức cao) khi thu, bít stop được đưa vào RB8 trong SCON. Đ iố v iớ 8051 b iở timer 1, đ iố v iớ 8052 b iở timer 1 ho cặ timer 2 ho cặ cả hai t cố độ baud đ (một phát và một thu). Vi cệ d chị chuy nể và đồng bộ các thanh ghi dịch c ngổ n iố ti pế trong mode 1,2 và 3 cượ thiết l pậ b iở một bộ đ mế 4 bít chia 16, ngỏ ra c aủ bộ đ mế này là xung t cố độ baud cượ ch nọ b ngằ phần m m.ề đ (Hình 5.5) ngỏ vào bộ đ mế đ Quá trình phát đ cượ kh iở đ ngộ b ngằ cách ghi vào SBUF nhưng vi cệ phát cũng
8 ng raỏ m rở ộng
không thực sự bắt đ uầ cho đ nế l nầ tràn kế ti pế c aủ bộ đếm cung c pấ xung t cố độ baud cho c ngổ nối tiếp.
8051
Clock Thanh ghi d chị TxD (P3.1)
Hình 5.4 Mode thanh ghi dịch
Data RxD (P3.0)
16x tốc đ ộ baud
÷ 12
Hình 5.5 Xung d ch
ị
cổng nối tiếp
Xung t cố độ baud Thanh ghi dịch c ngổ n iố ti pế
Dữ li uệ d chị đưa ra t iạ chân TxD đ cượ bắt đ uầ b ngằ start bit, theo sau là 8 bít dữ
li uệ và kế ti pế là stop bít, th iờ gian c aủ m iỗ bít là nghịch đảo c aủ tốc độ baud được l pậ trình trong timer. Cờ ngắt phát (Ti) đ cượ set ngay khi stop bít xuất hi nệ ở TxD (Hình 5.6). Quá trình thu đ cượ kh iở đ ngộ b iở sư nờ xu ngố t
iạ RxD, ngay l pậ tức bộ đ mế 10 bít xóa để gán số đ mế v iớ chu iổ bít nh nậ vào (bít kế tiếp đ nế khi bộ đ mế tràn và cứ thế ti pế t c).ụ Dòng bít vào đ cượ l yấ m uẫ ở giữa 16 số đ m.ế cượ đ
Quá trình thu bao g mồ vi cệ nh nậ d ngạ sự sai sót c aủ bít b ngằ cách yêu c uầ một tr ngạ thái 0 (start bít) của 8 số đ mế sau sư nờ xu ngố đ uầ tiên. N uế đi uề này không x yả ra g aỉ sử bộ thu bị kích thích b iở nhi uề thay đ iổ vì một ký tự thì m chạ thu sẽ reset và trở về tr ngạ thái nghỉ cho đ nế khi g pặ sư nờ xu ngố ti pế theo. Giả sử một bít start h pợ lệ đ cượ nh nậ ra, quá trình nh nậ ký tự sẽ ti pế tục, bít start vào thanh ghi n iố tiếp, khi vi cệ nh nậ 8 bít hoàn tất cượ d chị
1 ----------- tốc đ ộ baude
Stop bit
Start bit
D5
D6
D7
D0
D1
D2
D3
D4
TXD
Ngắt phát
T1 SCON.1
Hình 5.6 Thiết lập c ờ Ti
cượ chuy nể vào RB8 trong SCON cượ nạp vào SBUF cượ bổ qua và 8 bít dữ li uệ đ đ thì sẽ x yả ra những đi uề sau đây: 1. Bít thứ 9 (stop bít) đ 2. Tám bít dữ li uệ đ 3. Cờ ngắt thu (Ri) bị set.
Tuy nhiên, các đi uề nói trên chỉ x yả ra n uế th aỏ mãn các điều ki nệ sau: 1. Ri = 0
2. SM 2 = 1 và stop bít nhận vào b ngằ 1, ho cặ SM 2 = 0 Yêu c uầ Ri = 0 để b oả đ mả r ngằ ph nầ m mề đã đ cọ xong ký tự trư cớ đó (và Ri bị xóa) yêu cầu thứ hai phức t pạ h nơ nhưng chỉ áp d ngụ trong chế độ truy nề thông đa xử lỷ, đi uề này có nghĩa là không set bít Ri trong chế độ truy nề thông đa xử lý khi bít dữ li uệ thứ 9 b ngằ 0.
3.3 UART 9 bít v i tớ ốc độ baud cố định (Mode 2)
cượ và 1 stop bít, khi phát bít thứ 9 là bít bất kỳ trong TB8 c aủ SCON (có thể là bít cượ đưa vào RB8. T cố độ baud c aủ mode 2 b ngằ
Khi SM1 = 1 và SM0 = 0, c ngổ n iớ ti pế hoạt đ ngộ như một UART 9 bít có t cố độ baud cố định, số bít thu và phát gồm 11 bít, 1 start bít, 8 data bít, 1 bít dữ li uệ thứ 9 l pậ trình đ parity). Khi thu, bít thứ 9 nh nậ vào sẽ đ 1/32 ho cặ 1/64 t nầ số dao đ ngộ trên chip. 3.4 Ch đế ộ UART 9 bít v i t c
ớ ố độ baud thay đ iổ (Mode 3)
Mode này gi ngớ như mode 2 ngo iạ trừ t cố độ baud đ
cượ lập trình và cung c pấ b iở timer. Trên thực tế mode 1, 2 và 3 rất gi ngố nhau. Đi mể khác nhau là t cố độ baud (cố đ nhị trong mode 2, thay đ iổ trong mode 1 và 3) và về số lư ngợ bít dữ li uệ (8 trong mode 1, 9 trong mode 2 và 3).
4. KHỞI Đ NGỘ VÀ TRUY XUẤT THANH GHI PORT NỐI TIẾP
4.1 Cho phép nh nậ
Ph iả set bít cho phép nh nậ REN trong thanh ghi SCON b ngằ ph nầ m mề để cượ thực hi nệ ở đ uầ chư ngơ trình. cho phép quá trình thu các ký tự. Vi cệ này thư ngờ đ Khi c ngổ n iố tiếp, bộ đình th iờ ..... đ cượ kh iở đ ng,ộ có 2 cách thực hiện.
SET B REN
Sẽ làm REN = 1 ho cặ dùng l nệ sau
MOV SCON , # xxx 1 xxxx B
Sẽ set bít REN và các bít còn l iạ của SCON có thể là 1 hoặc 0.
ứ 9 cượ phát ở mode 2 và 3 ph iả đ
cượ n pạ vào TB8 bằng ph nầ m m.ề cượ thay vào RB8. Ph nầ mềm có thể ho cặ không cần đến
4.2 Bít d ữ li u thệ Bít dữ li uệ thứ 9 đ Bít dữ li uệ thứ 9 đã nh nậ thì đ bít dữ li uệ thứ 9 phụ thu cộ vào sự thiết l pậ truy nề thông của thiết bị nối tiếp. (bít dữ li uệ thứ 9 còn đóng một vai trò quan tr ngọ trong truy nề thông đa xử lý).
4.3 Thêm vào bít ch nẵ - lẻ (parity)
Một ứng d ngụ thư ngờ dùng c aủ bít dữ li uệ thứ 9 là để chèn bít ch nẵ - lẽ vào trong cượ set và clear trong từng chu kỳ máy ký tự, như đã biết bít parity trong thanh ghi PSW đ để t oạ bít ch nẵ tư ngơ ứng v iớ dữ liệu 8 bít trong bộ tích lũy. VD: N uế yêu c uầ truy nề thông c nầ truy nề đi 8 bít dữ li uệ kèm theo 1 bít chẵn, đo n mã ạ l nhệ sau sẽ ph iả đi 8 bít trong bộ tích lũy và bít ch nẵ là bít thứ 9
MOV C, P MOV TB8, C MOV SBUF, A ; đưa bít ch nẵ vào TB8 ; bít này trở thành bít dữ li uệ thứ 9 ; chuy nể 8 bít từ A vào SBUF
N uế c nầ truy nề bít lẻ thì đo nạ mã l nhệ đ cượ sửa l iạ như sau:
; đưa bít ch nẵ vào cờ C ; đ iổ thành bít lẻ
MOV C, P CPL C MOV TB8, C MOV SBUF, A
Đ ngươ nhiên vi cệ sử d ngụ bít parity không bị gi
iớ h nạ ở mode 2 và 3. Trong mode 1, tám bít đư cợ phát đi có thể bao g mồ 7 bít dữ li uệ c ngộ thêm một parity bít. Để phát mã ASCII 7 bít và bít ch nẵ là bít thứ 8, có thể viết như sau:
; xóa bít MSB, bít parity là bít P
CLR ACC-7 MOV C, P MOV ACC-7, C MOV SBUF, A ; đưa bít ch nẵ vào MSB ; g iở ký tự 7 bít và một bít ch nẵ
4.4 Các cờ ng tắ
Các cờ ngắt thu và phát (Ri và Ti) trong SCON có vai trò quan tr ngọ trong yêu c uầ truy nề thông n iố ti pế c aủ 8051. Cả hai bít này đư cợ set b ngằ ph nầ cứng nhưng ph iả xóa b ngằ ph nầ m m.ề Cụ thể là Ri đ cượ kiểm tra b ngằ ph nầ m mề ho cặ có thể đ
cượ set khi kết thúc quá trình thu ký tự và cho biết là bộ đ mệ thu đả cượ l pậ trình để t oạ ra một cượ kết n iố v iớ c ngổ n iố cượ set, sau đó xóa Ri và đ cọ ký tự trong SBUF, đầy. Đi uề này đ ngắt. N uế chư ngơ trình c nầ thu mốt ký tự từ thiết bị ngo iạ vi đ ti pế (thì nó ph iả đ iợ cho đ nế khi Ri đ đo nạ mã thực hi nệ như sau:
cượ set
WAIT : CLR MOV JNB Ri, WAIT Ri A, SBUF ; Ki mể tra Ri cho đ nế khi đ ; xóa Ri ; đ cọ ký tự
Ti đ cượ set khi kết thúc quá trình phát ký tự và cho biết là bộ đ mế phát đã tr ng,ố
để phát mốt ký tự đ nế thiết bị ngo iạ vi kết n iố v iớ c ngổ n iố tiếp. Trư cớ tiên ph iả ch cắ ch nắ là c ngổ n iố tiếp đã s nẵ sàng, nói cách khác nếu một ký tự trư cớ đó đã đ cượ phát đi thì chư ngơ trình ph iả chờ cho đ nế khi kết thúc quá trình phát trư cớ khi phát ký tự ti pế theo. Đo nạ mã sau sẽ phát một ký tự chứa trong A.
WAIT: Ti, WAIT cượ set
JNB CLR Ti MOV SBUF, A ; ki mể tra Ti cho đ nế khi đ ; xóa Ti ; phát ký tự
5. TRUY NỀ THÔNG ĐA XỬ LÝ
Mode 2 và 3 cung c pấ một tính năng đ cặ biệt trong lĩnh vực truy nề thông đa xử lý. cượ đưa vào RB8. Cũng có cượ nhân; ngắt n iố ti pế chỉ tác đ ngộ n uế RB8=1. Trong các chế độ này, dữ li uệ thu vào là 9 bít và bít thứ 9 đ thể đ cượ lập trình sao cho khi stop bít đ Đ cặ tính này có đ
cượ b ngằ cách set bít SM2 trong SCON. Một ứng d ngụ đi nể hình là kết n iố nhi uề 8051 trong một mạng theo ki uể chủ - tớ (Master/ Slaver) như trình bày ở hình 5.7.
cượ để kiểm tra xem có ph iả mình đ đ aị chỉ bỏ qua các cượ đ nhị cượ set c aủ chúng và trở về công vi cệ khác không nh nậ các phát đi byte đ aị chỉ cượ đưa ra nữa khi sự kết n iố chủ - tở được thiết lập,
Khi vi xử lý master mu nố g iở một kh iố dữ li uệ đ nế một trong các vi xử lý slaver. Trư cớ tiên, nó sẽ g iở một byte đ aị chỉ để nhân d ngạ slaver đích, đi mể khác nhau giữa byte đ aị chỉ so v iớ byte dữ li uệ là bít thứ 9 trong byte đ aị chỉ có giá trị 1 nhưng trong byte dữ li uệ thí bít này b ngằ 0. Tuy nhiên, byte đ aị chỉ sẽ ngắt tất cả các slaver, m iỗ slaver có thể kh oả sát byte nh nậ đ bít SM2 đ kế tiếp. Một sơ đồ tư ngơ ứng có thể đ bộ xử lý slaver cũng có thể g iở đ nế bộ master, thủ thuật là không dùng bít dữ liệu thứ 9 sau khi thực hi nệ kết n iố (các slaver khác có thể vô tình đ cượ ch n).ọ
Bít SM2 không nhả hư ngở trong mode 0 và trong mode 1 bít này có thể đ cượ dùng
32 đư ng I/0 ờ
32 đư ng I/0 ờ
để ki mể tra sự h pợ lệ c aủ stop bít. Trong khi thu ở mode 1 n uế SM2 = 1 thì ngắt thu sẽ đ cượ tác động trừ khi đã nh nậ đ cượ một stop bít h pợ lệ.
Hình 5.7 Truyền thông đa x lýử
8051 chủ TxD P0 P1 P2 P3 8051 tớ # 1 RxD P0 P1 P2 P3 8051 tớ # 2 RxD
6. T CỐ ĐỘ BAUD
Như đã mô tả trong b ngả 5.2, t cố độ baud đ cượ cố đ nhị
ở mode 0 và mode 2. Ở mode 0 t cố độ này luôn b ngằ t nầ số dao đ ngộ c aủ 8051 chia cho 12 thư ngờ là dao đ ngộ th chạ anh, n uế t nầ số dao đ ngộ này là 12MHz thì t cố độ baud ở mode 0 là 1MHz (hình 5.8a) Khi reset hệ th ngố gía trị m cặ đ nhị
c aủ t cố độ baud ở mode 2 b ngằ t nầ số dao đ ngộ chia cho 64. T cố độ baud cũng bị ảnh hư ngở bởi một bít trong thanh ghi PCON, bít c aủ PCON là bít SMOD, set SMOD bít sẽ làm tăng đôi t cố độ baud ở mode 1, 2 và 3. Trong mode 2 t cố độ baud có thể đ cượ tăng đôi từ giá trị m cặ đ nhị là 1/64 t nầ số dao đ ngộ (SMOD = 0) đ nế 1/32 t nầ số dao đ ngộ (SMOD = 1). (Xem hình 5.8b) Vì thanh ghi PCON không đ cượ định đ aị chỉ bít, nên để set bít SMOD mà không làm thay đ iổ các bít khác ph iả c nầ một thao tác đ cọ - sửa - ghi như sau:
MOV SETB MOV A, PCON ACC.7 PCON, A ; đ cọ giá trị hi nệ hành c aủ PCON ; set bít 7 (SMOD) ; ghi giá trị m iớ vào PCON
Các t cố độ baud c aủ 8051 trong chế độ 1 và 3 đ cượ xác đ nhị
b iở t cố độ tràn c aủ timer 1. Vì timer hoạt đ ngộ v iớ t nầ số tư ngơ đ iố cao, nên ph iả chia thêm 32 (16 = 1) trư cớ khi cung c pấ xung t cố độ baud cho c ngổ n iố tiếp. T cố độ baud c aủ n u SMOD ế 8052 ở chế độ 1 và 3 đ b iở tốc độ tràn của timer 1 ho cặ timer 2 ho cặ cả hai. cượ xác đ nhị
xung baud
(a) mode 0
dao động th cạ h anh
÷ 12
÷ 64
xung baud
SMOD = 0
dao động th cạ h anh
(b) mode 2
SMOD = 1 ÷ 32
÷ 64
xung baud
SMD = 0
tràn cờ timer 1
(c) mode 1 và 3
Hình 5.8 Tạo xung baud cho c nổ g nối tiếp
SMD = 1 ÷ 16
Dùng timer 1 để t o xung baud
ạ
Phư ngơ pháp t oạ xung baud là kh iở t oạ TMOD ở chế độ tự n pạ l iạ 8 bít (mode 2 iạ trong TH1 tư ngơ ứng v iớ t cố độ baud c nầ thiết l nhệ c aủ timer) và đặt đúng giá trị n pạ l cách kh iở tạo TMOD như sau:
MOV TMOD, # 0010 xxxx B
cượ kh iở t oạ l ph iả đ ờ
Các ký hi uệ “x” có thể là 1 ho cặ 0 theo yêu c uầ c aủ timer 0. Có thể t oạ xung baud tốc độ ch mậ b ngằ cách dùng chế độ 16 bít, timer mode 1 v iớ TMOD = 0001 xxxx B. Tuy nhiên, có một l iỗ nhỏ xảy ra do c pặ thanh ghi dịnh iạ sau m iỗ l nầ tràn. Nên thực hi nệ vi cệ này bằng th i TH1/TL1 một chư ngơ trình ph cụ vụ ngắt, một lựa ch nọ khác là dùng xung ngoài kích vào ngỏ T1 (P3.5). Dù áp d ngụ cách nào thì tốc độ baud luôn là t cố độ tràn c aủ timer 1 chia cho 32 (ho cặ chia cho 16 n uế SMOD = 1)
Công thức t ngổ quát để tính t cố độ baud ở chế độ 1 và 3 như sau: T cố độ baud = T cố độ tràn timer 1 ÷ 32
VD: Để có t cố độ 1200 baud, suy ra t cố độ tràn c aủ timer b ngằ 32 l nầ là 38,4 KHz. N uế t nầ số th chạ anh là 12MHz thì xung kích cho timer 1 là 1MHz = 1.000 KHz, vì timer ph iả tràn v iớ t cố độ là 38,4KHz nên sau m iỗ 1.000/38,4 = 26,04 xung (làm tròn là 26) kích thì timer ph iả tự tràn. Do timer đ mế lên và chỉ tràn khi số đếm chuy nể từ FFH xu ngố 00H iạ ph iả nhỏ h nơ 0 một lư ngợ là +26, giá trị đúng là –26, cách dễ nhất để nên giá trị n pạ l đặt giá trị nạp l iạ vào TH1 là:
MOV TH1, # -26
Ph nầ m mề h pợ ngữ sẽ d chị –26 thành 0E6H, do đó l nhệ tương đ ngươ lệnh trên là:
MOV TH1, 0E6H
Do làm tràn nên sẽ làm sai chút ít kết quả t cố độ baud, phư ngơ pháp truy nề không đ ngồ bộ (start/ stop) cho phép sai số đ nế 5%. Có thể t oạ t cố độ baud chính xác b ngằ
iạ cho TH1 tư ngơ ứng v iớ cách dùng th chạ anh 11,059 MHz. B ngả 5.3 tóm tắt các giá trị n pạ l h uầ hết các t cố độ baud dùng th chạ anh 12MHz và 11,059MHz.
B ngả 5.3 Tóm tắt t cố độ baud
SMOD Sai số T cố độ baud T nầ số th chạ anh Giá trị n pạ lại TH1 T cố độ baud thực sự
9600 2400 1200 19200 9600 2400 1200 12,000 MHz 12,000 MHz 12,000 MHz 11,059 MHz 11,059 MHz 11,059 MHz 11,059 MHz 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í dụ 5-1: Khởi t oạ c ngổ nối ti pế Viết đo nạ mã l nhệ kh iở t oạ c ngổ n iố ti pế hoạt đ ngộ như một UART v iớ t cố độ 2400 baud, dùng timer 1 để cung c pấ xung baud.
Trong ví dụ này ph iả kh iở t oạ 4 thanh ghi SMOD, TMOD, TCON và TH1, các gía trị c nầ thiết đ cượ tóm tắt như sau:
SCON:
TMOD:
TCON: TH1: SMO 0 GTE 0 TF1 0 1 SM1 1 C/T 0 TR1 1 1 SM2 0 M1 1 TF0 0 1 REN 1 M0 0 TR0 0 1 TB8 0 GTE 0 IE1 0 0 RB8 0 C/T 0 IT1 0 0 Ti 1 M1 0 IE0 0 1 Ri 0 M0 0 IT0 0 1
Thiết l pậ SMO/SM1 = 0/1 để đặt c ngổ n iố ti pế vào chế độ UART 8 bít, REN = 1
cho phép cổng n iố ti pế nh nậ các ký tự, đặt Ti = 1 cho phép phát ký tự đầu tiên b ngằ cách báo r ngằ bộ đ mệ phát tr ng.ố Đ iố v iớ TMOD vi cệ thiết l pậ M1/M0 = 1/0 sẽ đặt timer 1 ở chế độ tự n pạ l iạ 8 bít, đặt TR1 = 1 để kh iở động timer 1, các bít khác b ngằ 0 vì chúng đi uề khi nể các đ cặ tính và chế độ không c nầ dùng trong ví dụ này.
T cố độ tràn c aủ timer 1 là 2.400 baud x 32 = 76,8KHz. Giả sử t nầ số th chạ anh c aủ 8051 là 12MHz nên xung kích timer 1 là 1MHz = 1.000KHz do đó xung cho m iỗ l nầ tràn là 1.000KHz ÷ 76,8KHz = 13,02 (làm tròn 13), vậy giá trị n pạ l iạ là –13 ho cặ 0F3H, đo nạ l nhệ kh iở t oạ như sau:
iạ tư ngơ ứng 2.400 baud INIT: MOV SCON, # 52 H MOV TMOD, # 20 H MOV TH1, # -13 TR1 SET ; c ngổ n iố ti pế ở mode 1 ; timer 1, mode 2 ; trị n pạ l ; kh iở đ ngộ timer 1
Ví dụ 5-2: Chư ngơ trình con xu tấ ký tự Viết một chư ngơ trình con trên là OUTCHR để phát mã ASCII 7 bít trong thanh
ghia A ra c ngổ n iố ti pế c aủ 8051 v iớ bít lẻ là bít thứ 8, khi trở về n iộ dung c aủ A v nẫ không bị thay đổi.
Ví dụ này và mô tả ti pế theo là 2 trong h uầ hết các chương trình con dùng cho máy vi tính có ngỏ kết n iố RS232; xuất ký tự (OUTCHR) và nh pậ ký tự (INCHAR)
OUTCHR:
AGAIN:
MOV C, P CPL C MOV ACC.7, C JNB Ti, AGAIN CLR Ti MOV SBUF, A CLR ACC.7 RET ; đưa parity bít bào cờ C ; đ iổ thành bit lẻ ; c ngộ vào ký tự ; ki mể tra bộ đ mế phát tr ng?ố ; xóa cờ ; xuất ký tự ; xóa bít 7 c aủ A ; trở về
cượ đ oả l
Ba l nhệ đ uầ tiên đưa bít lẻ vào bít 7 c aủ thanh ghi A, vì bít P torng PSW là 0 khi iạ trư cớ khi đưa vào ACC.7, l nhệ cượ phát đi trư cớ đó cượ ghi vào bộ đ mệ c ngổ n iố tiếp, quá
n iộ dung thanh ghi A là ch nẳ nên nó ph iả đ JNP t oạ một vòng l pặ chờ cho đ nế khi cờ ngắt phát Ti = 1 (do ký tự đ kết thúc) sau đó nó đư cợ xóa và ký tự trong A đ trình phát bắt đ uầ ở l nầ tràn kế ti pế c aủ bộ đêm 16 t oạ xung kích cho c ngổ n iố ti pế (hình 5.5). Cu iố cùng, bít ACC.7 đ cượ xóa để n iộ dung c aủ A cũng gi ngố như khi g iọ chư ngơ trình con OUTCHR có thể đ cượ g iọ để phát ký tự đ nơ ho cặ một chu iổ ký tự. VD: Các l nhệ sau đây sẽ phát mã ASCII c aủ ký tự “z” ra thiết bị n iố ti pế kết n iố v iớ c ngổ n iố tiếp c aủ 8051
MOV A, # ‘z’ CALL OUTCHR (ti pế t c)ụ
Ví dụ 5-3: Chư ngơ trình con nh pậ ký tự Viết chư ngơ trình con có tên là INCHR để nh pậ mốt ký tự từ c ngổ n iố ti pế c aủ
8051 và trở về v iớ mã ASCII 7 bít trong thanh ghi A. Sử dụng bít ki mể tra lẻ torng bít nh p ậ thứ 8 và set cờ carry n uế có l iỗ parity.
INCHAR:
iỗ parity ; chờ ký tự ; xóa cờ ; đ cọ ký từ vào A ; P set n uế A lẻ ‘ C = 1 n uế có l ; xóa parity JNB Ri, $ CLR Ri MOV A, SBUF MOV C, P CPL C CLR ACC.7 RET
Chư ngơ trình bắt đ uầ b ngằ cách chờ cờ ngắt thu Ri đ cượ set, cho biết r ngằ ký tự cượ thực hiện, Ri bị xóa và nội đang ở trong SBUF chờ đọc. Khi Ri = 1, l nhệ kế ti pế JNB đ dung trong SBUF đ cượ đ cọ vào A.
Bít P trong PSW thiết l pậ ki mể tra ch nẳ cho thanh ghi A, vì v yậ bít này c nầ đ cượ set b ngằ 1 n uế b nả thân thanh ghi A chứa bít ki mể tra lẻ ở bít thứ 7 c aủ thanh ghi này. Vi cệ di chuy nể bít P vào cờ nhớ làm cho CY = 0 n uế không có lổi. Mặt khác n uế thanh ghi iổ ch nẳ – lẻ, cờ CY sẻ b ngằ 1. Cu iố cùng bít ACC.7 được xóa để b oả đãm A chứa một l r ngằ chỉ có mã 7 bít đ cượ trả về cho chư ngơ trình gọi.
7. BÀI TẬP
Những bài t pậ sau đây là các chương trình đi nể hình trong yêu c uầ giao ti pế giữa các thiết bị đ uầ cu iố (ho cặ các thiết bị n iố ti pế khác) v iớ máy tính. Giả sử c ngổ nối ti pế c aủ 8051 đư cợ kh iở tạo ở chế độ UART 8 bít và t cố độ buade đ cượ cung c pấ b iở timer 1. 1. Viết chương trình con có tên là OUTSTR để g iở một chu iỗ mã ASCII kết thúc
b ngằ ký tự null đ nế thiết bị kết n iố v iớ c ngổ n iố ti pế c aủ 8051. Giả sử chu iỗ mã ASCII đ cượ chứa ở bộ nhớ chư ngơ trình ngoài và chư ngơ trình g iọ đặt đ aị chỉ c aủ chuỗi vào con trỏ dử li uệ trước khi g iọ OUTSTR. Chuu iỗ này là các byte ASCII n iố ti pế và kết thúc b ngằ byte 00H.
2. Viết chư ngơ trình con có tên INLINE để nh pậ một dòng mã ASCII từ một thiết bị iạ đ aị chỉ 50H. Giả sử dòng n iố v iớ c ngổ n iố ti pế c aủ 8051 và lưu vào RAM n iộ t dử li uệ đ cượ kết thúc b ngằ ký tự xu ngố dòng. Đặt mã c aủ ký tự xuống dòng trong bộ đệm dòng theo sau các mã khác và sau đó kết thúc bộ đ mệ dòng b ngằ byte 00H. 3. Viết chư ngơ trình g iở liên t cụ các chử cái (chử nh )ỏ đ nế thiết bị kết n iố v iớ port n iố ti pế 8051. Dùng chư ngơ trình con OUTCHAR ở ph nầ trên. 4. Dựa trên chư ngơ trình con OUTCHAR viết chư ngơ trình gởi liên t cụ các mã cượ (20H – 7EH) đ nế thiết bị kết n iố v iớ cc ngổ n iố ti pế
ASCII hi nể thị đ c aủ 8051. 5. Sửa l iạ l iờ gi
iả c aủ bài t pậ trên để đưa ngỏ ra đ nế màn hình b ngằ cách dùng mã XOFF và XON nh pậ vào từ bàn phím. Bỏ qua các mã nh pậ vào khác (lưu ý: XOFF = CONTROL-S; XON = CONTROL-Q)
6. Dựa trên các chư ngơ trình con INCHAR và OUTCHR, viết chư ngơ trình nh pậ các ký tự từ bàn phím và hi nể thị chúng trên màn hình. Bi nế đ iổ chử nhỏ thành chử in.
7. Dựa trên các chư ngơ trình con INCHAR và OUTCHR, viết chư ngơ trình nh pậ các ký tự từ một thiết bị kết n iố v iớ port n iố ti pế c aủ 8051 và hi nể thị trên màn hình b ngằ cách thay thế b ngằ d uấ ch mấ (.) đ iố v iớ các ký tự đi uề khiển (có mã ASCII 00H đ nế 1FH và 7FH).
8. Dùng chư ngơ trình con OUTCHR viết chư ngơ trình xóa màn hình kết n iố v iớ
port n iố ti pế 8051 sau đó g iở tên c aủ b nạ ra màn hình 10 l nầ trên 10 dòng khác
cượ thực hi nệ b ngằ cách g iở mã CONTROL-Z
nhau. Chức năng xóa màn hình đ
đ iố v iớ đa số thiết bị ho cặ
9. Trong hình 5.1 cho th yấ một kỹ thuật mở r ngộ ngỏ ra c aủ 8051. Giả sử v iớ c uấ hình như thê viết một chư ngơ trình kh iở t oạ port n iố ti pế 8051 ở chế độ thanh ghi d chị iạ đ aị chỉ 20H đ nế 8 ngỏ ra mở r ng,ộ và sau đó ánh xạ n iộ dung c aủ RAM n iộ t m iỗ giây 10 lần