Bài giảng Kỹ thuật vi điều khiển - Lập trình giao tiếp nối tiếp

Tóm tắt Bài giảng Kỹ thuật vi điều khiển - Lập trình giao tiếp nối tiếp: ...RxD dùng cho cả việc thu phát dữ liệu trong khi TxD dùng làm chân xuất clock dịch bit • Phát: – Ghi vào SBUF – Dữ liệu được dịch ra ngoài trên chân RxD (P3.0) – Xung clock dịch bit được gửi ra trên chân TxD (P3.1) – Mỗi bit hợp lệ truyền đi trên RxD trong 1 chu kỳ máy Xung & Hoi 7 • Thu: –...nh ghi dịch bit 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 • Note: Các điều trên chỉ xảy ra nếu trước đó cờ RI = 0 Xung & Hoi 10 11-4. Khởi động và truy xuất các thanh ghi • Cho phép nh...ể có tốc độ tràn đúng, từ đó tạo ra tốc độ baud • MOV TMOD, #0010xxxxB ;for timer 1 • Baud rate = Timer 1 overflow / 32 hay /16 tùy thuộc giá trị bit SMOD Xung & Hoi 14 Bài toán 11.1 • Tính toán các giá trị nạp lại cho thanh ghi TH1 đối với các tốc độ baud 9600, 4800, 2400, 1200 (XTAL = 11,0...

pdf19 trang | Chia sẻ: havih72 | Lượt xem: 269 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Kỹ thuật vi điều khiển - Lập trình giao tiếp nối tiếp, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt (SFR)
5. Dao động và hoạt động reset
6. Tập lệnh
7. Các mode định địa chỉ (addressing modes)
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp (serial comm programming)
12.Lập trình ngắt (interrupt programming)
13.Lập trình hợp ngữ
Xung & Hoi 2
11-1. Giới thiệu
• Port nối tiếp hoạt động song công (full duplex), nghĩa là có
khả năng thu và phát đồng thời
• Sử dụng 2 thanh ghi chức năng đặc biệt SBUF (địa chỉ byte là
99H) & SCON (địa chỉ byte là 98H) để truy xuất port nối tiếp
• Việc ghi lên SBUF sẽ nạp dữ liệu để phát, và việc đọc SBUF
sẽ truy xuất dữ liệu đã nhận đượcà thực ra có 2 SBUF riêng
rẽ
• SCON chứa các bit trạng thái và điều khiển, thanh này được
định địa chỉ bit
• Tần số hoạt động của port nối tiếp hay còn gọi là tốc độ baud
(baud rate) có thể cố định hoặc thay đổi
Xung & Hoi 3
Clk SBUF Q
(write only)
SBUF
(read only)
D
Shift Register
Clk
Baud rate clock
(phát)
Baud rate clock
(thu)
TXD
(P3.1)
8051 internal bus
RXD
(P3.0)
Xung & Hoi 4
11-2. Thanh khi điều khiển port nối tiếp
SM1, SM0: chọn chế độ của port nối tiếp
SM2: cho phép truyền thông đa xử lý
REN: cho phép thu, phải được set để nhận các ký tự
TB8: bit thứ 9 được phát ở chế độ 2 & 3
RB8: bit thứ 9 nhận được
TI: cờ ngắt phát, được set ngay sau khi kết thúc việc phát 1 
ký tự; được xóa bởi phần mềm
RI: cờ ngắt thu, được set ngay sau khi kết thúc việc thu 1 
ký tự; được xóa bởi phần mềm
SM0 SM1 SM2 REN RB8TB8 RITISCON
Xung & Hoi 5
11-3. Các chế độ hoạt động
SM0 SM1 Mode Mô tả Tốc độ baud
0 0 0 Thanh ghi dịch Cố định (fOSC/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 (fOSC/12 
hoặc fOSC/64)
1 1 3 UART 9-bit Thay đổi (thiết lập
bởi bộ định thời) 
Xung & Hoi 6
11-3-1. Thanh ghi dịch 8-bit (mode 0)
• Khi phát và thu dữ liệu 8-bit, bit LSB được phát hoặc thu trước
tiên
• Tốc độ baud cố định = fOSC/12
• Chân RxD dùng cho cả việc thu phát dữ liệu trong khi TxD
dùng làm chân xuất clock dịch bit
• Phát: 
– Ghi vào SBUF
– Dữ liệu được dịch ra ngoài trên chân RxD (P3.0)
– Xung clock dịch bit được gửi ra trên chân TxD (P3.1)
– Mỗi bit hợp lệ truyền đi trên RxD trong 1 chu kỳ máy
Xung & Hoi 7
• Thu:
– Chỉ được khởi động khi REN = 1 & RI = 0, nghĩa là phải set 
REN = 1 ở thời điểm bắt đầu chương trình & xóa 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)
• 1 Ứng dụng của mode 0:
– Mở rộng thêm các ngõ ra cho 8051
8051
TxD(P3.1)
RxD(P3.0)
Clock
Shift Regsiter
Data
8 ngõ ra mở rộng
Xung & Hoi 8
11-3-2. UART 8-bit có tốc độ baud thay
đổi (mode 1)
• UART 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 1 bit start và đứng sau bởi 1 bit stop. 
Thỉnh thoảng 1 bit parity được chèn vào.
• Hoạt động chủ yếu của UART là biến dữ liệu phát từ // thành
nt và biến dữ liệu thu từ nt thành //
• Cờ ngắt phát TI được set bằng 1 ngay khi bit stop xuất hiện
trên TxD
1 / baud rate
D0 D1 D2 D3 D4 D5 D6 D7
Start 
bit
Stop 
bit
TI (ready 
for more 
data)
TxD
TI
Xung & Hoi 9
• Việc nhận được khởi động bởi 1 chuyển trạng thái từ 1 xuống
0 trên đường RxD (bit start)
• Bit start sau đó được bỏ qua & 8 bit dữ liệu sau đó được nhận
tuần tự vào thanh ghi dịch bit 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
• Note: Các điều trên chỉ xảy ra nếu trước đó cờ RI = 0 
Xung & Hoi 10
11-4. Khởi động và truy xuất các thanh ghi
• Cho phép nhận: REN trong SCON phải được set bởi phần
mềm để cho phép nhận ký tự
SETB REN
Hoặc
MOV SCON, #xxx1xxxxB
• Thêm vào bit chẵn lẻ: bit P trong PSW được set hoặ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 A
MOV C, P ; đưa bit kiểm tra chẵn vào TB8
MOV TB8, C ; bit này trở thành bit thứ 9
MOV SBUF, A ; di chuyển 8 bit dữ liệu vào SBUF
Xung & Hoi 11
• Các cờ ngắt: RI và TI được set bằng phần cứng nhưng phải
xóa bằng phần mềm
CTC nhận 1 ký tự qua port nối tiếp như sau:
INCHAR: JNB RI, $
CLR RI
MOV A, SBUF
RET
CTC phát 1 ký tự qua port nt:
OUTCHAR: JNB TI, $
CLR TI
MOV SBUF, A
RET
Xung & Hoi 12
11-5. Tốc độ baud của port nối tiếp
¸12On-chip OSC
Baud rate 
clock
¸64
On-chip 
OSC
Baud rate 
clock
¸32
SMOD=0
SMOD=1
¸32
Timer 1 
overflow
Baud rate 
clock
¸16
SMOD=0
SMOD=1
Mode 0
Mode 2
Mode 1 & 3
Xung & Hoi 13
Dùng timer 1 làm xung clock tốc độ baud
• Thông thường khởi động thanh ghi TMOD ở chế độ tự động
nạp lại 8-bit (mode 2) & đặt giá trị nạp lại thích hợp vào thanh
ghi TH1 để có tốc độ tràn đúng, từ đó tạo ra tốc độ baud
• MOV TMOD, #0010xxxxB ;for timer 1
• Baud rate = Timer 1 overflow / 32 hay /16 tùy thuộc giá trị bit 
SMOD
Xung & Hoi 14
Bài toán 11.1
• Tính toán các giá trị nạp lại cho thanh ghi TH1 đối với các tốc
độ baud 9600, 4800, 2400, 1200 (XTAL = 11,0592MHz)?
~7%8929-7 (F9H)1129600
0,16%1202-26 (E6H)0121200
0%1200-24 (E8H)011,05921200
0%2400-12 (F4H)011,05922400
0%4800-6 (FAH)011,05924800
0%9600-3 (FDH)011,05929600
0%19200-3 (FDH)111,059219200
Sai sốTốc độ baud thực tế
Giá trị nạp
cho TH1SMOD
Tần số thạch
anh (MHz)
Tốc độ
baud
Xung & Hoi 15
Tóm lại:
Nếu PCON.7 = 0
• TH1 = 256 - ((Crystal / 384) / Baud) 
Nếu PCON.7 =1 
• TH1 = 256 - ((Crystal / 192) / Baud)
Làm vd với baud rate 19200 để chứng tỏ vai trò bit SMOD
11.059Mhz crystal:
• TH1 = 256 - ((Crystal / 384) / Baud)
TH1 = 256 - ((11059200 / 384) / 19200 )
TH1 = 256 - ((28799) / 19200)
TH1 = 256 - 1.5 = 254.5
Xung & Hoi 16
• Nếu set 254 ta đạt được 14,400 baud còn với 255 ta đạt được
28,800 baud 
• Set PCON.7 (SMOD). Ta có:
TH1 = 256 - ((Crystal / 192) / Baud)
TH1 = 256 - ((11059200 / 192) / 19200)
TH1 = 256 - ((57699) / 19200)
TH1 = 256 - 3 = 253
Kết luận với 19,200 baud (11.0592MHz crystal) ta phải:
1. Cấu hình Port nối tiếp mode 1 or 3
2. Timer 1 hoạt động mode 2 (8-bit auto-reload)
3. Set TH1 bằng 253 
4. Set PCON.7 (SMOD)
Xung & Hoi 17
Các bài toán
• EBT11.1. Khởi động port nt: Viết chuỗi lệnh khởi động port 
nối tiếp hoạt động như 1 UART 8-bit với tốc độ baud 2400. 
Dùng timer 1 để cung cấp xung clock tốc độ baud?
• EBT11.2. CTC xuất ký tự: Viết CTC mang tên OUTCHAR 
phát mã ASCII 7-bit chứa trong A ra port nối tiếp với bit kiểm
tra chẵn là bit thứ 8. Việc trở về từ CTC phải không làm thay
đổi nội dung thanh chứa A?
• EBT11.3. CTC thu ký tự: Viết CTC mang tên INCHAR để
thu 1 ký tự từ port nối tiếp & trả về mã ASCII 7-bit trong A. 
Sử dụng kiểm tra chẵn trong bit thứ 8 thu được và set cờ nhớ
bằng 1 nếu có lỗi chẵn lẻ?
Xung & Hoi 18
MAX 232
Xung & Hoi 19

File đính kèm:

  • pdfbai_giang_ky_thuat_vi_dieu_khien_lap_trinh_giao_tiep_noi_tie.pdf