版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PIC單片機(jī)虛擬串行通信設(shè)計(jì)1.實(shí)例目的:本實(shí)例完全建立在計(jì)算機(jī)軟件的基礎(chǔ)上,利用PROTEUS軟件構(gòu)建一個單片機(jī)系統(tǒng),利用VB編寫一個計(jì)算機(jī)控制軟件和單片機(jī)系統(tǒng)串行通信,計(jì)算機(jī)上的控制軟件可以發(fā)送一個值在0——999之間的數(shù),在單片機(jī)系統(tǒng)上顯示出來,單片機(jī)系統(tǒng)上也可輸入一個相同值域的數(shù)并在計(jì)算機(jī)控制軟件上顯示出來。本實(shí)例主要是為了展示虛擬串行通信的仿真。2.系統(tǒng)配置本實(shí)例雖然簡單,但是要想看到想要的仿真結(jié)果,建立虛擬的串口連接是必不可少的。要想仿真串行通信,必須要把單片機(jī)系統(tǒng)上的串行口與計(jì)算機(jī)上的串行口連接,這樣他們之間才能傳輸數(shù)據(jù),但由于是仿真,實(shí)際沒有相連接,所以需要創(chuàng)建一對虛擬串行口并使他們相連,這里我使用的是這個軟件VirtualSerialPortsDriverXP5.1(VSPDXP),打開后的界面如圖1所示。在右面“ADDPAIR”按鈕的旁邊的下拉選項(xiàng)中一個選擇“COM3”,一個選擇“COM4”,然后點(diǎn)擊“ADDPAIR”按鈕,這樣就完成了虛擬串口“COM3”和“COM4”的連接,完成后如圖1所示。簡單吧?!另外,你還要選擇一個串口調(diào)試軟件作為你的調(diào)試軟件,因?yàn)楫?dāng)你單片機(jī)系統(tǒng)弄完以后而計(jì)算機(jī)上的控制軟件還沒有編時,沒有串口調(diào)試軟件的話,你就沒法知道你單片機(jī)系統(tǒng)正確與否。這種軟件網(wǎng)上多如牛毛,隨便找一個。我的軟件為SSCOM32,界面如圖2所示。功能與用法這里就不一一介紹了,反正既能接收又能發(fā)送,實(shí)例需要的功能他都可以調(diào)試。3.單片機(jī)系統(tǒng)單片機(jī)硬件:電路如圖3所示。本實(shí)例采用的單片機(jī)依然是PIC16F877,他含有UASRT模塊,有了它才能進(jìn)行串行通信。顯示部分采用3位數(shù)碼管共陽輸出。鍵盤采用矩陣鍵盤。這里需要特別說明的是,由于是仿真,沒有采用電平轉(zhuǎn)換芯片MAX232將TTL電平轉(zhuǎn)換成RS232的電平,實(shí)際這一步是必需的。串行口的設(shè)置需要特別注意,由于本實(shí)例單片機(jī)程序中設(shè)置的波特率是9600,8位數(shù)據(jù),無奇偶校驗(yàn),所以串行口也要一樣設(shè)置,這里由于建立的是“COM3”“COM4”之間的虛擬連接,端口號一定要設(shè)置成“COM3”或“COM4”,這是關(guān)鍵!如圖4所示。單片機(jī)軟件:單片機(jī)軟件主要由以下幾個部分組成:初始化程序,顯示程序,鍵盤輸入程序,串行接收程序,串行發(fā)送程序。程序采用C語言,簡單明了,經(jīng)過PICC編譯通過。全部程序如下:/*************************************************************標(biāo)題:PCtoPIC**用途:用于上位機(jī)與單片機(jī)之間的通訊(本例為下位機(jī)軟件)**時間:2009年1月4日**作者:WUJIEFLASH*************************************************************/#include//預(yù)定義#defineuchunsignedchar//顯示用碼表constuchshu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff};//變量intdata,temp1,temp2,temp3,temp;uchflag,keylock;uchpoint,buffer[3];//初始化voidinit(){TRISB=0;PORTB=0;TRISC=0;PORTC=0;keylock=1;//初始化鍵盤按鍵標(biāo)志位,用于鎖定按鍵//USART部件初始化SPBRG=0x19;//設(shè)置波特率為9600bpsTXSTA=0x04;//選擇異步高速8位數(shù)據(jù)傳輸模式RCSTA=0x80;//允許串行端口工作TRISC=0x80;//設(shè)置為高阻態(tài),防止干擾TXEN=1;//發(fā)送允許CREN=1;//接收允許PEIE=1;//開放外設(shè)中斷RCIE=1;//開放串行口中斷ei();//開放總中斷}//顯示需要的延時voiddelay(){inti;for(i=0;i《1000;i++);}//發(fā)送子程序voidsend_usart(){uchi;for(i=0;i《3;i++)//每次發(fā)3個數(shù)據(jù){if(i==0)TXREG=data/100+0x30;//求得百位if(i==1)TXREG=data%100/10+0x30;//求得十位if(i==2)TXREG=data%10+0x30;//求得個位while(1){if(TXIF==1)break;//等待發(fā)送完成}}}//中斷接收子程序voidinterruptreceive(void){if(point《3)//是否已經(jīng)接收到3個數(shù)據(jù)buffer[point++]=RCREG-48;//沒有,繼續(xù)接收elsepoint=0;//是,指針復(fù)位data=buffer[0]*100+buffer[1]*10+buffer[2];//組合成三位數(shù)}//數(shù)碼管顯示voiddisplay(intdis_data){intdis_data_ge,dis_data_shi,dis_data_bai;dis_data_ge=dis_data%10;//個位dis_data_shi=dis_data%100/10;//十位dis_data_bai=dis_data/100;//百位if(dis_data==0)//若數(shù)據(jù)為0,只顯示1位{dis_data_ge=0;dis_data_shi=10;dis_data_bai=10;}if(dis_data《10)//若數(shù)據(jù)小于10,則十位與百位關(guān)閉顯示{dis_data_shi=10;dis_data_bai=10;}if(dis_data《100)//若數(shù)據(jù)小于100,則只顯示兩位{dis_data_bai=10;}RC0=0;RC1=0;RC2=1;PORTB=shu[dis_data_ge];//個位送顯delay();RC0=0;RC2=0;RC1=1;PORTB=shu[dis_data_shi];//十位送顯delay();RC1=0;RC2=0;RC0=1;PORTB=shu[dis_data_bai];//百位送顯delay();}//鍵盤(線反轉(zhuǎn)法)voidpresskey(){uchline,column,key;TRISD=0x07;PORTD=0xf0;column=PORTD&0x07;//取列碼TRISD=0xf0;PORTD=0x0f;line=PORTD&0xf0;//取行碼key=line|column;//合成鍵值if(key==0)keylock=0;//保證每次只按一次鍵if(keylock==0){if(key!=0)keylock=1;switch(key)//查找鍵值{case0x11:temp=3;flag++;break;case0x12:temp=2;flag++;break;case0x14:temp=1;flag++;break;case0x21:temp=4;flag++;break;case0x22:temp=5;flag++;break;case0x24:temp=6;flag++;break;case0x41:temp=9;flag++;break;case0x42:temp=8;flag++;break;case0x44:temp=7;flag++;break;case0x82:temp=0;flag++;break;case0x81:flag=4;send_usart();break;//發(fā)送case0x84:flag=0;data=0;break;//清零鍵}}if(flag==1)//第一次按鍵{if(temp==0)flag=0;//若按0,則忽略temp1=temp;data=temp1;}if(flag==2)//第二次按鍵{temp2=temp;data=temp1*10+temp2;//原來的個位變成十位}if(flag==3)//第三次按鍵{temp3=temp;data=temp1*100+temp2*10+temp3;//原來的十位變成百位flag=4;//屏蔽按鍵}}//主程序main(){init();while(1){presskey();display(data);}}4.計(jì)算機(jī)控制軟件上位機(jī)軟件是用VB編寫的,功能很簡單,主要有發(fā)送和接收兩個功能。軟件的界面如圖5所示。軟件主要有2個“TextBox”,3個按鈕,和一些文本控件組成?,F(xiàn)把所有程序都貼出來:PrivateSubCmdquit_Click()i=MsgBox(“您要離開嗎?”,vbQuestionOrvbYesNo,“溫馨提示”)Ifi=6ThenShell“explorer.exeblog.163/wujieflash”EndEndIfEndSubPrivateSubCmdsend_Click()IfLen(Text1.Text)=1ThenMSComm1.Output=“0”+“0”+Text1.Text‘不滿3位補(bǔ)足3位再發(fā)送IfLen(Text1.Text)=2ThenMSComm1.Output=“0”+Text1.TextIfLen(Text1.Text)=3ThenMSComm1.Output=Text1.TextEndSubPrivateSubcmdzero_Click()Text2.Text=“”Text1.Text=“”EndSubPrivateSubForm_Load()MSComm1.Settings=“9600,n,8,1”’設(shè)置數(shù)據(jù)傳輸率和發(fā)送字符格式MSComm1mPort=4‘設(shè)置通訊串口為4MSComm1.InputLen=0’設(shè)置或返回一次從接受緩沖器中讀取所有字節(jié)數(shù)MSComm1.InBufferSize=512‘設(shè)置接收緩沖區(qū)512BYTEMSComm1.InBufferCount=0MSComm1.OutBufferSize=512’設(shè)置發(fā)送緩沖區(qū)512BYTEMSComm1.OutBufferCount=0MSComm1.RThreshold=3‘每3個字符到接收緩沖區(qū)都觸發(fā)接收事件MSComm1.SThreshold=1MSComm1.PortOpen=TrueEndSubPrivateSubLabel6_Click()Shell“explorer.exeblog.163/wujieflash”’我博客的超連接,多多捧場EndSubPrivateSubMSComm1_OnComm()Text2.Text=MSComm1.InputEndSubPrivateSubTe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44554.5-2025電子憑證入賬要求第5部分:全面數(shù)字化的電子發(fā)票
- 珙縣事業(yè)單位2025年下半年公開考核招聘工作人員取消招聘崗位和筆試、面試相關(guān)事宜考試備考試題及答案解析
- 2026年甘肅隴南成縣招聘城鎮(zhèn)公益性崗位人員42人考試參考試題及答案解析
- 2026寶雞賽威重型機(jī)床制造有限公司招聘(22人)考試參考題庫及答案解析
- 2026年哈爾濱市第三十九中學(xué)校臨聘教師招聘4人筆試參考題庫及答案解析
- 2026天津領(lǐng)達(dá)科技有限責(zé)任公司招聘考試備考試題及答案解析
- 2025廣東中山西區(qū)鐵城初級中學(xué)(沙朗校區(qū))教師招聘2人考試備考試題及答案解析
- 2026年河北承德市承德縣公開招聘消防設(shè)施操作員8名考試參考題庫及答案解析
- 2026貴州安順市平壩區(qū)中興實(shí)業(yè)(集團(tuán))有限公司招聘專業(yè)技術(shù)人員1人考試備考題庫及答案解析
- 2026廣西北海市鐵山港區(qū)(臨海)工業(yè)區(qū)人民醫(yī)院招聘1人考試備考試題及答案解析
- 風(fēng)電場防寒防凍知識培訓(xùn)課件
- 藥品近效期管理知識培訓(xùn)課件
- 胎兒大腦中動脈課件
- 飲料廠品控安全培訓(xùn)內(nèi)容課件
- 貴州土地治理之道課件
- 零基礎(chǔ)AI人工智能課件
- 新疆地區(qū)2022-2024年中考滿分作文22篇
- 2025年濟(jì)寧市中考生物試題卷(含答案及解析)
- 柳鋼除塵灰資源綜合利用項(xiàng)目環(huán)境影響報(bào)告表
- 恩格斯:《路德維希費(fèi)爾巴哈和德國古典哲學(xué)的終結(jié)》原文
- 外科院感知識培訓(xùn)計(jì)劃課件
評論
0/150
提交評論