Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 154 Biên soạn: Phạm Quang Trí
CHƯƠNG 5
HOẠT ðỘNG CỦA PORT NỐI TIẾP
(SERIAL PORT)
I. 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:
• 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 đủ.
Các thanh ghi chức năng đặc biệt của 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 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.
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 155 Biên soạn: Phạm Quang Trí
II. THANH GHI ðỆM PORT NỐI TIẾP (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:
• 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.
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 156 Biên soạn: Phạm Quang Trí
III. THANH GHI ðIỀU KHIỂN PORT NỐI TIẾP (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:
SCON: Serial Control Register
0
Bit
98
1
99
2
9A
3
9B
4
9C
5
9D
6
9E
7
9F
Đòa chỉ bit (HEX)
RI
Ký hiệu
TI
RB8
TB8
REN
SM2
SM1
SM0
SM2: Serial Mode 2 Bit 2 chọn chế độ của port nối tiếp.
Bit này cho phép truyền thông đa xử lý ở chế độ 2 và 3; bit
RI sẽ không được tích cực nếu bit thứ 9 nhận được là 0.
REN: Receive Enable
Cho phép thu. Bit này phải được set
để nhận các dữ liệu.
TB8: Transmit bit 8
Bit thứ 9 được phát (chế độ 2 và 3).
Bit này được set (1) hoặc xóa (0) bởi phần mềm.
RB8: Receive bit 8
Bit thứ 9 nhận được (chế độ 2 và 3).
RI: Receive Interrupt
Cờ ngắt thu. RI = 1 ngay khi kết
thúc việc thu một dữ liệu, RI được xóa bởi phần mềm.
TI: Transmit Interrupt
Cờ ngắt phát. TI = 1 ngay khi kết
thúc việc phát một dữ liệu, TI được xóa bởi phần mềm.
SM1: Serial Mode 1
Bit 1 chọn chế độ của port nối tiếp.
SM0: Serial Mode 0
Bit 0 chọn chế độ của port nối tiếp.
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:
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 157 Biên soạn: Phạm Quang Trí
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.
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.
IV. CÁC CHẾ ðỘ HOẠT ðỘNG CỦA PORT NỐI TIẾP:
1. Chế độ 0 – Thanh ghi dịch 8 bit:
Q trình phát dữ liệu:
• Q 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).
W
r
i
t
e
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 158 Biên soạn: Phạm Quang Trí
• Giản đồ thời gian phát dữ liệu:
Q trình thu dữ liệu:
• Q 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 ngồ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.
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 159 Biên soạn: Phạm Quang Trí
10100001B
Serial port
SBUF
A1H
Data
RxD
TxD
W
r
i
t
e
8051
1 0 1 0 0 0 0 1
DATA
SHIFT CLOCK
D0D7
Data
Shift Register
Clock
8 Extra outputs
Shift register: Thanh ghi dòch bit.
8 extra outputs: 8 ngõ ra mở rộng.
Chế độ thanh ghi dòch bit của port nối tiếp.
2. 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ẽ khng dạng dữ liệu khi được sử dụng ở chế độ UART:
D1 D2 D3 D4 D5 D6 D7D0
[0]
[
1
]
START
BIT
DATA BIT
PARITY
BIT
STOP
BIT
Bit này có thể
có hoặc không
có tùy theo yêu
cầu sử dụng
(Mức 1)(Mức 0)
Khng dạng của một dữ liệu khi sử dụng chế độ UART 8 bit:
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 160 Biên soạn: Phạm Quang Trí
Q trình phát dữ liệu:
• Q 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.
W
r
i
t
e
• 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.
Qúa trình thu dữ liệu:
• Q 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.
• 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 q trình thu dữ liệu như trên:
o RI = 0 → u cầu này có nghĩa là chip 8051 đã đọc xong dữ liệu trước đó và xố cờ RI
o (SM2 = 1 và Stop bit = 1) hoặc SM2 = 0 → chỉ áp dụng trong chế độ truyền thơng đa xử
lý. 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 q 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 u cầu mức 0 này phải
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 161 Biên soạn: Phạm Quang Trí
đượ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. Chế độ 2 – UART 9 bit có tốc độ baud cố định:
(Tương tự như UART 8 bit, chỉ khác ở số bit dữ liệu là 9 bit)
Khng dạng của một dữ liệu khi sử dụng chế độ UART 9 bit:
4. 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)
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 162 Biên soạn: Phạm Quang Trí
Khng dạng của một dữ liệu khi sử dụng chế độ UART 9 bit:
Receive
Recei
Transmit
Trans
V. KHỞI ðỘNG VÀ TRUY XUẤT CÁC THANH GHI:
1. Bit cho phép thu (nhận) dữ liệu (REN: Receive Enable):
• Cơng dụng:
dùng để cho phép (hoặc khơng cho phép) nhận các ký tự dữ liệu.
REN = 1: Cho phép nhận dữ liệu ⇒ lệnh thực hiện: SETB REN
REN = 0: Khơng cho phép dữ liệu ⇒ lệnh thực hiện: CLR REN
2. Bit dữ liệu thứ 9:
• Cơng dụng:
tùy thuộc vào đặc tính kỹ thuật của thiết bị nối tiếp mà có thể u cầu hoặc khơng
u cầu bit dữ liệu thứ 9.
Khi phát dữ liệu: bit dữ liệu thứ 9 phải được nạp vào bit TB8 của SCON trước khi phát đi.
Khi thu dữ liệu: bit dữ liệu thứ 9 sẽ được nạp vào bit RB8 của SCON sau khi thu xong.
3. Bit kiểm tra chẵn / lẻ (P: Parity):
• Cơng dụng: Trong chip 8051 thì bit Parity được dùng để thiết lập việc kiểm tra chẵn cho 8 bit
dữ liệu chứa trong thanh ghi A (thường dùng để kiểm tra lỗi khi truyền dữ liệu).
P = 1 ⇒ Số lượng bit 1 trong thanh ghi A là số lẻ.
P = 0 ⇒ Số lượng bit 1 trong thanh ghi A là số chẵn.
hoặc
Số lượng bit 1 trong thanh ghi A và bit P là một số chẵn.
Ở chế độ 1 (UART 8 bit) thì bit chẵn/lẻ do chip 8051 tạo ra có thể được thêm vào tại bit thứ 8
(vị trí D7) và khi đó ta chỉ có thể truyền dữ liệu chỉ có 7 bit.
Chương 5: Hoạt động của port nối tiếp (Serial Port). Trường ðH Cơng nghiệp Tp.HCM.
Giáo trình Vi xử lý. 163 Biên soạn: Phạm Quang Trí
Ở chế độ 2, 3 (UART 9 bit) thì bit chẵn/lẻ do chip 8051 tạo ra có thể được thêm vào tại bit thứ 9
(nghĩa là thêm vào bit TB8 của SCON) và khi đó ta có thể truyền dữ liệu có 8 bit.
START
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
PARITY
STOP
Bit thứ 9
DATA (8 bit)
Ví dụ:
Truyền dữ liệu (chế độ 2, 3 – UART 9 bit) chứa trong thanh ghi A thơng qua port nối tiếp với
u cầu truyền 8 bit dữ liệu + 1 bit kiểm tra chẵn (bit P).
Chuỗi lệnh thực hiện:
MOV C, P ;Chuyển bit kiểm tra chẵn (bit P) vào TB8 và
MOV TB8, C ;bit này trở thành bit thứ 9.
MOV SBUF, A ;Truyền 8 bit dữ liệu trong A thơng qua port.
Ví dụ:
Truyền dữ liệu (chế độ 2, 3 – UART 9 bit) chứa trong thanh ghi A thơng qua port nối tiếp với
u cầu truyền 8 bit dữ liệu + 1 bit kiểm tra lẻ (lấy bù bit P).
Chuỗi lệnh thực hiện:
MOV C, P ;Biến đổi bit kiểm tra chẵn (bit P) thành bit
CPL C ;kiểm tra lẻ, chuyển bit kiểm tra lẻ vào TB8 và
MOV TB8, C ;bit này trở thành bit thứ 9.
MOV SBUF, A ;Truyền 8 bit dữ liệu trong A thơng qua port.
Ví dụ:
Truyền dữ liệu (chế độ 1 – UART 8 bit) chứa trong thanh ghi A thơng qua port nối tiếp với u
cầu truyền 7 bit dữ liệu + 1 bit kiểm tra chẵn (bit P).
Chuỗi lệnh thực hiện:
CLR ACC.7 ;Xố bit thứ 8 (D7) trong thanh ghi A.
MOV C, P ;Sao chép bit kiểm tra chẵn vào C.
MOV ACC.7, C ;ðặt bit kiểm tra chẵn vào bit thứ 8 trong A.
MOV SBUF, A ;Truyền 7 bit dữ liệu cộng bit kiểm tra chẵn.
4. Các cờ ngắt của port nối tiếp:
Từ phần trình bày trên đây, ta có thể thấy rằng:
• Thơng qua việc kiểm tra cờ ngắt TI có thể biết được chip 8051 đã sẵn sàng để truyền một
byte dữ liệu hay chưa. Cần chú ý rằng, ở đây cờ TI được đặt (TI = 1) khi 8051 đã hồn tất việc truyền
một byte dữ liệu, còn được xố (TI=0) thì phải do người lập trình thực hiện bằng lệnh (CLR TI). Cũng
nên nhớ rằng, nếu ghi một byte vào thanh ghi SBUF trước khi cờ TI được đặt (TI = 1) thì sẽ có nguy
cơ bị mất phần dữ liệu trước đó do chưa kịp truyền đi. Cờ TI có thể được kiểm tra bằng lệnh (JNB
TI,…) hoặc sử dụng phương pháp ngắt (sẽ được trình bày trong chương tiếp theo).
Không có nhận xét nào:
Đăng nhận xét