Chuong 6 truyen thong noi tiep
description
Transcript of Chuong 6 truyen thong noi tiep
Nội dung:
• Chương 1: Giới thiệu về Vi xử lý
• Chương 2: Giới thiệu về cấu trúc của Họ Vi điều
khiển 8051
• Chương 3: Khảo sát tập lệnh và lập trình Vi điều
khiển 8051
• Chương 4: Hoạt động của bộ định thời
• Chương 5: Hoạt động ngắt
• Chương 6: Hoạt động truyền thông nối tiếp
• Chương 7: Thiết kế giao tiếp
6.1. Giới thiệu chung
• Port nối tiếp có chức năng thực hiện chuyển đổi dữ liệu
song song ⇒⇒⇒⇒ nối tiếp khi phát và chuyển đổi dữ liệu nối
tiếp ⇒⇒⇒⇒ song song khi thu.
• Port nối tiếp hoạt động song công (có khả năng thu phát
đồng thời).
• Sử dụng 2 thanh ghi chức năng đặc biệt SBUF (địa chỉ
99H) và SCON (địa chỉ 98H) để truy xuất port nối tiếp.
• Tần số hoạt động của port nối tiếp (tốc độ Baud) có thể cố
định hoặc thay đổi.
6.1. Giới thiệu chung
Sơ đồ khối của Port nối tiếp
6.2. Thanh ghi điều khiển port nối tiếp (SCON)
Bit Ký hiệu Địa chỉ Mô tả
SCON.7 SM0 9FH Bit 0 chọn chế độ của port nối tiếp.
SCON.6 SM1 9EH Bit 1 chọn chế độ của port nối tiếp.
SCON.5 SM2 9DH Bit 2 chọn chế độ của port nối tiếp.
SCON.4 REN 9CHBit cho phép thu.
Bit này phải được Set để nhận ký tự.
SCON.3TB8 9BH
Bit phát 8.
Bit thứ 9 được phát ở chế độ 2 và 3.
SCON.2RB8 9AH
Bit thu 8.
Bit thứ 9 được nhận.
SCON.1 TI 99HCờ ngắt phát. Bit này được Set ngay
khi kết thúc việc phát một ký tự.
SCON.0 RI 98HCờ ngắt thu. Bit này được SET ngay
khi kết thúc việc thu một ký tự.
SCON
6.3. Các chế độ hoạt động
• Các chế độ hoạt động của port nối tiếp được thiết lập bởi
thanh ghi SCON.
• Port nối tiếp của MCS-51 có 4 chế độ hoạt động. Các chế độ
được chọn bằng bit SM0 và SM1 trong thanh ghi SCON.
SM0 SM1 Chế độ Mô tả Tốc độ Baud
0 0 0 Thanh ghi dịch Cố định (f osc /12)
0 1 1 UART 8 bit Thay đổi (thiết lập bởi bộ định thời )
1 0 2 UART 9 bit Cố định (f osc /32 hoặc f osc /64 )
1 1 3 UART 9 bit Thay đổi (thiết lập bởi bộ định thời )
6.3.1. Thanh ghi dịch 8 bit (Mode 0)
• Dữ liệu được thu và phát qua chân RxD (P3.0). Chân
TxD (P3.1) dùng để xuất xung clock dịch bit.
• Khi phát và thu dữ liệu 8 bit, LSB được phát hoặc thu trước.
• Tốc độ Baud cố định bằng f OSC/12.
• Phát dữ liệu:
� Ghi vào bộ đệm SBUF.
� Dữ liệu được dịch ra ngoài chân RxD.
� Xung clock dịch bit gửi qua chân TxD.
� Mỗi bit hợp lệ truyền đi trên RxD trong 1 chu kỳ máy.
6.3.1. Thanh ghi dịch 8 bit (Mode 0)
• Thu dữ liệu:
� Chỉ được khởi động khi REN = 1 và RI = 0.
Nghĩa là, phải Set bit REN = 1 ở đầu chương
trình và xóa bit RI để bắt đầu công việc thu dữ
liệu.
� Dữ liệu được dịch vào chân RxD bởi xung
clock dịch bit (tác động sườn lên).
• UART (Universal Ansynchronous Receiver Transmiter)
là 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 và đứng sau bởi một bit stop.
Thỉnh thoảng có một bit parity được chèn vào trước bit
stop.
6.3.2. UART 8 bit có tốc độ Baud thay đổi (Mode 1)
• Hoạt động chủ yếu của UART là biến dữ liệu song song
thành nối tiếp khi phát và nối tiếp thành song song khi
thu.
• Cờ TI được set ngay khi bit stop xuất hiện trên trên TxD.
6.3.2. UART 8 bit có tốc độ Baud thay đổi (Mode 1) 6.3.2. UART 8 bit có tốc độ Baud thay đổi (Mode 1)
• Việc nhận dữ liệu được khởi động bởi một chuyển trạng
thái từ 1 xuống 0 trên đường RxD (bit start).
• Bit start sau đó được bỏ qua và 8 bit dữ liệu được nhận
tuần tự vào thanh ghi dịch của port nối tiếp. Khi cả 8 bit
được nhận, ta có:
� Bit thứ 9 (bit stop) ⇒⇒⇒⇒ RB8 của SCON.
� 8 bit dữ liệu được nạp vào SBUF.
� Cờ ngắt thu RI được Set.
6.3.3. UART 9 bit có tốc độ Baud cố định (Mode 2)
• Ở chế độ này, một ký tự phát hoặc thu bao gồm 11 bit:
� 1 bit start.
� 8 bit dữ liệu.
� Bit dữ liệu thứ 9 lập trình được.
� 1 bit stop.
• Khi phát: bit thứ 9 được đặt vào bit TB8 trong thanh ghi
SCON, là bit bất kỳ (có thể là bit Parity).
• Khi thu: bit thứ 9 nhận được sẽ được đặt vào TB8
6.3.3. UART 9 bit có tốc độ Baud thay đổi (Mode 3)
• Chế độ này tương tự chế độ 2, chỉ khác là tốc độ
Baud được lập trình và được cung cấp bởi bộ định
thời.
6.4. Khởi động và truy xuất các thanh ghi
• Việc thu dữ liệu được cho phép khi bit REN được
Set bởi phần mềm.
SETB REN
Hoặc có thể dùng lệnh:
MOV SCON, #xxx1xxxxB
6.4.1. Cho phép thu
6.4. Khởi động và truy xuất các thanh ghi
• Bit P trong thanh ghi PSW được Set hoặc được xóa ở mỗi chu
kỳ máy để thiết lập việc kiểm tra chẵn cho 8 bit chứa trong
thanh chứa A.
Ví dụ:
MOV C, P ; đưa bit kiểm tra chẵn vào C
MOV TB8, C ; Bit này trở thành bit thứ 9
MOV SBUF, A ;chuyển 8 bit dữ liệu vào SBUF
6.4.2. Thêm vào bit chẵn lẻ (Parity)
6.4. Khởi động và truy xuất các thanh ghi
• RI và TI phải đươc Set bởi phần cứng (khi kết thúc việcnhận hoặc truyền 1 ký tự) nhưng phải được xóa bởi phần
mềm.
• Khi nhận ký tự:
WAIT: JNB RI, WAIT ; chờ ký tự nhận xong
CLR RI
MOV A, SBUF ; đọc ký tự
• Khi phát ký tự:
WAIT: JNB TI, WAIT ; chờ ký tự phát xong
CLR TI
MOV SBUF, A ; phát ký tự tiếp theo
6.4.3. Các cờ ngắt (RI và TI)6.5. Tốc độ Baud của Port nối tiếp
Xung clock cấp cho Port nối tiếp ở các chế độ
6.5. Tốc độ Baud của Port nối tiếp
• Việc tạo tốc độ Baud thường được thực hiện bằng cách
khởi động thanh ghi TMOD ở chế độ tự nạp lại 8 bit và
đặt giá trị thích hợp vào thanh ghi TH1. Dùng lệnh:
MOV TMOD, #0010xxxx ; Timer 1 ở chế độ 2
6.5.1. Sử dụng Timer 1 làm xung clock tốc độ Baud
Tốc độ Baud = Tốc độ tràn Timer 1 / 32
6.5.1. Sử dụng Timer 1 làm xung clock tốc độ Baud
Tốc độBaud
Tần sốThach anh
(MHz)
SMODGiá trị nạp
cho TH1
Tốc độ Baud
thực tếSai số
9600 12 1 -7 (F9H) 8923 -7%
2400 12 0 -13 (F3H) 2404 0.16%
1200 12 0 -26 (E6H) 1202 0.16%
19200 11.059 0 -3 (FDH) 19200 0
9600 11.059 0 -3 (FDH) 9600 0
2400 11.059 0 -12 (F4H) 2400 0
1200 11.059 0 -24 (E8H) 1200 0
6.6. Các ứng dụng của Port nối tiếp
ORG 500H
OUTCHAR: MOV C, P ; Đặt bit chẵn lẻ vào C
CPL C ; Kiểm tra lẻ
MOV ACC.7, C ; Đưa vào bit 7 của thanh ghi A
WAIT: JNB TI, $ ; chờ bộ đệm rỗng
CLR TI
MOV SBUF, A ; Phát 1 ký tự
CLR ACC.7
RET
END
Ví dụ 1: Viết chương trình con phát mã ASCII 7 bit chứa trong thanh
ghi A ra Port nối tiếp, với bit kiểm tra lẻ là bit thứ 8. Sau khi trở về
từ chương trình con, nội dung thanh ghi A không thay đổi.
6.6. Các ứng dụng của Port nối tiếp
ORG 500H
INCHAR: JNB RI, $ ; Chờ nhận ký tự xong
CLR RI
MOV A, SBUF ; Đọc ký tự vào thanh ghi A
MOV C, P ; Kiểm tra lẻ
CPL C ; Nếu có lỗi (Cờ C = 1)
CLR ACC.7
RET
END
Ví dụ 2: Viết chương trình con thu 1 ký tự từ Port nối tiếp và trả về
mã ASCII 7 trong thanh ghi A. Sử dụng kiểm tra lẻ trong bit thứ 8
thu được và Set cờ nhớ nếu có lỗi.
6.6. Các ứng dụng của Port nối tiếp
ORG 0000H
MOV SCON, #50H
MOV TMOD, #20H
MOV TH1, #-3
SETB TR1
BEGIN: MOV A, “H” ; Đưa ký tự A vào thanh ghi A
ACALL SEND
MOV A, “E” ; Đưa ký tự A vào thanh ghi A
ACALL SEND
Ví dụ 3: Viết chương trình truyền nối tiếp liên tục chữ HELLO với
tốc độ 9600 Baud. Tần số thạch anh fosc = 11.059 MHz. MOV A, “L” ; Đưa ký tự A vào thanh ghi A
ACALL SEND
MOV A, “L” ; Đưa ký tự A vào thanh ghi A
ACALL SEND
MOV A, “O” ; Đưa ký tự A vào thanh ghi A
ACALL SEND
SJMP BEGIN
;xxxxx Chương trình con truyền dữ liệu nối tiếp xxxxxx
SEND: MOV SBUF, A
JNB TI, $
CLR TI
RET
Ví dụ 3: Viết chương trình truyền nối tiếp liên tục chữ HELLO với
tốc độ 9600 Baud. Tần số thạch anh fosc = 11.059 MHz.
Tốc độ Baud = 4800 ⇒ Giá trị đếm TH1 = -6
ORG 0000H
MOV SCON, #50H
MOV TMOD, #20H
MOV TH1, #-6
SETB TR1
BEGIN: MOV A, “A” ; Đưa ký tự A vào thanh ghi A
LOOP: JNB TI, $ ; Chờ bộ đệm truyền rỗng
CLR TI
MOV SBUF, A ; Xuất ra bộ đệm
INC A ; Đến ký tự kế tiếp
CJNE A, “Z” + 1, LOOP ; Nếu đã truyền xong
SJMP BEGIN ; ký tự từ A đến Z thì lặp lại
Ví dụ 4: Viết chương trình xuất chuỗi ký từ liên tục từ “A” đến “Z”
ra cổng nối tiếp với tốc độ Baud là 4800, với fosc = 11.059 MHz
Tốc độ Baud = 19200 ⇒ Giá trị đếm TH1 = -3
ORG 0000H
MOV SCON, #50H
MOV TMOD, #20H
MOV TH1, #-3
SETB TR1
LOOP: JNB RI, $ ; Chờ ký tự nhận xong
CLR RI
MOV A, SBUF ; Đọc ký tự vào thanh chứa
SJMP LOOP ; ký tự từ A đến Z thì lặp lại
Ví dụ 5: Viết chương trình nhận ký tự từ cổng nối tiếp với tốc độ
Baud là 19200, với fosc = 11.059 MHz
Cổng giao tiếp máy tínhSơ đồ chân cổng giao tiếp với máy tính
Vi mạch giao tiếp Sơ đồ mạch giao tiếp với máy tính