Xem mẫu
- BÀI 5: CỔNG NỐI TIẾP
Mục tiêu:
- Trình bày đượ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 theo nội dung đã học;
- Thực hiện cổng truyền thông nối tiếp đúng yêu cầu kỹ thuật;
- Thực hiện thu phát dữ liệu nối tiếp bằng 8051 đạt yêu cầu kỹ thuật.
Nội dung:
1. Mở đầu
Máy tính truyền dữ liệu theo hai phương pháp: truyền dữ liệu song song và
truyền dữ liệu nối tiếp.
❖ Truyền song song: Sử dụng nhiều dây dẫn để truyền dữ liệu giữa các
thiết bị có khoảng cách gần nhau (khoảng vài mét). Phương pháp này
cho phép truyền dữ liệu với tốc độ cao nhờ sử dụng nhiều dây dẫn để
truyền dữ liệu đồng thời nên tại một thời điểm có thể truyền được nhiều
bit thông tin nhưng khoảng cách truyền thì có nhiều hạn chế.
❖ Truyền nối tiếp: Sử dụng một dây dẫn để truyền dữ liệu (một dây phát
đi và một dây thu về) giữa các thiết bị có khoảng cách xa nhau (khoảng
vài trăm mét trở lên). Phương pháp này sẽ truyền dữ liệu với tốc độ
chậm hơn (so với phương pháp truyền song song) vì chỉ sử dụng một dây
dẫn để truyền dữ liệu nên tại một thời điểm chỉ có thể truyền được một
bit thông tin nhưng khoảng cách truyền thì không bị hạn chế như ở
phương pháp song song.
Chip 8051 có một port nối tiếp (serial port) với các tính năng như sau:
140
- ❖ Lưu ý: Ở trường hợp đặc trưng thứ hai thì dữ liệu thứ nhất sẽ không bị
mất nếu CPU đọc xong dữ liệu thứ nhất trước khi dữ liệu thứ hai được
nhận đầy đủ.
2.Thanh ghi điều khiển
Các thanh ghi chức năng đặc biệt của port nối tiếp:
❖ SBUF (Serial Buffer Register): thanh ghi đệm của port nối tiếp.
❖ SCON (Serial Control Register): thanh ghi điều khiển port nối tiếp.
Đại lượng đặc trưng cho tốc độ truyền dữ liệu nhanh hay chậm là tốc độ baud
(baud rate) hay còn gọi là tần số hoạt động của port nối tiếp có thể là giá trị cố định
hay thay đổi tùy theo yêu cầu của người lập trình. Khi chế độ tốc độ baud thay đổi
được sử dụng, bộ định thời 1 cung cấp xung clock tốc độ baud và ta phải lập trình sao
cho phù hợp. Ở phiên bản chip 8031/8052, bộ định thời 2 cũng có thể được lập trình
để cung cấp xung clock tốc độ baud.
3. Chế độ làm việc
+ Thanh ghi SBUF.
Thanh ghi SBUF (Serial Buffer Register): được dùng để lưu giữ dữ liệu cần phát đi
và dữ liệu đã nhận được. Việc ghi dữ liệu vào thanh ghi SBUF sẽ nạp dữ liệu để phát
đi và việc đọc dữ liệu từ thanh ghi SBUF sẽ truy xuất dữ liệu đã thu được.
Thanh ghi SBUF bao gồm 2 thanh ghi:
Thanh ghi phát (bộ đệm phát): dùng để lưu giữ dữ liệu cần phát đi.
Thanh ghi thu (bộ đệm thu): dùng để lưu giữ dữ liệu đã nhận được.
Cấu trúc của thanh ghi SBUF:
141
- Ví dụ: Các lệnh ghi dữ liệu vào SBUF và đọc dữ liệu từ SBUF.
MOV SBUF, #45H ;Phát giá trị 45H qua port nối tiếp.
MOV SBUF, #”D” ;Phát giá trị 44H qua port nối tiếp.
MOV SBUF, A ;Phát nội dung của A qua port nối tiếp.
MOV A, SBUF ;Đọc dữ liệu thu được từ port nối tiếp.
+ Thanh ghi SCON.
Thanh ghi SCON (Serial Control Register): chứa các bit dùng để điều khiển chế độ
hoạt động và báo trạng thái của port nối tiếp.
Cấu trúc của thanh ghi SCON:
142
- Các chế độ của port nối tiếp:
Trước khi sử dụng port nối tiếp cần phải:
Ví dụ: Khởi động port nối tiếp ở chế độ 1, cho phép port thu dữ liệu từ chân RxD
và sẵn sàng phát dữ liệu từ chân TxD.
Giải
Ta dùng lệnh:
MOV SCON, #52H
Giải thích:
SM0 = 0, SM1 = 1 → cho phép port hoạt động ở chế độ 1.
REN = 1 → cho phép port nối tiếp được phép thu dữ liệu.
143
- TI = 1 → chuẩn bị port nối tiếp sẵn sàng phát dữ liệu qua chân TxD.
RI = 0 → chuẩn bị port nối tiếp sẵn sàng thu dữ liệu qua chân RxD.
3.1.Thanh ghi dịch 8 bit
+ Chế độ 0 – Thanh ghi dịch 8 bit:
Quá trình phát dữ liệu:
❖ Quá trình khởi động: Ghi dữ liệu cần phát vào SBUF Việc phát dữ
liệu bắt đầu: Dữ liệu từ SBUF được dịch ra chân RxD đồng thời với các
xung clock dịch bit được gởi ra chân TxD (mỗi bit được truyền đi trên
chân RxD trong 1 chu kỳ máy).
144
- ❖ Giản đồ thời gian phát dữ liệu:
Quá trình thu dữ liệu:
❖ Quá trình khởi động: Set bit cho phép thu (REN=1) → Xóa cờ ngắt thu
(RI=0) Việc thu dữ liệu bắt đầu: Các xung clock dịch bit được gởi ra
chân TxD và dữ liệu từ thiết bị bên ngoài được dịch vào chân RxD bởi
các xung clock dịch bit này (việc dịch dữ liệu vào chân RxD xảy ra ở
cạnh lên của xung clock dịch bit).
❖ Giản đồ thời gian thu dữ liệu:
Ứng dụng: Một ứng dụng khả thi của chế độ 0 (chế độ thanh ghi dịch bit) là mở
rộng thêm các ngõ ra cho chip 8051. Một vi mạch thanh ghi dịch nối tiếp – song song
có thể được nối với các chân TxD và RxD của chip 8051 để cung cấp thêm 8 đường
xuất (xem hình vẽ bên dưới). Các thanh ghi dịch bit khác có thể ghép cascade với
thanh ghi dịch bit đầu tiên để mở rộng thêm nữa.
145
- 3.2. Chế độ UART 8 bit có tốc độ baud thay đổi
+ Chế độ 1 – UART 8 bit có tốc độ baud thay đổi:
Trong chế độ 1, port nối tiếp của 8051 hoạt động như một bộ thu phát không
đồng bộ 8 bit có tốc độ baud thay đổi (UART -Universal Asynchronous Receiver
Transmitter).
UART là một bộ thu phát dữ liệu nối tiếp với mỗi ký tự dữ liệu được đứng trước
bởi một bit START (logic 0) và được đứng sau bởi một bit STOP (logic 1). Thỉnh
thoảng, một bit chẵn lẽ (Parity bit) được chèn vào giữa bit dữ liệu sau cùng và bit stop.
Hoạt động chủ yếu của UART là biến đổi dữ liệu phát từ song song thành nối tiếp và
biến đổi dữ liệu thu từ nối tiếp thành song song.
Hình vẽ khuông dạng dữ liệu khi được sử dụng ở chế độ UART:
Khuông dạng của một dữ liệu khi sử dụng chế độ UART 8 bit:
146
- Quá trình phát dữ liệu:
❖ Quá trình khởi động: Ghi dữ liệu cần phát vào SBUF Việc
phát dữ liệu bắt đầu: Dữ liệu từ SBUF được dịch ra chân TxD (theo
thứ tự: Start bit → 8 bit data (D0 .. D7) → Stop bit) → cờ TI=1.
❖ Tốc độ baud: do người lập trình thiết lập và được qui định bởi tốc độ tràn của
Timer 1.
❖ Thời gian của 1 bit trên đường truyền: bằng nghịch đảo của tốc độ baud (1 /
Baud rate).
❖ Cờ ngắt phát TI = 1: khi bit stop được xuất hiện trên chân TxD.
Quá trình thu dữ liệu:
❖ Quá trình khởi động: Một sự chuyển trạng thái từ mức 1 xuống mức 0 tại chân
RxD (tức xuất hiện bit Start) Việc thu dữ liệu bắt đầu: 8 bit dữ liệu được dịch vào
trong SBUF (theo thứ tự: D0→D1→…→D7) → Stop bit (bit thứ 9) được đưa vào bit
RB8 (thuộc thanh ghi SCON) → cờ RI=1.
147
- ❖ Tốc độ baud: do người lập trình thiết lập và được qui định bởi tốc độ tràn của
Timer 1.
❖ Hai điều kiện bắt buộc để thực hiện quá trình thu dữ liệu như trên:
• RI = 0 → Yêu cầu này có nghĩa là chip 8051 đã đọc xong dữ liệu trước đó
và xoá cờ RI..
• (SM2 = 1 và Stop bit = 1) hoặc SM2 = 0 → chỉ áp dụng trong chế độ
truyền thông đa xử lý. Yêu cầu này có nghĩa là không set cờ RI bằng 1
trong chế độ truyền thông đa xử lý khi bit dữ liệu thứ 9 là 0.
❖ Cờ ngắt thu RI = 1: khi 8 bit dữ liệu đã được nạp vào SBUF.
Lưu ý: Trường hợp các tín hiệu nhiễu xuất hiện trên đường truyền (làm cho đường
truyền xuất hiện mức thấp) dẫn đến làm cho bộ thu nhận dạng sai, cho đó là sự xuất
hiện của START bit (logic 0) và tiến hành thực hiện quá trình thu dữ liệu, từ đó dẫn
đến kết quả nhận vào sẽ không đúng. Để tránh điều này xảy ra thì khi đường truyền có
sự chuyển trạng thái từ 1 xuống 0, bộ thu yêu cầu mức 0 này phải được duy trì trên
đường truyền trong một khoảng thời gian xác định. Nếu không đảm bảo được như thế,
bộ thu được giả sử rằng đã nhận được nhiễu thay vì nhận được START bit hợp lệ. Lúc
đó bộ thu sẽ được thiết lập lại, quay về trạng thái nghỉ và chờ sự chuyển trạng thái từ 1
xuống 0 kế tiếp trên đường truyền.
3.3.UART 9 bit với tốc độ baud cố định
(Tương tự như UART 8 bit, chỉ khác ở số bit dữ liệu là 9 bit)
148
- Khuông dạng của một dữ liệu khi sử dụng chế độ UART 9 bit:
3.4.Chế độ UART với tốc độ baud cố định
+ Chế độ 3 – UART 9 bit có tốc độ baud thay đổi:
(Tương tự như UART 9 bit, chỉ khác ở tốc độ baud có thể thay đổi)
Khuông dạng của một dữ liệu khi sử dụng chế độ UART 9 bit:
4. Khởi tạo và truy suất thanh ghi PORT nối tiếp
Trong các chế độ truyền dữ liệu nối tiếp của 8051 đã nêu trên thì trên thực tế sử
dụng, để thực hiện việc thu và phát dữ liệu nối tiếp giữa chip 8051 với các thiết bị
149
- khác (8051, máy tính, các thiết bị SPI,…) thường người lập trình chỉ sử dụng hai chế
độ sau : Mode 1 (UART 8 bit có tốc độ baud thay đổi) hoặc Mode 3 (UART 9 bit có
tốc độ baud thay đổi). Còn hai chế độ còn lại thì rất ít sử dụng khi cần truyền dữ liệu
nối tiếp. Cho nên ở đây chúng ta chỉ xem xét đến trình tự thực hiện việc lập trình (bao
gồm thao tác khởi động và điều khiển thu/phát dữ liệu) để 8051 có thể truyền (phát) và
nhận (thu) dữ liệu thông qua port nối tiếp theo hai chế độ UART nêu trên.
+ Lập trình truyền dữ liệu.
❖ Chọn chế độ hoạt động cho port nối tiếp:
MOV SCON, #...(1)…
❖ Chọn chế độ hoạt động Timer 1, cho bit GATE=0 và C/T=0:
MOV TMOD, #...(2)…
❖ Chọn giá trị thích hợp (căn cứ vào tốc độ baud) cho Timer 1:
MOV TH1, #...(3)…
❖ Cho Timer 1 chạy:
SETB TR1
❖ Kiểm tra xem đã phát xong toàn bộ dữ liệu trước đó hay chưa?
JNB TI, $
hoặc
WAIT: JNB TI, WAIT
❖ Xoá cờ ngắt phát TI (chuẩn bị cho lần phát dữ liệu tiếp theo):
CLR TI
❖ Ghi dữ liệu cần phát vào port nối tiếp để phát đi:
MOV SBUF, ...(4)…
❖ Quay trở lại bước 5 để phát một dữ liệu tiếp theo.
Lưu ý:
(1): Giá trị dùng để qui định chế độ hoạt động của port nối tiếp. Để đơn giản
trong việc lập trình, ta có thể khởi động thanh ghi SCON theo như trình bày dưới đây:
Mode 1: ...(1)… = 52H
Mode 3: ...(1)… = D2H
150
- (2): Giá trị dùng để qui định chế độ hoạt động của Timer 1 (dùng để tạo tốc độ
baud cho việc truyền dữ liệu nối tiếp). Để đơn giản trong việc lập trình, ta có thể khởi
động thanh ghi TMOD theo như trình bày dưới đây (chủ yếu ở đây ta chỉ cần sử dụng
Timer 1 ở Mode 2 – Chế độ 8 bit tự động nạp lại):
Mode 2: ...(2)… = 20H
(3): Giá trị dùng để qui định tốc độ baud cho port nối tiếp. Giá trị này phụ
thuộc vào tần số thạch anh, bit SMOD và tốc độ baud mà người lập trình mong muốn
(xem thêm “Bảng tính tốc độ baud cho port nối tiếp” như trên đã trình bày).
...(3)… = M
f f
M=− Osc , ( SMOD = 1) hoặc M = − Osc , ( SMOD = 0)
192 Baud rate 384 Baud rate
Trong đó: fOsc (Hz): tần số thạch anh.
Baud rate (bps): tốc độ baud của port nối tiếp.
(4): Dữ liệu cần phát đi thông qua port nối tiếp. Dữ liệu này có thể là nội dung
của một ô nhớ, thanh ghi hoặc một giá trị tức thời.
Nên nhớ rằng, nếu có yêu cầu thì bit gửi kèm theo (ví dụ như bit Parity) cần
phải thêm vào trước khi tiến hành quá trình phát dữ liệu (Mode 1: kèm thêm vào vị trí
của bit D7, Mode 3: kèm thêm vào vị trí của bit TB8).
+ Lập trình nhận dữ liệu.
❖ Chọn chế độ hoạt động cho port nối tiếp:
MOV SCON, #...(1)…
❖ Chọn chế độ hoạt động Timer 1, cho bit GATE=0 và C/T=0:
MOV TMOD, #...(2)…
❖ Chọn giá trị thích hợp (căn cứ vào tốc độ baud) cho Timer 1:
MOV TH1, #...(3)…
❖ Cho Timer 1 chạy:
SETB TR1
❖ Kiểm tra xem đã thu toàn bộ dữ liệu hay chưa?
JNB RI, $
hoặc
WAIT: JNB RI, WAIT
151
- ❖ Xoá cờ ngắt thu RI (chuẩn bị cho lần thu dữ liệu tiếp theo):
CLR RI
❖ Cất dữ liệu vừa thu được vào nơi an toàn (tránh bị mất dữ liệu):
MOV ...(4)…, SBUF
❖ Quay trở lại bước 5 để nhận một dữ liệu tiếp theo.
Lưu ý:
(1): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”.
(2): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”.
(3): Xem thêm “Lập trình 8051 truyền (phát) dữ liệu nối tiếp”.
(4): Địa chỉ của một ô nhớ, thanh ghi mà dữ liệu thu được từ port nối tiếp sẽ lưu
giữ vào trong đó.
Nên nhớ rằng, nếu có yêu cầu thì bit gửi kèm theo (ví dụ như bit Parity) cần
phải được xử lý trước khi tiến hành việc cất dữ liệu thu được (Mode 1: nằm tại vị trí
của bit D7, Mode 3: nằm tại vị trí của bit RB8).
5. Truyền thông đa xử lý
Giao tiếp nối tiếp có nghĩa là truyền dữ liệu từng chút một tại một thời điểm, khi
truyền thông song song, số lượng bit có thể được truyền tại một thời điểm phụ thuộc
vào số lượng dòng dữ liệu có sẵn để liên lạc.
Hai phương thức giao tiếp nối tiếp là
• Truyền thông đồng bộ: Chuyển dữ liệu hàng loạt trong cấu trúc khung tại
một thời điểm
• Truyền thông không đồng bộ: Truyền dữ liệu byte trong cấu trúc khung tại
một thời điểm
8051 đã được xây dựng trong UART với RXD (nhận dữ liệu nối tiếp pin) và TXD (dữ
liệu nối tiếp truyền pin) trên PORT3.0 và PORT3.1 tương ứng.
Giao tiếp không đồng bộ
Giao tiếp nối tiếp không đồng bộ được sử dụng rộng rãi để truyền byte theo định
hướng.
Cấu trúc khung trong giao tiếp không đồng bộ:
• START bit: Đó là một chút mà bắt đầu giao tiếp nối tiếp và nó luôn luôn
thấp.
• Gói bit dữ liệu : Các bit dữ liệu có thể là gói 5 đến 9 bit. Thông thường,
chúng tôi sử dụng gói dữ liệu 8 bit, luôn được gửi sau bit START.
• STOP bit : Đây là một hoặc hai bit. Nó được gửi sau khi gói dữ liệu bit để
cho biết kết thúc khung. Stop bit luôn logic cao.
Trong khung giao tiếp nối tiếp không đồng bộ, bit START đầu tiên được theo sau bởi
byte dữ liệu và ở bit STOP cuối cùng, tạo thành một khung 10 bit. Đôi khi bit cuối
cùng cũng được sử dụng như bit chẵn lẻ.
152
- 6. Tốc độ BAUD
+ Tốc độ truyền dữ liệu.
- Tốc độ baud cho chế độ 0:
- Tốc độ baud cho chế độ 1, 3:
- Tốc độ baud cho chế độ 2:
❖ Lưu ý:
• Sau khi hệ thống reset thì bit SMOD = 0 (chế độ mặc định).
• Vì thanh ghi PCON không được định địa chỉ từng bit, nên để tăng gấp đôi
tốc độ baud (tức làm cho SMOD=1) ta phải thực hiện bằng những dòng
lệnh sau:
MOV A, PCON ; Lấy giá trị từ thanh ghi PCON.
SETB ACC.7 ; SMOD = 1.
MOV PCON, A ; Chuyển giá trị mới vào PCON.
7. Bài tập
- Ứng dụng port nối tiếp trong lập trình điều khiển thiết bị ngoại vi.
+ Sơ đồ nguyên lý.
153
- R1 330 R2 330 R3 330 R4 330
J1
1 VCC
GND 2
+5V 3
GND
POWER
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
VCC VCC VCC VCC
D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20 D21 D22 D23 D24 D25 D26 D27 D28 D29 D30 D31 D32
LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
J2 J3 J4 J5
BARLED1 BARLED2 BARLED3 BARLED4
LED0
LED1
LED2
LED3
LED4
LED5
LED6
LED7
LED0
LED1
LED2
LED3
LED4
LED5
LED6
LED7
LED0
LED1
LED2
LED3
LED4
LED5
LED6
LED7
LED0
LED1
LED2
LED3
LED4
LED5
LED6
LED7
Hình 0.1: Sơ đồ nguyên lý khối LED đơn (Point LED).
J25
1 VCC
GND 2
+5V 3
10K R15 VCC
GND
1 POWER J26
2 K0 K0 1
3 K1 K1 2
KEY0
4 K2 K2 3
KEY1
5 K3 SW2 SW3 SW4 SW5 SW6 SW7 SW8 SW9 K3 4
KEY2
6 K4 KEY 0 KEY 1 KEY 2 KEY 3 KEY 4 KEY 5 KEY 6 KEY 7 K4 5
KEY3
7 K5 K5 6
KEY4
8 K6 K6 7
KEY5
9 K7 K7 8
KEY6
KEY7
K0
K1
K2
K3
K4
K5
K6
K7
PUSH KEY
Hình 0.2: Sơ đồ nguyên lý khối nút nhấn (Momentary Switch).
❖ Sơ đồ bố trí linh kiện.
Hình 0.3: Khối LED đơn (Point LED)
Hình 0.4: Khối nút nhấn (Momentary Switch).
BÀI THỰC HÀNH
Nội dung: Viết chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ
liệu thông qua port nối tiếp. Thay đổi trạng thái của các LED tại vi điều khiển 2
(Slave) theo trạng thái của các nút nhấn tại vi điều khiển 1 (Master).
Lưu đồ giải thuật:
❖ Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển.
154
- Hình 0.5: Lưu đồ giải thuật của chương trình.
Chương trình điều khiển:
Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và
biên dịch, kiểm tra lỗi cú pháp của chương trình.
❖ Bước 2: Khởi động phần mềm Topview Simulation.
❖ Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin
chương trình là: S1_MASTER.ASM và S1_SLAVE.ASM
❖ Bước 4: Viết chương trình điều khiển dưới đây vào máy tính.
Chương trình cho vi điều khiển Master:
ORG 00H
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload).
MOV TH1,#-3 ; Baud rate = 9600.
MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit.
SETB TR1 ; Kich hoat Timer 1.
AGAIN:
MOV A,P0 ; Lay du lieu tu SW.
ACALL SEND ; Gui du lieu di
SJMP AGAIN ; Thuc hien lai.
;---- Truyen du lieu noi tiep, Data = ACC.
SEND:
155
- MOV SBUF,A ; Lay du lieu.
JNB TI,$ ; Cho truyen xong du lieu.
CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo.
RET ; Quay ve.
;----------------
END
Chương trình cho vi điều khiển Slave:
ORG 00H
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload).
MOV TH1,#-3 ; Baud rate = 9600.
MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit.
SETB TR1 ; Kich hoat Timer 1.
AGAIN:
ACALL RECV ; Nhan du lieu noi tiep.
MOV P1,A ; Xuat len LED.
SJMP AGAIN ; Thuc hien lai.
;---- Nhan du lieu noi tiep, ACC = Data.
RECV:
JNB RI,$ ; Cho nhan xong du lieu.
MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A.
CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo.
RET ; Quay ve.
;----------------
END
❖ Bước 5: Lưu chương trình trên vào máy tính.
❖ Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình.
• Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục
các lỗi này. Nguyên nhân phát sinh lỗi thông thường do cú pháp của các
lệnh không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc
hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5.
• Nếu không có lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin mã máy
với tên là: S1_MASTER.HEX, S1_SLAVE.HEX và thực hiện tiếp theo
các phần nội dung dưới đây.
Mô phỏng hoạt động:
Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng
quá trình hoạt động của hệ thống vi điều khiển.
❖ Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10).
❖ Bước 8: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển truyền dữ liệu thông
qua port nối tiếp như Hình 5.4.4 dưới đây.
156
- MAÏCH ÑIEÀU KHIEÅN GIAO TIEÁP COÅNG NOÁI TIEÁP
RP1 RP2
+5V
+5V
1 1
C5
C2 2 P0.0M P0.0S 2
33p 3 P0.1M P0.1S 3
4 P0.2M P0.2S 4 33p
5 P0.3M P0.3S 5 X2
X1 6 P0.4M P0.4S 6 11.0592MHz
11.0592MHz 7 P0.5M P0.5S 7 C4
C1 8 P0.6M P0.6S 8
33p 9 P0.7M P0.7S 9
33p
10K 10K
+5V U9 U1 +5V
19 39 P0.0M P0.0S 39 19
XTAL1 P0.0/AD0 P0.0/AD0 XTAL1
38 P0.1M P0.1S 38
P0.1/AD1 P0.1/AD1
37 P0.2M P0.2S 37
P0.2/AD2 P0.2/AD2
18 36 P0.3M P0.3S 36 18
XTAL2 P0.3/AD3 P0.3/AD3 XTAL2
C3 35 P0.4M P0.4S 35 C6
P0.4/AD4 P0.4/AD4
10uF 34 P0.5M P0.5S 34
10uF
P0.5/AD5 P0.5/AD5
33 P0.6M P0.6S 33
P0.6/AD6 P0.6/AD6
9 32 P0.7M P0.7S 32 9
RST P0.7/AD7 P0.7/AD7 RST
21 P2.0M P2.0S21
P2.0/A8 P2.0/A8
R1 22 P2.1M P2.1S22 R18
P2.1/A9 P2.1/A9
10k 23 P2.2M P2.2S23
10k
P2.2/A10 P2.2/A10
29 24 P2.3M P2.3S24 29
+5V PSEN P2.3/A11 P2.3/A11 PSEN +5V
30 25 P2.4M P2.4S25 30
+5V ALE P2.4/A12 P2.4/A12 ALE +5V
31 26 P2.5M P2.5S26 31
RP3 EA P2.5/A13 P2.5/A13 EA RP4
27 P2.6M P2.6S27
U2 P2.6/A14 P2.6/A14 U3
1 28 P2.7M P2.7S28 1
P2.7/A15 P2.7/A15
10 10
COM COM
2 D0M D0M 18 1 1 10 10 1 1 18 D0S D0S 2
1C 1B P1.0 P3.0/RXD P3.0/RXD P1.0 1B 1C
3 D1M D1M 17 2 2 11 11 2 2 17 D1S D1S 3
2C 2B P1.1 P3.1/TXD P3.1/TXD P1.1 2B 2C
4 D2M D2M 16 3 3 12 12 3 3 16 D2S D2S 4
3C 3B P1.2 P3.2/INT0 P3.2/INT0 P1.2 3B 3C
5 D3M D3M 15 4 4 13 13 4 4 15 D3S D3S 5
4C 4B P1.3 P3.3/INT1 P3.3/INT1 P1.3 4B 4C
6 D4M D4M 14 5 5 14 14 5 5 14 D4S D4S 6
5C 5B P1.4 P3.4/T0 P3.4/T0 P1.4 5B 5C
7 D5M D5M 13 6 6 15 15 6 6 13 D5S D5S 7
6C 6B P1.5 P3.5/T1 P3.5/T1 P1.5 6B 6C
8 D6M D6M 12 7 7 16 16 7 7 12 D6S D6S 8
7C 7B P1.6 P3.6/WR P3.6/WR P1.6 7B 7C
9 D7M D7M 11 8 8 17 17 8 8 11 D7S D7S 9
8C 8B P1.7 P3.7/RD P3.7/RD P1.7 8B 8C
10K ULN2803 AT89C51 AT89C51 ULN2803 10K
MASTER SLAVE
KEY15 KEY14 KEY13 KEY12 KEY11 KEY10 KEY9 KEY8 KEY7 KEY6 KEY5 KEY4 KEY3 KEY2 KEY1 KEY0
P0.7M
P0.6M
P0.5M
P0.4M
P0.3M
P0.2M
P0.1M
P0.0M
P0.7S
P0.6S
P0.5S
P0.4S
P0.3S
P0.2S
P0.1S
P0.0S
+5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V +5V
R17 R16 R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2
330 330 330 330 330 330 330 330 330 330 330 330 330 330 330 330
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
D7M
D6M
D5M
D4M
D3M
D2M
D1M
D0M
D7S
D6S
D5S
D4S
D3S
D2S
D1S
D0S
R19 +5V +5V R33 +5V +5V
R20 R34
R21 R35
R22 R36
R23 R37
R24 R38
U4 R25 A1 A2 U6 R39 A3 A4
P2.4M 7 13 A1 B1 B2 P2.4S 7 13 A3 B3 B4
A QA 56 A QA 56
P2.5M 1 12 B1 C1 C2 P2.5S 1 12 B3 C3 C4
B QB 56 B QB 56
P2.6M 2 11 C1 D1 D2 P2.6S 2 11 C3 D3 D4
C QC 56 C QC 56
P2.7M 6 10 D1 E1 E2 P2.7S 6 10 D3 E3 E4
D QD 56 D QD 56
4 9 E1 F1 F2 4 9 E3 F3 F4
BI/RBO QE 56 BI/RBO QE 56
5 15 F1 G1 G2 5 15 F3 G3 G4
RBI QF 56 RBI QF 56
3 14 G1 3 14 G3
LT QG 56 LT QG 56
74LS47 74LS47
U5 U7
P2.0M 7 13 A2 P2.0S 7 13 A4
P2.1M 1
A QA 56
B2
R26 P2.1S 1
A QA 56
B4
R40
12 56 R27 12 56 R41
B QB B QB
P2.2M 2 11 C2 P2.2S 2 11 C4
P2.3M 6
C QC 56
D2
R28 P2.3S 6
C QC 56
D4
R42
10 56 R29 10 56 R43
D QD D QD
4 9 E2 4 9 E4
BI/RBO QE 56
F2
R30 BI/RBO QE 56
F4
R44
5 15 56 R31 5 15 56 R45
RBI QF RBI QF
3 14 G2 3 14 G4
LT QG 56 R32 LT QG 56 R46
74LS47 74LS47
Hình 0.6: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển.
Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập tin
là: SerialPort_1.DSN. Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy
mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học.
❖ Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được
tạo ra từ Bước 6) cho hệ thống vi điều khiển: S1_MASTER.HEX,
S1_SLAVE.HEX
❖ Bước 10: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn
hình máy tính.
• Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục
các lỗi này. Nguyên nhân phát sinh lỗi thông thường do giải thuật chương
trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần
phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở
về thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc
Bước 8 (do mạch mô phỏng vẽ không chính xác).
• Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây.
+ Lắp mạch và nạp chương trình điều khiển.
157
- Sử dụng các khối "Microcontroller Unit Slot", "Point LED", "Momentary
Switch" và "Power Supply" có sẵn trên mô hình thực hành vi điều khiển để lắp ráp
mạch theo thiết kế bên trên.
❖ Bước 11: Kết nối các khối trên mô hình như Hình 5.4.5 để tạo thành hệ
thống mạch điều khiển như bên trên.
• Tắt nguồn AC cấp cho mô hình thực hành.
Hình 0.7: Sơ đồ kết nối mạch trên mô hình.
Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi điều
khiển P89V51RB2 trên mô hình thực hành.
❖ Bước 12: Bật nguồn AC cấp cho mô hình thực hành.
❖ Bước 13: Khởi động phần mềm Flash Magic.
❖ Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng COM, tốc
độ truyền, chuẩn giao tiếp,...
❖ Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã được tạo
ra từ Bước 6): S1_MASTER.HEX, S1_SLAVE.HEX
❖ Bước 16: Nạp chương trình vào vi điều khiển.
❖ Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để
chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành.
• Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục
các lỗi này. Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng
không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra
lại. Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về
thực hiện từ Bước 15.
• Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành.
BÀI TẬP THỰC HÀNH
Nội dung: "Chương trình, mô phỏng và lắp ráp mạch điều khiển truyền dữ liệu
thông qua port nối tiếp. Thay đổi trạng thái của các LED tại vi điều khiển 2 (Slave)
theo trạng thái của các nút nhấn tại vi điều khiển 1 (Master) và ngược lại"
158
- Lưu đồ giải thuật:
Chương trình cho vi điều khiển Master:
ORG 00H
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload).
MOV TH1,#-3 ; Baud rate = 9600.
MOV SCON,#50H ; Data = 8 bit, Stop = 1 bit.
SETB TR1 ; Kich hoat Timer 1.
AGAIN:
ACALL RECV ; Nhan du lieu tu port ket hop truyen du lieu
MOV P1,A ; Xuat len LED.
SJMP AGAIN ; Thuc hien lai.
;---- Truyen du lieu noi tiep, Data = ACC.
SEND:
MOV SBUF,A ; Lay du lieu.
JNB TI,$ ; Cho truyen xong du lieu.
CLR TI ; Xoa co bao, san sang cho lan truyen tiep theo.
RET ; Quay ve.
;---- Nhan du lieu noi tiep, ACC = Data.
RECV:
MOV A,P0 ; Lay du lieu tu SW.
ACALL SEND ; Gui du lieu di
JNB RI,RECV ; Cho nhan xong du lieu.
MOV A,SBUF ; Cat du lieu nhan vao thanh ghi A.
CLR RI ; Xoa co bao, san sang cho lan nhan tiep theo.
RET ; Quay ve.
;----------------
END
Chương trình cho vi điều khiển Slave:
ORG 00H
MOV TMOD,#20H ; Timer 1, Mode 2 (Auto reload).
159
nguon tai.lieu . vn