Bài Giảng Truyền Thông Nối Tiếp • Cấu Trúc Cổng Com • Chuẩn RS232 • Truyền Thông Nối Tiếp Trên VB • Truyền Thông Nối Tiếp Trên Vi Điều Khiển Ks.. Truyền Thông Nối Tiếp Từ PC Đến VĐK
Trang 1Bài Giảng Truyền Thông Nối Tiếp
• Cấu Trúc Cổng Com
• Chuẩn RS232
• Truyền Thông Nối Tiếp Trên VB
• Truyền Thông Nối Tiếp Trên Vi Điều Khiển
Ks Lê Tiến Lộc
TRƯỜNG ĐẠI HỌC LẠC HỒNG
KHOA ĐIỆN – ĐIỆN TỬ
Trang 2Truyền Thông Nối Tiếp Từ PC Đến
VĐK
Nối Tiếp Trên Visual Basic 6.0
3 Thiết Kế Giao Diện Và Viết Code Serial Trên Visual Basic 6.0
Trang 3Cấu Trúc Cổng COM
• Cổng nối tiếp trên máy tính thường được gọi là cổng COM có các ưu điểm sau:
- Hiệu điện thế giữa 2 mức có thể lên đến 50V (mức 1 từ: -3V -> -25V và mức 0 từ: +3V -> 25V) nên dây cable có thể truyền
đi xa hơn, ít bị nhiễu hơn
- Số lượng dây cần ít hơn so với truyền song song
- Một đường dẫn dùng để truyền (TXD) còn một đường dùng
để nhận (RXD) dữ liệu riêng biệt
- Có thể truyền không dây (dùng tia hồng ngoại)
- Ghép nối dễ dàng với VĐK hay PLC
Trang 4
- Tín hiệu truyền nối tiếp theo dạng xung chuẩn RS232 của EIA (Electronics Industry Associations) chỉ cho phép sử dụng đường
truyền ngắn , với tốc độ bit thấp (baudrate: 19.600 có khoảng cách cực đại 20m)
- Các chuẩn truyền thông nối tiếp ra đời sau như RS-422, RS-449 và RS-485 cho phép truyền trên đường cáp rất dài với tốc độ bit cao hơn
- Khuôn dạng tín hiệu truyền giữa 2 dây TXD và GND như sau:
Mức1
mức0 D0 D1 D2 D3 D4 D5 D6 D7 P Stop
+10V Space
- Các thiết bị ghép nối nối tiếp chia làm 2 loại DTE (Data Terminal Equipment) và DCE (Data Communication Equipment)
Sơ lược về chuẩn RS232
Trang 5• Cổng Com có 2 dạng đầu nối đực D-25 và D-9
D-25 D-9 Tên Tín hiệu Chiều Ý Nghĩa
2 3 TD, TXD, truyền dữ liệu Out Xuất dữ liệu nối tiếp
3 2 RD, RXD, nhận dữ liệu In Nhận dữ liệu nối tiếp
4 7 RTS, Request to send Out DTE sẵn sàng trao đổi dữ liệu
5 8 CTS, Clear to send In Modem sẵn sàng trao đổi dữ
liệu
6 6 DSR, Data set ready in Modem sẵn sàng kết nối
7 5 SG, Signal grourd Mass
8 1 CD, Carrier detect, phát
giác sóng mang
In Phát hiện có tín hiệu trên
đường dây
20 4 DTR, Data Teminal Ready Out DTE sẵn sàng kết nối
22 9 RI, Ring Indicator In Modem phát giác tín hiệu
chuông
Trang 6• Mô hình kết nối Thiết bị thu và phát trong truyền nhận nối tiếp: DTE: thiết bị phát hoặc nhận dữ liệu (VĐK, PLC, Computer…) DCE: thiết bị trung gian như modem kết nối, chân TXD của DCE đóng vai trò nhận tín hiệu còn RXD phát tín hiệu
TXD
RXD
Tên Địa chỉ gốc Ngắt Vector Com1 3F8 4 0000:0400 Com2 2F8 3 0000:0402 Com3 3E8 2 0000:0404 Com4 2E8 1 0000:0406
Trang 7Xác Lập Các Thông Số Cho Cổng Truyền Thông Nối Tiếp Trên Visual Basic 6.0
• Visual Basic 6.0 hỗ trợ module phục vụ cho truyền thông nối tiếp là
MSCOMM32.OCX
• Để đưa công cụ truyền thông nối tiếp vào Form ta làm theo các bước sau: Trong cửa sổ VB chọn Project – Components sau đó chọn Microsoft
comm control 6.0 -> OK (hay dùng phím tắt Ctr+T) Sau đó nhấp chọn biểu tượng Mscomm và đưa vào form
• Thuộc tính Commport có giá trị từ 1->16, giá trị mặc định là 1 khi khởi động
• Thuộc tính DTR Enabled = True (DTE sẵn sàng kết nối) ở mức 1 khi mở cổng, còn ngược lại DTR ở mức 0
* Thuộc tính Handshaking (giao thức bắt tay) 0: không bắt tay
1: XON/XOFF 2: bắt tay theo RTS/CTS 3: RTS/XON/XOFF`
* Thuộc tính Inbuffersize đặt và trả lại kích thước theo Byte bộ đệm thu, mặc định là 1024
Trang 8• Thuộc tính Index: Xác định phần tử thứ index của mảng (chỉ dùng khi thiết lập các control theo kiểu mảng)
• Thuộc tính InputLen: Xác định số ký tự sẽ đọc từ bộ đệm thu, nếu =0
sẽ đọc toàn bộ bộ đệm
• Thuộc tính InputMode: cho biết loại dữ liệu là văn bản hay nhị phân
• Thuộc tính NullDiscard: cho phép loại bỏ ký tự rỗng.loai bo khoang trong khi truyen
• Thuộc tính Outbuffersize đặt và trả lại kích thước theo Byte bộ đệm
truyền, mặc định là 512
• Thuộc tính ParityReplace: thiết lập ký tự sẽ thay thế khi khi bit kiểm tra chẳn lẻ phát hiện ra lỗi
• Thuộc tính Rthreshold: Đặt số byte tối thiểu của bộ đệm thu để báo sự kiện, bằng 1 sẽ gọi sự kiện oncomm khi nhận được 1 ký tự, bằng 0 sẽ không gọi
• Thuộc tính RTSEnabled: = True thì RTS ở mức 1 khi mở cổng, và mức
0 khi đóng cổng Nếu False RTS ở mức 0
Trang 9• Thuộc tính Sthreshold: Đặt số byte có trong bộ đệm truyền
để báo sự kiện, bằng 1 sẽ gọi sự kiện oncomm khi bộ đệm truyền rỗng, bằng 0 sẽ không gọi
• Thuộc tính Settings: Thiết lập tốc độ baud, bit chẳn lẻ, số bit truyền và bit stop
Các giá trị cho phép:
Baud rate: 110, 300, 600, 1200, 2400, 9600, 14400,
19200,28800, 38400, 56000, 128000, 256000
Parity bit: E(even), M(mark), N(none), O(odd)
Data bit: 4, 5, 6, 7, 8
Stop bit: 1, 1.5, 2
Giá trị mặc định khi không thiết lập là: 9600,n,8,1
Trang 10Thiết Kế Giao Diện Và Viết Code Serial Trên
Visual Basic 6.0
• Thiết kế giao diện như hình sau:
Trang 11Đầu tiên ta viết code cho sự kiện Form Load Private Sub Form_Load() 'Cac khai bao khi form hien len
MSComm1.CommPort = 1 'Chon cong Com1
MSComm1.Settings = "9600,N,8,1" 'Toc do truyen 9600, no parity, du lieu 8bit 1bit stop MSComm1.InputLen = 0 'Khong gioi han ky tu truyen MSComm1.RThreshold = 1 'Cho phep oncomm khi nhận
MSComm1.PortOpen = True 'Lenh mo cong com
End Sub ‘ket thuc su kien
Private Sub Command1_Click() 'Nut send tren chuong trinh
MSComm1.Output = Text2.Text
End Sub
Trang 12• Bây giờ ta nhấp double vào nut Stop và viết code sau:
Private Sub Command2_Click() 'Khi nut Stop duoc nhan thi
xoa tat ca cac text
Text2.Text = ""
End Sub
Private Sub MSComm1_OnComm() 'Co tin hieu vao cong
com
If (MSComm1.CommEvent = comEvReceive) Then
Text1.Text = Text1.Text & MSComm1.Input 'Xuat tin hieu
End If
End Sub
Trang 13* Phần trên là chương trình xuất nhập dữ liệu đơn giản qua cổng Com không có bắt tay bằng phần cứng cũng như phần mềm Ta có thể kiểm tra chương trình bằng cách nối 2 chân TXD và RXD ở cổng com lại rồi chạy thử chương trình Sau đó có thể bổ sung thêm thủ tục bắt tay bằng phần mềm
Trang 14Mạch Chuyển Mức (IC Max232)
• Do mức điện áp khác nhau nên khi ghép cổng Com máy tính với VĐK cần phải có mạch chuyền mức TTL -> 232 và ngược lại Ta thường dùng vi mạch Max232 vì chỉ cần cấp nguồn 5V, nguồn + -10V do mạch dao động 16KHz bên trong cung cấp
Trang 15Truyền Nhận Nối Tiếp Trong 8051
Trong Vi điều khiển cĩ chức năng ngắt truyền thơng nối tiếp để truyền và nhận dữ liệu Chân TXD(P3.1 phát) vào chân RXD(P3.0 thu) Thanh ghi điều khiển ngắt nối tiếp là
SCON và thanh ghi đệm dữ liệu là SBUF Địa chỉ ngắt nối
tiếp là 023H, bit cho phép ngắt là ES bit 4 trong thanh ghi
IE
• Thanh ghi SCON có 8 bit:
Bit Ký hiệu Địa Chỉ Ý Nghĩa
SCON.7 SM0 9FH Quy định chế độ hoạt động
SCON.6 SM1 9EH Quy định chế độ hoạt động
SCON.5 SM2 9DH Kích hoạt giao tiếp nhiều VĐK SCON.4 REN 9CH Cho phép nhận dữ liệu
SCON.3 TB8 9BH Bit thứ 9(bit kiểm tra) để truyền đi SCON.2 RB8 9AH Bit thứ 9 nhận được
SCON.1 TI 99H Mức 1 khi truyền xong 1 Byte
SCON.0 RI 98H Mức 1 khi nhận xong 1 Byte
Trang 16• Các Mode truyền nhận nối tiếp của 8051
Trong mode 1, baudrate được thiết lập bởi timer 1 có công thức tính như sau:
Baudrate = (timer 1 overflow)/n với n=32 nếu
SMOD=0
Smod là bit7 trong thanh ghi PCON với n=16 nếu
SMOD=1
SM0 SM1 MODE MÔ TẢ BAUDRATE
0 0 0 Shift Regster Tần số thạch anh/12
0 1 1 8-bit UART Quy định bởi Timer1
1 0 2 9-bit UART Tần số thạch anh/12 or 64
1 1 3 9-bit UART Quy định bởi Timer1
Trang 17Nếu sử dụng thạch anh 12MHz thì sẽ tồn tại sai số (26.04 ->26), sai số này sẽ tích lũy và gây nên những sai lệch dữ liệu Do đó muốn truyền nhận với độ chính xác cao hơn nên sử dụng thạch anh 11.0592MHz
Baudrate Thạch anh
(MHz)
SMOD TH1 Baudrate thật Sai số
9600 12.000 1 -7 8923 7%
2400 12.000 0 -13 2404 0.16%
1200 12.000 0 -26 1202 0.16%
19200 11.0592 1 -3 19200 0
9600 11.0592 0 -3 9600 0
2400 11.0592 0 -12 2400 0
1200 11.0592 0 -24 1200 0
Trang 18Chương trình mẫu truyền nhận nối tiếp trong 8051:
Chương trình này khi nhận được một ký tự trong ngắt nối tiếp thì trong main sẽ phát lại ký tự “A”
#include <REGX51.H>
DATAS EQU 30H
ORG 0000H
LJMP MAIN
ORG 0023H ;VECTOR NGAT PORT NOI TIEP
LJMP NGAT_SERIAL ;NHAY DEN PHUC VU NGAT
ORG 0030H
MAIN:
MOV PCON,#00000000B ;BIT 7 SMOD = 1 TANG TOC DO
MOV SCON,#50H ;01010010B TI BIT1=1 SAN SANG PHAT MOV TMOD,#00100000B ;timer1 chế độ 8bit tự động nạp lại MOV TH1,#-3
MOV IE,#10010000B ;bit4(ES) =1 cho phep ngat port noi tiep bit7=1cho phep ngat toan cuc
SETB TR1 ;bật cho timer1 run
SETB 00H ;bit nho nhận xong thi phát lại
Trang 19LOOP:
JB 00H,$ ;nhảy tại chỗ chờ nhận được ký tự thì phát A lại MOV A,#"A"
LCALL PHAT
SETB 00H
SJMP LOOP
PHAT:
MOV IE,#0
MOV SBUF,A ;dua gia tri thanh ghi A vao thanh ghi SBUF
JNB TI,$ ;co TI duoc set ngay sau khi phat xong 1 ky tu
CLR TI
MOV IE,#10010000B
RET
NGAT_SERIAL: ;Trình phục vụ ngắt port nối tiếp
JNB RI,TRANF ;co RI duoc set ngay sau khi nhan xong 1 ky tu
CPL P2.4
CLR 00H
MOV A,SBUF ;Đưa dữ liệu nhận được vào thanh ghi A
CLR RI ;xóa cờ
RETI ;kết thúc ngắt
TRANF:
CLR TI
RETI
END