單片機(jī)與組態(tài)王的通信_(tái)第1頁(yè)
單片機(jī)與組態(tài)王的通信_(tái)第2頁(yè)
單片機(jī)與組態(tài)王的通信_(tái)第3頁(yè)
單片機(jī)與組態(tài)王的通信_(tái)第4頁(yè)
單片機(jī)與組態(tài)王的通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、單片機(jī)與組態(tài)王的通信 組態(tài)王(kingview)內(nèi)置了通用單片機(jī)通信模塊,這樣,我們自己開(kāi)發(fā)的單片機(jī)儀表就可以掛接在kingview上了。因?yàn)檫@樣,所以對(duì)這個(gè)東西有了些興趣,做了些研究。(1)研究環(huán)境組態(tài)王6.53,免費(fèi)下載,當(dāng)然有使用限制,不過(guò)用于研究是沒(méi)有問(wèn)題的。下載地址: keil軟件,porteus,這些就不多說(shuō)了。virtual serial ports driver xp 5.1 虛擬串口軟件,用此軟件可以生成一對(duì)相互聯(lián)接的虛擬串口,這樣,初期的研究工作就在電腦上完成了,省得用硬件電路板了。(2)資料kingview提供了一份簡(jiǎn)單的說(shuō)明材料,就在下載后的解壓縮文件包中。具體的位置是

2、:value pack技術(shù)資料常用協(xié)議單片機(jī)ascii碼通訊協(xié)議(3)電路搭建注意單片機(jī)的txd與虛擬串口的txd,單片機(jī)的rxd與虛擬串口的rxd是連在一起的,不要交叉哦,我在這上面可吃了不少的苦頭。這個(gè)虛擬串口元件的設(shè)置如下圖所示:說(shuō)明:這里選com2,是因?yàn)槲沂孪扔胿spd生成了一對(duì)虛擬串口,com2和com4,至于其他參數(shù)則應(yīng)該選得和kingview中的一致,這個(gè)到下面再說(shuō)。什么,這個(gè)元件不知哪里找?這里啦(4)vspd的使用現(xiàn)如今的電腦很少有兩個(gè)串口的了,人呢也是越來(lái)越懶了,雖然手邊的電路板是現(xiàn)成的,寫(xiě)片子是容易的,但是仍然還是嫌麻煩的,所以就發(fā)動(dòng)狗狗搜一搜,找到了這個(gè)vspd,當(dāng)然

3、它是很容易用的在first后面選一個(gè)串口名,然后在second后面再選一個(gè)串口名,然后點(diǎn)一下add pair 就行啦。怎么選都可以,就算是選com1也是可以的,雖然com1是真實(shí)存在的物理串口,但是這個(gè)vspd照樣把它給虛擬了。這里我選的是com2和com4,大家可以看到在左側(cè)的窗口中出現(xiàn)了這樣一對(duì)互聯(lián)的串口了,也就是說(shuō),我從串口2發(fā)數(shù)據(jù),然后串口4就能收到。同樣,我從串口4發(fā)數(shù)據(jù),串口2就能收到。前面寫(xiě)了一半,今天接著寫(xiě)。(5)組態(tài)王置根據(jù)自己屏幕選擇演示項(xiàng)目中的一個(gè)找到設(shè)備-dde,雙擊“新建.”選擇:智能模塊(上面的圖中看不到)-單片機(jī)-通用單片機(jī)ascii-串口起個(gè)名字,然后選擇串口號(hào)

4、,我們選擇com4這一步選擇地址,需要為自己的單片機(jī)設(shè)備確定一個(gè)地址,這有點(diǎn)麻煩。需要看一看地址幫助,這里簡(jiǎn)單說(shuō)明一下。如果在同一個(gè)串口上連接多個(gè)單片機(jī)設(shè)備,那么就需要確定究竟與哪一個(gè)設(shè)備通信,這就需要有個(gè)地址,這是上面我取的地址2.0中的2的由來(lái),而小數(shù)點(diǎn)后面可取0/1,按kingview的介紹是打包還是不打包。我還沒(méi)有理解打包是什么,所以先取0.現(xiàn)在“設(shè)備”下面多出來(lái)了com4,并且在右側(cè)多出了一個(gè)“我的單片機(jī)”的圖標(biāo),這是我為自己的單片機(jī)設(shè)備起的名字。右擊該圖標(biāo),在彈出的快捷菜單中選擇“測(cè)試我的單片機(jī)”,打開(kāi)對(duì)話框。在這里選擇通信參數(shù),為簡(jiǎn)單起見(jiàn),我們將校驗(yàn)選為“無(wú)”,其他按圖上選擇,然

5、后單擊“設(shè)備測(cè)試”進(jìn)入到設(shè)備測(cè)試頁(yè)面。增加一個(gè)寄存器,寄存器x后面加個(gè)0,數(shù)據(jù)類(lèi)型選擇“byte,short,float”三者之一。我們選擇byte,選擇添加。ok,至此kingview也設(shè)置好了。下面就是編程了。單片機(jī)與組態(tài)王通信(3) 單片機(jī)與組態(tài)王通信,準(zhǔn)備工作做好了,接下來(lái)就是編程實(shí)現(xiàn)了。當(dāng)然少不了要看kingview提供的資料了。以下引用自kingview的資料-1通訊口設(shè)置: 通訊方式:rs-232,rs-485,rs-422均可。 波特率: 由單片機(jī)決定(2400,4800,9600and19200bps)。字節(jié)數(shù)據(jù)格式:由單片機(jī)決定。起始位數(shù)據(jù)位校驗(yàn)位停止位注意:在組態(tài)王中設(shè)置

6、的通訊參數(shù)如波特率,數(shù)據(jù)位,停止位,奇偶校驗(yàn)必須與單片機(jī)編程中的通訊參數(shù)一致2在組態(tài)王中定義設(shè)備地址的格式格式: 前面的兩個(gè)字符是設(shè)備地址,范圍為0255,此地址為單片機(jī)的地址,由單片機(jī)中的程序決定 ;后面的一個(gè)字符是用戶(hù)設(shè)定是否打包,“0”為不打包、“1”為打包,用戶(hù)一旦在定義設(shè)備時(shí)確定了打包,組態(tài)王將處理讀下位機(jī)變量時(shí)數(shù)據(jù)打包的工作。3在組態(tài)王中定義的寄存器格式寄存器名稱(chēng)dd上限dd下限數(shù)據(jù)類(lèi)型xdd655350float/byte/uint斜體字dd代表數(shù)據(jù)地址,此地址與單片機(jī)的數(shù)據(jù)地址相對(duì)應(yīng)。注意:在組態(tài)王中定義變量時(shí),一個(gè)x寄存器根據(jù)所選數(shù)據(jù)類(lèi)型(byte,uint,float)的不

7、同分別占用一個(gè)、兩個(gè),四個(gè)字節(jié),定義不同的數(shù)據(jù)類(lèi)型要注意寄存器后面的地址,同一數(shù)據(jù)區(qū)內(nèi)不可交叉定義不同數(shù)據(jù)類(lèi)型的變量。為提高通訊速度建議用戶(hù)使用連續(xù)的數(shù)據(jù)區(qū)。3組態(tài)王與單片機(jī)通訊的命令格式:讀寫(xiě)格式(除字頭、字尾外所有字節(jié)均為ascii碼)字頭設(shè)備地址標(biāo)志數(shù)據(jù)地址數(shù)據(jù)字節(jié)數(shù)數(shù)據(jù)異或cr說(shuō)明; 字頭:1字節(jié)1個(gè)ascii碼,40h設(shè)備地址: 1字節(jié)2個(gè)ascii碼,0255(即0-0x0ffh)標(biāo)志:1字節(jié)2個(gè)ascii碼,bit0bit7,bit0= 0:讀,bit0= 1:寫(xiě)。bit1= 0:不打包。 bit3bit2 = 00,數(shù)據(jù)類(lèi)型為字節(jié)。 bit3bit2 = 01,數(shù)據(jù)類(lèi)型為字。

8、bit3bit2 = 1x,數(shù)據(jù)類(lèi)型為浮點(diǎn)數(shù)。數(shù)據(jù)地址: 2字節(jié)4個(gè)ascii碼,0x00000xffff數(shù)據(jù)字節(jié)數(shù):1字節(jié)2個(gè)ascii碼,1100,實(shí)際讀寫(xiě)的數(shù)據(jù)的字節(jié)數(shù)。數(shù)據(jù):為實(shí)際的數(shù)據(jù)轉(zhuǎn)換為ascii碼,個(gè)數(shù)為字節(jié)數(shù)乘2。異或:異或從設(shè)備地址到異或字節(jié)前,異或值轉(zhuǎn)換成2個(gè)ascii碼cr:0x0d。-有了這些資料,程序就不難編寫(xiě)了。先測(cè)試一下。到proteus中,全速運(yùn)行,這就打開(kāi)了串口窗口。在kingview中單擊“讀取”(見(jiàn)上一篇的最后一個(gè)圖),可以看到如下字串:02e000000176 這個(gè)數(shù)據(jù)字串與地址,數(shù)據(jù)類(lèi)型等有關(guān),解讀如下:變量名類(lèi)型字頭設(shè)備地址標(biāo)志數(shù)據(jù)地址數(shù)據(jù)字節(jié)異或

9、crx0byte 02 e00000 0176crx1byte 02e000010177crxoshort 02a400000275 crx1short 02a400010274crx0float 02ec00000400crx1float 02ec00010401cr如果切換成hex顯示,則可以看到字頭和字如:02a400010274hex顯示為:40 30 32 41 34 30 30 30 31 30 32 37 34 0d其中取異或的,不包括字頭40h,即從30h開(kāi)始的10個(gè)字符,異或算出來(lái)后,轉(zhuǎn)換成ascii碼成為其后的2個(gè)字符,即0d前的兩個(gè)字符。以上面的數(shù)字為例,異或算出來(lái)為74

10、h,轉(zhuǎn)換成ascii碼為37h和34h。不多說(shuō)啦,上一個(gè)寫(xiě)好的程序:#include reg52.h/*11.0592m19200 bps*/typedef unsigned char uchar;typedef unsigned int uint;/*定時(shí)器2的波特率:fosc/32*(65536-(rcap2h rcap2l)按此,可得波特率是19。2時(shí),要求65536-(rcap2h rcap2l)=18即(rcap2h rcap2l)=65518*/void serial_init () scon = 0x50; /* mode 1: 8-bit uart, enable receiv

11、er */ c_t2=0; /*timer2 runing in timer mode*/ rclk=1; tclk=1; rcap2h=0xff; rcap2l=0xee; tr2=1; /*enable timer2 run */ es = 1; ren=1; ea=1; sm2=1; /*sm2=1時(shí)收到的第9位為1才置位ri標(biāo)志*/*通過(guò)串行口發(fā)送數(shù)據(jù) */void uartsend(uchar dat) sbuf=dat; for(;) if(ti) break; ti=0; uchar recbuf12;bit recok=0; /一次接收工作結(jié)束void recive() int

12、errupt 4 static bit startrec=0; /如果收到的首個(gè)字符是40h,則該值取0 static uchar count=0; /計(jì)數(shù)器 uchar recdat; recdat=sbuf; /取得sbuf中的數(shù)據(jù) if(!startrec) /新的一次接收開(kāi)始 if(recdat=0x40) /首字符正確 startrec=1; /開(kāi)始新的一次接收工作 else recbufcount=recdat; count+; if(recdat=0x0d) startrec=0; /準(zhǔn)備下一次接收 count=0; /計(jì)數(shù)器清零 recok=1; /一次接收正確 ri=0;vo

13、id uartsends(uchar buff,uchar len) uchar i; for(i=0;i0;delaytim-) for(i=0;i123;i+); uchar sendbuf10=0x40,0x30,0x33,0x30,0x31,0x36,0x35,0x30,0x31,0x0d;void main() uchar i; uchar reccount=0; uchar sendcount=0; uchar xordat; uchar ctmp1,ctmp2; uchar ctmp; uchar senddat=1;/這個(gè)是程序中準(zhǔn)備傳遞給kingview的,可以自行更改。 s

14、erial_init (); /定時(shí)器,串口初始化 for(;) if(recok) /一次完整的接收 recok=0; /本次接收后的應(yīng)答處理完畢 xordat=recbuf0; for(i=1;i=4; /右移4次移到低4位 ctmp1+=0x30; ctmp2=xordat&0x0f; /取低4位 ctmp2+=0x30; if(ctmp1=recbuf10)&(ctmp2=recbuf11) sendbuf1=recbuf0;sendbuf2=recbuf1; /地址與接收到的地址相同 /sendbuf3= sendbuf4= /發(fā)送的字節(jié)數(shù) ctmp=senddat; ctmp&=0xf0; /取高4位 ctmp=4; /右移4位

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論