Labview跟8051做通訊

Post date: Nov 7, 2009 6:35:47 AM

軟體準備:

首先要有Labview跟Keil C這2個都有試用版,官網都有的下載,Labview要跟單晶片做通訊還要下載他官網的驅動程式,因為經過實測,Labview並不認得微軟的週邊驅動,也就是沒安裝的話,你會找不到電腦上的通訊埠,在官網搜尋NI-VISA,最新版的好像要300多MB,下載完安裝後就抓得到了。

硬體準備:

8051為基礎的單片機(台灣叫單晶片),我用的是華邦的W78E65,有ISP功能還內建PWM功能(不用計時器來做脈波,設定好暫存器,直接送出你要的脈波),不用拔來拔去直接接COM1用RS-232來寫入程式即可,市面上有賣套件很方便,整台做到好不用300元,假如時間多也可以自己接OK線來做啦,但成本不一定便宜喔,因為洞洞板也很貴。

成品圖:上面是套件的,下面是自己做的,功能都一模一樣

9PIN母的RS-232接頭接1.2.5腳就好上圖單片機右下有一個3PIN的腳座就是接到MAX232 IC的第6.7.8支腳,這裡附上datasheet備忘,(題外話,現在很多新電腦已經沒有RS232的界面,所以假如要學最好是學USB介面來做)

PS.不建議像我一樣拿來當示波器,因為不夠精密只能做查線路用,真的有要到精密測量及計算,要去買NI公司的(就是Labview的官網,軟硬體都有賣)AD轉換卡來做。

單片機端的程式說明

#include <regx51.h>

#include <w78e65.h>

//UART是Universal Asynchronous Receiver Transmitter中文叫非同步接收傳送

void SCON_int(void)interrupt 4 //中斷副程式interrupt4是UART專用的中斷

{

if(TI==1)TI=0; //TI是傳輸中斷並不會自己歸零要自行清除

else

{

P1=SBUF; //labview傳送出來的資料會存在51的SBUF裡,讀取串列緩衝區裡的資料設定在P1

RI=0; //接收中斷也不會自己歸零,讀走資料後要自己清除為0

SBUF=P2; //把P2現在的值送到SBUF進去讓labview去讀(我P2接收來自ADC0804轉出來的8個BIT)

}

}

void main(void) //主程式主要在設定各暫存器致能還有傳輸率

{

TMOD=0x20; //UART在SCON=0X50也就是MODE1工作模式,使用TR1的MODE2(自動重新載入)

TH1=253; //256-(2*11.0592*10M) / 384*9600 =253

TR1=1; //啟動TIMER1

SCON=0x50; //設定使用8位元UART

IE=0x90; //開啟UART中斷功能

P1=0xff;

/*PWMP=250; 這部份不用理會,這是我自己輸出不同脈波至ADC轉換電路做實驗用

PWMCON1=0xff; 這是要有內建PWM功能的單晶才能用PWMCON1...等等暫存器的位址都定義在W78E65.h檔裡了如附件

PWM0=60;

PWM1=120;

PWM2=180;

PWM3=240;*/

while(1); //等待中斷產生

}

PC端Labview的程式說明

寫入SBUF部份

主要是將指定的開關狀態傳送到51的SBUF(序列緩衝區),51端如上面程式,會將送進來的資料丟給P1,讓P1去執行我PC上指定的開關動作,我的P1_0接了電燈,P1_1接了銲槍(50元的烙鐵),P1_2接了風扇,都是AC110V的負載,買了3顆5V的繼電器1顆35元(鄉下的電子元件都很貴)

點圖可以放大

讀取SBUF部份

由於上面的C語言部份我將ADC0804轉換好的的八位元輸出接到P2上(我的類比來源Vin就是上面寫的那幾行PWM),且我將SBUF=P2,所以SBUF已經存放了ADC0804輸出的數位資料,我只要拉些物件把SBUF裡的字串資料讀出來轉換成數字後顯示在Labview上的示波器物件就可以

點圖可以放大

ADC0804的電路可用LED做測試

點圖可以放大

執行的影片

備註:為了要推110V的負載買了三顆5V的relay,但是別直接把P1做輸出1(雖然量出來也是5V)去推線圈喔,推不動的,我用了一顆PNP9012,P1接3.3K歐姆到B極;CE接了外部5V才推得動線圈的,也就是P1的訊號去推9012的B極讓CE的5V導通來給relay用,另外RELAY 接110V端買一顆耐壓高(至少要耐110以上吧)一點的電容0.1uf就可以了,避免產生太大的干擾,不然51會當機給你看喔,就是俗稱的消火花電路還是怎樣。

另外,如果要用P0_X來輸出要另外做外部提昇電路,P0沒有內建內部提昇電路,所以要自己加,如圖: