rs232與單片機連接(5篇)_第1頁
rs232與單片機連接(5篇)_第2頁
rs232與單片機連接(5篇)_第3頁
rs232與單片機連接(5篇)_第4頁
rs232與單片機連接(5篇)_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——rs232與單片機連接(5篇)在日常的學習、工作、生活中,確定對各類范文都很熟悉吧。范文怎么寫才能發(fā)揮它最大的作用呢?接下來我就給大家介紹一下優(yōu)秀的范文該怎么寫,我們一起來看一看吧。

rs232與單片機連接篇一

短距離無線傳輸具有抗干擾性能強、可靠性高、安全性好、受地理條件限制少、安裝靈活等優(yōu)點,在大量領域有著廣泛的應用前景。低功耗、微型化是用戶對當前無線通信產(chǎn)品特別是便攜產(chǎn)品的實際需求,短距離無線通信逐漸引起廣泛關注。常見的短距離無線通信有基于802.11的無線局域網(wǎng)wlan、藍牙(bluetooth)、homerf及歐洲的hiperlan(高性能無線局域網(wǎng)),但其硬件設計、接口方式、通信協(xié)議及軟件堆棧繁雜,需專門的開發(fā)系統(tǒng),開發(fā)成本高、周期長,最終產(chǎn)品成本也高。因此這些技術在嵌入式系統(tǒng)中并未得到廣泛應用。普通rf產(chǎn)品不存在這些問題,且短距離無線數(shù)據(jù)傳輸技術成熟,功能簡單、攜帶便利,使其在嵌入式短程無線產(chǎn)品中得到了廣泛應用。

ptr2000引腳簡介及設計

2.1ptr2000器件引腳功能

ptr2000是基于nrf401器件的無線數(shù)據(jù)傳輸模塊,采用低發(fā)射頻率、高靈敏度設計。該器件使用433mhz頻段,是真正的單片uhf無線收發(fā)一體器件,其工作模式包括工作頻道的設置和發(fā)送、接收、待機狀態(tài),由txen、cs、pwm3個引腳共同決定,其工作模式設置如表1所示。

2.2prr2000模塊設計

該器件外圍的主要電路有以下兩個:

(1)與單片機的連接電路單片機at89c52的rxd和txd引腳與ptr2000模塊的do和di引腳直接相連。ptr2000的模式控制引腳與單片機的控制引腳相連。

(2)與pc機的連接電路采用max202器件對ptr2000模塊和計算機串口進行rs-232和ttl電平轉換,將ptr2000與max202的輸入和輸出信號連接,轉換后的信號與計算機的串口連接。

硬件設計

在無法使用有線傳輸?shù)膱龊?,采用無線數(shù)據(jù)傳輸模塊和單片機相結合進行數(shù)據(jù)傳輸是較合理的方案。ptr2000利用串口進行數(shù)據(jù)傳輸,而單片機和pc機均帶有串口,因此,可利用ptr2000作為單片機和pc機之間數(shù)據(jù)傳輸?shù)臒o線接口,其硬件結構框圖如圖1所示。

該采集系統(tǒng)主要以at89c52單片機為控制處理核心。由它完成對數(shù)據(jù)的采集處理以及控制數(shù)據(jù)的無線傳輸。at89c52單片機具有快速8051內核、8kbflashe2prom、256字節(jié)ram。為實現(xiàn)無線數(shù)據(jù)傳輸,采用無限收發(fā)一體數(shù)據(jù)傳送modem模塊ptr2000器件,該器件內部集成高頻接收、pll合成、psk調制/解調、參量放大、功率放大、頻道切換等功能,完全符合無線數(shù)據(jù)通信的硬件要求。為降低成本,在最小硬件設計的基礎上,利用c51高級c語言編程,系統(tǒng)的功能盡可能用軟件程序實現(xiàn)。

3.1單片機的時鐘電路和復位電路設計

單片機時鐘電路設計中,選擇晶振頻率11.0592mhz,約定pc機和單片機的通信速率為9600b/s,并選擇相應電容與單片機的時鐘引腳相連構成時鐘回路。在復位電路設計中,采用復位引腳和相應的電容、電阻構成復位電路。單片機與ptr2000接口原理電路如圖2所示。

3.2單片機與ptr2000接口電路的設計

在圖2中,at89c52單片機主要完成數(shù)據(jù)的采集和處理,向ptr2000模塊發(fā)送數(shù)據(jù),并接收由pc機通過ptr2000傳送的數(shù)據(jù)。和單片機相連的ptr2000模塊主要將單片機的待傳數(shù)據(jù)調制成射頻信號,再發(fā)送到pc機端的ptr2000模塊,同時接收pc機端的ptr2000模塊傳送的射頻信號,并調制成單片機可識別的ttl信號送至單片機。單片機的rxd和txd引腳分別和ptr2000的do和di引腳連接,實現(xiàn)串行數(shù)據(jù)傳輸;決定ptr2000模塊工作模式的txen、cs、pwr3個引腳分別和單片機i/o控制口的p2.0~p2.2相連,ptr2000工作時,由單片機中的運行控制程序實時控制其工作模式。

3.3pc機與ptr2000接口電路的設計

該接口電路設計首先需進行電平轉換。pc機的串口支持rs-232標準,而ptr2000模塊支持ttl電平,選擇max232器件進行兩者間的電平轉換,接口電路如圖3所示。ptr2000模塊進行串行輸入、輸出,引腳di、do通過電平轉換器件和pc機串口相連;ptr2000的低功耗控制引腳。pwr接高電平vcc,即ptr2000固定工作在正常工作狀態(tài);頻道選擇引腳cs接gnd低電平,即采用固定通信頻道1,固定工作在433.92mhz;pc機串口的rts信號控制txen引腳,以決定ptr2000模塊何時為接收和發(fā)射狀態(tài)。pc機和串口的傳輸速率設定為9600b/s,和單片機保持一致。軟件設計

無線通信系統(tǒng)的軟件設計包括單片機端和pc機端兩部分,兩部分軟件相互協(xié)同,設置各自的ptr2000模塊的工作狀態(tài)。

4.1ptr2000模塊程序設計

單片機和pc機端軟件協(xié)同設置ptr2000的狀態(tài)(發(fā)射或接收),選擇固定的通信頻道1(cs=0),并讓ptr2000模塊一直處于正常工作狀態(tài)(pwm=1)。無線通信實現(xiàn)過程如下:

(1)發(fā)送在發(fā)送數(shù)據(jù)之前,應將ptr2000模塊置于發(fā)射模式,即txen=1。然后等待至少5ms后(接收到發(fā)射的切換時間)才可發(fā)射數(shù)據(jù)。發(fā)送終止后,應將模塊置于接收狀態(tài),即txen=0。

(2)接收應將ptr2000置于接收模式,即txen=0。單片機不發(fā)送的絕大部分時間都處于接收狀態(tài)。當單片機端發(fā)送時,pc機端應為接收;當pc機端發(fā)送時,單片機端應為接收。

4.2串行無線通信協(xié)議設計

無線通信中,由于外部環(huán)境的干擾,尋常誤碼率較高,因此通信協(xié)議的設計對保證通信的可靠性十分重要。協(xié)議的設計主要是幀結構的設計,在該無線通信系統(tǒng)中,存在指令幀和數(shù)據(jù)幀。數(shù)據(jù)幀的內容包括起始字節(jié)、數(shù)據(jù)長度字節(jié)、數(shù)據(jù)字節(jié)、終止字節(jié)和校驗和字節(jié),如表2所示。

起始字節(jié)定義為“$〞字符,其數(shù)值為0x24;終止字節(jié)定義為“*〞字符,其數(shù)值為0x2a。

采用校驗和的方法進行幀的校驗,將所有字節(jié)相加,然后將結果截短到所需的位長。發(fā)送端對待發(fā)送的數(shù)據(jù)進行校驗和計算,將校驗和值放在數(shù)據(jù)后一起發(fā)送;在接收端,對接收到的數(shù)據(jù)進行校驗和計算,然后與收到的校驗和字節(jié)比較,進行誤碼判斷。

對于單片機,指令幀主要有3種:pc機發(fā)送給單片機的請求發(fā)送指令、錯誤/超時重發(fā)指令、單片機發(fā)給pc機的發(fā)送完畢指令。在該系統(tǒng)設計中指令幀采用數(shù)據(jù)幀的格式,將其中的。數(shù)據(jù)字節(jié)固定為一個字節(jié),根據(jù)定義的字節(jié)判斷數(shù)據(jù)狀態(tài)。

4.3程序流程

單片機開始需將無線數(shù)據(jù)傳輸模塊ptr2000設置處于接收狀態(tài),通過串口中斷識別由pc機通過無線信道傳輸來的指令,根據(jù)接收指令的內容采集數(shù)據(jù)并啟動發(fā)送。發(fā)送前需將ptr2000模塊設置為發(fā)射狀態(tài),且等待5ms才可發(fā)送,發(fā)送完畢后,向pc機端發(fā)送“發(fā)送終止指令〞,并將ptr2000模塊重設為接收狀態(tài)。圖4為系統(tǒng)軟件設計流程圖。終止語

單片機無線通信系統(tǒng)設計基于ptr2000無線數(shù)據(jù)傳輸解決方案,可實現(xiàn)小于300m的短距離通信,通過試驗驗證該無線數(shù)據(jù)傳輸系統(tǒng)運行良好,單片機控制得相當確鑿。在應用時將系統(tǒng)作為一個模塊可便利地移植,以便構建更為繁雜的無線通信網(wǎng)絡,可應用于小型無線網(wǎng)絡、無線抄表、小區(qū)傳呼、工業(yè)數(shù)據(jù)采集系統(tǒng)、安全防火系統(tǒng)等領域,具有一定實用價值。

rs232與單片機連接篇二

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

rs232串口通訊,由計算機或mcu發(fā)送c51單片機

通訊程序:發(fā)送3a3031********(起始字符3a,地址為01,**代表數(shù)據(jù),無終止字符,無和校驗)接收超時時間:50ms波特率:4800bps接收到的數(shù)據(jù)用數(shù)碼管顯示出來

管腳定義:p0控制每位數(shù)碼管顯示,p2^2,p2^3,p2^4控制譯碼器,譯碼器控制哪一位顯示支持0~f的ascii碼數(shù)據(jù)接收

例如:發(fā)送3a303142434445后顯示數(shù)碼管顯示bcde//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

/********************************************************************************試驗名

:動態(tài)顯示數(shù)碼管試驗*使用的io

:數(shù)碼管使用p0,p2.2,p2.3,p2.4*試驗效果

:數(shù)碼管顯示

******************************************************************************/#include#definegpio_digp0sbitlsa=p2^2;sbitlsb=p2^3;sbitlsc=p2^4;inti;intm;unsignedcharn;unsignedchars;unsignedcharp;//遇到小數(shù)點往后移動1位unsignedcharcodedig_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f的顯示碼unsignedchardisplaydata[16];unsignedcharreceiv_data[16];//用來存放要顯示的8位數(shù)的值unsignedcharreceiv_data_usart[16];//buf接收緩存voiddigdisplay();//數(shù)碼管顯示函數(shù)

:main*函數(shù)功能

:主函數(shù)*輸入

:無*輸出

:無

*******************************************************************************/voidmain(void){scon=0x50;//設置為工作方式1tmod=0x20;

//設置計數(shù)器工作方式2pcon=0x80;//波特率加倍

th1=0xf3;

//計數(shù)器初始值設置,注意波特率是4800的tl1=0xf3;es=1;

//開啟接收中斷

ea=1;

//開啟總中斷

tr1=1;

//開啟計數(shù)器

for(n=0;n0)m++;//接收超時計時器

if(m>10n#include//#include#defineuintunsignedint#defineucharunsignedcharsbitbell=p3^2;sbitled=p3^4;ucharkey,m,p=0,flag=0,keyboard=0;ucharhour=12,min=0,sec=0;ucharcount_10ms=0;charnum=0;uchar*anum[]={“no.1_time...〞,“no.2_tempture...〞,“no.3_ad...〞,“no.4_pwm...〞,“no.5_else...〞};voiddelay(uintz)for(x=z;x>0;x--)

for(y=110;y>0;y--);}voidwr_com(unsignedcharcom)

//寫命令{delay1ms(5);en=0;

//使能端給一個高脈沖,由于初始化函數(shù)中已經(jīng)將lcden置為0rs=0;

//選擇寫命令模式

rw=0;

//p0=com;

//將要寫的命令送到數(shù)據(jù)總線上

en=1;

//將使能端置0以完成高脈沖

}voidwr_dat(unsignedchardat)

//寫數(shù)據(jù){delay1ms(5);en=0;rs=1;rw=0;

p0=dat;en=1;}voidinit()

//清屏

{wr_com(0x38);

//設置16*2,顯示5*7點陣,8位數(shù)據(jù)接口

wr_com(0x0c);

//設置開顯示,不顯示光標

wr_com(0x06);

//寫一個符號地址指針自動加一

wr_com(0x01);

//顯示清0,數(shù)據(jù)指針清0}voidmovekey(ucharnum){lcd_clr();

wirte_str(0,0,anum[num]);

wirte_str(1,0,anum[num+1]);

lcd_wcmd(0x0f);}voidkeypress(ucharkey)

//顯示

keypress

功能

{if(key==12)

//下

{movekey(num);

keyboard=num+1;

num--;if(num5)num=0;delay(10);}

if(key==11)

//退出

{lcd_clr();

wirte_str(0,0,“xuqifeng〞);

wirte_str(1,0,“104827477〞);}}voidgetkey(){uchartemp,readrow;p2=0xfe;

temp=p2;

temp=temp

if(temp!=0xf0)

{delay(10);

readrow=~temp>>4;switch(readrow){case1:key=10;break;

//enter進入

case2:key=11;break;

//esc

退出

case4:key=12;break;

//下

case8:key=16;break;

//上

default:break;}

while(temp!=0xf0)

{temp=p2;

temp=temp}delay(10);

keypress(key);}p2=0xfd;

temp=p2;

temp=temp

if(temp!=0xf0)

{delay(10);

readrow=~temp>>4;switch(readrow){case1:{key=14;m++;if(m==10)m=0;};break;//右

case2:key=3;break;case4:key=6;break;

case8:key=9;break;}

while(temp!=0xf0)

{temp=p2;

temp=temp}

delay(10);

keypress(key);}p2=0xfb;

temp=p2;

temp=temp

if(temp!=0xf0)

{delay(10);

readrow=~temp>>4;switch(readrow){case1:{key=13;m--;if(m==0)m=10;};break;//左

case2:key=2;break;case4:key=5;break;case8:key=8;break;}

while(temp!=0xf0)

{temp=p2;

temp=temp}

delay(10);

keypress(key);}p2=0xf7;

temp=p2;

temp=temp

if(temp!=0xf0)

{delay(10);

readrow=~temp>>4;switch(readrow){case1:key=0;break;case2:key=1;break;case4:key=4;break;case8:key=7;break;}

while(temp!=0xf0)

{temp=p2;temp=temp}delay(10);keypress(key);}}voidtime1()interrupt3

//顯示

time

功能

{th1=0xdc;tl1=0x00;

count_10ms++;}

voidtime1_init(){tmod=0x10;th1=0xdc;tl1=0x00;ea=1;et1=1;tr1=1}uchardisp_buf[6]={0x00,0x00,0x00,0x00,0x00,0x00};voidlcd_dat(ucharh,m,s)

//讀取時間

{disp_buf[0]=h/10+0x30;disp_buf[1]=h%10+0x30;

disp_buf[2]=m/10+0x30;disp_buf[3]=m%10+0x30;

disp_buf[4]=s/10+0x30;disp_buf[5]=s%10+0x30;}voidlcd_display()

//顯示時間{lcd_wcmd(0x44|0x80);lcd_wdat(disp_buf[0]);lcd_wdat(disp_buf[1]);

lcd_wdat(0x3a);lcd_wdat(disp_buf[2]);lcd_wdat(disp_buf[3]);

lcd_wdat(0x3a);lcd_wdat(disp_buf[4]);lcd_wdat(disp_buf[5]);}voidtime()

{keyboard=0;

time1_init();

lcd_init();

wirte_str(0,0,“time〞);

while(1)

{if(count_10ms>=100)

{count_10ms=0;

sec++;}if(sec>=60)

{sec=0;min++;

if(min>=60)

{min=0;hour++;

if(hour>=24)

{hour=0;min=0;sec=0;}}}lcd_dat(hour,min,sec);

lcd_display();

getkey();

if(key==11)break;}}}voidtempture()

//顯示

temp

功能

{voiddisplay()

{unsignedlongtemp;

temp=temp*100;

disdata[0]=temp/1000+0x30;//十位數(shù)

disdata[1]=temp%1000/100+0x30;//個位數(shù)

disdata[2]=temp%100/10+0x30;//小數(shù)

disdata[3]=temp%10+0x30;

if(disdata[0]==0x30)

{disdata[0]=0x20;//假使十位為0,不顯示

if(disdata[1]==0x30)

//假使十位為0,個位為0也不顯示

{disdata[1]=0x20;}}

lcd_wcmd(0xc1);

lcd_wdat(disdata[0]);//顯示十位

lcd_wdat(disdata[1]);//顯示個位

lcd_wdat(0x2e);//顯示小數(shù)點

lcd_wdat(disdata[2]);//顯示小數(shù)

lcd_wdat(disdata[3]);}uchardisdata[5];floattemp;

voiddelayms(uintxms){uinti,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);}}voidad_init()

//顯示

a/d

功能

{p1m0=0x0f;

//設置p1口低4位為開漏模式,ad采集

p1m1=0x0f;

p1asf=0x0f;

//p1口模擬功能控制位,adc_contr=0xe0;

//開啟ad轉換并選擇最高轉換速度

auxr1=0x00;

//數(shù)據(jù)格式設置

高八位在adc_res低二位在adc_resl

溫馨提示

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

評論

0/150

提交評論