1. Trình bày ưu, nhược điểm của trao đổi tin song song và yêu cầu trao đổi tin nối tiếp. 2. Phân loại trao đổi tin nối tiếp. Đặc điểm và ứng dụng của từng loại trong trao đổi tin thực tế.
3. So sánh chuẩn truyền nối tiếp RS-232C, RS-422A và RS-485.
4. So sánh các chế độ trao đổi tin không đồng bộ và đồng bộ, nêu đặc điểm và ứng dụngcủa từng loại.
5. Trao đổi tin trong máy vi tính IBM-PC và trên mạng máy tính (LAN, Internet, công nghiệp).
6. Vẽ giải thuật và viết chương trình trao đổi tin nối tiếp ở chế độ không đồng bộ cho máy PC-IBM với vi mạch Intel 8251/8250 bằng hợp ngữ.
8. Trình bày các cổng nối tiếp của máy PC-IBM hiện đại.
9. Trình bày các chuẩn kết nối đường dây vào máy tính,đầu nối ở bus USB.
10. Tổ chức đường dây:cách ghép nối, đường dây và ổ cắm vào máy vi tính, bộ truyền nhận, vi điều khiển USB 8x930 và phiên bản USB 2.0.
11. Trình bày phương thức trao đổi tin: dạng tin, thủ tục trao đổi tin, và các loại truyền dữ liệu của USB.
12. Tìm hiểu phần mềm SuperLink dùng ghép nối hai máy tính bằng cổng USB. 13. Trình bàyđặc điểm chuẩn bluetooth và cổng hồng ngoại.
CHƯƠNG 4
LẬP TRÌNH GIAO TIẾPMÁY TÍNH 4.1. Lập trình giao tiếp cổng song song
Cổng song song sử dụng để kết nối cácmáy tínhvới nhau để truyềndữ liệu, tuy nhiên chúng phải được hỗ trợ từhệ điều hànhhoặcphần mềm. Chúng chỉ thực hiện trên các máy tính công nghiệp vớihệ điều hànhcũ (Windows 95/98,một số máy tính công nghiệp chỉ cần đến vậy) hoặc các hệ thống cũ không hỗ trợ các cổng giao tiếp mới hơn. Các phần mềm hỗ trợ việc kết nối trực tiếp haimáy tínhnày có thể kể đến là: LapLink, PC Anywhere, NC...
4.1.1. Ghép nối hai máy tính bằng cổng song song
Hai máy tính có thể ghép với nhau qua cổng song song hay cổng nối tiếp để truyền sốliệu thông qua tiện ích Direct Cable Connection của Windows hay tiện tích tương tự của Norton Commander.
Quá trình giao tiếp dùng 2 chế độ chuẩn đó là chế độ SPP và chế độ mở rộng
1. Ghép nối song song
Dùng cáp nối với hai đầu đực DB25
Chân Chân D0 2 15 D1 3 13 D2 4 12 D3 5 10 D4 6 11 Error 15 2 Select 13 3 Paperout 12 4 ACK 10 5 Busy 11 6 GND 25 25
2. Ghép nối nối tiếp
Dùng cáp nối hai đầu cái DB9 hay DB25
9 chân 25 chân 25 chân 9 chân
GND 5 7 7 5 TxD 3 2 3 2 RTS 7 4 5 8 DSR 1,6 6 20 4 RxD 2 3 2 3 CTS 8 5 4 7 DTR 4 20 6 1-6
Truyền bằng đường song song nhanh gấp 8 lần đến mười lần truyền nối tiếp. Nếu cổng song song hai máy có cấu hình ECP thì vận tốc truyền còn nhanh hơn.
4.1.2. Lập trình giao tiếp cổng song song với ngoại vi sử dụng Led đơn
1. Mạch điều khiển Led đơn
Ta sẽ thiết kế một mạch đèn nháy gồm 8 led, việc nháy như thế nào (chạy đuổi, sáng dần, tắt dần…) là hoàn toàn phụ thuộc vào chương trình trên máy tính.
Mạch sử dụng 8 led, 8 điện trở, và một đầu nối 25 chân dương. Đa số các mạch dùng máy tính điều khiển đều có ưu điểm là đơn giản nhưng lại có rất nhiều chức năng.
Yêu cầu: Lập trình điều khiển 8 Led đơn nối với cổng máy in (LPT) của máy tính để bàn với yêu cầu 8 led đơn chớp tắt lặp lại liên tục. Biết rằng địa chỉ của thanh ghi dữ liệu là 378H, đầu ra tích cực ở mức cao.
+ Sơ đồ nguyên lý. S4 D0 D1 D2 D3 D4 D5 D6 D7 C0\ C1\ C2 C3\ C4 S3 S5 S6 S7\ D0 D1 D2 D3 D4 D5 D6 D7 1 14 2 15 3 16 4 17 5 18 6 19 7 20 8 21 9 22 10 23 11 24 12 25 13 J1 CONN-D25M
SO DO DIEU KHIEN 8 LED DON QUA THANH GHI DATA
A0 2 B0 18 A1 3 B1 17 A2 4 B2 16 A3 5 B3 15 A4 6 B4 14 A5 7 B5 13 A6 8 B6 12 A7 9 B7 11 CE 19 AB/BA 1 U1 74HC245 R1 1k D1 LED-RED R2 1k D2 LED-RED R3 1k D3 LED-RED R4 1k D4 LED-RED R5 1k D5 LED-RED R6 1k D6 LED-RED R7 1k D7 LED-RED R8 1k D8 LED-RED
Bước 1: Vẽ lưu đồ giải thuật
- Lưu đồ giải thuật có thể tham khảo như sau:
Bước 2: Viết chương trình
;Chuong trinh viet dang EXE
.MODEL small ;khai báo quy mô sử dụng chương trình là nhỏ .DATA ;khai bao doan du lieu
du_lieu db "chop tat 8 led don $" .STACK 100 ;khai bao doan ;***********************
.CODE ;khai bao doan ma
Main Proc ;bắt đầu chương trình chính ;dat cac thanh ghi doan
mov ax,data ;muon AX de nap dia chi du lieu vao thanh ghi doan du lieu mov ds,ax
;viet tiep doan ma cua ban vao day
Xác lập các khai báo Nạp địa chỉ cổng LPT Nạp AL =0 Xuất ra cổng LPT Tạo trễ Nạp AL =0FFH Xuất ra cổng LPT Tạo trễ Bắt đầu
lea dx,du_lieu ;nap du lieu vao dx
mov ah,9 ;ngat xuat du lieu lam trong ds ra man hinh( du lieu bat ;buoc ;ket thuc=$)
int 21h
; ngat cho doi nhan phim lap: mov dx,378h mov al,0 out dx,al call delay mov al,0ffh out dx,al call delay jmp lap ends
mov ax, 4ch ; thoat khoi he mo int 21h
delay: mov cx,1000 loop $
ret
ends main ;ket thuc viec hop dich chuong trinh
Trên máy tính có thể có tối đa đến 4 cổng song song và mỗi cổng cần 3 địa chỉ cho ba thanh ghi: dữ liệu, trạng thái, điều khiển. Tuy nhiên ta chỉ dùng thanh ghi dữ liệu và đối với máy tính thông thường thì địa chỉ của thanh ghi này là : 378H (cổng LPT1). Chương trình ở đây minh họa dãy led sáng tắt dần viết bằng Pascal, nếu bạn đã từng viết chương trình thì có thể tùy biến thành nhiều kiểu nháy khác nhau, còn nếu không biết viết chương trình thì cũng không sao, hãy mở Pascal và gõ đoạn chương trình sau rồi cho chạy.
Program LED; Uses CRT;
Var port_address :word; I : integer;
A : array[0..15]of byte ={$FF, $7F, $3F, $0F, $07, $03, $01, $00, $80, $A0, $E0, $F0, $F8, $FA, $FE};
Loop : boolean; Begin
Port_address:=$378; {có thể thay đổi tùy theo máy} Loop :=true; {lặp vòng}
I:=0;
While (loop) do Begin
If (I>15) then I:=0;
Port{port_address}:=a[I]; I:=I+1;
End; End.
2. Tạo xung vuông ở D0 (chân 2) của thanh ghi dữ liệu:
Sử dụng lập trìnhhợp ngữ : Mov dx, 378h; địa chỉ LPT1
Mov bx, const1; số xung được xuất ra Xuat_ra: mov al,1
Out dx, al; “high” ở chân 1 Mov al,0
Out dx, al;”low” ở chân 2 Cho_doi: mov cx,const2
Loop cho_doi; thời gian chờ, ấn định bằng const.2 Dec bx Jnz xuat_ra Bằng turbo C: For(i=1;i<=const1;i++) Outportb(0x378,0); Outportb(0x378,1); Delay(const2);
Hằng số 1 xác định số xung được xuất ra, hằng số 2 xác định số mili giây giữa hai xung kế tiếp.
Một đoạn chương trình tương ứng : For(i=1;i<=const.1;i++)
Outportb(0x378,0); Delay(const2); Outportb(0x378,1); Delay(const3);
Hằng số 1 xác định số xung được xuất ra, hằng số 2 xác định độ kéo dài của xung và hằng số 3 xác định độ trống của xung, cộng lại thành chu kì xung , lấy nghịch đảo ta nhận được tần số xung .
4.1.3. Lập trình ghép nối cổng song song với bộ điều khiển động cơ một chiều.
Lập trình điều khiển động cơ một chiều nối với cổng máy in ( LPT) của máy tính để bàn với yêu cầu động cơ quay thuận. Biết rằng địa chỉ của thanh ghi dữ liệu là 378H, đầu ra tích cực ở mức cao.
Card giao tiếp PC điều khiển động cơ DC 12V quay thuận nghịch.
Card giao tiếp bao gồm IC đệm 74244 các transistor làm nhiệm vụ điều khiển đảo chiều quay cho Motor. Nguồn cấp cho mạch là + 5V và +12V.
S4 D0 D1 D2 D3 D4 D5 D6 D7 C0\ C1\ C2 C3\ C4 D0 D1 D2 D3 D4 D5 D6 D7 S3 S5 S6 S7\ 1 14 2 15 3 16 4 17 5 18 6 19 7 20 8 21 9 22 10 23 11 24 12 25 13 J1 CONN-D25M A0 2 A1 4 A2 6 A3 8 OE 1 Y0 18 Y1 16 Y2 14 Y3 12 U1:A 74ALS244 A0 11 A1 13 A2 15 A3 17 OE 19 Y0 9 Y1 7 Y2 5 Y3 3 U1:B 74ALS244 DC CONTROLLER Q3 TIP31 Q4 TIP32 Q1 BC184 R2 1k R1 1k Q7 TIP32 Q8 BC184 R3 1k R4 1k +12V Q5 TIP31 Q2 BC184 Q6 BC184 +88.8
Hình 4.2 Mạch điều khiển động cơ một chiều
Viết chương trình
;Chuong trinh viet dang EXE
.MODEL small ;khai báo quy mô sử dụng chương trình là nhỏ .DATA ;khai bao doan du lieu
du_lieu db " Dong co một chiều quay thuan $" .STACK 100 ;khai bao doan
;***********************
.CODE ;khai bao doan ma
Main Proc ;bắt đầu chương trình chính
mov ax,data ;muon AX de nap dia chi du lieu vao thanh ghi doan du lieu mov ds,ax
mov ah,9 ;ngat xuat du lieu lam trong ds ra man hinh( du lieu bat buoc ;ket thuc=$) int 21h mov dx,378h mov al,00000001b out dx,al
mov ax, 4ch ; thoat khoi he mo int 21h
ends main ;ket thuc viec hop dich chuong trinh
4.2. Lập trình giao tiếp qua cổng nối tiếp
4.2.1. Phương thức giao tiếp máy tính
1. Giao tiếp PC với PC.
Cáp Null Modem dùng để kết nối hai máy tính với nhau hay máy tính với một thiết bị ngoại vi có giao diện tuần tự và dùng biên bản Zero Modem hay X modem để truyền dữ liệu.
Tín hiệu DSR nối với tín hiệu DTR tín hiệu RTS nối với CTS, bằng cách này giao diện của máy tính luôn hoạt động, dữ liệu được trao đổi qua đường TD và TR.
Hình 4.3 Sơ đồ giao tiếp PC với PC
2. Giao tiếp PC với thiết bị ngoại vi
- Sơ đồ giao tiếp đầu ra của cổng COM với thiết bị ngoại vi tương thích TTL.
Ta phải sử dụng vi mạch chuyển đổi MAX232 để chuyển thành vào ra TTL cho các chân RD và TD.
DCD DSR RD RTS TD CTS DTR RI O T D IR D T D R D DCD IRD DSR CTS RI OTD DTR RTS COM INTERFACE TTL 1 6 2 7 3 8 4 9 5 TO PC CONN-D9F T1IN 11 R1OUT 12 T2IN 10 R2OUT 9 T1OUT 14 R1IN 13 T2OUT 7 R2IN 8 C2+ 4 C2- 5 C1+ 1 C1- 3 VS+ 2 VS- 6 U1 MAX232 C1 1uF C2 1uF C3 1uF C4 1uF 1 2 3 4 5 6 IN CONN-SIL6 1 2 3 4 OUT CONN-H4
Hình 4.4 Sơ đồ giao tiếp PC với thiết bị ngoại vi
- Sơ đồ giao tiếp đầu ra của cổng COM với vi điều khiển 8051.
Ta phải sử dụng vi mạch chuyển đổi MAX232 để chuyển thành vào ra TTL cho các chân RD và TD vì vi điều khiển tương thích mức TTL , giao tiếp với PC qua hai chân đó là RXD ( nhận ) và TXD ( phát ).
4.2.2. Ngôn ngữ lập trìnhvà giao diệnmáy tính
1. Lập trình trong DOS a. Ngôn ngữ Qbasic:
Lệnh khởi động cổng COM n:
OPEN “COM n,[Baud], [Parity], [Data], [Stop]” for RANDOM as#m N=1,2,3,4; m=1255
Thí dụ : OPEN “COM 2, 9600, E, 7, 2” FOR RANDOM AS#1 Lệnh xuất ra một chuỗi :
PRINT #,S$
Lệnh đọc vào một chuỗi: INPUT #1, R$
Ngoài ra còn có cáclệnh truy xuất thanh ghi của vi mạch UART.
b. Ngôn ngữ Pascal và C:
Dùng các lệnh truy xuất thanh ghi.
c. Trong MsDOS ở dòng lệnh đánh :
MODE COM n : 96, E, 7, 1 sẽ mở COM n.
Ngôn ngữ Visual Basic có modul phần mềm MSCOMM.OC phục vụ cho truyền thông, với Visual Basic 4.0 là MSCOMM16.OCX còn với Visual Basic 6.0 là MSCOMM32.OCX.
a. Sử dụng MSComm
MSComm l yêu cầu điều khiển cho thông tin trong cổng nối tiếp
Cài đặt:
ActiveX MsComm được bổ sung vo một Visual Basic Project thông qua menu
Project > Components
Tính chất
MSComm: có một số tính chất liên kết. Tính chất liên hệ tới cấu hình của port, truyền dữ liệu, sử dụng tín hiệu bắt tay, và nhận ra điều khiển
Cấu trúc:
CommID: tra lại việc điều khiển khi nhận ra thiết bị Commport: đặt và trả lại vị trí của port
Inbuffersize: đặt và trả lại kích thước của bộ đệm.(bằng byte)
Inputlen: đặt và trả lại những con số hoặc những ký tự ở ngõ vào sẽ đọc
Inputmode: đặt và trả lại kiểu dữ liệu.(dạng chữ hay nhị phn) trả lại bằng ngõ vào hay được đồng ý ở ngõ ra
Nulldiscard: xác định ký tự có rỗng hay không. (Chr.(0).) đã được truyền từ port tới bộ đệm nhận hoặc được bỏ qua
Outbuffersize: đặt và trả lại kích thước của bộ đệm truyền (khoảng 512 byte) Parityreplace: kiểm tra cờ chẵn lẻ
Portopen: đặt và trả lại trạng thái của port. (giá trị boolean)
Rthreshold: đặt và trả lại một số hoặc ký tự tới bộ nhận trước khi so sánh tới comEvReceive
Settings: đặt và trả lại tốc độ truyền, cờ chẵn lẻ và dữ liệu vả bit stop
Sthreshold: đặt và trả lại số hoặc ký tự nhỏ nhất trong bộ đệm truyền trước khi so sánh với comevsend
b. Phần truyền dữ liệu:
Commevent: trả lại hầu hết các sự kiện hoặc lỗi gần đây Inbuffercount: trả lại một số hay ký tự trong bộ đệm truyền Input: trả lại vả xóa dữ liệu từ bộ đệm truyền
Outbuffercount: trả lại một số hoặc một ký tự trong bộ đệm truyền Output: ghi dữ liệu ra bộ đệm truyền
c. Phần điều khiển có sự bắt tay
Break: đặt hoặc xóa đi tín hiệu bị hỏng Cdholding: trả lại trạng thi của CD
CTSHoding: trả lại trạng thi của CTS DSRHolding: trả lại trạng thi của DSR DTREnable: đặt hoặc xóa DTR
Handshaking: đặt vả trả lại chuẩn bắt tay RTSEnable: đặt và xóa RTS
Ví dụ:
Private Sub Form_Load Dim Buffer$ as string
‘Dùng COM1, 9600 baud, không parity, 8 bit data, 1 bit stop MSComm1.Comport=1
MSComm1. Settings=”9600, N, 8, 1” ‘Đọc toàn bộ bộ đệm
MSComm1. Inputlen=0
‘Mở cổng và gửi lệnh đến modem chế độ trả lời bằng chữ MSComm1.PortOpen=True
MSComm1.Output=”ATV1Q0” & Chr$(13) ‘Chờ trả lời “Ok”, nếu có Ok thì đóng cổng Do
DoEvents
Buffer$=Buffer$ & MSComm1.Input Loop Until InStr (Buffer$, “OK”&vbCrLf) MSComm1.PortOpen=False
End Sub
Chương trình trên dùng kỹ thuật hỏi vòng. Ta có thể dùng kỹ thuật sự kiện object.commevent. Khi có sự kiện xảy ra chương trình cho cổng object_oncomm() sẽ được gọi để xử lý các sự kiện hay các lỗi.
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent
‘Xử lý sự kiện hay lỗi bằng cách đặt lệnh dưới mỗi phát biểu Case ‘Lỗi
Case ComEventBreak ‘Nhận Break Case ComEventFrame ‘Sai frame Case ComEventOverrun ‘Mấtdữ liệu Case ComEventRXOver ‘Đệm thu tràn Case ComEventRXParity ‘Sai parity Case ComEventTXFull ‘Đệm phát đầy Case ComEventDCB ‘Sai khi đọc DCB
‘Sự kiện
Case ComEvCD ‘Đường CD thay đổi Case ComEvCTS ‘CTS thay đổi
Case ComEvDSR ‘DSR thay đổi từ 1 xuống 0 Case ComEvRing ‘RI thay đổi
Case ComEvReceive ‘Số byte đệm thu đạt mức Rthreshold Case ComEvSend ‘Số byte đệm phát ít hơn Sthreshold
Case ComEvEOF ‘Nhận ký tự EOF kết thúc file (mã ASCII 26) trong chuỗi nhập End Select
End Sub
3. Lập trình dùng ngôn ngữ lậptrình DELPHI 5.0 và VISUAL C++ 6.0
Hai ngôn ngữ này dùng các hàm của Win API32.
Do tính chất phức tạp của các hàm và giới hạn của giáo trình, xin trình bày vắn tắt để áp dụng vào chương trình trong Delphi. Chi tiết có thể đọc trong Win 32 Program Reference.
Mở cổng COM dùng hàm Createfile, hàm này trả về một biến (handle). Nếu không mở cổng đuợc biến trả về -1 ,đóng cổng dùng closehandle biến trả về là khác
zero, nếu trả về zero là có lỗi.
Get Commstate lấy cấu hình hiện tại của cổng cất vào khối DCB(device control block).
Set Commstate đặt cấu hình cổng theo nội dung của DCB. Purge Comm_ xoá bộ đệm vào ra, chấm dứt đọc , viết. Writefile viết data (xuất ra cổng com).
Readfile đọc cổng.
EscapeCommFinetion đặt và xóa RTS hay DTR.
4. Lập trình truy xuất trực tiếp cổng.
- Để lập trình điều khiển thiết bị ngoại vi bằng phương pháp truy xuất trực tiếp cổng ta phải nắm được địa chỉ cổng cần truy xuất, các thanh ghi điều khiển, phương thức truyền, định dạng khung dữ liệu...
- Ngôn ngữ lập trình viết trên dos của Windows.
5. Lập trình truy xuất gián tiếp thông qua driver.