




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
串口通訊
代碼規(guī)范性書(shū)寫(xiě)
電子組代碼規(guī)范性書(shū)寫(xiě)1.首先最基本的。寫(xiě)出的代碼要有層次感,讓他們看時(shí)不會(huì)太費(fèi)力,思路清晰即可,并且盡可能少滴出現(xiàn)編寫(xiě)錯(cuò)誤。2.了解一些編譯常見(jiàn)問(wèn)題處理。3.STC89與STC12程序之間移植的注意項(xiàng)。了解主要不同點(diǎn)與相同點(diǎn)?!居布?shí)現(xiàn)與CPU實(shí)現(xiàn)區(qū)別】4.代碼結(jié)構(gòu)規(guī)整,思路清晰。。一個(gè)好的思路等于解決了一大半工作量voidDelay1ms() { unsignedchari,j; _nop_(); _nop_(); _nop_(); i=11; j=190; do { while(--j); }while(--i);}//STC12voidDelay1ms() { unsignedchari,j; _nop_(); i=2; j=199; do { while(--j); }while(--i);}//STC89延時(shí)函數(shù)的問(wèn)題【寄存器,定時(shí)器,串口,CPU實(shí)現(xiàn)和定時(shí)器】振蕩(時(shí)鐘)周期,機(jī)器周期,指令周期三者不同STC12默認(rèn)是1T模式,STC89默認(rèn)是12T模式為什么STC官網(wǎng)說(shuō)只能快6~7倍
//AUXR&=0x7F;
TMOD&=0xF0;
TMOD|=0x01;
TL0=0xA4;
TH0=0xFF;
TF0=0;
TR0=1; 上面關(guān)于延時(shí)函數(shù)的不同,但是下面的的定時(shí)器初始化函數(shù)同樣與時(shí)間有關(guān),但是在移植時(shí)卻不需要更改。一般通訊格式與穩(wěn)定性上位機(jī)與下位機(jī)的通信上位機(jī)是指可以直接發(fā)出操控命令的計(jì)算機(jī),一般是,屏幕上顯示各種信號(hào)變化。下位機(jī)是直接控制設(shè)備獲取設(shè)備狀況的計(jì)算機(jī),一般是單片機(jī)、PLC等。上位機(jī)發(fā)出的命令首先給下位機(jī),下位機(jī)再根據(jù)此命令解釋成相應(yīng)時(shí)序信號(hào)直接控制相應(yīng)設(shè)備。下位機(jī)不時(shí)讀取設(shè)備狀態(tài)數(shù)據(jù)(一般為模擬量),轉(zhuǎn)換成數(shù)字信號(hào)反饋給上位機(jī)。在通訊過(guò)程中,下位機(jī)上位機(jī)都需要一個(gè)共同的通訊協(xié)議負(fù)責(zé)信息交流,并提高穩(wěn)定性?!旧衔粰C(jī)與下位機(jī)通訊具體過(guò)程】(最普通)常用到的通訊格式為幀頭(包頭/開(kāi)始標(biāo)志位)+數(shù)據(jù)包+幀尾(包尾/結(jié)束標(biāo)志位)簡(jiǎn)單的設(shè)計(jì)解決了許多問(wèn)題1.上位機(jī)、下位機(jī)都需要明確到底哪些才是自己需要接受的數(shù)據(jù)。2.不同的幀頭幀尾可以對(duì)數(shù)據(jù)包內(nèi)容進(jìn)行分類接受(此功能也可在數(shù)據(jù)包內(nèi)實(shí)現(xiàn))3.方便上位機(jī)與下位機(jī)編程。幀頭幀尾提供了通訊開(kāi)始與通訊結(jié)束的兩個(gè)標(biāo)志位。可控制內(nèi)容輸入、輸出。在數(shù)據(jù)包發(fā)送數(shù)據(jù)時(shí)常用兩種形式1.使用十六進(jìn)制格式發(fā)送——優(yōu)勢(shì):最短數(shù)據(jù)長(zhǎng)度包含最多的信息。且單片機(jī)不用進(jìn)行或進(jìn)行簡(jiǎn)單解析(不一定,有時(shí)解析難度還是較大)。缺點(diǎn):調(diào)試不太方便,直觀性不強(qiáng)。2.使用十進(jìn)制格式發(fā)送——優(yōu)劣與上十六進(jìn)制格式正好相反。如:如果發(fā)送一個(gè)值為100的數(shù)據(jù)。
你可以發(fā)送一個(gè)0x64進(jìn)行傳輸。也可以發(fā)送0x310x300x30單片機(jī)接收到時(shí)進(jìn)行解析數(shù)據(jù)包的常用簡(jiǎn)單結(jié)構(gòu)目前簡(jiǎn)單數(shù)據(jù)包應(yīng)用的格式有1.以固定長(zhǎng)度進(jìn)行識(shí)別如:類似S40034D格式假如我們按照一個(gè)約定數(shù)據(jù)包內(nèi)第一個(gè)數(shù)據(jù)為2位,第2個(gè)數(shù)據(jù)為3位。(上位機(jī)與下位機(jī)已經(jīng)約定好的)則數(shù)據(jù)包信息為4034。。如果我們發(fā)送信息為11時(shí)就要發(fā)送S01001D2.以特殊字符作為數(shù)據(jù)分割點(diǎn)進(jìn)行識(shí)別如:類似上面S40034D格式4034數(shù)字我們可以用字母將數(shù)據(jù)分割為即發(fā)送S40A34D。若發(fā)送11數(shù)字就可以發(fā)送S1A1D兩種通訊格式各有優(yōu)略,各自按照自己的習(xí)慣和具體通訊數(shù)據(jù)類型進(jìn)行選擇第一種數(shù)據(jù)處理方便,長(zhǎng)度固定,但可能耗費(fèi)較多資源。第二種需要分配空間,動(dòng)態(tài)長(zhǎng)度存儲(chǔ),需要算法進(jìn)行解析處理。關(guān)于串口發(fā)送和接收函數(shù)的糾結(jié)糾結(jié)1:到底在發(fā)送的時(shí)候需不需要關(guān)閉串口中斷(ES=0)糾結(jié)2:為什么串口自己寫(xiě),少了一點(diǎn)點(diǎn)差別為什么很大串口的發(fā)送和接受方式有兩種方法:中斷法、輪詢法(不用中斷)首先,明確,串口接受數(shù)據(jù)、發(fā)送數(shù)據(jù)時(shí)是不需要CPU參與具體時(shí)序過(guò)程(不同于CPU模擬的IIC通訊,需要CPU模擬)的,是由定時(shí)器與串行口等硬件共同協(xié)助工作的。當(dāng)CPU置于SBUF=A語(yǔ)句時(shí),就相當(dāng)于通知串口硬件工作并把A的八位的ASCII碼值一位一位滴發(fā)送出去。發(fā)送結(jié)束后有TI置1作為發(fā)送結(jié)束的中斷請(qǐng)求。當(dāng)上位機(jī)發(fā)送數(shù)據(jù)過(guò)來(lái)時(shí),CPU是并不知道這件事的,等到一個(gè)字節(jié)接收完畢后,由硬件將RI置1,通知CPU有一字節(jié)數(shù)據(jù)到來(lái),并已經(jīng)存至SBUF中可以取走。
RI、TI都是由硬件置1,由軟件清零的。#include“STC12C5A60S2.H“//忽略串口初始化程序unsignedcharbuf,rec_flag=0;statick=0;voidmain(){ Init_USRT(); while(1) { if(rec_flag==1) { rec_flag=0; SBUF=buf+k; } }}voidserial_ser()interrupt4{
if(TI)//發(fā)送中斷服務(wù)函數(shù) { TI=0;
k++; } if(RI)//接受中斷服務(wù)函數(shù) { RI=0;
buf=SBUF; rec_flag=1; }}RITI觸發(fā)的中斷進(jìn)行處理。想想問(wèn)什么接收數(shù)據(jù)時(shí)常用中斷法,發(fā)送數(shù)據(jù)時(shí)常用輪詢等待法。while(!TI);TI=0;SBUF=0x0d;/*outputCR*/}if(RI){if(SBUF==XOFF){do{RI=0;while(!RI);}while(SBUF!=XON);RI=0;}}
while(!TI);TI=0;return(SBUF=c);}Printf()函數(shù)的內(nèi)部實(shí)現(xiàn)是由putchar實(shí)現(xiàn)#include<reg51.h>#defineXON0x11#defineXOFF0x13/**putchar(fullversion):expands'\n'intoCRLFandhandles*XON/XOFF(Ctrl+S/Ctrl+Q)protocol*/charputchar(charc){if(c=='\n'){if(RI){if(SBUF==XOFF){do{RI=0;while(!RI);}while(SBUF!=XON);RI=0;}}為什么printf()函數(shù)不能用中斷清零的方式進(jìn)行。而且在使用前將TI置1.
一般來(lái)說(shuō),串口發(fā)送部分都是如同你的程序所示(使用輪詢法進(jìn)行書(shū)寫(xiě)),不進(jìn)入中斷,通過(guò)判斷TI來(lái)判斷是否需要發(fā)送下一個(gè)字節(jié),發(fā)送結(jié)束后一定要將TI軟件清0,否則會(huì)干擾后續(xù)的邏輯。(可以試一試,如果沒(méi)有清零且串口使能打開(kāi)的情況下,后續(xù)程序就像速度減慢了許多倍一樣【不斷進(jìn)入串口中斷】)如果已打開(kāi)了串口中斷,還必須把串口中斷關(guān)閉,等全部發(fā)送完以后再打開(kāi)串口中斷,避
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 以患者為中心的醫(yī)患溝通藝術(shù)
- 醫(yī)療大數(shù)據(jù)技術(shù)對(duì)醫(yī)學(xué)研究的影響
- 2025年中國(guó)辦公雜物架數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 醫(yī)療設(shè)備供應(yīng)鏈金融中區(qū)塊鏈技術(shù)的獨(dú)特作用
- 江蘇高品質(zhì)住宅規(guī)劃及單體建筑方案設(shè)計(jì)
- 醫(yī)院護(hù)理部模擬試卷17
- 《詠柳》賞析課件
- 2025年災(zāi)害管理與應(yīng)急響應(yīng)知識(shí)考試試題及答案
- 2025年景觀設(shè)計(jì)師資格考試試題及答案
- 肺結(jié)節(jié)診治中國(guó)專家共識(shí)2024版解讀
- 2024年公開(kāi)招聘事業(yè)單位工作人員報(bào)名登記表
- 2024年全國(guó)高考數(shù)學(xué)試題及解析答案(新課標(biāo)Ⅱ卷)
- 貴州水城宏源實(shí)業(yè)(集團(tuán))有限責(zé)任公司招聘筆試題庫(kù)2024
- 14.促織《變形記》聯(lián)讀教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 《大學(xué)英語(yǔ)四級(jí)強(qiáng)化教程》全套教學(xué)課件
- 重點(diǎn)鎮(zhèn)評(píng)價(jià)標(biāo)準(zhǔn)
- 2023廣州美術(shù)學(xué)院附屬中等美術(shù)學(xué)校(廣美附中)入學(xué)招生測(cè)試卷數(shù)學(xué)模擬卷
- 《民法典》培訓(xùn)系列課件:第三編 租賃合同
- 《DB32T 4028-2021常染色體STR基因座等位基因頻率參數(shù)》
- 農(nóng)村生活污水處理站運(yùn)營(yíng)維護(hù)方案
- 煙機(jī)設(shè)備操作工基礎(chǔ)知識(shí)考試題庫(kù)(濃縮500題)
評(píng)論
0/150
提交評(píng)論