音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術交流 | 電路欣賞 | 工控天地 | 數(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
這里是不是有錯
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樓: >>參與討論
石湖天隨
如樓上說的
如樓上說的
     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樓: >>參與討論
石湖天隨
同樣這里也是19  //Gchr_Data為接收數(shù)據(jù)數(shù)組Gchr_Data[20]
 
5樓: >>參與討論
石湖天隨
還有 起始位用 00H 是不是不好 容易受到干擾的 換個可能會好點的
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關帖子
各位DX,能否貼幾個IO口模擬串口的c語言程序啊
請教大蝦:怎么利用51的待機工作方式
求助: 現(xiàn)在市場上GPS模塊行情
想自己做一套單片機試驗板,不知如何入手,請各位指點,謝謝!
modbus是發(fā)送的字符類型是什么?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號