找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2474|回復: 5
打印 上一主題 下一主題
收起左側(cè)

關于編寫串口通信協(xié)議遇到的問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94983 發(fā)表于 2015-11-7 14:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人最近在學習51單片機,主要功能是實現(xiàn)串口通信協(xié)議,并附帶數(shù)碼管顯示等功能,F(xiàn)在遇到一個問題,我現(xiàn)在希望每隔500ms發(fā)送一串16字節(jié)的數(shù)據(jù),這個500ms我使用定時器0來實現(xiàn),在10ms定時器中Send_Wait_1++。主函數(shù)中,上電先發(fā)送一串數(shù)據(jù),數(shù)據(jù)發(fā)送過程中,Send_Wait_1一直清零,當定時器0啟動時,每次當Send_Wait_1>=50時,啟動發(fā)送函數(shù)Uart2_SendString(),但是我用keil5軟件仿真時,發(fā)現(xiàn)Send_Wait_1一直在增加,但是到了50后,并沒有觸發(fā)if語句從而發(fā)動Uart2_SendString(),程序燒到板子上后,用示波器測了一下,發(fā)送端只有上電后第一次發(fā)動的Uart2_SendString(),之后一直沒有數(shù)據(jù)發(fā)送,糾結(jié)了好幾天一直沒有想明白為什么。
主函數(shù)
void main(void)
{
  Timer0Init();
        Uart2_Init();       
        Send_Wait_1=0;
        Uart2_SendString();       
        if(Send_Wait_1>=50)
        {
  Send_Wait_1=0;
        Uart2_SendString();
        }       
        DisP4(1234);
        Digi();
        Key4();

}

定時器0,100us
void tm0() interrupt 1 using 1
{         
        US100++;
  if(US100>= 10)
    {US100=0; Serve1MS();                // 1MS¼Æê±
      MS1++;
    if(MS1>=10)
       {MS1=0;  Serve10MS();             // 10MS¼Æê±
        MS10++;
      if(MS10>=10)
        { MS10=0;  Serve100MS();           // 100MS¼Æê±
        MS100++;  
                                 if(MS100>=10)
                                 {
                                         MS100=0;  Serve1S();                // 1S¼Æê±
                                         S1++;
                                         if(S1>250) S1=0;
                                 }
        }
       }
    }
}

工程文件見附件,求高手指導一下

V1.03.zip

92.77 KB, 下載次數(shù): 3

keil5工程

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:94983 發(fā)表于 2015-11-7 17:58 | 只看該作者
我在用定時器0實現(xiàn)的1s定時器里控制p55取反,效果是LED閃爍,我發(fā)現(xiàn),如果把        DisP4(1234);         Digi();         Key4()三行屏蔽的話,燈閃效果莫名地消失了,但是串口二會不斷地發(fā)數(shù)據(jù)而不是按照我期望的那樣每隔500ms發(fā)數(shù)據(jù)
回復

使用道具 舉報

板凳
ID:95029 發(fā)表于 2015-11-7 21:58 | 只看該作者
  if(Send_Wait_1>=50)         {   Send_Wait_1=0;         Uart2_SendString();         }                 DisP4(1234);         Digi();         Key4();
回復

使用道具 舉報

地板
ID:95029 發(fā)表于 2015-11-7 21:59 | 只看該作者
將下面幾句放在while(1){}中:  if(Send_Wait_1>=50)         {   Send_Wait_1=0;         Uart2_SendString();         }                 DisP4(1234);         Digi();         Key4();
回復

使用道具 舉報

5#
ID:94983 發(fā)表于 2015-11-8 15:34 | 只看該作者
logos 發(fā)表于 2015-11-7 21:59
將下面幾句放在while(1){}中:  if(Send_Wait_1>=50)         {   Send_Wait_1=0;         Uart2_SendStrin ...

發(fā)現(xiàn)問題了,是在digi函數(shù)里放了while(1)死循環(huán)了
回復

使用道具 舉報

6#
ID:95113 發(fā)表于 2015-11-8 23:46 | 只看該作者
雖然不能全都看懂,還是頂
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表