You are on page 1of 41

Ti liu Lp trnh h thng

Chng 4

Chng 4 GIAO TIP CNG NI TIP


1. Cu trc cng ni tip
Cng ni tip c s dng truyn d liu hai chiu gia my tnh v ngoi vi, c cc u im sau: Khong cch truyn xa hn truyn song song. S dy kt ni t. C th truyn khng dy dng hng ngoi. C th ghp ni vi vi iu khin hay PLC (Programmable Logic Device). Cho php ni mng. C th tho lp thit b trong lc my tnh ang lm vic. C th cung cp ngun cho cc mch in n gin

Cc thit b ghp ni chia thnh 2 loi: DTE (Data Terminal Equipment) v DCE (Data Communication Equipment). DCE l cc thit b trung gian nh MODEM cn DTE l cc thit b tip nhn hay truyn d liu nh my tnh, PLC, vi iu khin, Vic trao i tn hiu thng thng qua 2 chn RxD (nhn) v TxD (truyn). Cc tn hiu cn li c chc nng h tr thit lp v iu khin qu trnh truyn, c gi l cc tn hiu bt tay (handshake). u im ca qu trnh truyn dng tn hiu bt tay l c th kim sot ng truyn. Tn hiu truyn theo chun RS-232 ca EIA (Electronics Industry Associations). Chun RS-232 quy nh mc logic 1 ng vi in p t -3V n -25V (mark), mc logic 0 ng vi in p t 3V n 25V (space) v c kh nng cung cp dng t 10 mA n 20 mA. Ngoi ra, tt c cc ng ra u c c tnh chng chp mch. Chun RS-232 cho php truyn tn hiu vi tc n 20.000 bps nhng nu cp truyn ngn c th ln n 115.200 bps. Cc phng thc ni gia DTE v DCE: - n cng (simplex connection): d liu ch c truyn theo 1 hng. - Bn song cng ( half-duplex): d liu truyn theo 2 hng, nhng mi thi im ch c truyn theo 1 hng. - Song cng (full-duplex): s liu c truyn ng thi theo 2 hng. nh dng ca khung truyn d liu theo chun RS-232 nh sau: Start 0 D0 D1 D2 D3 D4 D5 D6 D7 P Stop 1

Khi khng truyn d liu, ng truyn s trng thi mark (in p -10V). Khi bt u truyn, DTE s a ra xung Start (space: 10V) v sau ln lt truyn t D0 n D7
Phm Hng Kim Khnh Trang 75

Ti liu Lp trnh h thng

Chng 4

v Parity, cui cng l xung Stop (mark: -10V) khi phc trng thi ng truyn. Dng tn hiu truyn m t nh sau (truyn k t A):

Hnh 4.1 Tn hiu truyn ca k t A Cc c tnh k thut ca chun RS-232 nh sau: Chiu di cable cc i Tc d liu cc i in p ng ra cc i in p ng ra c ti Tr khng ti in p ng vo nhy ng vo Tr khng ng vo 15m 20 Kbps 25V 5V n 15V 3K n 7K 15V 3V 3K n 7K

Cc tc truyn d liu thng dng trong cng ni tip l: 1200 bps, 4800 bps, 9600 bps v 19200 bps. S chn:

Phm Hng Kim Khnh

Trang 76

Ti liu Lp trnh h thng

Chng 4

Hnh 4.2 S chn cng ni tip Cng COM c hai dng: u ni DB25 (25 chn) v u ni DB9 (9 chn) m t nh hnh 4.2. ngha ca cc chn m t nh sau: D25 D9 1 2 3 4 5 6 7 8 20 22 23 24 15 17 18 21 14 16 19 13 12 25 9 10 11 3 2 7 8 6 5 1 4 9 Tn hiu TxD RxD RTS CTS DSR GND DCD DTR RI DSRD TSET TSET RSET LL RL STxD SRxD SRTS SCTS SDSRD TM Hng truyn DTE DCE DTE DCE DCE DCE DTE DCE DCE DTE DCE DTE DCE DTE DTE DTE DCE DTE DTE DCE M t Protected ground: ni t bo v Transmitted data: d liu truyn Received data: d liu nhn Request to send: DTE yu cu truyn d liu Clear to send: DCE sn sng nhn d liu Data set ready: DCE sn sng lm vic Ground: ni t (0V) Data carier detect: DCE pht hin sng mang Data terminal ready: DTE sn sng lm vic Ring indicator: bo chung Data signal rate detector: d tc truyn Transmit Signal Element Timing: tn hiu nh thi truyn i t DTE Transmitter Signal Element Timing: tn hiu nh thi truyn t DCE truyn d liu Receiver Signal Element Timing: tn hiu nh thi truyn t DCE truyn d liu Local Loopback: kim tra cng Remote Loopback: To ra bi DCE khi tn hiu nhn t DCE li Secondary Transmitted Data Secondary Received Data Secondary Request To Send Secondary Clear To Send Secondary Received Line Signal Detector Test Mode Dnh ring cho ch test Dnh ring cho ch test Khng dng

DCE DTE DCE DTE DCE DTE DTE DCE DTE DCE DCE DCE DTE DCE DTE DTE

Phm Hng Kim Khnh

Trang 77

Ti liu Lp trnh h thng

Chng 4

2. Truyn thng gia hai nt


Cc s khi kt ni dng cng ni tip:
TxD RxD GND DTE1 TxD RxD GND DTE2 TxD RxD GND DTE TxD RxD GND DCE

Hnh 4.3 Kt ni n gin trong truyn thng ni tip Khi thc hin kt ni nh trn, qu trnh truyn phi bo m tc u pht v thu ging nhau. Khi c d liu n DTE, d liu ny s c a vo b m v to ngt. Ngoi ra, khi thc hin kt ni gia hai DTE, ta cn dng s sau:
TxD RxD GND RTS CTS DSR DCD DTR DTE1 TxD RxD GND RTS CTS DSR DCD DTR DTE2

Hnh 4.4 Kt ni trong truyn thng ni tip dng tn hiu bt tay Khi DTE1 cn truyn d liu th cho DTR tch cc tc ng ln DSR ca DTE2 cho bit sn sng nhn d liu v cho bit nhn c sng mang ca MODEM (o). Sau , DTE1 tch cc chn RTS tc ng n chn CTS ca DTE2 cho bit DTE1 c th nhn d liu. Khi thc hin kt ni gia DTE v DCE, do tc truyn khc nhau nn phi thc hin iu khin lu lng. Qu trinh iu khin ny c th thc hin bng phn mm hay phn cng. Qu trnh iu khin bng phn mm thc hin bng hai k t Xon v Xoff. K t Xon c DCE gi i khi rnh (c th nhn d liu). Nu DCE bn th s gi k t Xoff. Qu trnh iu khin bng phn cng dng hai chn RTS v CTS. Nu DTE mun truyn d liu th s gi RTS yu cu truyn, DCE nu c kh nng nhn d liu (ang rnh) th gi li CTS.

3. Truy xut trc tip thng qua cng


Cc cng ni tip trong my tnh c nh s l COM1, COM2, COM3, COM4 vi cc a ch nh sau:

Phm Hng Kim Khnh

Trang 78

Ti liu Lp trnh h thng

Chng 4

Tn COM1 COM2 COM3 COM4

a ch 3F8h 2F8h 3E8h 2E8h

Ngt 4 3 4 3

V tr cha a ch 0000h:0400h 0000h:0402h 0000h:0404h 0000h:0406h

Giao tip ni tip trong my tnh s dng vi mch UART vi cc thanh ghi cho trong bng sau: Offset DLAB 0 0 0 1 0 1 1 2 3 4 5 6 7 R/W Tn Chc nng W THR Transmitter Holding Register (m truyn) R RBR Receiver Buffer Register (m thu) R/W BRDL Baud Rate Divisor Latch (s chia byte thp) R/W IER Interrupt Enable Register (cho php ngt) R/W BRDH S chia byte cao R IIR Interrupt Identification Register (nhn dng ngt) W FCR FIFO Control Register R/W LCR Line Control Register (iu khin ng dy) R/W MCR Modem Control Register (iu khin MODEM) R LSR Line Status Register (trng thi ng dy) R MSR Modem Status Register (trng thi MODEM) R/W Scratch Register (thanh ghi tm)

Cc thanh ghi ny c th truy xut trc tip kt hp vi a ch cng (v d nh thanh ghi cho php ngt ca COM1 c a ch l BACOM1 + 1 = 3F9h. IIR (Interrupt Identification): IIR xc nh mc u tin v ngun gc ca yu cu ngt m UART ang ch phc v. Khi cn x l ngt, CPU thc hin c cc bit tng ng xc nh ngun gc ca ngt. nh dng ca IIR nh sau: D7 D6 D5 D4 D3 D2 D1 00: khng c Cho php FIFO 64 1: ngt time-out Xc nh ngun FIFO byte (trong 16750) (trong 16550) gc ngt 11: cho php FIFO D0 0: c ngt 1: khng ngt

D2 D1 0 0 1 0 1 0 4 3 2

u tin

Tn ng truyn m thu m pht

Ngun Li khung, thu , li parity, gin on khi thu m thu y m pht rng CTS, DSR, RI, RLSD

D2 D0 b xo khi c LSR c RBR c IIR, ghi THR c MSR

1 1 1 Modem (mc 1 u tin cao nht)


Phm Hng Kim Khnh

Trang 79

Ti liu Lp trnh h thng

Chng 4

IER (Interrupt Enable Register): IER cho php hay cm cc nguyn nhn ngt khc nhau (1: cho php, 0: cm ngt) D7 D6 D5 D4 D3 D2 D1 D0 - POW HBR MODEM LINE TxEMPTY RxRDY
Cho php kiu cng sut thp Cho php kiu ngh (hibernate) Cho php khi li modem Cho php khi li thu, pht Cho php khi THR rng Cho php khi RBR y

MCR (Modem Control Register): D7 D6 D5 D4 D3 D2 D1 D0 - LOOP OUT2 OUT1 RTS DTR


Mode loopback: kim tra hot ng ca UART iu khin 2 ng ra OUT1, OUT 2 ca UART iu khin tn hiu RTS v DTR

MSR (Modem Status Register): D7 D6 D5 D4 D3 D2 D1 D0 RLSD RI DSR CTS RLSD RI DSR CTS

Trng thi ca CD, RI, DSR v CTS

1: nu c thay i cc tn hiu so vi ln c trc

RI: = 1 nu c xung dng ti RI

LSR (Line Status Register): D7 D6 D5 D4 D3 D2 D1 D0 FIE TSRE THRE BI FE PE OE RxDR FIE: FIFO Error sai trong FIFO TSRE: Transmitter Shift Register Empty thanh ghi dch rng (=1 khi pht 1 k t v b xo khi c 1 k t chuyn n t THR. THRE: Transmitter Holding Register Empty (=1 khi c 1 k t chuyn t THR TSR v b xo khi CPU a k t ti THR).

Phm Hng Kim Khnh

Trang 80

Ti liu Lp trnh h thng

Chng 4

BI: Break Interrupt (=1 khic s gin on khi truyn, ngha l tn ti mc logic 0 trong khong thi gian di hn khong thi gian truyn 1 byte v b xo khi CPU c LSR) FE: Frame Error (=1 khi c li khung truyn v b xo khi CPU c LSR) PE: Parity Error (=1 khi c li parity v b xo khi CPU c LSR) OE: Overrun Error (=1 khi c li thu , ngha l CPU khng c kp d liu lm cho qu trnh ghi chng ln RBR xy ra v b xo khi CPU c LSR) RxDR: Receiver Data Ready (=1 khi nhn 1 k t v a vo RBR v b xo khi CPU c RBR). LCR (Line Control Register): D7 D6 D5 D4 D3 D2 D1 D0 DLAB SBCB PS2 PS1 PS0 STB WLS1 WLS0 DLAB (Divisor Latch Access Bit) = 0: truy xut RBR, THR, IER, = 1 cho php t b chia tn trong UART cho php t tc truyn mong mun. UART dng dao ng thch anh vi tn s 1.8432 MHz a qua b chia 16 thnh tn s 115,200 Hz. Khi , tu theo gi tr trong BRDL v BRDH, ta s c tc mong mun. V d nh ng truyn c tc truyn 2,400 bps c gi tr chia 115,200 / 2,400 = 48d = 0030h BRDL = 30h, BRDH = 00h. Mt s gi tr thng dng xc nh tc truyn cho nh sau: Tc (bps) 1,200 2,400 4,800 9,600 19,200 38,400 57,600 115,200 BRDH 00h 00h 00h 00h 00h 00h 00h 00h BRDL 60h 30h 18h 0Ch 06h 03h 02h 01h

SBCB (Set Break Control Bit) =1: cho php truyn tn hiu Break (=0) trong khong thi gian ln hn mt khung PS (Parity Select): PS2 PS1 PS0 X 0 0 1 1 X 0 1 0 1 0 1 1 1 1 M t Khng kim tra Kim tra l Kim tra chn Parity l mark Parity l space

Phm Hng Kim Khnh

Trang 81

Ti liu Lp trnh h thng

Chng 4

STB (Stop Bit) = 0: 1 bit stop, =1: 1.5 bit stop (khi dng 5 bit d liu) hay 2 bit stop (khi dng 6, 7, 8 bit d liu). WLS (Word Length Select): WLS1 WLS0 di d liu 0 0 1 1 0 1 0 1 5 bit 6 bit 7 bit 8 bit

Mt v d khi lp trnh trc tip trn cng nh sau: .MODEL SMALL .STACK 100h .DATA Com1 EQU 3F8h Com_int EQU 08h Buffer DB 251 DUP(?) Bufferin DB 0 Bufferout DB 0 Char DB ? Seg_com DW ? ; Vector ngt c Off_com DW ? Mask_int DB ? Msg DB 'Press any key to exit$ .CODE Main PROC MOV AX,@DATA MOV DS,AX MOV MOV INT MOV MOV PUSH MOV MOV LEA MOV MOV INT POP AH,35h AL,Com_int 21h Seg_com,ES Off_com,BX DS BX,CS DS,BX DX,Com_ISR AH,35h AL,Com_int 21h DS

; Lu vector ngt c

;Gn vector ngt mi

MOV DX,Com1+3 MOV AL,80h OUT DX,AL


Phm Hng Kim Khnh

; a ch LCR ; Set DLAB = 1 cho php nh tc ; truyn d liu


Trang 82

Ti liu Lp trnh h thng

Chng 4

MOV DX,Com1 MOV AL,0Ch OUT DX,AL MOV DX,Com1+1 MOV AL,00h OUT DX,AL MOV DX,Com1+3 MOV AL,03h OUT DX,AL

; Gi byte thp

; Gi byte cao 000Ch: xc nh ; tc truyn 9600bps ; ; ; ; ; LCR = 0000 0011B DLAB = 0, SBCB = 0 cm Break PS = 000 no parity STB = 0 1 stop bit WLS = 11 8 bit d liu

MOV DX,Com1+4 MOV AL,03h OUT DX,AL MOV DX,21h IN AL,DX MOV Mask_int,AL AND AL,0EFh OUT DX,AL MOV AL,01h MOV DX,Com1+1 OUT DX,AL MOV AH,09h LEA Dx,Msg INT 21h Lap: MOV INT CMP JE MOV CMP JE MOV MOV INC MOV CMP JNE MOV Next: AH,0Bh 21h AL,0FFh Exit

; Tc ng n DTR v RTS ; MCR = 0000 0011b DTR=RTS = 1 ; ng DTR v RTS ca cng ni ; tip = 0 ; Kim tra trng thi ngt ; D7 D0 xc nh cc IRQi ; =0: cho php, =1: cm ; = 1110 1111b cho php IRQ4 ; cho php COM1 ; IER = 0000 0001b ; ngt khi RBR y cho php

AL,bufferin AL,bufferout Lap AL,buffer[bufferout] char,AL bufferout AL,bufferout AL,251 Next bufferout,0

Phm Hng Kim Khnh

Trang 83

Ti liu Lp trnh h thng

Chng 4

MOV DL,char MOV AH,02h INT 21h MOV MOV OUT JMP AL,char DX,Com1 DX,AL Lap

; Xut gi tr ra mn hnh

; Xut ra cng ni tip

Exit: MOV AL,Mask_int OUT 21h,AL MOV MOV MOV MOV MOV INT DX,Off_com BX,Seg_com DS,BX AH,35h AL,Com_int 21h

; Khi phc trng thi ngt

;Khi phc vector ngt

MOV AH,4Ch INT 21h Main ENDP Com_ISR MOV IN AND JZ PROC DX,Com1+5 AL,DX AL,1 exit_ISR ; c ni dung LSR ; Nu D0 = 1 th c d liu

MOV DX,Com1 IN AL,DX MOV buffer[bufferin],AL INC bufferin MOV AL,bufferin CMP AL,251 JNE Exit_ISR MOV bufferin,0 Exit_ISR: MOV AL,20h ; Bo cho PIC kt thc ngt OUT 20h,AL IRET Com_ISR ENDP END Main

4. Truyn thng ni tip dng ActiveX


4.1. M t
Vic truyn thng ni tip trn Windows c thc hin thng qua mt ActiveX c sn l Microsoft Comm Control.. ActiveX ny dc lu tr trong file MSCOMM32.OCX. Qu trnh ny c hai kh nng thc hin iu khin trao i thng tin:

Phm Hng Kim Khnh

Trang 84

Ti liu Lp trnh h thng

Chng 4

iu khin s kin:

Truyn thng iu khin s kin l phng php tt nht trong qu trnh iu khin vic trao i thng tin. Qu trnh iu khin thc hin thng qua s kin OnComm. Hi vng: Qu trinh iu khin bng phng php hi vng thc hin thng qua kim tra cc gi tr ca thuc tnh CommEvent sau mt chu k no xc nh xem c s kin no xy ra hay khng. Thng thng phng php ny s dng cho cc chng trnh nh. ActiveX MsComm c b sung vo mt Visual Basic Project thng qua menu Project > Components:

Hnh 4.5 B sung i tng MsComm vo VBP Biu tng ca MsComm: Thuc tnh CommPort Input Output PortOpen Settings v cc thuc tnh c bn m t nh sau: M t S th t cng truyn thng Nhn k t t b m Xut k t ra cng ni tip M / ng cng Xc nh cc tham s truyn

Phm Hng Kim Khnh

Trang 85

Ti liu Lp trnh h thng

Chng 4

Hnh 4.6 Cc thuc tnh ca i tng MSComm

4.2. Cc thuc tnh


Settings: Xc nh cc tham s cho cng ni tip. C php: MSComm1.Settings = ParamString MSComm1: tn i tng ParamString: l mt chui c dng nh sau: "BBBB,P,D,S" BBBB: tc truyn d liu (bps) trong cc gi tr hp l l: 110 2400 300 9600 (mc nh) 600 14400 1200 19200 P: kim tra chn l, vi cc gi tr: Gi tr O E M S N M t Odd (kim tra l) Even (kim tra chn) Mark (lun bng 1) Space (lun bng 0) Khng kim tra 38400 56000 188000 256000

Phm Hng Kim Khnh

Trang 86

Ti liu Lp trnh h thng

Chng 4

D: s bit d liu (4, 5, 6, 7 hay 8), mc nh l 8 bit S: s bit stop (1, 1.5, 2) VD: MSComm1.Settings = "9600,O,8,1" s xc nh tc truyn 9600bps, kim tra parity chn vi 1 bit stop v 8 bit d liu. CommPort: Xc nh s th t ca cng truyn thng, c php: MSComm1.CommPort = PortNumber PortNumber l gi tr nm trong khong t 1 VD: MSComm1.CommPort = 1 xc nh s dng COM1 PortOpen: t trng thi hay kim tra trng thi ng / m ca cng ni tip. Nu dng thuc tnh ny m cng ni tip th phi s dng trc 2 thuc tnh Settings v CommPort. C php: MSComm1.PortOpen = True | False Gi tr xc nh l True s thc hin m cng v False ng cng ng thi xo ni dung ca cc b m truyn, nhn. VD: M cng COM1 vi tc truyn 9600 bps MSComm1.Settings = "9600,N,8,1" MSComm1.CommPort = 1 MSComm1.PortOpen = True Cc thuc tnh nhn d liu: Input: nhn mt chui k t v xo khi b m. C php: InputString = MSComm1.Input Thuc tnh ny kt hp vi InputLen xc nh s k t c vo. Nu InputLen = 0 th s c ton b d liu c trong b m. InBufferCount: s k t c trong b m nhn. C php: Count = MSComm1.InBufferCount Thuc tnh ny cng dc dng xo b m nhn bng cch gn gi tr 0. MSComm1.InBufferCount = 0 InBufferSize: t v xc nh kch thc b m nhn (tnh bng byte). C php: MSComm1.InBufferCount = NumByte Gi tr mc nh l 1024 byte. Kch thc b m ny phi ln trnh tnh trng mt d liu. VD: c ton b ni dung trong b m nhn nu c d liu
Phm Hng Kim Khnh Trang 87

99, mc nh l 1.

Ti liu Lp trnh h thng

Chng 4

MSComm1.InputLen = 0 If MSComm1.InBufferCount <> 0 Then InputString = MSComm1.Input End If Cc thuc tnh xut d liu: Bao gm cc thuc tnh Output, OutBufferCount v OutBufferSize, chc nng ca cc thuc tnh ny ging nh cc thuc tnh nhp. CDTimeout: t v xc nh khong thi gian ln nht (tnh bng ms) t lc pht hin sng mang cho n lc c d liu. Nu qu khong thi gian ny m vn cha c d liu th s gn thuc tnh CommEvent l CDTO (Carrier Detect Timeout Error) v to s kin OnComm. C php: MSComm1.CDTimeout = NumTime DSRTimeout: Xc nh thi gian ch tn hiu DSR trc khi xy ra s kin OnComm. CTSTimeout: t v xc nh khong thi gian ln nht (tnh bng ms) i tn hiu CTS trc khi t thuc tnh CommEvent l CTSTO v to s kin OnComm. C php: MSComm1.CTSTimeout = NumTime CTSHolding: Xc nh c tn hiu CTS hay cha, tn hiu ny dng cho qu trnh bt tay bng phn cng (cho bit DCE sn sng nhn d liu), tr v gi tr True hay False. DSRHolding: Xc nh trng thi DSR (bo hiu s tn ti ca DCE), tr v gi tr True hay False. CDHolding: Xc nh trng thi CD, tr v gi tr True hay False. DTREnable: t hay xo tn hiu DTR bo s tn ti ca DTE. C php: MSComm1.DTREnable = True | False RTSEnable: t hay xo tn hiu RTS yu cu truyn d liu n DTE. C php: MSComm1.RTSEnable = True | False NullDiscard: Cho php nhn cc k t NULL (rng) hay khng (= True: cm). C php: MSComm1.NullDiscard = True | False SThreshold:
Phm Hng Kim Khnh Trang 88

Ti liu Lp trnh h thng

Chng 4

S byte trong b m truyn lm pht sinh s kin OnComm. Nu gi tr ny bng 0 th s khng to s kin OnComm. C php: MSComm1.SThreshold = NumChar HandShaking: Chn giao thc bt tay khi thc hin truyn d liu. C php: MSComm1.HandShaking = Protocol Cc giao thc truyn bao gm: Protocol ComNone ComXon/Xoff ComRTS Gi tr 0 1 2 M t Khng bt tay (mc nh) Bt tay phn mm (Xon/Xoff) Bt tay phn cng (RTS/CTS) Bt tay phn cng v phn mm

ComRTSXon/Xoff 3 CommEvent:

Tr li cc li truyn thonog hay s kin xy ra ti cng ni tip Cc s kin: S kin ComEvSend ComEvCTS ComEvDSR ComEvCD ComEvRing ComEvEOF Cc li truyn thng: Li ComBreak ComCTSTO ComFrame ComOver ComCDTO ComRxOver ComRxParity ComTxFull Gi tr 1001 1002 1004 1006 1007 1008 1009 1010 M t Nhn tn hiu Break Carrier Detect Timeout Li khung Phn cng khng c k t trc khi gi k t k Carrier Detect Timeout Trn b m nhn Li parity Trn b m truyn Gi tr 1 3 4 5 6 7 truyn k t Khi c k t trong b m nhn C thay i trn CTS (Clear To Send) C thay i trn DSR (Data Set Ready) C thay i trn CD (Carrier Detect) Pht hin chung Nhn k t kt thc file M t

ComEvReceive 2

Phm Hng Kim Khnh

Trang 89

Ti liu Lp trnh h thng

Chng 4

4.3. S kin OnComm


S kin OnComm xy ra bt c khi no gi tr ca thuc tnh CommEvent thay i. Cc thuc tnh RThreshold v SThreshold = 0 s cm s kin OnComm khi thc hin nhn hay gi d liu. Thng thng, SThreshold = 0 v RThreshold = 1. Mt chng trnh truyn nhn n gin thc hin bng cch ni chn TxD vi RxD ca cng COM1 (loopback). Phng php ny dng kim tra cng ni tip. Thuc tnh c bn ca cng ni tip:

Hnh 4.7 Cc thuc tnh c bn ca MSComm Ca s chng trnh thc thi:

Textbox cha cc k t gi

i tng MSComm

Textbox cha cc k t nhn

Yu cu truyn d liu

Hnh 4.8 Ca s chng trnh loopback Chng trnh ngun: VERSION 5.00 Object = {648A5603-2C6E-101B-82B6000000000014}#1.1#0; MSCOMM32.OCX
Phm Hng Kim Khnh Trang 90

Ti liu Lp trnh h thng

Chng 4

Begin VB.Form Form1 Caption = Loopback Serial Port Example ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 4680 LinkTopic = Form1 ScaleHeight = 3195 ScaleWidth = 4680 StartUpPosition = 3 Windows Default Begin VB.CommandButton cmdExit Caption = Exit Height = 615 Left = 2640 TabIndex = 5 Top = 2160 Width = 1095 End Begin VB.CommandButton cmdSend Caption = Send Height = 615 Left = 1200 TabIndex = 4 Top = 2160 Width = 975 End Begin VB.TextBox txtReceive Height = 735 Left = 1320 Locked = -1 True TabIndex = 3 Top = 1080 Width = 2535 End Begin VB.TextBox txtTransmit Height = 735 Left = 1320 TabIndex = 0 Top = 240 Width = 2535 End Begin MSCommLib.MSComm MSComm1 Left = 3960 Top = 240 _ExtentX = 1005 _ExtentY = 1005
Phm Hng Kim Khnh Trang 91

Ti liu Lp trnh h thng

Chng 4

_Version = DTREnable = RThreshold = End Begin VB.Label Label2 Caption = Height = Left = TabIndex = Top = Width = End Begin VB.Label Label1 Caption = Height = Left = TabIndex = Top = Width = End

393216 -1 True 1 Receive: 375 240 2 1200 855 Transmit: 375 240 1 240 975

End Attribute VB_Name = Form1 Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub cmdExit_Click() MSComm1.PortOpen = False ng cng End End Sub Private Sub cmdSend_Click() MSComm1.Output = Trim(txtTransmit.Text)Gi d liu End Sub Private Sub Form_Load() MSComm1.CommPort = 1 COM1 MSComm1.Settings = 9600,n,8,1 Tc 9600bps MSComm1.PortOpen = True M cng End Sub Private Sub MSComm1_OnComm() If (MSComm1.CommEvent = comEvReceive) Then txtReceive.Text = txtReceive.Text + MSComm1.Input End If End Sub

Phm Hng Kim Khnh

Trang 92

Ti liu Lp trnh h thng

Chng 4

5. Giao tip vi vi iu khin


Khi thc hin giao tip vi vi iu khin, ta phi dng thm mch chuyn mc logic t TTL 232 v ngc li. Cc vi mch thng s dng l MAX232 ca Maxim hay DS275 ca Dallas. Mch chuyn mc logic m t nh sau:
1 6 2 7 3 8 4 9 5 DB9 TxD_PC 13 14 C25 6 10u
R2IN

R1IN T1OUT

R1OUT T1IN C+

12 11 1 3 4 5 C29 10u C28 10u RxD_PC

VV+

MAX232
T2OUT 7

C1R2OUT 9

T2IN

2 C26 10u C27 10u

C2+ C2-

VCC

Hnh 4.9 Mch chuyn mc logic TTL RS232 Tuy nhin, khi s dng mch chuyn mc logic dng cc vi mch th i hi phi dng chung GND gia my tnh v vi mch c kh nng lm hng cng ni tip khi xy ra hin tng chp mch mch ngoi. Do , ta c th dng thm opto 4N35 cch ly v VCC in. S mch cch ly m t nh sau:
1K

10

TxD

6 5 68K DTR 1 6 2 7 3 8 4 9 5 RTS 4 4N35

1 VCC 2

4.7K RxD_PC TxD_PC 4.7K 2 4N35 4 1 6 5

RxD

2.2K

Hnh 4.10 Mch chuyn mc logic TTL RS232 cch ly Khi giao tip, vi iu khin chnh l mt DTE nn s ni RxD ca my tnh vi TxD ca vi iu khin v ngc li. Mch kt ni n gin gia vi iu khin v my tnh nh sau:

Phm Hng Kim Khnh

Trang 93

R2OUT

T2OUT

R2IN

V+

T2IN

VCC

C27 10u 33p 11.059MHz C31

10

Phm Hng Kim Khnh


SW DIP-8 1 6 2 7 3 8 4 9 5 10u 2 C26 10u 13 14 R1IN T1OUT 6 V-

Ti liu Lp trnh h thng

LED 1 VCC 1 2 3 4 5 6 7 8 9 330 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 30 29 C29 10u P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD ALE/PROG PSEN P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 XTAL1 XTAL2 EA/VPP RST AT89C51 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8 19 18 31 9 2 74LS04 LED 3 4 74LS04 LED 5 6 74LS04 LED 9 8 74LS04 LED 11 10 74LS04 LED 13 12 74LS04 LED 1 2 74LS04 LED 3 4 74LS04 VCC 1 2 3 4 5 6 7 8 9 330

R1OUT T1IN C+ MAX232 C1C2+ C2-

12 11 1 3 4 5 C28 10u

Hnh 4.11 Kt ni vi vi iu khin


Chng 4 Trang 77

Ti liu Lp trnh h thng

Chng 4

Chng trnh ngun cho vi iu khin AT89C51: MOV MOV MOV MOV SETB TMOD,#20h SCON,#52h ; Truyn 8 bit d liu, no parity TH1,#(-3) ; Tc truyn 9600 bps TL1,#(-3) TR1 ; C d liu hay khng ; Nu c th xut ra LED ; truyn xong cha ; Nu xong th truyn trng thi ; ca cng tc SW DIP-8

Receive: JNB RI,Transmit CLR RI MOV A,SBUF MOV P1,A Transmit: JNB TI,Receive CLR TI MOV A,P2 MOV SBUF,A JMP Receive

Giao din ca chng trnh trn my tnh:

Hnh 4.12 Chng trnh giao tip vi vi iu khin Chng trnh ngun: VERSION 5.00 Object = "{648A5603-2C6E-101B-82B6000000000014}#1.1#0"; "MSCOMM32.OCX"
Phm Hng Kim Khnh Trang 95

Ti liu Lp trnh h thng

Chng 4

Begin VB.Form Form1 Caption Example" ClientHeight = ClientLeft = ClientTop = ClientWidth = LinkTopic = ScaleHeight = ScaleWidth = StartUpPosition = Begin VB.CheckBox Height Index Left TabIndex Top Width End Begin VB.CheckBox Height Index Left TabIndex Top Width End Begin VB.CheckBox Height Index Left TabIndex Top Width End Begin VB.CheckBox Height Index Left TabIndex Top Width End Begin VB.CheckBox Height Index Left
Phm Hng Kim Khnh

"Microcontroller Interface

4665 60 345 4020 "Form1" 4665 4020 3 'Windows Default chkSW = 375 = 7 = 1800 = 17 = 3480 = 1575 chkSW = 375 = 6 = 1800 = 16 = 3000 = 1575 chkSW = 375 = 5 = 1800 = 15 = 2520 = 1575 chkSW = 375 = 4 = 1800 = 14 = 2040 = 1575 chkSW = 375 = 3 = 1800
Trang 96

Ti liu Lp trnh h thng

Chng 4

TabIndex = 13 Top = 1560 Width = 1575 End Begin VB.CheckBox chkSW Height = 375 Index = 2 Left = 1800 TabIndex = 12 Top = 1080 Width = 1575 End Begin VB.CheckBox chkSW Height = 375 Index = 1 Left = 1800 TabIndex = 11 Top = 600 Width = 1575 End Begin VB.CheckBox chkSW Height = 375 Index = 0 Left = 1800 TabIndex = 10 Top = 120 Width = 1575 End Begin VB.CommandButton cmdExit Caption = "Exit" Height = 495 Left = 1680 TabIndex = 9 Top = 3960 Width = 975 End Begin MSCommLib.MSComm MSComm1 Left = 3360 Top = 3960 _ExtentX = 1005 _ExtentY = 1005 _Version = 393216 DTREnable = -1 'True RThreshold = 1 End Begin VB.CommandButton cmdSend Caption = "Send"
Phm Hng Kim Khnh Trang 97

Ti liu Lp trnh h thng

Chng 4

Height Left TabIndex Top Width End Begin VB.Label BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Label BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Label BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Label BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Label
Phm Hng Kim Khnh

= = = = = lblLED = = = = = = = = lblLED = = = = = = = = lblLED = = = = = = = = lblLED = = = = = = = = lblLED

495 240 8 3960 1095 0 'Transparent "LED7" 375 7 240 7 3480 1095 0 'Transparent "LED6" 375 6 240 6 3000 975 0 'Transparent "LED5" 375 5 240 5 2520 975 0 'Transparent "LED4" 375 4 240 4 2040 975

Trang 98

Ti liu Lp trnh h thng

Chng 4

BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Label BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Label BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Label BackStyle Caption Height Index Left TabIndex Top Width End Begin VB.Shape BorderColor FillColor FillStyle Height Index Left Shape
Phm Hng Kim Khnh

= = = = = = = = lblLED = = = = = = = = lblLED = = = = = = = = lblLED = = = = = = = = shpLED = = = = = = =

0 'Transparent "LED3" 375 3 240 3 1560 975 0 'Transparent "LED2" 375 2 240 2 1080 975 0 'Transparent "LED1" 375 1 240 1 600 975 0 'Transparent "LED0" 375 0 240 0 120 975 &H000000FF& &H000000FF& 0 'Solid 375 7 840 3 'Circle
Trang 99

Ti liu Lp trnh h thng

Chng 4

Top Width End Begin VB.Shape BorderColor FillColor FillStyle Height Index Left Shape Top Width End Begin VB.Shape BorderColor FillColor FillStyle Height Index Left Shape Top Width End Begin VB.Shape BorderColor FillColor FillStyle Height Index Left Shape Top Width End Begin VB.Shape BorderColor FillColor FillStyle Height Index Left Shape Top Width End
Phm Hng Kim Khnh

= = shpLED = = = = = = = = = shpLED = = = = = = = = = shpLED = = = = = = = = = shpLED = = = = = = = = =

3480 375 &H000000FF& &H000000FF& 0 'Solid 375 6 840 3 'Circle 3000 375 &H000000FF& &H000000FF& 0 'Solid 375 5 840 3 'Circle 2520 375 &H000000FF& &H000000FF& 0 'Solid 375 4 840 3 'Circle 2040 375 &H000000FF& &H000000FF& 0 'Solid 375 3 840 3 'Circle 1560 375

Trang 100

Ti liu Lp trnh h thng

Chng 4

Begin VB.Shape shpLED BorderColor = &H000000FF& FillColor = &H000000FF& FillStyle = 0 'Solid Height = 375 Index = 2 Left = 840 Shape = 3 'Circle Top = 1080 Width = 375 End Begin VB.Shape shpLED BorderColor = &H000000FF& FillColor = &H000000FF& FillStyle = 0 'Solid Height = 375 Index = 1 Left = 840 Shape = 3 'Circle Top = 600 Width = 375 End Begin VB.Shape shpLED BorderColor = &H000000FF& FillColor = &H000000FF& FillStyle = 0 'Solid Height = 375 Index = 0 Left = 840 Shape = 3 'Circle Top = 120 Width = 375 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Sub cmdExit_Click() If MSComm1.PortOpen Then MSComm1.PortOpen = False End If End End Sub Private Sub cmdSend_Click()
Phm Hng Kim Khnh Trang 101

Ti liu Lp trnh h thng

Chng 4

Dim t As Integer Dim i As Integer t = 0 For i = 0 To 7 t = t + (2 ^ i) * (1 - shpLED(i).FillStyle) Next i MSComm1.Output = Chr(t) End Sub Private Sub Form_Load() MSComm1.Settings = "9600,N,8,1" MSComm1.CommPort = 1 MSComm1.PortOpen = True End Sub Private Sub lblLED_Click(Index As Integer) shpLED(Index).FillStyle = 1 - shpLED(Index).FillStyle End Sub Private Sub MSComm1_OnComm() Dim t As String Dim n As Integer Dim i As Integer If MSComm1.CommEvent = comEvReceive Then n = Asc(MSComm1.Input) For i = 0 To 7 chkSW(i).Value = n Mod 2 If chkSW(i).Value = 0 Then chkSW(i).Caption = "Switch " & Str(i) & " off" Else chkSW(i).Caption = "Switch " & Str(i) & " on" End If n = Fix(n / 2) Next i End If End Sub

6. Giao tip vi MODEM


6.1. Giao tip
Qu trnh trao i d liu gia my tnh v Modem c thc hin theo c ch bt tay phn cng hay phn mm.

Phm Hng Kim Khnh

Trang 102

Ti liu Lp trnh h thng

Chng 4

Bt tay phn cng: my tnh mun truyn d liu th cho RTS = 1 v ch Modem tr li bng tn hiu CTS. Ngc li, Modem mun truyn d liu th cho DSR = 1 v ch tn hiu DTR t my tnh. Bt tay phn mm: dng k t Xon (Ctrl-S) v Xoff (Ctrl-Q) bt u truyn hay kt thc truyn. XModem: chia thnh khi 128 byte, mi khi chn thm CRC 4 byte. YModem: khi 1024 byte. ZModem: khi c kch thc thay i tu theo ng truyn. Mi dng lnh ca modem bt u bng k t AT, ngoi tr lnh A/ v +++. Dng lnh c th cha nhiu lnh. Kt thc lnh bng k t Enter (m ASCII l 13) ngoi tr lnh A/ v +++. Dng lnh cui cng c lu trong modem. C th dng lnh A/ thc hin li lnh ny. Thng bo kt qu thc hin lnh ca modem c th dng t ch hay s( gi tr mc nh l ch). C th s dng lnh V la chn dng thng bo l ch hay s. hot ng ng, modem cn c cc thng s xc nh. Nu khng c s thay i cn thit, modem hot ng theo gi tr mc nh(default). Nu thng s trong lnh b b qua, gi tr thng s mc nh l 0.

Cc giao thc truyn d liu trn Modem: -

Quy tc truyn lnh trn Modem:

6.2. Cc lnh c bn ca Modem


Lnh +++ A/ A DPn DTn H0 H1 O0 O1 Q0 Q1 Q2 V0 M t Chuyn Modem sang ch lnh Lp li lnh trc Cho php kt ni v pht tn hiu sng mang. Modem s bo tn hiu CONNECT nu thu c tn hiu sng mang t modem u cui. Nu khng thu c sng mang, modem s gc my v thng bo NO CARRIER Quay s in thoi n dng xung Quay s in thoi n dng tone Gc my Nhc my Chuyn v ch d liu Ch iu chnh Modem Cho php Modem gi thng bo n DTE (mc nh) Cm Modem gi thng bo Gi thng bo khi Modem ch ng kt ni, khng gi khi Modem nhn cuc gi Nhn thng bo dng s
Trang 103

Phm Hng Kim Khnh

Ti liu Lp trnh h thng

Chng 4

V1 Sn = V

Nhn thng bo dng k t (mc nh) Np gi tr V vo thanh ghi Sn S0 = V: ch V hi chung trc khi tr li, V = 0 255 (mc nh V = 0: khng tr li) S6 = V: ch V giy trc khi quay s (mc nh V = 2) S7 = V: ch V giy k t lc gi n lc nhn c tn hiu, nu khng s thng bo li Sn? c ni dung thanh ghi Sn Z0 Reset Modem v cu hnh 0 Z1 Reset Modem v cu hnh 1 L0, L1, m lng loa Modem L2, L3 M0 Tt loa M1 M loa cho n khi nhn dc sng mang (mc nh) M2 M loa M3 Tt loa khi quay s v nhn sng mang

6.3. Cc thanh ghi thng dng trn modem


Thanh ghi S0: xc nh s hi chung nhn c m sau modem s tr li mt cch t ng. Gi tr trong thanh ghi ny c th thay i trong khong t 0-255. mc nh gi tr l 0 (khng tr li). Thanh ghi S1: Thanh ghi S1 ch c tc dng khi thanh ghi S0 khc 0, dng m s hi chung thu c. Thanh ghi S2: xc nh gi tr thp phn ca cc k t (m ASSCII) c dng lm k t thot, Gi tr mc nh l 43(+) Thanh ghi S3: xc nh k t c dng kt thc mt dng lnh, mc nhin l 13 (tng ng l Enter) Thanh ghi S4: xc nh k t xung dng sau k t kt thc, gi tr mc nhin l 10 (line feed) Thanh ghi S5: xc nh phm xo lui, gi tr mc nhin l 8 (backspace) Thanh ghi S6: xc nh thi gian i sau khi truy cp ng in thoi v trc khi tin hnh quoay digit u tin trong mt lnh quay s. y l thi gian tr hon cho php dial tone cung cp t ng truyn. Gi tr mc nhin v ti thiu l 2s. Thanh ghi S7: xc nh thi gian m modem i tn hiu sng mang trc khi gc my. Gi tr mc nh l 30s. Thanh ghi S8: xc nh thi gian tm dng cho mi du phy ',' trong chui lnh quay s. Gi tr mc nh l 2s Thanh ghi S9: xc nh thi gian m tn hiu sng mang phi hin din modem c th nhn bit c, gi tr mc nh l 600ms. Gi tr ny nu qu ln s gy li trong d liu truyn.

Phm Hng Kim Khnh

Trang 104

Ti liu Lp trnh h thng

Chng 4

Thanh ghi S10: xc nh thi gian cho php tn hiu sng mang c th bin mt trong chc lt no m khng ct cuc ni. n nh trong khong 100-25500ms, gi tr mc nhin ty vo kh nng chng nhiu ca tng modem, thng l 700ms. Thanh ghi S11: xc nh tc quay s khi s dng phng php quay s tone, gi tr mc nhin ty vo modem, thng vo khong 70ms. Thanh ghi S12: xc nh thi gian an ton khi truy nhp vo k t thot (+++). Nu gi tr nh qu c th nhp khng kp, gi tr ln qu so vi tc nhp cng khng th thot c.

6.4. Cc thng bo ca Modem


Dng s OK 0 CONNECT 1 RING 2 NO CARRIER 3 ERROR 4 CONNECT 1200 5 NO DIAL TONE 6 BUSY 7 NO ANSWER 8 CONNECT 2400 10 CONNECT 4800 11 CONNECT 9600 12 CONNECT 14400 13 CONNECT 19200 14 CONNECT 16800 15 CONNECT 57600 18 CONNECT 7200 24 CONNECT 12000 25 CONNECT 28800 32 CONNECT 115200 33 CARRIER 300 40 CARRIER 9600 50 CARRIER 28800 58 Dng k t ngha Lnh thnh cng Kt ni 300 bps C tn hiu chung Khng c sng mang Li: nhn lnh khng gi tr, sai kim tra, hng lnh qu di Kt ni 1200bps Khng c m hiu mi quay s My bn Khng c tn hiu tr li Kt ni 2400bps Kt ni 4800bps Kt ni 9600bps Kt ni 14400bps Kt ni 19200bps Kt ni 16800bps Kt ni 57600bps Kt ni 7200bps Kt ni 12000bps Kt ni 28800bps Kt ni 115200bps Pht hin sng mang Pht hin sng mang Pht hin sng mang

Phm Hng Kim Khnh

Trang 105

Ti liu Lp trnh h thng

Chng 4

V d lp trnh iu khin Modem nh sau:

Hnh 4.13 Giao tip v iu khin Modem Chng trnh ngun: VERSION 5.00 Object = "{648A5603-2C6E-101B-82B6000000000014}#1.1#0"; "MSCOMM32.OCX" Object = "{F9043C88-F6F2-101A-A3C908002B2F49FB}#1.2#0"; "COMDLG32.OCX" Begin VB.Form frmModem Caption = "Modem example" ClientHeight = 4065 ClientLeft = 60 ClientTop = 345 ClientWidth = 5925 LinkTopic = "Form1" ScaleHeight = 4065 ScaleWidth = 5925 StartUpPosition = 3 'Windows Default Begin VB.CommandButton cmdSave Caption = "Save" Height = 495 Left = 4320 TabIndex = 14 Top = 1320 Width = 1095 End Begin VB.TextBox txtReceive Height = 375 Left = 960
Phm Hng Kim Khnh Trang 106

Ti liu Lp trnh h thng

Chng 4

TabIndex = 12 Top = 1320 Width = 3015 End Begin VB.Timer Timer1 Enabled = 0 'False Interval = 1000 Left = 4920 Top = 2400 End Begin VB.CommandButton cmdExit Caption = "Exit" Height = 495 Left = 4560 TabIndex = 10 Top = 2880 Width = 975 End Begin VB.TextBox txtDial Height = 375 Left = 960 TabIndex = 7 Top = 2400 Width = 2895 End Begin VB.CommandButton cmdDial Caption = "Dial" Height = 495 Left = 1680 TabIndex = 5 Top = 3000 Width = 1095 End Begin VB.CommandButton cmdSend Caption = "Send" Height = 495 Left = 4320 TabIndex = 4 Top = 720 Width = 1095 End Begin VB.CommandButton cmdOpen Caption = "Open Port" Height = 495 Left = 240 TabIndex = 3 Top = 3000
Phm Hng Kim Khnh Trang 107

Ti liu Lp trnh h thng

Chng 4

End Begin VB.CommandButton cmdBrowse Caption = "Browse" Height = 495 Left = 4320 TabIndex = 1 Top = 120 Width = 1095 End Begin MSComDlg.CommonDialog diagSend Left = 4200 Top = 3120 _ExtentX = 847 _ExtentY = 847 _Version = 393216 End Begin VB.TextBox txtSend Height = 375 Left = 960 TabIndex = 0 Top = 360 Width = 3015 End Begin MSCommLib.MSComm MSComm1 Left = 5160 Top = 3000 _ExtentX = 1005 _ExtentY = 1005 _Version = 393216 DTREnable = -1 'True Handshaking = 2 NullDiscard = -1 'True RThreshold = 1 RTSEnable = -1 'True End Begin VB.Label Label3 Caption = "File receive:" Height = 375 Left = 0 TabIndex = 13 Top = 1320 Width = 855 End Begin VB.Label lblReceive Caption = "Receive file !!! Select file name."
Phm Hng Kim Khnh Trang 108

Width

1215

Ti liu Lp trnh h thng

Chng 4

ForeColor = &H000000FF& Height = 375 Left = 840 TabIndex = 11 Top = 1920 Visible = 0 'False Width = 2895 End Begin VB.Label lblStatus Caption = "Disconnected" Height = 375 Left = 120 TabIndex = 9 Top = 3720 Width = 5775 End Begin VB.Label Label2 Caption = "Dial:" Height = 375 Left = 120 TabIndex = 8 Top = 2400 Width = 735 End Begin VB.Label Label1 Caption = "File send:" Height = 375 Left = 120 TabIndex = 6 Top = 360 Width = 735 End Begin VB.Label lblSize ForeColor = &H00FF0000& Height = 375 Left = 960 TabIndex = 2 Top = 840 Width = 1815 End End Attribute VB_Name = "frmModem" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private Connected As Boolean
Phm Hng Kim Khnh Trang 109

Ti liu Lp trnh h thng

Chng 4

Private SendFlag As Boolean Private ReceiveFlag As Boolean Private FileReceive As Integer Private CRFlag As Boolean Private Sub cmdBrowse_Click() On Error GoTo Loi diagSend.FileName = "" diagSend.Filter = "All files(*.*)|*.*" diagSend.InitDir = App.Path diagSend.ShowOpen txtSend.Text = diagSend.FileName lblSize.Caption = Str(Round(FileLen(txtSend.Text) / 1024, 2)) + "KB" Exit Sub Loi: lblSize.Caption = "0 KB" txtSend.Text = "" End Sub Private Sub cmdDial_Click() If Not MSComm1.PortOpen Then MsgBox "Comm Port Closed. Open first!!!", vbOKOnly + vbCritical, "Error" ElseIf Trim(txtDial.Text) = "" Then MsgBox "Enter phone's number!!!", vbOKOnly + vbCritical, "Error" Else If cmdDial.Caption = "Dial" Then MSComm1.Output = "ATDT" & Trim(txtDial.Text) + vbCr cmdDial.Caption = "Hang up" lblStatus.Caption = "Dialing ..." Else MSComm1.Output = "ATH1" + vbCr cmdDial.Caption = "Dial" lblStatus.Caption = "Hang up" End If End If End Sub Private Sub cmdExit_Click() If MSComm1.PortOpen Then MSComm1.PortOpen = False End If End End Sub
Phm Hng Kim Khnh Trang 110

Ti liu Lp trnh h thng

Chng 4

Private Sub cmdOpen_Click() MSComm1.PortOpen = Not MSComm1.PortOpen If MSComm1.PortOpen Then cmdOpen.Caption = "Close Port" MSComm1.Output = "ATS0=5" + vbCr Call Form_Load Else cmdOpen.Caption = "Open Port" lblStatus.Caption = "Disconnected" End If End Sub Private Sub cmdSave_Click() FileReceive = FreeFile ReceiveFlag = True Timer1.Enabled = False Do diagSend.FileName = "" diagSend.ShowSave If Trim(diagSend.FileName) = "" Then MsgBox "File name error!!", vbCritical + vbOKOnly, "Error" End If Loop While Trim(diagSend.FileName) = "" txtReceive.Text = diagSend.FileName MSComm1.Output = "RECEIVE" + vbCr Open Trim(txtReceive.Text) For Output As #FileReceive End Sub Private Sub cmdSend_Click() Dim FileNum As Integer Dim Buffer As String If Not MSComm1.PortOpen Then MsgBox "Comm Port Closed. Open first!!!", vbOKOnly + vbCritical, "Error" ElseIf Not Connected Then MsgBox "Not connected!!!", vbOKOnly + vbCritical, "Error" ElseIf Trim(txtSend.Text) = "" Then MsgBox "Select a file to send!!!", vbOKOnly + vbCritical, "Error" Else MSComm1.Output = "SEND" + vbCr Do DoEvents
Phm Hng Kim Khnh Trang 111

Ti liu Lp trnh h thng

Chng 4

Loop While Not SendFlag FileNum = FreeFile Open Trim(txtSend.Text) For Input As #FileNum Do Input #FileNum, Buffer If Right(Buffer, 1) <> vbCr Then Buffer = Buffer + vbCrLf MSComm1.Output = Buffer Loop While Not EOF(FileNum) MSComm1.Output = "END FILE" Close #FileNum SendFlag = False End If End Sub Private Sub Form_Load() Connected = False SendFlag = False ReceiveFlag = False CRFlag = False End Sub Private Sub MSComm1_OnComm() Dim Buffer As String Dim Buffer1 As String Dim Buff As String Dim i As Integer Select Case MSComm1.CommEvent Case comEvRing lblStatus.Caption = "Ringing..." Case comEvCD If MSComm1.CDHolding Then lblStatus.Caption = "Connected" Connected = True Else lblStatus.Caption = "Disconnected" Connected = False End If Case comEvReceive Buffer = MSComm1.Input If InStr(Buffer, "SEND") Then Timer1.Enabled = True Exit Sub End If If InStr(Buffer, "RECEIVE") Then SendFlag = True Timer1.Enabled = False
Phm Hng Kim Khnh Trang 112

Ti liu Lp trnh h thng

Chng 4

Buffer = "" Exit Sub End If If InStr(Buffer, "CONNECT") Then Connected = True lblStatus.Caption = "Connected" Exit Sub End If If ReceiveFlag Then Buffer1 = "" For i = 1 To Len(Buffer) Buff = Mid$(Buffer, i, 1) If Buff = Chr$(13) Then CRFlag = True Buff = "" ElseIf Buff = Chr$(10) Then CRFlag = False Buff = "" If Not CRFlag Then Buffer1 = Buffer1 + Buff End If Next i Print #FileReceive, Buffer1 End If If InStr(Buffer, "END FILE") Then Close #FileReceive Call Form_Load End If Case comEvEOF lblStatus = "Disconnected" Connected = False End Select End Sub Private Sub Timer1_Timer() lblReceive.Visible = Not lblReceive.Visible End Sub Private Sub txtSend_LostFocus() On Error GoTo Loi lblSize.Caption = Str(Round(FileLen(txtSend.Text) / 1024, 2)) + "KB" Exit Sub Loi: lblSize.Caption = "0 KB" txtSend.Text = "" End Sub
Phm Hng Kim Khnh Trang 113

Ti liu Lp trnh h thng

Chng 4

7. Mng 485
Chun RS232 dng ng truyn khng cn bng v cc tn hiu ly chun l GND chung nn d b nh hng ca nhiu lm tc v khong cch truyn b gii hn. Khi mun tng khong cch truyn, mt phng php c th s dng l dng 2 dy truyn vi sai v lc ny 2 dy c cng c tnh nn s loi tr c nhiu chung. Hai chun c s dng l RS422 v RS485 nhng thng thng s dng RS485. in p vi sai yu cu phi ln hn 200mV. Nu VAB > 200 mV th tng ng vi logic 1 v VAB < -200 mV tng ng vi logic 0. Chun RS485 s dng hai in tr kt thc l 120 ti hai u xa nht ca ng truyn v s dng dy xon i.

Hnh 4.13 Chun giao tip RS422

Hnh 4.14 Chun giao tip RS485 Cc c tnh k thut: c tnh S thit b truyn S thit b nhn 1 10 RS422 32 32 RS485

Phm Hng Kim Khnh

Trang 114

Ti liu Lp trnh h thng

Chng 4

Chiu di cable cc i Tc truyn cc i (t 12 1200m) in p ng vo thit b nhn

1200m

1200m -7V 12V -7V 12V

10Mps 100Kbps 10Mps 100Kbps -10V 10V

in p cc i ti ng ra thit b truyn -0.25V 6V

i vi chun RS232, khong cch truyn khng cho php i xa nn khi mun thc hin truyn khong cch xa th phi chuyn t RS232 sang chun RS485 truyn i v sau chuyn t RS485 sang RS232 my tnh c th nhn dng c. S mch chuyn i t RS232 sang RS485 v ngc li m t nh sau:
1 2 3 4 5 6 7 8 CON8 3 10u 4 5 10u 1 6 7 A B RO DI DE RE MAX485 10u 4 3 2 120

1 6 2 7 3 8 4 9 5 DB9 10u

4 13 14 R1IN T1OUT R1OUT T1IN C+ 6 2 10u VR2IN

DI DE RE MAX485

12 11 1

VCC

3 2

A B RO

6 7 1

120

MAX232
T2OUT 7

C1R2OUT 9

V+

T2IN

C2+ C2-

VCC

Hnh 4.15 Chuyn i t RS323 sang RS485 v ngc li

Phm Hng Kim Khnh

10

Trang 115

You might also like