|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
串行中斷程序 |
| 作者:flyhight 欄目:單片機 |
串行通訊中,20個字節(jié)為一個有意義的單位,當起始字節(jié), 校驗和字節(jié),結(jié)束字節(jié)都正確時,認為該組數(shù)據(jù)有意義,第一個字節(jié)為 起始字節(jié),當其為0x00時認為是正確的起始位,才可以開始收數(shù)據(jù), 否則認為不正確的起始位,第19位是前18個字節(jié)的校驗和,只有第20個字節(jié)為0x11時, 才認為是正確的截止位,認為該組數(shù)據(jù)有意,串行中斷的程序可以這樣寫嗎? 為什么我執(zhí)行結(jié)果不正確呢? void interrupt4() interrupt 4 {unsigned CHAR Lint_Sum,a,; //Finish_Flag為接收數(shù)據(jù)完整正確標志位 a=SBUF; //Gint_Shu為全局變量,表示接收數(shù)據(jù)個數(shù),在上電初始化時賦值為0 if(Gint_Shu==0) //Gchr_Data為接收數(shù)據(jù)數(shù)組Gchr_Data[20] {if(a==0x00) {Finish_Flag=0;Gchr_Data[0]=a;Gint_Shu++;RI=0;} else {Gint_Shu=0;RI=0;;} //如果起始位不正確,則使數(shù)組從0開始接收數(shù)據(jù); } else if((Gint_Shu>=0)&&(Gint_Shu<19)) {Gchr_Data[Gint_Shu]=a;Gint_Shu++;RI=0;} else if(Gint_Shu==20) {if(a==0x11) {Gchr_Data[20]=a;Gint_Shu=0;RI=0; Lint_Sum=sum(Gchr_Data,18); //sum為求校驗和函數(shù); if(Gchr_Data[18]==Lint_Sum) Finish_Flag=1; else {Gint_Shu=0;RI=0;} } else {Gint_Shu=0;RI=0;} } else {Gint_Shu=0;RI=0;} } |
| 2樓: | >>參與討論 |
| 作者: zhou051700 于 2005/3/31 20:19:00 發(fā)布:
這里是不是有錯 else if((Gint_Shu>=0)&&(Gint_Shu<19)) {Gchr_Data[Gint_Shu]=a;Gint_Shu++;RI=0;} else if(Gint_Shu==20) 如果是二十個字節(jié)的話,Gint_shu從0開始計數(shù),那么到19為20個字節(jié), 所以Gint_shu不能等于20 |
|
| 3樓: | >>參與討論 |
| 作者: 石湖天隨 于 2005/3/31 22:03:00 發(fā)布:
如樓上說的 如樓上說的 zhou051700 發(fā)表于 2005-3-31 20:19 侃單片機 ←返回版面 這里是不是有錯 else if((Gint_Shu>=0)&&(Gint_Shu<19)) {Gchr_Data[Gint_Shu]=a;Gint_Shu++;RI=0;} else if(Gint_Shu==20) 如果是二十個字節(jié)的話,Gint_shu從0開始計數(shù),那么到19為20個字節(jié), 所以Gint_shu不能等于20 應該是 Gint_shu=19; |
|
| 4樓: | >>參與討論 |
| 作者: 石湖天隨 于 2005/3/31 22:04:00 發(fā)布:
同樣這里也是19 //Gchr_Data為接收數(shù)據(jù)數(shù)組Gchr_Data[20] |
|
| 5樓: | >>參與討論 |
| 作者: 石湖天隨 于 2005/3/31 22:06:00 發(fā)布:
還有 起始位用 00H 是不是不好 容易受到干擾的 換個可能會好點的 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |