新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在應(yīng)用可編程測(cè)控網(wǎng)絡(luò)設(shè)計(jì)

在應(yīng)用可編程測(cè)控網(wǎng)絡(luò)設(shè)計(jì)

作者: 時(shí)間:2011-04-19 來(lái)源:網(wǎng)絡(luò) 收藏

  引導(dǎo)程序的主流程圖如圖5所示。引導(dǎo)主程序中包含系統(tǒng)初始化、串口設(shè)置及讀下載標(biāo)志等程序。在引導(dǎo)程序的中斷程序中(如圖4)包括程序下載命令的解釋程序和代碼的下載操作。為了編程方便,下載的程序代碼都是ASCII碼,這樣可以方便地定義一些控制字符。下載的簡(jiǎn)單協(xié)議為“AAH(下載命令)+程序代碼(以ASCII 碼形式)+1BH(文件結(jié)束符)+異或校驗(yàn)和”。當(dāng)中斷程序接收到二進(jìn)制數(shù)AAH時(shí),即認(rèn)為接收到程序下載的命令,并在中斷程序中以查詢(xún)的方式接收數(shù)據(jù),依次將接收的代碼轉(zhuǎn)化為二進(jìn)制數(shù)后放入以8000H為首地址的數(shù)據(jù)空間,同時(shí)產(chǎn)生接收數(shù)據(jù)的校驗(yàn)和。而當(dāng)接收到1BH結(jié)束符時(shí),則認(rèn)為所下載的程序代碼已結(jié)束,并準(zhǔn)備接收校驗(yàn)和。當(dāng)程序代碼接收正確,在中斷程序中依據(jù)所讀出的下載標(biāo)志設(shè)置新的下載標(biāo)志,然后改變堆棧指針,使串行中斷退出,并使PC指針指向8000H,開(kāi)始運(yùn)行下載的程序。中斷退出代碼如圖4所示。當(dāng)串行中斷接收的命令不是程序下載命令,則在中斷程序直接跳至中斷映射區(qū)的串行中斷入口8023H,執(zhí)行相應(yīng)的串行中斷程序。

4 上位機(jī)軟件的編程

  上位機(jī)軟件可以采用Delphi開(kāi)發(fā)工具編寫(xiě)基于Windows95/98/2000平臺(tái)下的串行通訊程序。MSCOMM32.OCX控件是微軟公司在VB和VC開(kāi)發(fā)軟件中隨帶的串行通信控件,該控件屏蔽了通信過(guò)程中的底層操作,程序員時(shí)只需設(shè)置和監(jiān)視該控件的屬性和事件即可完成對(duì)串行口的初始化和數(shù)據(jù)的輸入和輸出工作。在Delphi5.0中已將它重新定義為T(mén)MSComm類(lèi)。在測(cè)控中需要發(fā)送與接收控制字符,這些控制字符有可能包含ASCII值大于80H的字符,因此要求上位機(jī)軟件既能接收二進(jìn)制數(shù)據(jù)又能發(fā)送二進(jìn)制數(shù)據(jù)。在TMSComm類(lèi)中有一項(xiàng)InputMode屬性,當(dāng)設(shè)置InputMode=1時(shí),數(shù)據(jù)是以二進(jìn)制方式取回,而發(fā)送二進(jìn)制數(shù)據(jù)則需要依照TMSComm類(lèi)的規(guī)則通過(guò)動(dòng)態(tài)數(shù)組和變體的方法實(shí)現(xiàn)。

  下面是一個(gè)簡(jiǎn)單的發(fā)送和接收二進(jìn)制數(shù)據(jù)的例子程序:

  串口設(shè)置

mscomm1.Comport:=1; //操作對(duì)象為串口1

mscomm1.Settings:=’9600,N,8,1’; //設(shè)置串口參數(shù)

mscomm1.Rthreshold:=1; //收到1個(gè)字節(jié)后觸發(fā)串口事件

mscomm1.inbuffercount:=0; //清串口接收緩沖區(qū)

mscomm1.OutBufferCount:=0; //清串口發(fā)送緩沖區(qū)

mscomm1.PortOpen:=true; //打開(kāi)串口

發(fā)送例程:

var

  MyFlexibleArray : array of byte; //定義動(dòng)態(tài)數(shù)組

outputdata: variant; //定義變體

begin

  SetLength(MyFlexibleArray,1); //在使用動(dòng)態(tài)數(shù)組前必須設(shè)置它的長(zhǎng)度。

  MyFlexibleArray[0]:=$AA; //將待發(fā)送二進(jìn)制數(shù)放入數(shù)組

  outputdata := myFlexibleArray; //將動(dòng)態(tài)數(shù)組賦給變體

  mscomm1.Output:=outputdata; //將變體中的二進(jìn)制數(shù)0AAH發(fā)出

end;

在串口事件中接收數(shù)據(jù)例程

mscomm1.Inputlen:=1; //每次從接收緩沖區(qū)中讀1個(gè)字節(jié)數(shù)據(jù)

mscomm1.InputMode:=1; //以二進(jìn)制方式接收數(shù)據(jù)

inbuf:=mscomm1.input; //讀緩沖區(qū),將數(shù)據(jù)接收至inbuf變量

  本文所述的在測(cè)控已在FWC-2型大壩自動(dòng)監(jiān)測(cè)系統(tǒng)中實(shí)際使用。該系統(tǒng)基于RS-485,可以管理255個(gè)測(cè)量模塊的數(shù)據(jù)采集和程序下載。運(yùn)行結(jié)果表明,該方案具有簡(jiǎn)單、技術(shù)成熟、開(kāi)發(fā)迅速等優(yōu)點(diǎn)。


上一頁(yè) 1 2 3 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉