intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình- Đo lường và điều khiển bằng máy tính- chương 8

Chia sẻ: Sam Sara | Ngày: | Loại File: PDF | Số trang:25

122
lượt xem
30
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương 8: Lập trình giao tiếp nối tiếp Ngôn ngữ QBasic Lệnh khởi động cổng COM n:

Chủ đề:
Lưu

Nội dung Text: Giáo trình- Đo lường và điều khiển bằng máy tính- chương 8

  1. 8 Chöông 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ù.
  2. 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
  3. 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” http://www.khvt.com
  4. 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
  5. 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 http://www.khvt.com
  6. 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 XON/XOFF =3 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
  7. 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 http://www.khvt.com
  8. 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 383 Thuoäc tính chæ ñoïc comGetNotSupported 394 Thuoäc tính chæ ñoïc comPortOpen 8000 Khoâng thöïc hieän khi coång ñaõ môû 8001 Gía trò Timeout phaûi lôùn hôn 0 comPortInvalid 8002 Soá coång khoâng giaù trò 8003 Thuoäc tính chæ coù khi chöông trình chaïy 8004 Thuoäc tính chæ ñoïc khi chöông trình chaïy comPortAlreadyOpen 8005 Coång ñaõ môû roài 8006 Soá nhaän daïng thieát bò khoâng phuø hôïp 8007 Vaän toác truyeàn khoâng phuø hôïp 8008 Soá byte ñaõ ñaët khoâng giaù tri 8009 Thoâng soá maëc ñònh sai 8010 Thieát bò khoâng coù saün 8011 The function cannot allocate the queues comNoOpen 8012 Thieát bò khoâng môû 8013 Thieát bò ñaõ môû 8014 Could not enable comm notification comSetCommStateFailed 8015 Khoâng theå ñaët traïng thaùi truyeàn thoâng 8016 Khoâng theå ñaït maët naï che comPortNotOpen 8018 Hoaït ñoäng chæ thöïc hieän khi coång môû 8019 Thieát bò baän comReadError 8020 Error reading comm device comDCBError 8021 Internal error retrieving device control block for the port 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
  9. 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. http://www.khvt.com
  10. 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
  11. 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 RXD : JNB RI,$ CLR RI MOV A,SBUF RET LEDOFF: CJNE A,#30H,NEXT MOV P0,#00000000B ACALL SUB_TXD SJMP INDEX LED1: CJNE A,#31H,NEXT CPL P0.0 ACALL SUB_TXD SJMP INDEX LED2: CJNE A,#32H,NEXT CPL P0.1 ACALL SUB_TXD SJMP INDEX http://www.khvt.com
  12. Chöông 8: LAÄP TRÌNH GIAO TIEÁP NOÁI TIEÁP Trang 221 LED3: CJNE A,#33H,NEXT CPL P0.2 ACALL SUB_TXD SJMP INDEX LED4: CJNE A,#34H,NEXT CPL P0.3 ACALL SUB_TXD SJMP INDEX LED5: CJNE A,#35H,NEXT CPL P0.4 ACALL SUB_TXD SJMP INDEX LED6: CJNE A,#36H,NEXT CPL P0.5 ACALL SUB_TXD SJMP INDEX LED7: CJNE A,#37H,NEXT CPL P0.6 ACALL SUB_TXD SJMP INDEX NEXT: RET 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
  13. 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 http://www.khvt.com
  14. 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
  15. 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 http://www.khvt.com
  16. 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
  17. 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); http://www.khvt.com
  18. 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
  19. 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); // Set big icon SetIcon(m_hIcon, FALSE); // 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; } http://www.khvt.com
  20. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2