lap trinh giao tiep noi tiep

Upload: manh-hung-nguyen

Post on 18-Jul-2015

278 views

Category:

Documents


3 download

TRANSCRIPT

Lp trnh giao tip mi tipI. 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 chn cng ni tip

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

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.

Tnh cht CommPort t cng com c s dng Object.CommPort [= Value]Value = 1 n 16, mc nh l 1 khi khi ng Visual Basic. Tnh cht ny phi t trc khi m cng, nu biu thc trong ngoc khng c th tr v s cng com ang hot ng.

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 gitr 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 liuObject.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 phmPrivate 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.

V d: chng trnh quay s in thoi qua modem

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

3 LP TRNH DNG DELPHI 5.0 V VISUAL C++6.0MSComm c th ci trong Delphi theo cc bc sau: Vo menu Component Import ActiveX Control Microft Comm Control 6.0 Install ci MSComm vo ActiveX. Sau vo toolbar ActiveX. tm icon in thoi ko vo Form.

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 kt ni gia cng COM vi KIT Vi iu khin 8051 :

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

tt cha. 8. truyn k t tip theo quay tr v bc 5.

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 0ORG 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 :

Chng trnh trn s dng ngn ng VB:

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

i

ng dng giao tip ni tip trong chuyn AD:

Chuyn i AD dung cng ni tip 9600,8,E,1 /* chng trnh chuyn i AD ni tip */ #include #include #include #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 #include #include #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 #include #include #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 */ }