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

QQ登錄

只需一步,快速開始

搜索

新手疑惑 關(guān)于C51單片機(jī)串口通訊的問題,挺急的在線等

查看數(shù): 2500 | 評(píng)論數(shù): 6 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2018-7-31 23:08

正文摘要:

各位好,本人由于剛剛接觸51單片機(jī),在學(xué)習(xí)串口通訊中遇到了困難, 問題是: 由串口助手輸入字符串后,再返回到串口助手上的字符串卻有丟失,丟失的特點(diǎn)為,間隔丟失。 自己的理解: 函數(shù)中有比較函數(shù) ...

回復(fù)

ID:379876 發(fā)表于 2018-8-2 08:21
謝謝各位前輩給我的建議和熱心的解答!但是我的問題是為什么會(huì)出現(xiàn)這樣的情況以及解決方法,最佳答案只能給解決了這兩個(gè)問題的人哈。大家對(duì)我編程的建議我都應(yīng)用在后續(xù)程序中了,使得邏輯更加清晰了,非常感謝!
ID:381546 發(fā)表于 2018-8-1 09:39
void intSIO() interrupt 4 using 2
{
    if(TI)
    {
        TI=OFF;
        if(bSD)
        {
        if(curSND<lenSND) SBUF=bufSND[curSND++];
       else {bSD=OFF;/*mSI=0;*/}}}
      if(RI){
         RI=OFF;
          bufRCV[putRCV++]=SBUF;
            putRCV &= 0X07;}
}
ID:379876 發(fā)表于 2018-8-1 07:38
那請(qǐng)問將發(fā)送寫入中斷后,如何觸發(fā)TI=1的條件呢?如果不能觸發(fā)TI=1就不能將數(shù)據(jù)寫入SBUF,而數(shù)據(jù)沒有寫入SBUF,就無法觸發(fā)TI=1的條件,這是個(gè)死循環(huán)啊。。。。。。 我的理解是這樣的
ID:375003 發(fā)表于 2018-8-1 01:22
象這樣寫.
void intSIO() interrupt 4 using 2
{
if(TI){
  TI=OFF;
  if(bSD){
   if(curSND<lenSND) SBUF=bufSND[curSND++];
   else {bSD=OFF;/*mSI=0;*/}}}
if(RI){
  RI=OFF;
  bufRCV[putRCV++]=SBUF;
  putRCV &= 0X07;}
}
ID:375003 發(fā)表于 2018-8-1 01:21
把發(fā)送也要寫到中斷里,不能這樣寫
ID:221865 發(fā)表于 2018-7-31 23:08
你的send_str函數(shù)里面已經(jīng)在for循環(huán)里將i++了,然后你TI = 0;后依然i++。檢查一下。
void send_str(void)                        //發(fā)送接收到的字符串
{
    u8 i;
    for(i=0; i<10; i++)
    {
        TI = 0;
        SBUF=rec[i];
        while(!TI);
        TI = 0;
    }
}

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

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

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