Professional Documents
Culture Documents
I. 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. 1 . Chun RS-232. Ti sao phi quy nh chun? cc thit b my in,my tnh vi iu khin,rbt goi chung l cc thit b thu pht c th lm vic hiu qu v khng gp rc ri khi lm vic phi hp t lu ng ta t ra cc tiu chun (VD nh tiu chun tc truyn,cch kim sot li trong qu trnh truyn,mc in p khi truyn )cho cc cng vo ra tn hiu ca cc thit b.RS-232 l mt trong nhng chun .Chun ny ra i 1962(bi EIA) 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 Chun RS- 232 s dng phng thc truyn thng khng i xng, tc l s dng tn hiu in p chnh lch gia mt dy dn v t. Cc cng ca RS 232 c ngng in p qui c l -15V (volt) ti -3V , v 3V ti 15V (hoc -5V, +5V, s khc bit gia hai gi tr 3, v 5V ny c gi l noise magin - bin dao ng ca nhiu). Tn hiu c p ln +3V c coi c logic 0 hoc c gi tr cao (H) Tn hiu c p nh hn 3V c coi c logic 1 hoc gi tr thp (L). in p t -3V ti +3V khng c ngha. Chnh v t 3V ti 3V l phm vi khng c nh ngha, trong trng hp thay i gi tr logic t thp ln cao hoc t cao xung thp, mt tn hiu phi vt qua qung qu trong mt th gian ngn hp l. iu ny dn n vic phi hn ch
v in dung ca cc thit b tham gia v ca c ng truyn. Tc truyn dn ti a ph thuc vo chiu di ca dy dn. a s cc h thng hin nay ch h tr vi tc 19,2 kBd (chiu di cho php 30 50 m). 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 Tr khng ti 3K n 7K in p ng vo 15V nhy ng vo 3V Tr khng ng vo 3K n 7K ng ni tip l: 1200 bps, 4800 bps, 9600 bps v 19200 bps. b. Ch lm vic ca h thng RS-232: L 2 chiu ton phn ,tc l 2 thit b tham gia thu v pht cng mt chu k .Nh vy vic thc hin truyn thng cn ti thiu 3 dy dn trong 2 dy tn hiu ni cho vi cng u thu pht ca 2 chm v mt dy t i cu hnh ti thiu ny,vic m bo an ton truyn dn thuc v trch nhim phn mm.RS-232 c mt u im c th s dng cng sut pht ra tng i thp,nh tr khng u vo hn ch trong phm vi t 3-7Kom.Trong cc rle s thng dng loai gic cm 9 chn v 25 chn.Chun RS-232 quy nh mc p,tc truyn v chc nng cc chn ca gic. c. Cc ng d liu ca chun RS-232 - TxD: D liu c truyn i t Modem trn mng in thoi. - RxD: D liu c thu bi Modem trn mng in thoi. 1.5 Cc ng bo thit b sn sng: - DSR : bo rng Modem sn sng. - DTR : bo rng thit b u cui sn sng - Cc ng bt tay bn song cng. - RTS : bo rng thit b u cui yu cu pht d liu. - CTS : Modem p ng nhu cu cn gi d liu ca thit b u cui cho thit b u cui c th s dng knh truyn d liu. Cc ng trng thi sng mang v tn hiu in thoi: - CD : Modem bo cho thit b u cui bit rng nhn c mt sng mang hp l t mng in thoi. - RI : Cc Modem t ng tr li bo rng pht hin chung t mng in thoi a ch u tin c th ti c ca cng ni tip c gi l a ch c bn (Basic Address). Cc a ch ghi tip theo c t ti bng vic cng thm s thanh ghi gp ca b UART vo a ch c bn. - Mc tn hiu trn chn ra RxD ty thuc vo ng dn TxD v thng thng nm trong khong 12 n +12. Cc bit d liu c gi o ngc li. Mc in p i vi mc High nm gia 3V v 12V v mc Low nm gia +3V v +12V. Trn hnh 2-4 m t mt dng d liu in hnh ca mt byte d liu trn cng ni tip RS232C. - trng thi tnh trn ng dn c in p 12V. Mt bit khi ng (Starbit) s m u vic truyn d liu. Tip l cc bit d liu ring l s n, trong cc bit
gi tr thp s c gi trc tin. Cn s ca cc bit thay i gia 5 v 8. cui ca dng d liu cn c mt bit dng (Stopbit) t tr li trng thi ng ra (-12V) Cng ni tip RS232 l mt giao din ph bin rng ri nht. Ngi ta cn gi cng ny l cng COM1, cn cng COM2 t do cho cc ng dng khc. Ging nh cng my in cng COM cng c s dng mt cch thun tin cho vic giao tip vi thit b ngoi vi. Vic truyn d liu qua cng COM c tin hnh theo cch ni tip. Ngha l cc bit d liu c truyn i ni tip nhau trn mt ng dn. Loi truyn ny c kh nng dng cho nhng ng dng c yu cu truyn khong cch ln hn, bi v cc kh nng gy nhiu l nh ng k hn khi dng mt cng song song (cng my in). Cng COM khng phi l mt h thng bus n cho php d dng to ra lin kt di hnh thc im vi im gia hai my cn trao i thng tin vi nhau, mt thnh vin th ba khng th tham gia vo cuc trao i thng tin ny. Cc chn v ng dn c m t nh sau:
Phch cm COM c tng cng 8 ng dn, cha k n ng ni t. Trn thc t c hai loi phch cm, mt loi 9 chn v mt loi 25 chn. C hai loi ny u c chung mt c im. Vic truyn d liu xy ra trn hai ng dn. Qua chn cm ra TXD my tnh gi d liu ca n n KIT Vi iu khin. Trong khi cc d liu m my tnh nhn c, li c dn n chn RXD cc tn hiu khc ng vai tr nh l tn hiu h tr khi trao i thng tin, v v th khng phi trong mi trng hp ng dng u dng ht.
Cc tc truyn d liu thng dng trong cng ni tip l: 1200 bps, 4800 bps, 9600 bps v 19200 bps
S 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:
DTE1 DTE2 S 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:GII THIU VI MCH GIAO TIP MAX 232. V tn hiu cng COM thng mc +12V, -12V nn khng tng thch vi in p TTL nn giao tip KIT Vi iu khin 8051 vi my tnh qua cng COM ta phi qua mt vi mch bin i in p cho ph hp vi mc TTL, ta chn vi mch MAX232 thc hin vic tng thch in p. Vi mch MAX 232 ca hng MAXIM l mt vi mch chuyn dng trong giao din ni tip vi my tnh. Chng c nhim v chuyn i mc TTL li vo thnh mc +10V hoc 10V pha truyn v cc mc +3+15V hoc -3-15V thnh mc TTL pha nhn.
Vi mch MAX 232 c hai b m v hai b nhn. ng dn iu khin li vo CTS, iu khin vic xut ra d liu cng ni tip khi cn thit, c ni vi chn 9 ca vi mch MAX 232. Cn chn RST (chn 10 ca vi mch MAX ) ni vi ng dn bt tay iu khin qu trnh nhn. Thng th cc ng dn bt tay c ni vi cng ni tip qua cc cu ni, khi khng dng n na c th h mch cc cu ny. Cch truyn d liu n gin nht l ch dng ba ng dn TxD, RxD v GND II.Mt s ngn ng trong lp trnh giao tip ni tip: 1.LP TRNH TRONG DOS: Ngn ng Lnh khi ng cng COM n: OPEN COM n, [Baud], [Parity], [Data], [Stop] for RANDOM as #m trong n = 1, 2, 3, 4; m = 1 255 V d: OPEN COM 2, 9600, E, 7, 2 FOR RANDOM AS #1 Lnh xut ra mt chui S $ PRINT #1 , S $ Lnh c vo mt chui R $ INPUT # 1, R $ Ngoi ra cn cc lnh truy xut thanh ghi ca vi mch UART Ngn ng Pascal v C Dng cc lnh truy xut thanh ghi nh chng 7
Trong MS DOS dng lnh nh MODE COM n : 96, E, 7, 1 s m COM n 2.LP TRNH NGN NG VISUAL BASIC 6.0 Ngn ng Visual Basic c module phn mm MSCOMM.OCX phc v cho truyn thng, vi Visual Basic 4.0 l MSCOMM16.OCX cn vi Visual Basic 6.0 l MSCOMM32.OCX Mun ci trnh n truyn thng vo thanh cng c ta vo Project- Components Controls chn Microsoft Comm Control 6.0/ OK (Hnh 8.1), biu tng hnh in thoi s hin trn thanhcng c. C th nhp chut kp a vo form ca chng trnh. Cc bc trn c th lm tt bng phm Ctrl T. Thnh phn Comm khi mi a vo form thng c gn tn MSComm1 cho cng Com1 v ta c th sa tn hay thay i cng com ty .
Cc tnh cht chnh ca trnh n l Commport, DTREnable, EOFEnable, Handshaking, InBuffersize, InputLen, InputMode,NullDiscard, OutBuffersize, ParityReplace, Rthreshold, RTSEnable, Settmgs, Sthreshold c t khi vit chng trnh, c th thay i khi chy chng trnh bng cc lnh iu khin.
t cu hnh cng Object.Settings [= Value] Value = BBBB, P, D, S Ga tr mc nh l 9600, N, 8, 1. Trong trng hp t sai gi
tr s bo s c.
Sau y l cc gi tr cho php: 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 d:
MSComm2. Settings = 9600, N, 8, 1
M cng Object.PortOpen [= True/ False] Value = True : m cng Value = False : ng cng v xa b m truyn thu, Cng t ng ng khi kt thc chng trnh p dng.
Nhp d liu
String$= Object.Input D liu chui b m thu c c vo bin String$ . Lin quan n c d liu c cc lnh sau: Object.InputLen [= numByte%]
InputLen: qui nh s k t c bi Input. Chn InputLen =
0 s cho c ton b vng b m. Object.InbufferSize = [numbyte%] InBufferSize t v tr v kch thc theo byte ca m thu, mc nh l 1024. Object.InbufferCount [= Count%] InbufferCount: cho bit s k hiu c trong b m nhn. Xa b m bng cch cho InbufferCount = 0 Object.InputMode [= value] InputMode: cho bit loi d liu l vn bn hay nh phn Value = 0 : ComInputModeText Value = 1 : ComInputModeBinary
V d:
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 Arr = Buffer
Xut d liu
Object.Output [= value] Xut chui k t hay chui nh phn ra cng COM. Ging nh nhp d liu ta c cc lnh h tr. OutBufferSize: t v tr li kch thc b m truyn OutBufferCount: tr li s k t trong b m truyn.
V d: gi k t nhn phm
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 d: gi chui k t MsComm1.Output = "This is a text string gi s nh phn Dim Out( ) As Byte MsComm1.Output = Out
Gi tn hiu Break object.Break [= True/False] c chn DCD inCD= object. CDHolding nu inCD True th DCD mc cao, nu False DCD mc thp. t thi gian ch sng mang object. CDTimeout [= milliseconds] Ch khong thi gian cho DCD mc cao, nu ht thi gian m CDHolding = false th to s kin onComm CDTO (carrier detect Timeout Error). c CTS object. CTS Holding True: mc 1, False: mc 0 t thi gian ch CTS Khi DTE gi RTS th modem phi gi tr li CTS, tnh cht object. CTSTimeout nh thi gian ch, nu qu thi gian m khng c CTS th to s kin CTSTO. c DSR object. DSRHolding t thi gian ch DSR object. DSRTimeout iu khin DTR object. DTREnable [=True/False] nu True th DTR mc 1 khi m cng v mc 0 khi ng cng, nu False th DTR mc 0 iu khin RTS object. RTSEnable [ =True/False] Khi True RTS s mc 1 khi m cng v mc 0 khi ng cng Sthreshold: t s byte c trong b m truyn bo s kin. Nu Sthreshold = 1 th s gi onComm khi b m truyn rng. Nu Sthreshold = 0 th khng gi. t s byte ca b m thu ti thiu bo s kin
object. Rthreshold [= value] Nu t bng 1 th s gi onComm khi nhn c 1 k t. Nu t bng 0 th khng gi. Giao thc bt tay object.Handshaking [= value] Value = 0 khng bt tay Value = 1 bt tay theo RTS/CTS =2 XON/XOFF =3 RTS/XON/XOFF V d:
Private Sub Form_Load ( ) Dim Buffer$ as string Dng COM 1, 9600 baud, khng parity, 8 bit data, 1 bit stop MSComm1. Comport = 1 MSComm1. Settings = 9600, N, 8, 1 c ton b b m MSComm1. Inputlen = 0 M cng v gi lnh n modem ch tr li bng ch MSComm1. PortOpen = True MSComm1. Output = ATV1Q0 & Chr$(13) Ch tr li OK, nu c OK th ng cng Do DoEvents Buffer$ = Buffer$ & MSComm1. Input Loop Until InStr (Buffer$, OK & vbCrLf) MSComm1. PortOpen = False End Sub
Chng trnh trn dng k thut hi vng. Ta c th dng k thut s kin object.CommEvent. Khi c s kin xy ra chng trnh cho cng object_OnComm () s c gi x l cc s kin hay cc li. V d:
Private Sub MSComm1_OnComm ( ) Select Case MSComm1. CommEvent X l s kin hay li bng cch t lnh di mi pht biu Case Li Case ComEventBreak Nhn Break Case ComEventFrame Sai frame Case ComEventOverrun Mt d liu Case ComEventRXOver m thu trn Case ComEventRXParity Sai Parity Case ComEventTXFull m pht y Case ComEventDCB Sai khi c DCB S kin Case ComEvCD ng CD thay i
Case ComEvCTS CTS thay i Case ComEvDSR DSR thay i t 1 xung 0 Case ComEvRing RI thay i Case ComEvReceive S byte m thu t mc Rthreshold Case ComEvSend S byte m pht t hn Sthreshold Case ComEvEOF Nhn k t EOF kt thc file (m ASCII 26) trong chui nhp End Select End Sub.
Option Explicit ' Variable names beginning with A through Z default to Integer. DefInt A-Z 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. 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() ' Close the port. MSComm1.PortOpen = False End End Sub
Cc lnh MSComm trong Delphi tng t trong Visual Basic. i vi Visual C th lp trnh MSComm phc tp hn, sau y l v d ci t MSComm trong Visual C Lp trnh
MSCOMM trong Visual C++ phc tp hn lp trnh trong Visual Basic v Delphi, cc hm ca lp CMScomm c nh ngha trong mscomm.h, sau y l mt on trong file ny cn tham kho gi hm cho 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); 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(); V d mun truyn chui what ta dng on lnh sau CString strOutput = "What"; UCHAR myData = 0x00; strOutput += myData; m_Comm.SetPortOpen(true); // m cng m_Comm.SetOutput(COleVariant(strOutput));
III.
Mt s ng dng:
1. ng dng giao tip gia my tinh v vi iu khin 8051. a) S kt ni gia 8051 v my tnh. Khi thc hin giao tip vi vi iu khin ,ta phi dng thm mch chuyn mc logic t TTL n 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:
Mch chuyn mc logic TTL v RS232 Tuy nhin,khi s dng mach 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 ngoi .Do ta c th dng thm opto 4N35 cch ly v in v
S thc thc t
Vi mch ny nhn mc RS232 c gi ti t my tnh v bin i tn hiu ny thnh tn hiu TTL cho tng thch vi IC 8051 v n cng thc hin ngc li l bin i tn hiu TTL t Vi iu khin thnh mc +12V, -12V cho ph hp hot ng ca my tnh. Giao tip theo cch ny, khong cch t my tnh n thit b ngoi vi c th t ti trn 20 mt. u im ca giao din ny l c kh nng thit lp tc Baud. Khi d liu t my tnh c gi n KIT Vi iu khin 8051 qua cng COM th d liu ny s c a vo tng bit (ni tip) vo thanh ghi SBUF (thanh ghi m), n khi thanh ghi m y th c RI trong thanh ghi iu khin s t ng Set ln 1 v lc ny CPU s gi chng trnh con phc v ngt v d liu s c a vo x l. b) Lp trnh 8051 truyn d liu ni tip. Khi lp trnh 8051 truyn cc byte k t ni tip th cn phi thc hin cc bc sau y: 1. Np thanh ghi TMOD gi tr 204 bo rng s dng Timer1 ch 2 thit lp ch baud. 2. Np thanh ghi TH1 cc gi tr cho trong bng 2 thit lp cho ch baud truyn d liu ni tip ( Vi gi thit tn s XTAL=11.0592 MHz) 3. Np thanh ghi SCON gi tr 50H bo ch ni tip 1 ng khung 8 bt d liu, mt bt Start v mt bt Stop. 4. Bt TR1 =1 khi ng Timer1. 5. Xo bt TI bng lnh CLR TI 6. Byte k t cn phi truyn c ghi vo SBUF. 7. Bt c TI c hin th bng lnh JNB TI, xx bo k t c truyn hon
V d 1: Hy vit chng trnh cho 8051 truyn ni tip mt k t A vi tc 4800 baud lin tc. Li gii: MOV TMOD, # 20 H ; Chn Timer1 , ch 2( t ng np li) MOV TH1, #-6 ; chn tc 4800 baud MOV SCON , #A ; Truyn 8 bt d liu, 1 bt stop cho php thu SETB TR1 ; Khi ng timer1 AGAIN: MOV SBUF, #A ; cn truyn k t A HERE: JNB TI, HERE &n bsp; ; Ch n bt cui cng CLR TI ; Xo bt TI cho k t k tip SJMB AGAIN ; Tip tc gi li ch A
4.5 Lp trnh 8051 nhn d liu. Trong lp trnh ca 8051 nhn cc byte k t ni tip th phi thc hin cc bc sau y. 1. Np gi tr 20H vo thanh ghi TMOD bo s dng b Timer1, ch 2(8 bt t ng np li) thit lp tc baud. 2. Np TH1 cc gi tr cho trong bng 2 to ra tc baud vi gi thit XTAL= 10.0592 MHz. 3. Np gi tr 50 H vo thanh ghi SCON bo s dng ch truyn ni tip 1 l d liu c ng gi bi 8 bt d liu, 1 bt Start v 1 bt Stop. 4. Bt TR1=1 khi ng Timer1. 5. Xo c ngt RI bng lnh CLR RI 6. Bt c RI c hin th bng lnh JNB RI,xx xem ton b k t c nhn cha . 7. Khi RI c thit lp th trong SBUF c 1 byte. Cc ni dung ca n c ct lu vo mt ni an ton. 8. nhn mt k t tip theo quay tr v bc 5. V d 2: Hy lp trnh 8051 nhn cc byte d liu ni tip v t chng vo cng P1. t tc baud l 4800, 8 bt d liu v 1 bt Stop1. Li gii: MOV TMOD, #20H ; chn b Timer1, ch 2 ( t ng np li) MOV TH1, # -6 ; chn tc 4800 baud. MOV SCON , #50H ; chn khung d liu 8 bt Stop, bt.
SETB TR1 ; khi ng b Timer1 HERE: JNB R1, HERE ; i nhn ton b l t vo ht MOV A , SBUF ; lu ct k t vo thanh A MOV P1, A ; gi ra cng P1 CLR RI ; sn sng nhn byte k tip. SJMP HERE ; tip tc nhn d liu
V d 3: Gi s cng ni tip ca 8051 c ni vo cng COM ca my tnh IBM CP v m ang s dng chng trnh Termina. Exe gi v nhn d liu ni tip. Cng P1 v P2 ca 8051 c ni ti cc u LED v cc cng tc chuyn mch tng ng. Hy vit mt chng trnh cho 8051. a, Gi thng bo We are ready (chng ti sn sng) ti my PC . b, Nhn bt k d liu g c Pc gi n v chuyn n cc n LED ang ni n cc chn ca cng P1. c, Nhn d liu trn cc chuyn mch c ni ti P2 v gi n ti my tnh PC ni tip. Chng trnh phi thc hin mt ln a, nhng b, v c chy lin tc vi tc 4800 baud. Li gii: ORG 0 MOV P2, #OFH ;Ly cng P2 lm cng vo MOV TMD, #20H ;Chn b Timer1, ch 2 ( t ng np li) MOV TH1, # AH ;Chn tc 4800 baud MOV SCON, #50H ;To khung d liu 8 bt, 1 bt Stop cho php REN SETB TR1 ; Khi ng b Timer1 MOV DPTR, #MYDATA ; Np con tr n thng bo H - 1: CLR A MOVC A, A + DPTR ; Ly k t JZ DPTR ;Nu k t cui cng mun gi ra ACALL SEND ;Nu cha th gi chng trnh con SEND INC DPTR ; Chy tip SJMP H - 1 ; Quay li vng lp B - 1: MOV A, P2 ; c d liu trn cng P2 ACALL RECV ; Truyn n ni tip ACALL RECV ; Nhn d liu ni tip MOV F1, A ; Hin th n ra cc n LED SJMP B - 1 ; li vng lp v hn ; _ _ _ _ _ Truyn d liu ni tip ACC c d liu SEND: MOV SBUF, A ; Np d liu H- 2: JNB TI, H - 2 ; li vng lp v hn CLR TI ; Truyn d liu ni tip RET ; Nhn d liu ; _ _ _ _ _ Truyn d liu ni tip ACC c d liu
RECV: JNB RI, RECV ; Np d liu MOV A, SBUF ; li y cho n khi gi bt cui cng CLR RI ; Sn sng cho k t mi RET ; Tr v mi gi ; _ _ _ _ _ Nhn d liu ni tip trong ACC RECV : JNB RI, RECV ; i y nhn k t MOV A, SBUF ; Lu n vo trong ACC CLR RI ; Sn sng nhn k t m tip theo RET ; Tr v ni gi ; _ _ _ _ _ Ngn xp cha thng bo MYRATA : DB Chng ti sn sng 0 END V d: ghp ni vi iu khin 8951 iu khin led 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 LED3: CJNE A,#33H,NEXT CPL P0.2 ACALL SUB_TXD SJMP INDEX CJNE A,#34H,NEXT CPL P0.3 ACALL SUB_TXD SJMP INDEX CJNE A,#35H,NEXT CPL P0.4 ACALL SUB_TXD SJMP INDEX CJNE A,#36H,NEXT CPL P0.5 ACALL SUB_TXD SJMP INDEX CJNE A,#37H,NEXT CPL P0.6 ACALL SUB_TXD SJMP INDEX RET MOV SBUF,#43 JNB TI,$ CLR TI RET END
LED4:
LED5:
LED6:
LED7:
NEXT: TXD :
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 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 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
Chuyn i AD dung cng ni tip 9600,8,E,1 /* chng trnh chuyn i AD ni tip */ #include <dos.h> #include <stdio.h> #include <conio.h> #define PORT1 0x3F8 #define INTVECT 0x0C int bufferin = 0; int bufferout = 0; unsigned char ch; char buffer [1025]; void interrupt (*oldport1isr) (); void interrupt PORT1INT /*IRS cho PORT1 */ { int c; do {c = inportb(PORT1 +5); if (c & 1) {buffer[bufferin] = inportb(PORT1); bufferin++; if (bufferin == 1024) {bufferin = 0;}} } while (c & 1); outportb (0x10, 0x20); } void main (void) { int c; outportb (PORT1 + 1, 0); /* cm ngt port 1 */ oldport1isr = getvect (INTVECT); setvect (INTVECT, PORT1INT); /*PORT 1 t ch */ outportb (PORT1 + 3, 0x80); /* SET DLAB ON */ outportb (PORT1 + 0, 0x0C); /* t Baud rate 9600 BPS */ outportb (PORT1 + 1, 0x00); outportb (PORT1 + 3, 0x03); /* 8 bits, No Parity, 1 Stop Bit */ outportb (PORT1 + 2, 0xC7); /*FIFO Control Register*/
outportb (PORT1 + 4, 0x0B); /*Cho DTR, RTS, va OUT2 ON*/ outportb (0x21, (inportb (0x21) & 0xEF); outportb (PORT1 + 1, 0x01); /* Interrupt khi nhn data */ printf (\n\chng trnh chuyn i ADC ni tip . nhn ESC thot \n); do { if (bufferin ! == bufferout) {ch = buffer[bufferout]; bufferout++; if (bufferout == 1024) {bufferout = 0;} print(%u\n, ch); printf(%f volts\n, (float) ch/256*5);} if (kbhit () {c = getch(); outportb(PORT1, c);} } while (c != 27); outportb (PORT1 + 1, 0); outportb (0x21, (inportb (0x21) 2 0x20)); setvect (INTVECT, oldport1isr); } /* Chng trnh truyn ni tip dng ngn ng C /* Xut k t nhn c ra mn hnh v c k t t bn phm gi ni tip */ #include <dos.h> #include <stdio.h> #include<conio.h> #define PORT1 0x3F8 /* COM 1 0x3F8 */ /* COM 2 0x2F8 */ /* COM 3 0x3E8 */ /* COM 4 0x2E8 */ void main (void) { int C; int ch; outportb (PORT1 + 1, 0); /* Cm ngt Port 1 */ /* t cu hnh PORT 1 */ outportb (PORT1 + 3, 0x80); /* SET DLAB ON */ outportb (PORT1 + 0, 0x03); /* Set Baud rate - Divisor Latch Low Byte */ /* Default 0x03 = 38,400 BPS */ /* 0x01 = 115,200 BPS */ /* 0x02 = 56,700 BPS */ /* 0x06 = 19,200 BPS */ /* 0x0C = 9,600 BPS */ /* 0x18 = 4,800 BPS */ /* 0x30 = 2,400 BPS */ outportb (PORT1 + 1 , 0x00); /* Set Baud rate - Divisor Latch Hight Byte */ outportb (PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ outportb (PORT1 + 2 , 0xC7); /* FIFO Control Register */
outportb (PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */ printf (\n. Press ESC to quit \n); do { c = inportb (PORT1 + 5); /* Xem c nhn c k t khng. */ if (c & 1) {ch = inportb (PORT1); printf (%c ch);} /* xut k t ra mn hnh */ if (kbhit ()) {ch = getch (); /* c phm bm */ outportb (PORT1, ch);} /* Gi k t */ } while (ch != 27); } /* Chng trnh giao tip dng ngt*/ #include <dos.h> #include <stdio.h> #include <conio.h> #define PORT1 0x2E8 #define INTVECT 0x08 /* Com Ports IRQ here */ int bufferin = 0; int bufferout = 0; char ch; char buffer [1025]; void interrupt (*oldport1isr) (); void interrupt PORT1INTO () /* Interrupt Service Routine (IRS) for PORT 1 */ { int c; do {c = inportb (PORT1 + 5); if (c & 1) {buffer [bufferin] = inportb (PORT1); bufferin++; if (bufferin == 1024) bufferin = 0;} } while (c & 1); outportb (0x20, 0x20); } void main (void) { int c; outportb (PORT1 + 1 , 0); oldport1isr = getvect (INTVECT); /* ct vecto ngt c */ setvect (INTVECT, PORT1INT); /* t vecto ngt mi */ /* COM 1 - 0x0C */ /* COM 2 - 0x0B */ /* COM 3 - 0x0C */ /* COM 4 - 0x0B */ outportb (PORT1 + 3 , 0x80); /* SET DLAB ON */ outportb (PORT1 + 0 , 0x03); /* Set Baud rate - Divisor Latch Low Byte */ /* Default 0x03 = 38,400 BPS */ /* 0x01 = 115,200 BPS */ /* 0x20 = 56,700 BPS */
/* 0x06 = 19,200 BPS */ /* 0x0C = 9,600 BPS */ /* 0x18 = 4,800 BPS */ /* 0x30 = 2,400 BPS */ outportb (PORT1 + 1, 0x00); /* Set Baud rate - Divisor Latch Hight Byte */ outportb (PORT1 + 3, 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ outportb (PORT1 + 2, 0xC7); /* FIFO Control Register */ outportb (PORT1 + 4, 0x0B); /* Turn on DTR, RTS, and OUT2 */ outportb (0x21, (inportb (0x21) & 0xF7)); /* Set Programmable Interrupt Controller */ /* COM 1 (IRQ4) - 0xEF */ /* COM 2 (IRQ3) - 0xF7 */ /* COM 3 (IRQ4) - 0xEF */ /* COM 4 (IRQ3) - 0xF7 */ outportb (PORT1 + 1 , 0x01); /* Ngt khi thu */ printf (\n Press ESC to quit \n); do { if (bufferin ! == bufferout) {ch = buffer [bufferout]; bufferout++; if (bufferout == 1024) bufferout = 0; printf (%C, ch);} if (kbhit ()) {c = getch (); outportb (PORT 1, c);} } while (c ! = 27); outportb (PORT 1 + 1 , 0); /* Turn off interrupts - Port 1 */ outportb (0x21, (inportb (0x21) ? 0x08)); /*MASK IRQ using PIC */ /* COM 1 (IRQ4) - 0x10 */ /* COM 2 (IRQ3) - 0x08 */ /* COM 3 (IRQ4) - 0x10 */ /* COM 4 (IRQ3) - 0x08 */ setvect (INTVECT, oldport 1 isr); /* Hi phc vecto ngt c */ }