Bài giảng Đo lường và điều khiển bằng máy tính - Chương 8: Lập trình giao tiếp nối tiếp

Chöông  
8
LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
8.1 LAÄP TRÌNH TRONG DOS:  
Ngoân ngöõ QBASIC  
Leänh khôûi ñoäng coång COM n:  
OPEN “COM n, [Baud], [Parity], [Data], [Stop]” for RANDOM  
as #m trong ñoù n = 1, 2, 3, 4; m = 1 ÷ 255  
Ví duï: OPEN “COM 2, 9600, E, 7, 2” FOR RANDOM AS #1  
Leänh xuaát ra moät chuoãi S $  
PRINT #1 , S $  
Leänh ñoïc vaøo moät chuoãi R $  
INPUT # 1, R $  
Ngoaøi ra coøn caùc leänh truy xuaát thanh ghi cuûa vi maïch UART  
Ngoân ngöõ Pascal vaø C  
Duøng caùc leänh truy xuaát thanh ghi nhö ôû chöông 7  
Trong MS DOS ôû doøng leänh ñaùnh  
MODE COM n : 96, E, 7, 1 seõ môû COM n  
8.2 LAÄP TRÌNH NGOÂN NGÖÕ VISUAL BASIC 6.0  
Ngoân ngöõ Visual Basic coù module phaàn meàm MSCOMM.OCX  
phuïc vuï cho truyeàn thoâng, vôùi Visual Basic 4.0 laø MSCOMM16.OCX  
coøn vôùi Visual Basic 6.0 laø MSCOMM32.OCX  
Muoán caøi trình ñôn truyeàn thoâng vaøo thanh coâng cuï ta vaøo  
Project- Components – Controls choïn Microsoft Comm Control  
6.0/ OK (Hình 8.1), bieåu töôïng hình ñieän thoaïi seõ hieän treân thanh  
coâng cuï. Coù theå nhaép chuoät keùp ñeå ñöa vaøo form cuûa chöông  
trình. Caùc böôùc treân coù theå laøm taét baèng phím Ctrl T. Thaønh  
phaàn Comm khi môùi ñöa vaøo form thöôøng ñöôïc gaùn teân MSComm1  
cho coång Com1 vaø ta coù theå söûa teân hay thay ñoåi coång com tuøy y.ù  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 211  
Caùc tính chaát chính cuûa trình ñôn laø Commport, DTREnable,  
EOFEnable, Handshaking, InBuffersize, InputLen, InputMode,  
NullDiscard, OutBuffersize, ParityReplace, Rthreshold, RTSEnable,  
Settmgs, Sthreshold… ñöôïc ñaët khi vieát chöông trình, coù theå thay  
ñoåi khi chaïy chöông trình baèng caùc leänh ñieàu khieån.  
Tính chaát CommPort  
Ñaët coång com ñöôïc söû duïng  
Object.CommPort [= Value]  
Value = 1 ñeán 16, maëc ñònh laø 1 khi khôûi ñoäng Visual Basic.  
Tính chaát naøy phaûi ñaët tröôùc khi môû coång, neáu bieåu thöùc  
trong ngoaëc khoâng coù thì traû veà soá coång com ñang hoaït ñoäng.  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 212  
Ñaët caáu hình coång  
Object.Settings [= Value]  
Value = “BBBB, P, D, S”  
Gía trò maëc ñònh laø “9600, N, 8, 1”. Trong tröôøng hôïp ñaët sai giaù  
trò seõ baùo söï coá.  
Sau ñaây laø caùc giaù trò cho pheùp:  
•
•
Baud rate: 110, 300, 600, 1200, 2400, 9600 (Default), 14400,  
19200, 28800, 38400, 56000, 128000, 256000  
Parity bit: E (even), M (Mark), N (Default), O (odd), S  
(Space)  
•
•
Data bit: 4, 5, 6, 7, 8 (Default)  
Stop bit: 1, 1.5, 2  
Ví duï:  
MSComm2. Settings = “9600, N, 8, 1”  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 213  
Môû coång  
Object.PortOpen [= True/ False]  
Value = True : môû coång  
Value = False : ñoùng coång vaø xoùa boä ñeäm truyeàn thu,  
Coång töï ñoäng ñoùng khi keát thuùc chöông trình aùp duïng.  
Nhaäp döõ lieäu  
String$= Object.Input  
Döõ lieäu chuoãi ôû boä ñeäm thu ñöôïc ñoïc vaøo bieán String$ . Lieân  
quan ñeán ñoïc döõ lieäu coù caùc leänh sau:  
Object.InputLen [= numByte%]  
InputLen: qui ñònh soá kyù töï ñoïc bôûi Input. Choïn InputLen =  
0 seõ cho ñoïc toaøn boä vuøng boä ñeäm.  
Object.InbufferSize = [numbyte%]  
InBufferSize ñaët vaø traû veà kích thöôùc theo byte cuûa ñeäm thu,  
maëc ñònh laø 1024.  
Object.InbufferCount [= Count%]  
InbufferCount: cho bieát soá kyù hieäu coù trong boä ñeäm nhaän. Xoùa  
boä ñeäm baèng caùch cho InbufferCount = 0  
Object.InputMode [= value]  
InputMode: cho bieát loaïi döõ lieäu laø vaên baûn hay nhò phaân  
Value = 0 : ComInputModeText  
Value = 1 : ComInputModeBinary  
Ví duï:  
Dim Buffer as Variant  
Dim Arr() as Byte  
MSComm1.CommPort = 1  
MSComm1.PortOpen = True  
‘Set InputMode to read binary data  
MSComm1.InputMode = comInputModeBinary  
Do Until MSComm1.InBufferCount > 10  
DoEvents  
Loop  
Buffer = MSComm1.Input  
' Assign to byte array for processing  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 214  
Arr = Buffer  
Xuaát döõ lieäu  
Object.Output [= value]  
Xuaát chuoãi kyù töï hay chuoãi nhò phaân ra coång COM.  
Gioáng nhö nhaäp döõ lieäu ta coù caùc leänh hoã trôï.  
OutBufferSize: ñaët vaø traû laïi kích thöôùc boä ñeäm truyeàn  
OutBufferCount: traû laïi soá kyù töï trong boä ñeäm truyeàn.  
Ví duï: gôûi kyù töï nhaán phím  
Private Sub Form_KeyPress (KeyAscii As Integer)  
Dim Buffer as Variant  
MSComm1.CommPort = 1  
MSComm1.PortOpen = True  
Buffer = Chr$(KeyAscii)  
MSComm1.Output = Buffer  
End Sub  
Ví duï:  
‘ gôûi chuoãi kyù töï  
MsComm1.Output = "This is a text string”  
‘ gôûi soá nhò phaân  
Dim Out( ) As Byte  
MsComm1.Output = Out  
Gôûi tín hieäu Break  
object.Break [= True/False]  
Ñoïc chaân DCD  
inCD= object. CDHolding  
neáu inCD True thì DCD ôû möùc cao, neáu False DCD ôû möùc  
thaáp.  
Ñaët thôøi gian chôø soùng mang  
object. CDTimeout [= milliseconds]  
Chôø khoaûng thôøi gian cho DCD ôû möùc cao, neáu heát thôøi gian  
maø CDHolding = false thì taïo söï kieän onComm CDTO (carrier  
detect Timeout Error).  
Ñoïc CTS  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 215  
object. CTS Holding  
True: möùc 1, False: möùc 0  
Ñaët thôøi gian chôø CTS  
Khi DTE gôûi RTS thì modem phaûi gôûi traû laïi CTS, tính chaát  
object. CTSTimeout ñònh thôøi gian chôø, neáu quaù thôøi gian ñoù maø  
khoâng coù CTS thì taïo söï kieän CTSTO.  
Ñoïc DSR  
object. DSRHolding  
Ñaët thôøi gian chôø DSR  
object. DSRTimeout  
Ñieàu khieån DTR  
object. DTREnable [=True/False] neáu True thì DTR möùc 1 khi  
môû coång vaø möùc 0 khi ñoùng coång, neáu False thì DTR ôû möùc 0  
Ñieàu khieån RTS  
object. RTSEnable [ =True/False]  
Khi True RTS seõ ôû möùc 1 khi môû coång vaø möùc 0 khi ñoùng  
coång  
Sthreshold: ñaët soá byte coù trong boä ñeäm truyeàn ñeå baùo söï kieän.  
Neáu Sthreshold = 1 thì seõ goïi onComm khi boä ñeäm truyeàn  
roãng.  
Neáu Sthreshold = 0 thì khoâng goïi.  
Ñaët soá byte cuûa boä ñeäm thu toái thieåu ñeå baùo söï kieän  
object. Rthreshold [= value]  
Neáu ñaët baèng 1 thì seõ goïi onComm khi nhaän ñöôïc 1 kyù töï.  
Neáu ñaët baèng 0 thì khoâng goïi.  
Giao thöùc baét tay  
object.Handshaking [= value]  
Value = 0 khoâng baét tay  
Value = 1 baét tay theo RTS/CTS  
= 2  
= 3  
XON/XOFF  
RTS/XON/XOFF  
Ví duï:  
Private Sub Form_Load ( )  
Dim Buffer$ as string  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 216  
‘ Duøng COM 1, 9600 baud, khoâng parity, 8 bit data, 1 bit stop  
MSComm1. Comport = 1  
MSComm1. Settings = “9600, N, 8, 1”  
‘ Ñoïc toaøn boä boä ñeäm  
MSComm1. Inputlen = 0  
‘ Môû coång vaø gôûi leänh ñeán modem cheá ñoä traû lôøi baèng chöõ  
MSComm1. PortOpen = True  
MSComm1. Output = “ATV1Q0” & Chr$(13)  
‘ Chôø traû lôøi “OK”, neáu coù OK thì ñoùng coång  
Do  
DoEvents  
Buffer$ = Buffer$ & MSComm1. Input  
Loop Until InStr (Buffer$, “OK” & vbCrLf)  
MSComm1. PortOpen = False  
End Sub  
Chöông trình treân duøng kyõ thuaät hoûi voøng. Ta coù theå duøng kyõ  
thuaät söï kieän object.CommEvent. Khi coù söï kieän xaûy ra chöông  
trình cho coång object_OnComm () seõ ñöôïc goïi ñeå xöû lyù caùc söï kieän  
hay caùc loãi.  
Ví duï:  
Private Sub MSComm1_OnComm ( )  
Select Case MSComm1. CommEvent  
‘ Xöû lyù söï kieän hay loãi baèng caùch ñaët leänh döôùi moãi phaùt bieåu Case  
‘ Loãi  
Case ComEventBreak ‘Nhaän Break  
Case ComEventFrame ‘Sai frame  
Case ComEventOverrun ‘Maát döõ lieäu  
Case ComEventRXOver ‘Ñeäm thu traøn  
Case ComEventRXParity ‘Sai Parity  
Case ComEventTXFull ‘Ñeäm phaùt ñaày  
Case ComEventDCB ‘Sai khi ñoïc DCB  
‘ Söï kieän  
Case ComEvCD ‘Ñöôøng CD thay ñoåi  
Case ComEvCTS ‘CTS thay ñoåi  
Case ComEvDSR ‘DSR thay ñoåi töø 1 xuoáng 0  
Case ComEvRing ‘RI thay ñoåi  
Case ComEvReceive ‘Soá byte ñeäm thu ñaït möùc Rthreshold  
Case ComEvSend ‘Soá byte ñeäm phaùt ít hôn Sthreshold  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 217  
Case ComEvEOF ‘Nhaän kyù töï EOF keát thuùc file (maõ ASCII 26) trong chuoãi nhaäp  
End Select  
End Sub.  
Caùc loãi khi söû duïng MSComm trình baøy trong baûng sau  
Loãi  
Gía trò  
Mieâu taû  
comInvalidPropertyValue 380  
Sai thuoäc tính  
comSetNotSupported  
comGetNotSupported  
comPortOpen  
383  
394  
Thuoäc tính chæ ñoïc  
Thuoäc tính chæ ñoïc  
Khoâng thöïc hieän khi coång ñaõ môû  
Gía trò Timeout phaûi lôùn hôn 0  
Soá coång khoâng giaù trò  
Thuoäc tính chæ coù khi chöông trình chaïy  
Thuoäc tính chæ ñoïc khi chöông trình chaïy  
Coång ñaõ môû roài  
Soá nhaän daïng thieát bò khoâng phuø hôïp  
Vaän toác truyeàn khoâng phuø hôïp  
Soá byte ñaõ ñaët khoâng giaù tri  
Thoâng soá maëc ñònh sai  
8000  
8001  
8002  
8003  
8004  
8005  
8006  
8007  
8008  
8009  
8010  
8011  
8012  
8013  
8014  
comPortInvalid  
comPortAlreadyOpen  
Thieát bò khoâng coù saün  
The function cannot allocate the queues  
Thieát bò khoâng môû  
comNoOpen  
Thieát bò ñaõ môû  
Could not enable comm notification  
Khoâng theå ñaët traïng thaùi truyeàn thoâng  
Khoâng theå ñaït maët naï che  
comSetCommStateFailed 8015  
8016  
comPortNotOpen  
8018  
8019  
8020  
8021  
Hoaït ñoäng chæ thöïc hieän khi coång môû  
Thieát bò baän  
Error reading comm device  
Internal error retrieving device control block for the port  
comReadError  
comDCBError  
Ví duï: chöông trình quay soá ñieän thoaïi qua modem  
Option Explicit  
' Variable names beginning with A through Z default to Integer.  
DefInt A-Z  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 218  
Dim CancelFlag, Default$  
Private Sub CancelButton_Click()  
' CancelFlag tells the Dial procedure to exit.  
CancelFlag = True  
CancelButton.Enabled = False  
End Sub  
Private Sub Dial(Number$)  
Dim DialString$, FromModem$, dummy, i As Double  
i = 0  
DialString$ = "ATDT" + Number$ + vbCr  
' Dial the number.  
MSComm1.Output = DialString$  
' Wait for "OK" to come back from the modem.  
Do  
i = i + 1  
dummy = DoEvents()  
' If there is data in the buffer, then read it.  
If MSComm1.InBufferCount Then  
FromModem$ = FromModem$ + MSComm1.Input  
' Check for "OK".  
If InStr(FromModem$, "OK") Then  
' Notify the user to pick up the phone.  
Beep  
MsgBox "Please pick up the phone and either press Enter or click OK"  
Exit Do  
End If  
End If  
' Did the user choose Cancel?  
If i > 100000 Then  
Beep  
MsgBox "TimeOut, Please check cable and modem"  
Exit Do  
End If  
If CancelFlag Then  
CancelFlag = False  
Exit Do  
End If  
Loop  
' Disconnect the modem.  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 219  
MSComm1.Output = "ATH" + vbCr  
End Sub  
Private Sub DialButton_Click()  
Dim Number$, Temp$  
DialButton.Enabled = False  
QuitButton.Enabled = False  
CancelButton.Enabled = True  
' Get the number to dial.  
Number$ = InputBox$("Enter phone number:", , Default$)  
If Number$ = "" Then  
DialButton.Enabled = True  
QuitButton.Enabled = True  
CancelButton.Enabled = False  
Exit Sub  
End If  
Temp$ = Status  
Default$ = Number$  
Status = "Dialing - " + Number$  
' Dial the selected phone number.  
Dial Number$  
DialButton.Enabled = True  
QuitButton.Enabled = True  
CancelButton.Enabled = False  
Status = Temp$  
End Sub  
Private Sub Form_Load()  
Default$ = "8654357"  
MSComm1.CommPort = 1  
MSComm1.Settings = "9600,N,8,1"  
On Error Resume Next  
MSComm1.PortOpen = True  
If Err Then  
MsgBox "COM1: not available. Change the CommPort property to another port."  
Exit Sub  
End If  
MSComm1.InBufferCount = 0  
MSComm1.InputLen = 0  
End Sub  
Private Sub QuitButton_Click()  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 220  
' Close the port.  
MSComm1.PortOpen = False  
End  
End Sub  
Ví duï: gheùp noái vi ñieàu khieån 8951 ñieàu khieån port 0  
ORG 0000H  
MOV IE,#00000000B  
MOV TMOD,#00100000  
MOV TL1#,0FDH  
MOV TH1,#0FDH  
MOV SCON,#01010000B  
SETB TR1  
MOV P0,#00000000B  
INDEX:  
ACALL SUB_RXD  
ACALL LEDOFF  
ACALL LED1  
ACALL LED2  
ACALL LED3  
ACALL LED4  
ACALL LED5  
ACALL LED6  
ACALL LED7  
SJMP INDEX  
JNB RI,$  
RXD :  
CLR RI  
MOV A,SBUF  
RET  
LEDOFF:  
LED1:  
CJNE A,#30H,NEXT  
MOV P0,#00000000B  
ACALL SUB_TXD  
SJMP INDEX  
CJNE A,#31H,NEXT  
CPL P0.0  
ACALL SUB_TXD  
SJMP INDEX  
CJNE A,#32H,NEXT  
CPL P0.1  
LED2:  
ACALL SUB_TXD  
SJMP INDEX  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 221  
LED3:  
LED4:  
LED5:  
LED6:  
LED7:  
CJNE A,#33H,NEXT  
CPL P0.2  
ACALL SUB_TXD  
SJMP INDEX  
CJNE A,#34H,NEXT  
CPL P0.3  
ACALL SUB_TXD  
SJMP INDEX  
CJNE A,#35H,NEXT  
CPL P0.4  
ACALL SUB_TXD  
SJMP INDEX  
CJNE A,#36H,NEXT  
CPL P0.5  
ACALL SUB_TXD  
SJMP INDEX  
CJNE A,#37H,NEXT  
CPL P0.6  
ACALL SUB_TXD  
SJMP INDEX  
RET  
NEXT:  
TXD :  
MOV SBUF,#43  
JNB TI,$  
CLR TI  
RET  
END  
Chöông trình maùy tính  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 222  
Private Sub Command8_Click() ‘ Communication Setting  
On Error GoTo Errlabel  
MSComm1.Settings = Text1.Text  
MSComm1.CommPort = Combo1.ListIndex + 1  
MSComm1.RThreshold = 1  
MSComm1.PortOpen = True  
MSComm1.InputLen = 0  
Exit Sub  
Errlabel:  
If Err.Number = 8002 Then MsgBox "Select com Port", vbInformation, "8051 Control I/O"  
End Sub  
Private Sub Command1_Click()  
MSComm1.Output = "1"  
valLED1 = Not valLED1  
End Sub  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 223  
Private Sub Command2_Click()  
MSComm1.Output = "2"  
valLED2 = Not valLED2  
End Sub  
Private Sub Command3_Click()  
MSComm1.Output = "3"  
valLED3 = Not valLED3  
End Sub  
Private Sub Command4_Click()  
MSComm1.Output = "4"  
valLED4 = Not valLED4  
End Sub  
Private Sub Command5_Click()  
MSComm1.Output = "5"  
valLED5 = Not valLED5  
End Sub  
Private Sub Command6_Click()  
MSComm1.Output = "6"  
valLED6 = Not valLED6  
End Sub  
Private Sub Command7_Click()  
MSComm1.Output = "7"  
valLED7 = Not valLED7  
End Sub  
Private Sub Command9_Click()  
MSComm1.Output = "0"  
valLED = Not valLED  
End Sub  
Private Sub MSComm1_OnComm()  
Select Case MSComm1.CommEvent  
Case comEvReceive  
Dim Buffer As Variant  
Buffer = MSComm1.Input  
Label2.Caption = "Return = " & Buffer  
If Buffer = "C" Then  
If valLED = True Then  
For x = 0 To 7 Step 1  
Shape1(x).FillColor = &HFFFFFF  
Next  
Shape1(0).FillColor = &HFF&  
valLED1 = False  
valLED2 = False  
valLED3 = False  
valLED4 = False  
valLED5 = False  
valLED6 = False  
valLED7 = False  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 224  
Command9.Caption = "ON ALL"  
Exit Sub  
Else  
Shape1(0).FillColor = &HFFFFFF  
Command9.Caption = "OFF ALL"  
End If  
If valLED1 = True Then  
Shape1(1).FillColor = &HFF&  
Else  
Shape1(1).FillColor = &HFFFFFF  
End If  
If valLED2 = True Then  
Shape1(2).FillColor = &HFF&  
Else  
Shape1(2).FillColor = &HFFFFFF  
End If  
If valLED3 = True Then  
Shape1(3).FillColor = &HFF&  
Else  
Shape1(3).FillColor = &HFFFFFF  
End If  
If valLED4 = True Then  
Shape1(4).FillColor = &HFF&  
Else  
Shape1(4).FillColor = &HFFFFFF  
End If  
If valLED5 = True Then  
Shape1(5).FillColor = &HFF&  
Else  
Shape1(5).FillColor = &HFFFFFF  
End If  
If valLED6 = True Then  
Shape1(6).FillColor = &HFF&  
Else  
Shape1(6).FillColor = &HFFFFFF  
End If  
If valLED7 = True Then  
Shape1(7).FillColor = &HFF&  
Else  
Shape1(7).FillColor = &HFFFFFF  
End If  
End If  
End Select  
Errlabel:  
Exit Sub  
End Sub  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 225  
8.3 LAÄP TRÌNH DUØNG DELPHI 5.0 VAØ VISUAL C++6.0  
MSComm coù theå caøi trong Delphi theo caùc böôùc sau:  
Vaøo menu Component – Import ActiveX Control -- Microft  
Comm Control 6.0 – Install ñeå caøi MSComm vaøo ActiveX. Sau ñoù  
vaøo toolbar ActiveX. tìm icon ñieän thoaïi ñeå keùo vaøo Form.  
Caùc leänh MSComm trong Delphi töông töï trong Visual Basic  
Ñoái vôùi Visual C thì laäp trình MSComm phöùc taïp hôn, sau  
ñaây laø ví duï caøi ñaët MSComm trong Visual C  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 226  
Caøi ñaët MSCOMM trong Visual C  
Neáu muoán theâm component truyeàn thoâng noái tieáp vaøo project  
baïn vaøo menu Project- Add to Project- Components and Controls  
Gallery  
Choïn muïc Registered ActiveX Controls – Microsoft Communication  
Controls, version 6.0- Insert. Hình bieåu töôïng ñieän thoaïi xuaát  
hieän treân thanh Control.  
Laäp trình MSCOMM trong Visual C++ phöùc taïp hôn laäp trình  
trong Visual Basic vaø Delphi, caùc haøm cuûa lôùp CMScomm ñöôïc  
ñònh nghóa trong mscomm.h, sau ñaây laø moät ñoaïn trong file naøy  
caàn tham khaûo ñeå goïi haøm cho ñuùng  
void SetCDHolding(BOOL bNewValue);  
BOOL GetCDHolding();  
void SetCommID(long nNewValue);  
long GetCommID();  
void SetCommPort(short nNewValue);  
short GetCommPort();  
void SetCTSHolding(BOOL bNewValue);  
BOOL GetCTSHolding();  
void SetDSRHolding(BOOL bNewValue);  
BOOL GetDSRHolding();  
void SetDTREnable(BOOL bNewValue);  
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 227  
BOOL GetDTREnable();  
void SetHandshaking(long nNewValue);  
long GetHandshaking();  
void SetInBufferSize(short nNewValue);  
short GetInBufferSize();  
void SetInBufferCount(short nNewValue);  
short GetInBufferCount();  
void SetBreak(BOOL bNewValue);  
BOOL GetBreak();  
void SetInputLen(short nNewValue);  
short GetInputLen();  
void SetNullDiscard(BOOL bNewValue);  
BOOL GetNullDiscard();  
void SetOutBufferSize(short nNewValue);  
short GetOutBufferSize();  
void SetOutBufferCount(short nNewValue);  
short GetOutBufferCount();  
void SetParityReplace(LPCTSTR lpszNewValue);  
CString GetParityReplace();  
void SetPortOpen(BOOL bNewValue);  
BOOL GetPortOpen();  
void SetRThreshold(short nNewValue);  
short GetRThreshold();  
void SetRTSEnable(BOOL bNewValue);  
BOOL GetRTSEnable();  
void SetSettings(LPCTSTR lpszNewValue);  
CString GetSettings();  
void SetSThreshold(short nNewValue);  
short GetSThreshold();  
void SetOutput(const VARIANT& newValue);  
VARIANT GetOutput();  
void SetInput(const VARIANT& newValue);  
VARIANT GetInput();  
void SetCommEvent(short nNewValue);  
short GetCommEvent();  
void SetEOFEnable(BOOL bNewValue);  
BOOL GetEOFEnable();  
void SetInputMode(long nNewValue);  
long GetInputMode();  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Taùc giaû: TS Nguyeãn Ñöùc Thaønh  
Trang 228  
Ví duï muoán truyeàn chuoãi what ta duøng ñoaïn leänh sau  
CString strOutput = "What";  
UCHAR myData = 0x00;  
strOutput += myData;  
m_Comm.SetPortOpen(true); // môû coång  
m_Comm.SetOutput(COleVariant(strOutput));  
Sau ñaây trình baøy phaàn chính cuûa chöông trình serialDlg.cpp  
giao tieáp qua coång Com, môøi caùc baïn phaân tích yù nghóa caùc doøng  
leänh, ñeà nghò tham khaûo theâm höôùng daãn cuûa VC++  
// serialDlg.cpp : implementation file  
BOOL CSerialDlg::OnInitDialog()  
{
CDialog::OnInitDialog();  
SetIcon(m_hIcon, TRUE);  
SetIcon(m_hIcon, FALSE);  
// Set big icon  
// Set small icon  
if(m_ctlMSCOMM1.GetPortOpen()) m_ctlMSCOMM1.SetPortOpen(FALSE);  
m_ctlMSCOMM1.SetCommPort(1); //ñaët caáu hình port  
m_ctlMSCOMM1.SetSettings("9600,n,8,1");  
m_ctlMSCOMM1.SetInputMode(0);  
m_ctlMSCOMM1.SetRThreshold(1);  
m_ctlMSCOMM1.SetSThreshold(0);  
m_ctlMSCOMM1.SetInputLen(0);  
m_ctlMSCOMM1.SetPortOpen(TRUE);  
return TRUE;  
}
Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP  
Trang 229  
void CSerialDlg::OnExit()  
{
m_ctlMSCOMM1.SetPortOpen(FALSE);  
OnOK();  
}
void CSerialDlg::OnSend()  
{
UpdateData(TRUE);  
m_receive.Empty();  
Send_str(m_send);  
UpdateData(FALSE);  
}
void CSerialDlg::Send_str(CString str)  
{
LPCSTR pstr=str; //ñaët con troû cho chuoãi  
int i = str.GetLength();  
BSTR bstr = SysAllocStringLen(0,i); //daønh choã cho chuoãi Unicode bstr  
MultiByteToWideChar(CP_ACP,0,pstr,i+1,bstr,i+1); //ñoåi sang maõ Unicode  
VARIANT dataout;  
dataout.vt=VT_BSTR;  
dataout.bstrVal=bstr;  
m_ctlMSCOMM1.SetOutput(dataout); //xuaát chuoãi ra  
}
void CSerialDlg::OnMscomm1()  
{
if(m_ctlMSCOMM1.GetCommEvent()==2)  
{
m_receive +=Get_str();  
UpdateData(FALSE);  
}
. }  
CString CSerialDlg::Get_str()  
{
CHAR str[256];  
VARIANT datain;  
Thaønh phoá Hoà Chí Minh, thaùng 4 naêm 2006  
Tải về để xem bản đầy đủ
pdf 25 trang Thùy Anh 20100 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đo lường và điều khiển bằng máy tính - Chương 8: Lập trình giao tiếp nối tiếp", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_do_luong_va_dieu_khien_bang_may_tinh_chuong_8_lap.pdf