




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
串口通訊
代碼規范性書寫
電子組代碼規范性書寫1.首先最基本的。寫出的代碼要有層次感,讓他們看時不會太費力,思路清晰即可,并且盡可能少滴出現編寫錯誤。2.了解一些編譯常見問題處理。3.STC89與STC12程序之間移植的注意項。了解主要不同點與相同點。【硬件實現與CPU實現區別】4.代碼結構規整,思路清晰。。一個好的思路等于解決了一大半工作量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延時函數的問題【寄存器,定時器,串口,CPU實現和定時器】振蕩(時鐘)周期,機器周期,指令周期三者不同STC12默認是1T模式,STC89默認是12T模式為什么STC官網說只能快6~7倍
//AUXR&=0x7F;
TMOD&=0xF0;
TMOD|=0x01;
TL0=0xA4;
TH0=0xFF;
TF0=0;
TR0=1; 上面關于延時函數的不同,但是下面的的定時器初始化函數同樣與時間有關,但是在移植時卻不需要更改。一般通訊格式與穩定性上位機與下位機的通信上位機是指可以直接發出操控命令的計算機,一般是,屏幕上顯示各種信號變化。下位機是直接控制設備獲取設備狀況的計算機,一般是單片機、PLC等。上位機發出的命令首先給下位機,下位機再根據此命令解釋成相應時序信號直接控制相應設備。下位機不時讀取設備狀態數據(一般為模擬量),轉換成數字信號反饋給上位機。在通訊過程中,下位機上位機都需要一個共同的通訊協議負責信息交流,并提高穩定性。【上位機與下位機通訊具體過程】(最普通)常用到的通訊格式為幀頭(包頭/開始標志位)+數據包+幀尾(包尾/結束標志位)簡單的設計解決了許多問題1.上位機、下位機都需要明確到底哪些才是自己需要接受的數據。2.不同的幀頭幀尾可以對數據包內容進行分類接受(此功能也可在數據包內實現)3.方便上位機與下位機編程。幀頭幀尾提供了通訊開始與通訊結束的兩個標志位。可控制內容輸入、輸出。在數據包發送數據時常用兩種形式1.使用十六進制格式發送——優勢:最短數據長度包含最多的信息。且單片機不用進行或進行簡單解析(不一定,有時解析難度還是較大)。缺點:調試不太方便,直觀性不強。2.使用十進制格式發送——優劣與上十六進制格式正好相反。如:如果發送一個值為100的數據。
你可以發送一個0x64進行傳輸。也可以發送0x310x300x30單片機接收到時進行解析數據包的常用簡單結構目前簡單數據包應用的格式有1.以固定長度進行識別如:類似S40034D格式假如我們按照一個約定數據包內第一個數據為2位,第2個數據為3位。(上位機與下位機已經約定好的)則數據包信息為4034。。如果我們發送信息為11時就要發送S01001D2.以特殊字符作為數據分割點進行識別如:類似上面S40034D格式4034數字我們可以用字母將數據分割為即發送S40A34D。若發送11數字就可以發送S1A1D兩種通訊格式各有優略,各自按照自己的習慣和具體通訊數據類型進行選擇第一種數據處理方便,長度固定,但可能耗費較多資源。第二種需要分配空間,動態長度存儲,需要算法進行解析處理。關于串口發送和接收函數的糾結糾結1:到底在發送的時候需不需要關閉串口中斷(ES=0)糾結2:為什么串口自己寫,少了一點點差別為什么很大串口的發送和接受方式有兩種方法:中斷法、輪詢法(不用中斷)首先,明確,串口接受數據、發送數據時是不需要CPU參與具體時序過程(不同于CPU模擬的IIC通訊,需要CPU模擬)的,是由定時器與串行口等硬件共同協助工作的。當CPU置于SBUF=A語句時,就相當于通知串口硬件工作并把A的八位的ASCII碼值一位一位滴發送出去。發送結束后有TI置1作為發送結束的中斷請求。當上位機發送數據過來時,CPU是并不知道這件事的,等到一個字節接收完畢后,由硬件將RI置1,通知CPU有一字節數據到來,并已經存至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)//發送中斷服務函數 { TI=0;
k++; } if(RI)//接受中斷服務函數 { RI=0;
buf=SBUF; rec_flag=1; }}RITI觸發的中斷進行處理。想想問什么接收數據時常用中斷法,發送數據時常用輪詢等待法。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()函數的內部實現是由putchar實現#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()函數不能用中斷清零的方式進行。而且在使用前將TI置1.
一般來說,串口發送部分都是如同你的程序所示(使用輪詢法進行書寫),不進入中斷,通過判斷TI來判斷是否需要發送下一個字節,發送結束后一定要將TI軟件清0,否則會干擾后續的邏輯。(可以試一試,如果沒有清零且串口使能打開的情況下,后續程序就像速度減慢了許多倍一樣【不斷進入串口中斷】)如果已打開了串口中斷,還必須把串口中斷關閉,等全部發送完以后再打開串口中斷,避
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五員工培訓合同標準范文
- 二零二五版物流倉儲租賃合同范例
- 二零二五簡單的擔保合同
- 個人以房產抵債協議
- 二零二五商鋪租賃合同轉讓協議
- 項目融資服務協議書
- 商業投資合作保密協議書二零二五年
- 公司租賃個人車輛合同范例
- 二零二五版股東股權轉讓協議標準模板
- 測量知識課件
- 統編版小學道德與法治三年級下冊第9課《生活離不開規則》公開課課件
- 提高型鋼混凝土梁柱節點施工合格率
- 2023年全國大學生英語競賽初賽試卷(C類)與答案
- 計算機系畢業論文
- 富士施樂cp105深度拆解
- 雙基地FMCW MIMO雷達時頻同步技術研究
- 陜北白絨山羊疫病防控綜合技術2016420課件
- JJG 814-2015自動電位滴定儀
- 中班社會《光盤行動從我做起》課件
- GB/T 13384-2008機電產品包裝通用技術條件
- 新教科版五年級下冊科學期中測試卷(含答案)
評論
0/150
提交評論