国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于DELPHI的PC機(jī)和AT89C51單片機(jī)的串行通信實(shí)現(xiàn)

2011-08-30 06:11田淑娟韓琛曄
科技傳播 2011年2期
關(guān)鍵詞:處理程序發(fā)送數(shù)據(jù)波特率

劉 榮,田淑娟,燕 苗,韓琛曄

石家莊計(jì)算機(jī)職業(yè)學(xué)院,河北石家莊 050061

在工業(yè)生產(chǎn)實(shí)踐中,經(jīng)常要對(duì)某些儀器儀表進(jìn)行監(jiān)測(cè)或是發(fā)送某些參數(shù),串口編程就顯得相當(dāng)重要。PC機(jī)以其高的性價(jià)比、較強(qiáng)的數(shù)據(jù)處理能力、較快處理速度、以及單片機(jī)體積小、低功耗、低成本、高性能、使用靈活的特點(diǎn),利用PC機(jī)作為上位機(jī),單片機(jī)作為下位機(jī)的主從工作方式在工業(yè)控制領(lǐng)域中被廣泛采用。

1 下位機(jī)設(shè)計(jì)

1.1 單片機(jī)與PC機(jī)的RS-232標(biāo)準(zhǔn)接口通信電路的設(shè)計(jì)

RS-232C是目前最常用的串行接口標(biāo)準(zhǔn),RS-232C提供了單片機(jī)與單片機(jī)、單片機(jī)與PC機(jī)之間串行數(shù)據(jù)通信的標(biāo)準(zhǔn)接口。但RS一232C規(guī)定的邏輯電平與單片機(jī)的邏輯電平是不一致的。因此,在應(yīng)用中必須把單片機(jī)的TTL電平和RS-232C電平進(jìn)行相互轉(zhuǎn)換,這里選用專用電平轉(zhuǎn)換集成芯片MAX232來(lái)實(shí)現(xiàn)的。

1.2 MCS51單片機(jī)與PC機(jī)串行通信接口的硬件電路設(shè)計(jì)

用MAX232芯片實(shí)現(xiàn)PC機(jī)與AT89C51單片機(jī)串行通信的典型電路如圖1所示。圖中外接電解電容C1、C2、C3、C4用于電源電壓變換,可提高抗干擾能力,它們可取相同容量的電容,一般取1.0μF/16V。電容C5的作用是對(duì)+5V電源的噪聲干擾進(jìn)行濾波,一般取0.1μF。選用兩組中的任意一組電平轉(zhuǎn)換電路實(shí)現(xiàn)串行通信,中選Tlin、Rlout分別與AT89C51的TXD、RXD相連,Tlout、Rlin分別與PC機(jī)中R232接口的RXD、TXD相連。這種發(fā)送與接收的對(duì)應(yīng)關(guān)系不能接錯(cuò),否則將不能正常工作。

圖1 MAX232芯片實(shí)現(xiàn)PC機(jī)與AT89C51單片機(jī)串行通信的典型電路

1.3 MCS51單片機(jī)與PC機(jī)串口通信協(xié)議設(shè)計(jì)

1.3.1 通信方式選擇

通信方式上,采用異步方式,微處理器對(duì)PC機(jī)的通信采用串口中斷方式。

AT89C51有一個(gè)標(biāo)準(zhǔn)的串行口,有4種工作方式,其中方式1是標(biāo)準(zhǔn)的10位異步通信方式,1O位數(shù)據(jù)和PC機(jī)的標(biāo)準(zhǔn)串口相對(duì)應(yīng),由串口控制寄存器SCON設(shè)置狀態(tài),設(shè)置SCON=0X50H。

1.3.2 89C51通信波特率設(shè)置

在串行通信中,一個(gè)重要的指標(biāo)是波特率,它反映了串行通信的速率,也反映了對(duì)傳輸通道的要求。波特率越高,要求傳輸通道的頻帶越寬。由于異步通信雙方各自用自己的時(shí)鐘源,要保證捕捉到的信號(hào)正確,最好采用較高的時(shí)鐘。一般選擇時(shí)鐘頻率比波特率高16倍或64倍。如果時(shí)鐘頻率等于波特率,則頻率稍有偏差便會(huì)產(chǎn)生接收錯(cuò)誤。這里選用l1.059MHz晶振。

89c51的串行通信的波特率由定時(shí)器T1的溢出率獲得,當(dāng)串口工作于方式1時(shí),波特率為:波特率=(2SMOD*TD)/32,其中SMOD為波特率加倍。取值為0或1。定時(shí)器工作于方式2時(shí),波特率為 9 600bit/s,令 SMOD=0, THl=TL1=0Xfd。

傳送方式:PC機(jī)采用查詢方式接收數(shù)據(jù),單片機(jī)采用中斷方式接收、發(fā)送;校驗(yàn)方式:奇偶校驗(yàn)。

1.4 下位機(jī)通信軟件的設(shè)計(jì)

單片機(jī)通信程序分為接收中斷處理程序、發(fā)送中斷處理程序和通信處理程序3部分,構(gòu)成整個(gè)單片機(jī)的通信程序。

接收中斷處理程序主要負(fù)責(zé)接收微機(jī)發(fā)送到單片機(jī)接收緩沖區(qū)的數(shù)據(jù),接收數(shù)據(jù)時(shí),串行數(shù)據(jù)的接收受到串行控制器SCON中的允許接收位REN控制。當(dāng)REN為1時(shí),接收控制器開(kāi)始工作,對(duì)接收數(shù)據(jù)進(jìn)行采樣。當(dāng)接收到規(guī)定的字符數(shù)之后,置接收中斷位RI為1,以表明接收緩沖區(qū)中有待處理的數(shù)據(jù)并請(qǐng)求通信處理程序?qū)ζ溥M(jìn)行處理。

發(fā)送中斷處理程序主要負(fù)責(zé)向微機(jī)發(fā)送數(shù)據(jù),發(fā)送數(shù)據(jù)時(shí),通信處理程序?qū)⑿枰l(fā)送的數(shù)據(jù)寫(xiě)入單片機(jī)的發(fā)送緩沖區(qū)SBUF,啟動(dòng)了發(fā)送工作,并將緩沖區(qū)數(shù)據(jù)逐一發(fā)送給微機(jī)。當(dāng)發(fā)送完指定長(zhǎng)度的數(shù)據(jù)后(發(fā)送緩沖區(qū)為空),發(fā)送中斷處理程序?qū)l(fā)送中斷標(biāo)志位TI置位為1,直到通信處理程序再一次發(fā)送數(shù)據(jù)。

只有在接收到上位機(jī)送來(lái)的一串?dāng)?shù)據(jù),且接收完畢標(biāo)志為“1”時(shí),才能真正進(jìn)行處理。首先對(duì)接收緩沖區(qū)SBUF中的內(nèi)容進(jìn)行校驗(yàn),完全無(wú)誤后再根據(jù)通信要求對(duì)緩沖區(qū)的內(nèi)容進(jìn)行相應(yīng)處理,同時(shí)判斷是否還需將發(fā)送緩沖區(qū)SBUF中的數(shù)據(jù)發(fā)送到微機(jī),最后退出通信處理程序,執(zhí)行其它程序。當(dāng)接收中斷程序再次接收到數(shù)據(jù)并將接收完標(biāo)志置為“1”后,可再次進(jìn)入通信處理程序進(jìn)行相應(yīng)的處理。

2 上位機(jī)設(shè)計(jì)

Borland公司推出的Delphi以其強(qiáng)大的功能并且友好的、有可視化用戶界面,特別適合Windows平臺(tái)下的圖形界面和用戶程序的編制從而得到廣大用戶的認(rèn)可;同時(shí)采用第三方控件Spcomm的屬性和方法及事件來(lái)實(shí)現(xiàn)系統(tǒng)監(jiān)測(cè)控制和信息處理是工業(yè)企業(yè)通常采用的實(shí)現(xiàn)方法。

2.1 Spcomm控件的屬性、方法和事件

1)屬性

CommName:計(jì)算機(jī)串口端口號(hào)的名字,COM1、COM2;Parity:校驗(yàn)位的設(shè)置。BaudRate:串口通信波特率;ByteSize:一個(gè)字節(jié)中,收發(fā)數(shù)據(jù)數(shù)據(jù)位數(shù);StopBits:一個(gè)字節(jié)中,使用停止位的位數(shù);SendDataEmpty:發(fā)送緩沖區(qū)是否為空。

2)方法

StartComm方法:用來(lái)打開(kāi)通信串口,開(kāi)始通信。

StopComm方法:用來(lái)停止通信串行口的所有進(jìn)程,關(guān)閉串口。

WriteCommData(pDataToWriteChar;dwSizeofDataToWrite:Word)方法是帶有布爾型返回值的函數(shù),其中pDataToWrite是要寫(xiě)入串行口的字符串,DwSizeaofDataToWrite是要寫(xiě)入的字符串的長(zhǎng)度。該函數(shù)通過(guò)一個(gè)寫(xiě)線程向串行口輸出緩沖區(qū)發(fā)送數(shù)據(jù)。

3)事件

ata(Buffer:inter;BufferLength:Word),其中Buffer是指向輸入緩沖區(qū)的指針。BufferLength是從緩沖區(qū)收到的數(shù)據(jù)長(zhǎng)度。當(dāng)輸入緩沖區(qū)收到數(shù)據(jù)時(shí),該事件被觸發(fā)。當(dāng)輸入緩存有數(shù)據(jù)時(shí)將觸發(fā)該事件,對(duì)從串口收到的數(shù)據(jù)進(jìn)行處理。

2.2 Spcomm控件串口通信的實(shí)現(xiàn)

Spcomm串口通信的實(shí)現(xiàn)

實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的數(shù)據(jù)發(fā)送及接收需要以下步驟:

1)串口初始化,通過(guò)設(shè)置如下屬性完成。即分別設(shè)置屬性 Comm1.CommName:=com1;Comm1.BaudRate:=9600;Comm1.Parity:=None;Comm1.ByteSize:=8; Comm1.StopBits:=1; Comm1.StartComm。

要實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的通信,首先要建立它們之間的握手信號(hào),握手信號(hào)為約定的特定字符, 當(dāng)PC發(fā)出一幀數(shù)據(jù)后,如果在接收事件能收到單片機(jī)返回的規(guī)定字符來(lái)判斷表示握手成功,系統(tǒng)通信正常。

2)發(fā)送數(shù)據(jù)。在編寫(xiě)基于串口的監(jiān)測(cè)控制程序時(shí),需要由PC機(jī)向單片機(jī)發(fā)送控制指令從而控制下位機(jī)的行為,同時(shí)向下位機(jī)發(fā)送相應(yīng)數(shù)據(jù),調(diào)用相應(yīng)的發(fā)送程序。

3)接收數(shù)據(jù)。在控制中,常常需要實(shí)時(shí)接收下位機(jī)傳上來(lái)的數(shù)據(jù),但用SPCOMM時(shí)會(huì)出現(xiàn)必需緩存滿或者每幀之間的間隔大于ReadIntervalTimeout時(shí)才會(huì)觸發(fā)OnReceivedata,ReadIntervalTimeout屬性默認(rèn)值是100ms,即在100ms內(nèi),屬于同一幀數(shù)據(jù)。編寫(xiě)串口的監(jiān)控程序時(shí),通常需要由下位機(jī)向PC機(jī)發(fā)送數(shù)據(jù)以使PC機(jī)了解系統(tǒng)的測(cè)試數(shù)據(jù)或下位機(jī)的運(yùn)行狀態(tài),并進(jìn)而控制下位機(jī)的行為。

4)關(guān)閉串口。在系統(tǒng)開(kāi)發(fā)中,應(yīng)注意在不使用串口時(shí)應(yīng)及時(shí)關(guān)閉串口,釋放系統(tǒng)資源,否則可能會(huì)影響系統(tǒng)的其它應(yīng)用。即調(diào)用comml.StopComm。

3 結(jié)論

在采用以PC機(jī)為控制中心的數(shù)據(jù)采集自動(dòng)化控制系統(tǒng)中,通常需要單片機(jī)采集數(shù)據(jù),然后用異步串行通訊方式傳給PC機(jī),在PC機(jī)上進(jìn)行數(shù)據(jù)處理再傳送到單片機(jī),是很有應(yīng)用價(jià)值的。

[1]求是科技.elphi串口通信工程開(kāi)發(fā)實(shí)例導(dǎo)航[M].人民郵電出版社,2003.

[2]張曉鄉(xiāng).89C51單片機(jī)實(shí)用教程[M].電子工業(yè)出版社,2010.

[3]黃軍,熊勇,劉艷,劉曉梅.delphi串口通信編程[M].人民郵電出版社,2010.

[4]李朝青.PC機(jī)及單片機(jī)通訊技術(shù)[M].北京航空航天大學(xué)出版社,2000.

猜你喜歡
處理程序發(fā)送數(shù)據(jù)波特率
高速公路工程變更與計(jì)量支付處理程序的優(yōu)化方法
CAN 總線波特率自適應(yīng)程序設(shè)計(jì)
基于馬爾科夫鏈的LoRaWAN網(wǎng)絡(luò)節(jié)點(diǎn)性能分析
帶標(biāo)記方式的CRDSA++協(xié)議性能分析*
基于FPGA的異步串行通信波特率容錯(cuò)設(shè)計(jì)
基于C++的數(shù)控加工通用后處理程序的開(kāi)發(fā)應(yīng)用研究
處理房地產(chǎn)糾紛中行政與民事交叉問(wèn)題的正當(dāng)程序
使用IPSec安全傳輸數(shù)據(jù)
C*Core芯片SCI串口波特率容限優(yōu)化
計(jì)算機(jī)多設(shè)備接口波特率不匹配的研究
淄博市| 隆德县| 林口县| 济源市| 铁岭县| 定襄县| 海口市| 镇江市| 庄浪县| 富顺县| 三门县| 静安区| 大兴区| 耒阳市| 涞水县| 云安县| 武乡县| 抚远县| 株洲市| 珠海市| 郸城县| 开化县| 涟水县| 海宁市| 万荣县| 寿阳县| 苏尼特左旗| 东源县| 新建县| 静安区| 新闻| 城口县| 盐城市| 安康市| 乐陵市| 淮南市| 嘉兴市| 平乐县| 观塘区| 娄烦县| 土默特左旗|