Bài giảng môn 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

pdf19 trang | Chia sẻ: hoang10 | Lượt xem: 624 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Bài giảng môn Truyền thông nối tiếp, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
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. Lê Tiến Lộc TRƯỜNG ĐẠI HỌC LẠC HỒNG KHOA ĐIỆN – ĐIỆN TỬ Truyền Thông Nối Tiếp Từ PC Đến VĐK 1. Cấu Trúc Cổng COM 2. Xá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 3. Thiết Kế Giao Diện Và Viết Code Serial Trên Visual Basic 6.0 4. Mạch Chuyển Mức (IC Max232) 5. Truyền Nhận Nối Tiếp Trong 8051 6. Thiết Kế Mạch VĐK 8051 Và Viết Code Cấ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. - 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: -10V Mark 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 • 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 • 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 TXD TXD TXD RXD RXD RXD DTE1 DTE2 DTE DCE 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 Xá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 • 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. • 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 Thiế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: Đầ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 1 du lieu 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 • 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 Text1.Text = “” „Xóa các text box 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 nhan duoc ra text1 End If End Sub * 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. Mạ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. Truyề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 coù 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 • 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 Nế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 Chươ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 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 cheá ñoä 8bit töï ñoäng naïp laï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 LOOP: 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 phuïc vuï ngaét port noái tieá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öõ lieäu nhaän ñöôïc vaøo thanh ghi A CLR RI ;xoùa côø RETI ;keát thuùc ngaét TRANF: CLR TI RETI END