You are on page 1of 41

Ti liu Lp trnh h thng Chng 4

Phm Hng Kim Khnh Trang 75



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 D0 D1 D2 D3 D4 D5 D6 D7 P Stop
0 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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 76

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 15m
Tc d liu cc i 20 Kbps
in p ng ra cc i 25V
in p ng ra c ti 5V n 15V
Tr khng ti 3K n 7K
in p ng vo 15V
nhy ng vo 3V
Tr khng ng vo 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:






Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 77










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 Tn
hiu
Hng
truyn
M t
1 - - - Protected ground: ni t bo v
2 3 TxD DTEDCE Transmitted data: d liu truyn
3 2 RxD DCEDTE Received data: d liu nhn
4 7 RTS DTEDCE Request to send: DTE yu cu truyn d liu
5 8 CTS DCEDTE Clear to send: DCE sn sng nhn d liu
6 6 DSR DCEDTE Data set ready: DCE sn sng lm vic
7 5 GND - Ground: ni t (0V)
8 1 DCD DCEDTE Data carier detect: DCE pht hin sng mang
20 4 DTR DTEDCE Data terminal ready: DTE sn sng lm vic
22 9 RI DCEDTE Ring indicator: bo chung
23 - DSRD DCEDTE Data signal rate detector: d tc truyn
24 - TSET DTEDCE Transmit Signal Element Timing: tn hiu nh thi
truyn i t DTE
15 - TSET DCEDTE Transmitter Signal Element Timing: tn hiu nh thi
truyn t DCE truyn d liu
17 - RSET DCEDTE Receiver Signal Element Timing: tn hiu nh thi
truyn t DCE truyn d liu
18 - LL Local Loopback: kim tra cng
21 - RL DCEDTE Remote Loopback: To ra bi DCE khi tn hiu nhn
t DCE li
14 - STxD DTEDCE Secondary Transmitted Data
16 - SRxD DCEDTE Secondary Received Data
19 - SRTS DTEDCE Secondary Request To Send
13 - SCTS DCEDTE Secondary Clear To Send
12 - SDSRD DCEDTE Secondary Received Line Signal Detector
25 - TM Test Mode
9 - Dnh ring cho ch test
10 - Dnh ring cho ch test
11 Khng dng
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 78

2. Truyn thng gia hai nt
Cc s khi kt ni dng cng ni tip:










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:











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:
TxD

RxD

GND
TxD

RxD

GND

DTE1 DTE2
TxD

RxD

GND
TxD

RxD

GND

DTE DCE
TxD
RxD
GND
RTS
CTS
DSR
DCD
DTR
DTE1 DTE2
TxD
RxD
GND
RTS
CTS
DSR
DCD
DTR
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 79

Tn a ch Ngt V tr cha a ch
COM1 3F8h 4 0000h:0400h
COM2 2F8h 3 0000h:0402h
COM3 3E8h 4 0000h:0404h
COM4 2E8h 3 0000h:0406h

Giao tip ni tip trong my tnh s dng vi mch UART vi cc thanh ghi cho trong
bng sau:
Offset DLAB R/W Tn Chc nng
0 W THR Transmitter Holding Register (m truyn)
0 R RBR Receiver Buffer Register (m thu) 0
1 R/W BRDL Baud Rate Divisor Latch (s chia byte thp)
0 R/W IER Interrupt Enable Register (cho php ngt)
1
1 R/W BRDH S chia byte cao
R IIR Interrupt Identification Register (nhn dng ngt)
2
W FCR FIFO Control Register
3 R/W LCR Line Control Register (iu khin ng dy)
4 R/W MCR Modem Control Register (iu khin MODEM)
5 R LSR Line Status Register (trng thi ng dy)
6 R MSR Modem Status Register (trng thi MODEM)
7 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 BA
COM1
+ 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 D0
00: khng c
FIFO
11: cho php
FIFO
Cho php FIFO 64
byte (trong 16750)
- 1: ngt time-out
(trong 16550)
Xc nh ngun
gc ngt
0: c
ngt
1: khng
ngt










D2 D1 u
tin
Tn Ngun D2 D0 b xo
khi
0 0 4 ng
truyn
Li khung, thu , li parity, gin on
khi thu
c LSR
0 1 3 m thu m thu y c RBR
1 0 2 m pht m pht rng c IIR, ghi
THR
1 1 1 Modem CTS, DSR, RI, RLSD c MSR
(mc 1 u tin cao nht)
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 80

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








MCR (Modem Control Register):

D7 D6 D5 D4 D3 D2 D1 D0
- - - LOOP OUT2 OUT1 RTS DTR






MSR (Modem Status Register):

D7 D6 D5 D4 D3 D2 D1 D0
RLSD RI DSR CTS RLSD RI DSR CTS






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).
Cho php kiu
cng sut thp
Cho php khi li
modem
Cho php kiu
ngh (hibernate)
Cho php khi li
thu, pht
Cho php khi
THR rng
Cho php khi
RBR y
Mode loopback:
kim tra hot
ng ca UART
iu khin 2 ng ra
2 OUT , 1 OUT ca
UART
iu khin tn hiu
RTS v DTR
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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 81

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) BRDH BRDL
1,200 00h 60h
2,400 00h 30h
4,800 00h 18h
9,600 00h 0Ch
19,200 00h 06h
38,400 00h 03h
57,600 00h 02h
115,200 00h 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 M t
X X 0 Khng kim tra
0 0 1 Kim tra l
0 1 1 Kim tra chn
1 0 1 Parity l mark
1 1 1 Parity l space
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 82

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 5 bit
0 1 6 bit
1 0 7 bit
1 1 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 AH,35h
MOV AL,Com_int
INT 21h
MOV Seg_com,ES ; Lu vector ngt c
MOV Off_com,BX

PUSH DS
MOV BX,CS
MOV DS,BX
LEA DX,Com_ISR
MOV AH,35h ;Gn vector ngt mi
MOV AL,Com_int
INT 21h
POP DS

MOV DX,Com1+3 ; a ch LCR
MOV AL,80h ; Set DLAB = 1 cho php nh tc
OUT DX,AL ; truyn d liu
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 83


MOV DX,Com1 ; Gi byte thp
MOV AL,0Ch
OUT DX,AL

MOV DX,Com1+1
MOV AL,00h ; Gi byte cao 000Ch: xc nh
OUT DX,AL ; tc truyn 9600bps

MOV DX,Com1+3 ; LCR = 0000 0011B
MOV AL,03h ; DLAB = 0, SBCB = 0 cm Break
OUT DX,AL ; PS = 000 no parity
; STB = 0 1 stop bit
; WLS = 11 8 bit d liu

MOV DX,Com1+4 ; Tc ng n DTR v RTS
MOV AL,03h ; MCR = 0000 0011b DTR=RTS = 1
OUT DX,AL ; ng DTR v RTS ca cng ni
; tip = 0

MOV DX,21h ; Kim tra trng thi ngt
IN AL,DX ; D7 D0 xc nh cc IRQi
MOV Mask_int,AL ; =0: cho php, =1: cm

AND AL,0EFh ; = 1110 1111b cho php IRQ4
OUT DX,AL ; cho php COM1

MOV AL,01h ; IER = 0000 0001b cho php
MOV DX,Com1+1 ; ngt khi RBR y
OUT DX,AL

MOV AH,09h
LEA Dx,Msg
INT 21h

Lap:
MOV AH,0Bh
INT 21h
CMP AL,0FFh
JE Exit

MOV AL,bufferin
CMP AL,bufferout
JE Lap
MOV AL,buffer[bufferout]
MOV char,AL
INC bufferout
MOV AL,bufferout
CMP AL,251
JNE Next
MOV bufferout,0
Next:
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 84

MOV DL,char ; Xut gi tr ra mn hnh
MOV AH,02h
INT 21h

MOV AL,char ; Xut ra cng ni tip
MOV DX,Com1
OUT DX,AL
JMP Lap

Exit:
MOV AL,Mask_int
OUT 21h,AL ; Khi phc trng thi ngt

MOV DX,Off_com
MOV BX,Seg_com
MOV DS,BX
MOV AH,35h ;Khi phc vector ngt
MOV AL,Com_int
INT 21h


MOV AH,4Ch
INT 21h
Main ENDP

Com_ISR PROC
MOV DX,Com1+5 ; c ni dung LSR
IN AL,DX
AND AL,1 ; Nu D0 = 1 th c d liu
JZ exit_ISR

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:
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 85

- 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: v cc thuc tnh c bn m t nh sau:

Thuc tnh M t
CommPort S th t cng truyn thng
Input Nhn k t t b m
Output Xut k t ra cng ni tip
PortOpen M / ng cng
Settings Xc nh cc tham s truyn

Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 86

















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 38400
300 9600 (mc nh) 56000
600 14400 188000
1200 19200 256000
P: kim tra chn l, vi cc gi tr:
Gi tr M t
O Odd (kim tra l)
E Even (kim tra chn)
M Mark (lun bng 1)
S Space (lun bng 0)
N Khng kim tra
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 87

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 99, mc nh l 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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 88

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:
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 89

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 Gi tr M t
ComNone
ComXon/Xoff
ComRTS
ComRTSXon/Xoff
0
1
2
3
Khng bt tay (mc nh)
Bt tay phn mm (Xon/Xoff)
Bt tay phn cng (RTS/CTS)
Bt tay phn cng v phn mm

CommEvent:
Tr li cc li truyn thonog hay s kin xy ra ti cng ni tip
Cc s kin:
S kin Gi tr M t
ComEvSend
ComEvReceive
ComEvCTS
ComEvDSR
ComEvCD
ComEvRing
ComEvEOF
1
2
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

Cc li truyn thng:
Li Gi tr M t
ComBreak
ComCTSTO
ComFrame
ComOver
ComCDTO
ComRxOver
ComRxParity
ComTxFull
1001
1002
1004
1006
1007
1008
1009
1010
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

Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 90

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:










Hnh 4.8 Ca s chng trnh loopback
Chng trnh ngun:
VERSION 5.00
Object = {648A5603-2C6E-101B-82B6-
000000000014}#1.1#0; MSCOMM32.OCX
Textbox cha
cc k t gi
Textbox cha
cc k t nhn
i tng
MSComm
Yu cu truyn
d liu
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 91

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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 92

_Version = 393216
DTREnable = -1 True
RThreshold = 1
End
Begin VB.Label Label2
Caption = Receive:
Height = 375
Left = 240
TabIndex = 2
Top = 1200
Width = 855
End
Begin VB.Label Label1
Caption = Transmit:
Height = 375
Left = 240
TabIndex = 1
Top = 240
Width = 975
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()
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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 93

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:








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
in. S mch cch ly m t nh sau:











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:
R1IN
13
R
2
I
N
8
T1IN
11
T
2
I
N
1
0
C+
1
C1-
3
C2+
4
C2-
5
V+
2
V-
6
R1OUT
12
R
2
O
U
T
9
T1OUT
14
T
2
O
U
T
7
MAX232 5
9
4
8
3
7
2
6
1
DB9
C25
10u
C26
10u
C27
10u
VCC
C28
10u
C29
10u
TxD
RxD
4.7K
TxD
1 6
2
5
4
4N35
1 6
2
5
4
4N35
1K
VCC
4.7K
68K
RxD_PC RxD_PC
TxD_PC
5
9
4
8
3
7
2
6
1
2.2K
RTS
RxD
VCC
DTR
_PC
_PC


SW DIP-8
1
2
3
4
5
6
7
8
9
330
R1IN
13
R
2
I
N
8
T1IN
11
T
2
I
N
1
0
C+
1
C1-
3
C2+
4
C2-
5
V+
2
V-
6
R1OUT
12
R
2
O
U
T
9
T1OUT
14
T
2
O
U
T
7
MAX232 5
9
4
8
3
7
2
6
1
10u
C26
10u
C27
10u
VCC
C28
10u
C29
10u
RST
9
XTAL2
18
XTAL1
19
PSEN
29
ALE/PROG
30
EA/VPP
31
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
P2.7/A15
28
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.5/T1
15
P3.6/WR
16
P3.7/RD
17
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
AT89C51
11.059MHz
33p
C31
VCC
1 2
74LS04
3 4
74LS04
5 6
74LS04
9 8
74LS04
11 10
74LS04
13 12
74LS04
1 2
74LS04
VCC
3 4
74LS04
1
2
3
4
5
6
7
8
9
330
LED
LED
LED
LED
LED
LED
LED
LED



















Hnh 4.11 Kt ni vi vi iu khin

P
h

m

H

n
g

K
i
m

K
h

n
h









T
r
a
n
g

7
7
T

i

l
i

u

L

p

t
r

n
h

h


t
h

n
g








C
h

n
g

4
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 95

Chng trnh ngun cho vi iu khin AT89C51:
MOV TMOD,#20h
MOV SCON,#52h ; Truyn 8 bit d liu, no parity
MOV TH1,#(-3) ; Tc truyn 9600 bps
MOV TL1,#(-3)
SETB TR1

Receive:
JNB RI,Transmit ; C d liu hay khng
CLR RI
MOV A,SBUF ; Nu c th xut ra LED
MOV P1,A
Transmit:
JNB TI,Receive ; truyn xong cha
CLR TI
MOV A,P2 ; Nu xong th truyn trng thi
MOV SBUF,A ; ca cng tc SW DIP-8
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-82B6-
000000000014}#1.1#0"; "MSCOMM32.OCX"
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 96

Begin VB.Form Form1
Caption = "Microcontroller Interface
Example"
ClientHeight = 4665
ClientLeft = 60
ClientTop = 345
ClientWidth = 4020
LinkTopic = "Form1"
ScaleHeight = 4665
ScaleWidth = 4020
StartUpPosition = 3 'Windows Default
Begin VB.CheckBox chkSW
Height = 375
Index = 7
Left = 1800
TabIndex = 17
Top = 3480
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 6
Left = 1800
TabIndex = 16
Top = 3000
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 5
Left = 1800
TabIndex = 15
Top = 2520
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 4
Left = 1800
TabIndex = 14
Top = 2040
Width = 1575
End
Begin VB.CheckBox chkSW
Height = 375
Index = 3
Left = 1800
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 97

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"
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 98

Height = 495
Left = 240
TabIndex = 8
Top = 3960
Width = 1095
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED7"
Height = 375
Index = 7
Left = 240
TabIndex = 7
Top = 3480
Width = 1095
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED6"
Height = 375
Index = 6
Left = 240
TabIndex = 6
Top = 3000
Width = 975
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED5"
Height = 375
Index = 5
Left = 240
TabIndex = 5
Top = 2520
Width = 975
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED4"
Height = 375
Index = 4
Left = 240
TabIndex = 4
Top = 2040
Width = 975
End
Begin VB.Label lblLED
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 99

BackStyle = 0 'Transparent
Caption = "LED3"
Height = 375
Index = 3
Left = 240
TabIndex = 3
Top = 1560
Width = 975
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED2"
Height = 375
Index = 2
Left = 240
TabIndex = 2
Top = 1080
Width = 975
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED1"
Height = 375
Index = 1
Left = 240
TabIndex = 1
Top = 600
Width = 975
End
Begin VB.Label lblLED
BackStyle = 0 'Transparent
Caption = "LED0"
Height = 375
Index = 0
Left = 240
TabIndex = 0
Top = 120
Width = 975
End
Begin VB.Shape shpLED
BorderColor = &H000000FF&
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 375
Index = 7
Left = 840
Shape = 3 'Circle
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 100

Top = 3480
Width = 375
End
Begin VB.Shape shpLED
BorderColor = &H000000FF&
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 375
Index = 6
Left = 840
Shape = 3 'Circle
Top = 3000
Width = 375
End
Begin VB.Shape shpLED
BorderColor = &H000000FF&
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 375
Index = 5
Left = 840
Shape = 3 'Circle
Top = 2520
Width = 375
End
Begin VB.Shape shpLED
BorderColor = &H000000FF&
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 375
Index = 4
Left = 840
Shape = 3 'Circle
Top = 2040
Width = 375
End
Begin VB.Shape shpLED
BorderColor = &H000000FF&
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 375
Index = 3
Left = 840
Shape = 3 'Circle
Top = 1560
Width = 375
End
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 101

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()
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 102

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.
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 103

- 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.
Cc giao thc truyn d liu trn Modem:
- 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.
Quy tc truyn lnh trn Modem:
- 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.
6.2. Cc lnh c bn ca Modem

Lnh M t
+++ Chuyn Modem sang ch lnh
A/ Lp li lnh trc
A 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
DPn Quay s in thoi n dng xung
DTn Quay s in thoi n dng tone
H0 Gc my
H1 Nhc my
O0 Chuyn v ch d liu
O1 Ch iu chnh Modem
Q0 Cho php Modem gi thng bo n DTE (mc nh)
Q1 Cm Modem gi thng bo
Q2 Gi thng bo khi Modem ch ng kt ni, khng gi khi Modem nhn cuc
gi
V0 Nhn thng bo dng s
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 104

V1 Nhn thng bo dng k t (mc nh)
Sn = V 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,
L2, L3
m lng loa Modem
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.
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 105

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







Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 106

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-82B6-
000000000014}#1.1#0"; "MSCOMM32.OCX"
Object = "{F9043C88-F6F2-101A-A3C9-
08002B2F49FB}#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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 107

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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 108

Width = 1215
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."
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 109

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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 110

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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 111


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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 112

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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 113

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
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 114

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 V
AB
> 200 mV th tng ng vi logic 1 v V
AB
< -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 RS422 RS485
S thit b truyn 1 32
S thit b nhn 10 32
Ti liu Lp trnh h thng Chng 4
Phm Hng Kim Khnh Trang 115

Chiu di cable cc i 1200m 1200m
Tc truyn cc i (t 12 1200m) 10Mps 100Kbps 10Mps 100Kbps
in p cc i ti ng ra thit b truyn -0.25V 6V -7V 12V
in p ng vo thit b nhn -10V 10V -7V 12V

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:










Hnh 4.15 Chuyn i t RS323 sang RS485 v ngc li





RO
1
DI
4
RE
2
DE
3
A
6
B
7
MAX485
120
120
VCC
1
2
3
4
5
6
7
8
CON8
R1IN
13
R
2
I
N
8
T1IN
11
T
2
I
N
1
0
C+
1
C1-
3
C2+
4
C2-
5
V+
2
V-
6
R1OUT
12
R
2
O
U
T
9
T1OUT
14
T
2
O
U
T
7
MAX232 5
9
4
8
3
7
2
6
1
DB9 10u
10u
10u
VCC
10u
10u
RO
1
DI
4
RE
2
DE
3
A
6
B
7
MAX485

You might also like