




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
用單片機的模擬串口讀取TFmini的數(shù)據(jù)朱錚南STC15W104單片機只有8個針腳,剛好滿足讀取激光測距模塊TFmini的數(shù)據(jù)并用74HC595驅(qū)動的四位數(shù)碼管顯示所需要的針腳。遺憾的是STC15W104不具有串口功能,只能用普通針腳來模擬串口。本文代碼里的“讀1幀函數(shù)”就是模擬串口。激光測距模塊TFmini輸出的串口信號的波特率是115200,起始位和結(jié)束位各占1位,數(shù)據(jù)占8位,可以算出傳輸一位數(shù)據(jù)的時長是1000000us/115200=8.68us。本例中的模擬串口采用了代碼延時和定時器溢出中斷相結(jié)合的方法,起始位開始后用代碼延時3us再啟動定時器,定時器溢出中斷產(chǎn)生8.68us的時間間隔用來讀取每一位的數(shù)據(jù)。定時器的初始化代碼放在主函數(shù)一開頭的地方。實踐證明這個模擬串口工作非常穩(wěn)定。完整的代碼如下。**STC15W104模擬串口讀TFmini,74HC595驅(qū)動數(shù)碼管顯示。朱錚南編寫#include<STC15W.h>#defineuintunsignedint#defineucharunsignedcharsbitDIO=P3A4; 〃串行數(shù)據(jù)輸入sbitRK=P3A2; 〃時鐘脈沖信號——上升沿有效sbitSK=P3A3; 〃打入信號——上升沿有sbitRXD=P3A0; 〃模擬串口讀入針腳sbitSW_out=P3A5; 〃開關(guān)輸出針腳ucharK; 〃標(biāo)志定時器0溢出中斷是否發(fā)生ucharEND;〃結(jié)束位ucharMySBUF; 〃存放1幀數(shù)據(jù)ucharvalue[9]; 〃存放9字節(jié)數(shù)據(jù)的數(shù)組uintdist,dist1; 〃存放距離的變量uintHEADER=0x59; 〃幀頭uintth_value=100; 〃設(shè)定開關(guān)閾值厘米ucharcodetable[]={0xC0,//"0"0xF9,〃T0xA4,//"2"0xB0,//"3"0x99,//"4"0x92,//"5"0x82,//"6"0xF8,//"7"0x80,//"8"0x90 //"9"); 〃八段共陽數(shù)碼管**延時3usvoidDelay3us()//@30MHz{unsignedchari;i=20;while(--i);)**延時10msvoidDelay10ms()//@30MHz{unsignedchari,j,k;_nop_();_nop_();i=2;j=36;k=206;do{do{while(--k);}while(--j);}while(--i);}**等待中斷發(fā)生voidWaitTF0(void)(while(!K);K=0;}**讀1幀函數(shù)(波特率115200)voidRByte(void)(uchari=8;END=0;while(!END)〃循環(huán),直到確認(rèn)結(jié)束位(while(RXD); 〃等待起始位低電平Delay3us(); 〃起始位開始后延時3usTR0=1; 〃定時器0開始計時WaitTF0();〃延遲8.6uswhile(i--) 〃重復(fù)8次,每次讀1位(先收低位)(MySBUF>>=1; 〃左移1位if(RXD)MySBUF|=0x80; 〃若高電平,則最高位寫1WaitTF0(); 〃延遲8.6us}END=RXD;}TR0=0;}**讀TFmini函數(shù)voidread_TFmini(void)ucharcheck; 〃用來存放校驗碼uintj;while(dist==0) 〃循環(huán),直到得到距離值(while(value[1]!=HEADER) 〃循壞,直到第1和第2幀都等于0x59(RByte();〃接收1幀if(MySBUF==HEADER) 〃如果接收到的是0x59(value[0]=MySBUF;〃保存到數(shù)組RByte(); 〃接收下1幀if(MySBUF==HEADER)〃如果下1幀也等于0x59(value[1]=MySBUF;〃保存到數(shù)組)))for(j=2;j<9;j++) 〃循環(huán)接收剩余7幀(RByte();〃依次接收各幀value[j]=MySBUF;〃保存到數(shù)組)check=value[0]+value[1]+value[2]+value[3]+value[4]+value[5]+value[6]+value[7];if(value[8]==(check&0xFF))〃檢驗前8字節(jié)數(shù)據(jù)和的低8位是否等于第9位(dist=value⑵+value[3]*256; 〃計算距離值)))**595串入并出函數(shù)voidLED_OUT(ucharX)(uchari;for(i=8;i>=1;i--)(if(X&0x80)DIO=1;elseDIO=0;X<<=1;SK=0;SK=1;))**顯示函數(shù)voidDisplay(uchara,ucharb,ucharc,uchard)(ucharj;for(j=0;j<3;j++)(〃顯示千位LED_OUT(table[a]);LED_OUT(0x08);RK=0;RK=1;〃顯示百位LED_OUT(table[b]&0x7F);LED_OUT(0x04);RK=0;RK=1;〃顯示十位LED_OUT(table[c]);LED_OUT(0x02);RK=0;RK=1;〃顯示個位LED_OUT(table[d]);LED_OUT(0x01);RK=0;RK=1;〃關(guān)閉個位LED_OUT(0x00);RK=0;RK=1;**函數(shù)名稱:主函數(shù)入口voidmain(void)(〃設(shè)置中斷1(定時器0溢出中斷,時間間隔8.6us@30MHz)AUXR1=0x80; 〃定時器時鐘1T模式TMOD&=0xF0; 〃設(shè)置定時器模式TL0=0xFC; 〃設(shè)置定時初值TH0=0xFE; 〃設(shè)置定時初值TF0=0;//清除TF0標(biāo)志TR0=0; 〃定時器停止計時ET0=1; 〃允許定時器0中斷EA=1;〃中斷允許總開關(guān)while(1)(value[0]=0x00;value[1]=0x00;dist=0; 〃距離清零read_TFmini(); 〃調(diào)用讀TFmini函數(shù)dist1=dist;if(dist<=30||dist>=1200)dist=0000; 〃超出范圍就顯示0Display(dist/1000,dist%1000/100,dist%100/10,dist%10); 〃調(diào)用數(shù)碼管顯示函數(shù)value[0]=0x00;value[1]=0x00;dist=0;Delay10ms();read_TFmini();〃間隔10ms再次調(diào)用讀TFmini函數(shù)if(dist/10==dist1/10&&dist1>=th_value)SW_out
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 制造業(yè)項目標(biāo)準(zhǔn)合同模板
- 合同制優(yōu)化保獎服務(wù)套餐(7型)
- 裝修裝飾工程合同(三)
- 綠色通道綠化合同
- 租賃合同和解協(xié)議書格式示例
- 車輛質(zhì)押借款正式合同
- 公司簽訂安保人員合同范本范例
- 小學(xué)生拓展思維作文課件
- 臨終關(guān)懷服務(wù)的倫理決策案例考核試卷
- 城市配送與物流配送環(huán)節(jié)的風(fēng)險防范考核試卷
- 2024并網(wǎng)光伏逆變器技術(shù)規(guī)范
- 文言文多文本閱讀:叔向見韓宣子(附答案解析與譯文)
- 工程招投標(biāo)模擬實訓(xùn)報告范文2024年
- 系統(tǒng)脫敏治療的長期療效跟蹤評估
- DB13(J)T 8406-2021 裝配式混凝土結(jié)構(gòu)工程施工與質(zhì)量驗收規(guī)程(京津冀)
- 浙江省臺州市2024年中考語文模擬試題及答案6
- 離婚被告辯護詞格式范文
- 2024數(shù)字化風(fēng)電場智慧運營
- 機電一體化綜合應(yīng)用教程 課件 項目二 加蓋擰蓋單元的安裝與調(diào)試
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)教程(高校創(chuàng)新創(chuàng)業(yè)教育課程)全套教學(xué)課件
- 2024年江蘇農(nóng)林職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫完美版
評論
0/150
提交評論