找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5378|回復(fù): 13
收起左側(cè)

51單片機(jī)通信問題(接收七個(gè)八位數(shù)據(jù)正常,一但接收六個(gè)八位數(shù)據(jù),就陷入死循環(huán))

[復(fù)制鏈接]
ID:77695 發(fā)表于 2015-4-22 10:32 | 顯示全部樓層 |閱讀模式
void com_init(void);

void main(void)
{               
               
                 
     uchar com_dat;
     com_init();                                                                                                                                                                                                                    
     while(1)
     {
                                         
          if(RI)
          {
            com_dat=SBUF;
            RI=0;                                                
                                                table[ i]=com_dat;
                                                SBUF=com_dat;
                                          TI=0;
                                                i++;
                                                if(i>6)
                                                {
                                                        disp_data();
                                                        i=0;
                                                }
          }
                                                
     }
}
void disp_data()//ò»′Î′|àí
{
                        if(table[0]==0xAA)
                        {
                                if(table[1]==0xBB)
                                {
                                        if(table[2]==0x01)
                                                //if(table[5]==0x00)
                                                //if(table[6]==0xFF)
                                        {
                                                P0=table[3];
                                                P1=table[4];
                                        }
                                }                                
                        }                        
}

void com_init(void)
{
    TMOD=0X20;
                SCON=0X50;
                TH1=0XFD;
                TL1=0XFD;
                ET0=1;
                EA=1;               
                TR1=1;
                P0=0;
                P1=0;        
}

這是我的程序,默認(rèn)協(xié)議為 AA BB  address data1 data2 00 FF,接收七個(gè)八位數(shù)據(jù)正常,一但接收六個(gè)八位數(shù)據(jù),比如 AA BB 01 3f 00 FF ,程序就陷入死循環(huán)了,大家?guī)蛶兔臀医鉀Q下怎么處理像六個(gè)八位數(shù)據(jù)的情況啊,謝謝

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:72643 發(fā)表于 2015-4-22 10:55 | 顯示全部樓層
if((table[0]==0xAA)&&(table[1]==0xBB)&&(table[2]==0x01)&&(table[5]==0x00)&&(table[6]==0xFF))
{ P0=table[3];P1=table[4];}
else{P0=0;P1=0;}你試試吧
                       

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:77695 發(fā)表于 2015-4-22 11:29 | 顯示全部樓層
superjiangzhen 發(fā)表于 2015-4-22 10:55
if((table[0]==0xAA)&&(table[1]==0xBB)&&(table[2]==0x01)&&(table[5]==0x00)&&(table[6]==0xFF))
{ P0=t ...

這樣當(dāng)然是可以的 ,我也試過了, 但是不是我想要的結(jié)果,我的目的是發(fā)射端發(fā)送AA BB 01 3F 00 FF的時(shí)候,單片機(jī)能檢測(cè)出來(lái)時(shí)錯(cuò)的,如果發(fā)射端發(fā)下一條正確的指令,單片機(jī)能正常運(yùn)行。像您剛才說的那種情況,我試過,發(fā)射端發(fā)送完錯(cuò)誤指令,在發(fā)送正確指令,單片機(jī)就完全沒有反應(yīng)了,死那了
回復(fù)

使用道具 舉報(bào)

ID:72643 發(fā)表于 2015-4-22 12:46 | 顯示全部樓層
我估計(jì)你這不是進(jìn)入死循環(huán) 你這里面就沒有進(jìn)入死循環(huán)的可能 你程序里有個(gè)判斷 發(fā)送完7個(gè)8位數(shù)才進(jìn)入disp_data()里,所以你發(fā)送6個(gè)數(shù)時(shí),再發(fā)送7個(gè)數(shù) 此時(shí)的i=6;還是進(jìn)不了disp_data()里,我覺得是這原因,你可以試下先發(fā)6個(gè)數(shù) 再發(fā)送8個(gè)數(shù) 后七個(gè)數(shù)是你要發(fā)的正確數(shù)值,第一個(gè)數(shù)隨便,你試下吧

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:77695 發(fā)表于 2015-4-22 13:00 | 顯示全部樓層
superjiangzhen 發(fā)表于 2015-4-22 12:46
我估計(jì)你這不是進(jìn)入死循環(huán) 你這里面就沒有進(jìn)入死循環(huán)的可能 你程序里有個(gè)判斷 發(fā)送完7個(gè)8位數(shù)才進(jìn)入disp_da ...

應(yīng)該不是那得問題,我想這是發(fā)送錯(cuò)誤數(shù)據(jù)AA BB 01 3F 00 FF,他不處理,然后再發(fā)正確的數(shù)據(jù)比如 AA BB 01 3D 11 00 FF時(shí),他能正常處理,不受之前的影響。
回復(fù)

使用道具 舉報(bào)

ID:68804 發(fā)表于 2015-4-22 13:41 | 顯示全部樓層
我告訴你,是你的程序問題。要改為if(i>=6)就可以了。

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:68804 發(fā)表于 2015-4-22 13:43 | 顯示全部樓層
順便再告訴你,你的數(shù)據(jù)等于六或小于六的時(shí)候很容易數(shù)組越界..
你的編程基礎(chǔ)有待提高,還有的代碼寫的不規(guī)范,看了就頭痛

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:72643 發(fā)表于 2015-4-22 14:03 | 顯示全部樓層
你還是試一下我說的吧 先發(fā)6個(gè)再發(fā)8個(gè) 你那程序的確寫的有問題

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:72643 發(fā)表于 2015-4-22 14:09 | 顯示全部樓層
你有沒有注意到,先發(fā)送6個(gè)數(shù) i=6 是不能進(jìn)入disp_data() 再發(fā)送7個(gè)數(shù) 發(fā)送第一個(gè)后進(jìn)入disp_data(),不會(huì)有顯示,你后面再發(fā)送6個(gè)數(shù) i=6不能進(jìn)入disp_data() ;你分析一下你的程序吧

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:142488 發(fā)表于 2016-10-12 20:27 | 顯示全部樓層
誰(shuí)有顯示時(shí)分秒并可以調(diào)鬧鐘的啊
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2016-10-12 21:15 | 顯示全部樓層
本帖最后由 zl2168 于 2016-10-12 21:18 編輯
c72477044 發(fā)表于 2016-10-12 20:27
誰(shuí)有顯示時(shí)分秒并可以調(diào)鬧鐘的啊

實(shí)例94  模擬電子鐘(由80C51定時(shí)器產(chǎn)生秒時(shí)基)


Proteus仿真一下,確認(rèn)有效。





以上摘自張志良編著《單片機(jī)實(shí)驗(yàn)實(shí)訓(xùn)100例》 ISBN 978-7-5124-1603-1,北航社出版


書中電路和程序設(shè)計(jì)有詳細(xì)說明,程序語(yǔ)句條條有注解。



回復(fù)

使用道具 舉報(bào)

ID:142511 發(fā)表于 2016-10-12 21:29 | 顯示全部樓層
前排不懂 頂頂
回復(fù)

使用道具 舉報(bào)

ID:94642 發(fā)表于 2016-10-13 13:19 | 顯示全部樓層
恩,頂頂
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表