久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2934|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

關(guān)于不支持在線仿真的單片機(jī)的單線單工通信接收函數(shù)的問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:540927 發(fā)表于 2020-8-26 08:49 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我現(xiàn)在在做一個(gè)單線單工通信的程序,但是單片機(jī)不支持在線仿真,接收函數(shù)如下:
void Receive()                                 //接收函數(shù),接收5byte數(shù)據(jù),先接收低位再接收高位
{
CHAR Temp;
if((time1 > 40)&&(time1 < 60))               //新的引導(dǎo)碼開(kāi)始退出接收函數(shù)
{
  Temp = 0;
  beginflag = 0;
}
if((time1 > 0)&&(time1 < 5))                 //數(shù)據(jù)位低電平所在范圍
{
  BitNum++;
  time1 = 0;
  lowflag = 1;                       //低電平信號(hào)標(biāo)志
}
else if((time1 >= 5)&&((time1 <=40)||(time1 >= 60)))
{
  
  time1 = 0;
  Temp = 0;
  beginflag = 0;                                            //數(shù)據(jù)出錯(cuò)退出接收
}
if(lowflag == 1)                               //每一位的低電平接收成功則接收高電平
{
  if((time2 > 0)&&(time2 < 5))           //數(shù)據(jù)位0信號(hào)
  {
   time2 = 0;
   Bit = 0;
  }
  else if((time2 > 8)&&(time2 < 14))           //數(shù)據(jù)位1信號(hào)
  {
   time2 = 0;
   Bit = 1;
  }
  else if((time2 >= 5)&&((time2 <= 8)||(time2 >= 14)))
  {
   
   time2 = 0;
   Temp = 0;
   beginflag = 0;                                  //數(shù)據(jù)出錯(cuò)退出接收
  }
  Temp |= (Bit << (BitNum - 1));                   //把所在位的數(shù)據(jù)存入
  lowflag = 0;
  if(BitNum >= 8)                                   //1byte數(shù)據(jù)接收完之后存入     
    {
   ByteNum++;
   switch(ByteNum)
   {
    case 1: {NewByte1 = Temp; Temp = 0;break;}
    case 2: {NewByte2 = Temp; Temp = 0;break;}
    case 3: {NewByte3 = Temp; Temp = 0;break;}
    case 4: {NewByte4 = Temp; Temp = 0;break;}
    case 5: {NewByte5 = Temp; Temp = 0;break;}
    default : break;
   }
      BitNum = 0;
      
   if(ByteNum >= 5)                             //5byte數(shù)據(jù)接收完進(jìn)行數(shù)據(jù)處理
      {
   
        ByteNum = 0;
    beginflag = 0;                         //接收完畢標(biāo)志置0
    dataflag = 1;                         //數(shù)據(jù)處理標(biāo)志
   }
  }
}
}

在調(diào)試過(guò)程中,我不能知道NewByte1,NewByte2,NewByte3,NewByte4,NewByte5的具體值,只能直接燒錄在板子上驗(yàn)證,但是結(jié)果不成功。我已經(jīng)確認(rèn)了這個(gè)函數(shù)一直能運(yùn)行到完,只能說(shuō)明接收到的數(shù)據(jù)不正確。請(qǐng)問(wèn)有什么辦法可以知道這幾個(gè)數(shù)據(jù)的具體值是多少?不支持在線仿真的單片機(jī)調(diào)試有技巧嗎?我的這個(gè)函數(shù)有什么問(wèn)題?請(qǐng)大家?guī)蛶臀野,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:739545 發(fā)表于 2020-8-26 10:33 | 只看該作者
有LCD顯示的話,把你需要看的數(shù)據(jù)實(shí)時(shí)在LCD上顯示出來(lái),或者有串口的話,把debug的數(shù)據(jù)用串口傳輸看結(jié)果。很多情況下都是沒(méi)有在線仿真的。都是在線檢查
回復(fù)

使用道具 舉報(bào)

板凳
ID:654028 發(fā)表于 2020-8-26 11:48 | 只看該作者
串口通信?或者其他方式,比如收到什么數(shù)據(jù)做什么事情,比較容易觀察的
回復(fù)

使用道具 舉報(bào)

地板
ID:540927 發(fā)表于 2020-8-26 12:27 | 只看該作者
lovezjf234 發(fā)表于 2020-8-26 10:33
有LCD顯示的話,把你需要看的數(shù)據(jù)實(shí)時(shí)在LCD上顯示出來(lái),或者有串口的話,把debug的數(shù)據(jù)用串口傳輸看結(jié)果。 ...

感謝你的回復(fù),我這個(gè)是單線通信的,沒(méi)有用到串口板上也沒(méi)有LCD,所以比較難辦
回復(fù)

使用道具 舉報(bào)

5#
ID:540927 發(fā)表于 2020-8-26 12:31 | 只看該作者
心有浮生 發(fā)表于 2020-8-26 11:48
串口通信?或者其他方式,比如收到什么數(shù)據(jù)做什么事情,比較容易觀察的

感謝您的回復(fù),我的這個(gè)不是串口通信而是單線通信,就是收到數(shù)據(jù)進(jìn)行處理可以在板子上驗(yàn)證,但是就是因?yàn)椴荒艹晒,我才想知道接收到的具體數(shù)據(jù),或者說(shuō)我的接收函數(shù)是不是正確的
回復(fù)

使用道具 舉報(bào)

6#
ID:540927 發(fā)表于 2020-8-26 13:10 | 只看該作者
lovezjf234 發(fā)表于 2020-8-26 10:33
有LCD顯示的話,把你需要看的數(shù)據(jù)實(shí)時(shí)在LCD上顯示出來(lái),或者有串口的話,把debug的數(shù)據(jù)用串口傳輸看結(jié)果。 ...

謝謝您,確實(shí)可以自己做串口通信到電腦看結(jié)果,這個(gè)對(duì)不能在線仿真的單片機(jī)來(lái)說(shuō)確實(shí)是個(gè)好辦法
回復(fù)

使用道具 舉報(bào)

7#
ID:804115 發(fā)表于 2020-8-26 13:58 | 只看該作者
你這個(gè)是底層信號(hào)接收,對(duì)時(shí)序要求比較嚴(yán)格,用串口debug和lcd顯示都不行,因?yàn)槎急容^耗時(shí)。
你可以用一個(gè)沒(méi)有用的io來(lái)調(diào)試,因?yàn)镮O翻轉(zhuǎn)耗費(fèi)的時(shí)間比較少。你可以將此io接到一個(gè)燈上用于指示。
另外,你可以通過(guò)示波器或者邏輯分析儀抓取發(fā)送端的發(fā)送時(shí)序,看看發(fā)送端是否符合要求,再分析你的接收端是否匹配。
回復(fù)

使用道具 舉報(bào)

8#
ID:540927 發(fā)表于 2020-8-26 15:19 | 只看該作者
1692483014 發(fā)表于 2020-8-26 13:58
你這個(gè)是底層信號(hào)接收,對(duì)時(shí)序要求比較嚴(yán)格,用串口debug和lcd顯示都不行,因?yàn)槎急容^耗時(shí)。
你可以用一個(gè) ...

感謝您的回復(fù),我調(diào)試的時(shí)候也是把一個(gè)引腳置1輸出,然后一步一步看程序可以執(zhí)行到哪,但是在使用數(shù)據(jù)處理的時(shí)候出了問(wèn)題,所以我需要了解接收的數(shù)據(jù)怎么了
回復(fù)

使用道具 舉報(bào)

9#
ID:230118 發(fā)表于 2020-8-26 15:24 | 只看該作者
邏輯分析儀或示波器最簡(jiǎn)單直觀,沒(méi)有的話,可以嘗試按比例把通訊時(shí)隙按比例放大若干倍(以保證肉眼能觀察到led變化),接收端用指示燈來(lái)指示接收數(shù)據(jù)位的變化
回復(fù)

使用道具 舉報(bào)

10#
ID:540927 發(fā)表于 2020-8-26 17:19 | 只看該作者
bro0310 發(fā)表于 2020-8-26 15:24
邏輯分析儀或示波器最簡(jiǎn)單直觀,沒(méi)有的話,可以嘗試按比例把通訊時(shí)隙按比例放大若干倍(以保證肉眼能觀察到l ...

感謝您的回復(fù),接收端我可以用示波器測(cè)到波形的,關(guān)鍵是單片機(jī)中的程序處理不知道是不是錯(cuò)了
回復(fù)

使用道具 舉報(bào)

11#
ID:230118 發(fā)表于 2020-8-26 19:54 | 只看該作者
你這個(gè)通訊方式和NEC紅外協(xié)議很類似,既然是單線單工,你的引導(dǎo)碼和數(shù)據(jù)應(yīng)該是讀的同一個(gè)引腳,那么time1,time2是同一個(gè)引腳的電平持續(xù)時(shí)間,對(duì)嗎?要找到問(wèn)題,我的思路是這樣的,僅供參考:
1  根據(jù)你的晶振精度,以及系統(tǒng)中有無(wú)其它優(yōu)先級(jí)更高的中斷影響通訊時(shí)序,合理設(shè)計(jì)0、1bit的時(shí)序特征,提高容錯(cuò)性,比方說(shuō)3~10us低電平后接10~20us高電平代表0; 10~18us低電平厚街3~10us高電平代碼1;
2  由于時(shí)序要求比較高,發(fā)送端的延時(shí)最好用定時(shí)器來(lái)做
3  示波器測(cè)量輸出端時(shí)序,比方說(shuō)你發(fā)送數(shù)據(jù)0x55,確認(rèn)發(fā)送端的輸出時(shí)序和你的協(xié)議設(shè)計(jì)相符
4  接收端用定時(shí)器的輸入捕獲功能來(lái)測(cè)量電平時(shí)間
中斷服務(wù)程序
void Capture_ISR (void)
{
    // 讀取timer寄存器時(shí)間time
    if (!receive_flag)
    {
        receive(time);
    }
}


void receive(uint16_t Capture_Time )
{
    if(IR_State == 0)
    {
        IR_LDC_Ready = 0;           // Clear LeaDer Code Ready
        IR_State=1;
    }
    // Leader or Repeater code
    else if(IR_State == 1)
    {
        // Leader code
        if((Capture_Time >= IR_LDC_MIN) && (Capture_Time <= IR_LDC_MAX))
        {
            IR_LDC_Ready = 1;       // Set LeaDer Code Ready
            IR_State++;
        }
        else
        {
            IR_State = 1;
            IR_LDC_Ready = 0;           // Clear LeaDer Code Ready
        }
    }
      // Data
    else if((IR_State >= 2 && IR_State < 10) && (IR_LDC_Ready == 1))
    {
        IR_State++;
        NewByte1 = NewByte1 >> 1;
        if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))
            NewByte1 &= 0x7f;
        else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX))
            NewByte1 |= 0x80;
        else
            IR_State = 0;
    }
    else if((IR_State >= 10 && IR_State < 18) && (IR_LDC_Ready == 1))
    {
        IR_State++;
        NewByte2 = NewByte2 >> 1;
        if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))
            NewByte2 &= 0x7f;
        else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX))
            NewByte2 |= 0x80;
        else
            IR_State = 0;
    }
    else if((IR_State >= 18 && IR_State < 26) && (IR_LDC_Ready == 1))
    {
        IR_State++;
        NewByte3= NewByte3>> 1;
        if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))
            NewByte3&= 0x7f;
        else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX))
            NewByte3|= 0x80;
        else
            IR_State = 0;
    }
    else if((IR_State >= 26 && IR_State < 34) && (IR_LDC_Ready == 1))
    {
        IR_State++;
        NewByte4= NewByte4>> 1;
        if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))
            NewByte4&= 0x7f;
        else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX))
            NewByte4|= 0x80;
        else
            IR_State = 0;
    }
    else if((IR_State >= 34 && IR_State < 42) && (IR_LDC_Ready == 1))
    {
        IR_State++;
        NewByte5= NewByte5>> 1;
        if((Capture_Time >= IR_BIT_0_MIN) && (Capture_Time <= IR_BIT_0_MAX))
            NewByte5&= 0x7f;
        else if((Capture_Time >= IR_BIT_1_MIN) && (Capture_Time <= IR_BIT_1_MAX))
            NewByte5|= 0x80;
        else
            IR_State = 0;
    }

        if(IR_State == 42)
        {
            IR_LDC_Ready = 0;   // Clear LeaDer Code Ready
            received_flag= 1;
            IR_State = 0;
        }
}

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:213173 發(fā)表于 2020-8-26 20:06 | 只看該作者
其實(shí)可以參照ds18b20溫度傳感器的單總線通訊方式完成異步串行通訊,如果只是單向傳輸就更簡(jiǎn)單了。
回復(fù)

使用道具 舉報(bào)

13#
ID:540927 發(fā)表于 2020-8-27 08:13 | 只看該作者
bro0310 發(fā)表于 2020-8-26 19:54
你這個(gè)通訊方式和NEC紅外協(xié)議很類似,既然是單線單工,你的引導(dǎo)碼和數(shù)據(jù)應(yīng)該是讀的同一個(gè)引腳,那么time1,t ...

感謝您詳細(xì)的回復(fù),我會(huì)參考您提供的辦法試圖解決問(wèn)題的,不過(guò)由于接收端的單片機(jī)功能比較少,沒(méi)有輸入捕獲功能,很遺憾呢
回復(fù)

使用道具 舉報(bào)

14#
ID:540927 發(fā)表于 2020-8-27 08:15 | 只看該作者
wulin 發(fā)表于 2020-8-26 20:06
其實(shí)可以參照ds18b20溫度傳感器的單總線通訊方式完成異步串行通訊,如果只是單向傳輸就更簡(jiǎn)單了。

感謝您的回復(fù),我也參考了這個(gè),同時(shí)還參考了紅外解調(diào),后來(lái)我想要自己的方法編程,可惜不盡如意
回復(fù)

使用道具 舉報(bào)

15#
ID:176854 發(fā)表于 2020-8-27 16:29 | 只看該作者
TB買一個(gè)串行數(shù)碼管,用數(shù)碼管顯示接收值。
飛線也就4、5根。
回復(fù)

使用道具 舉報(bào)

16#
ID:540927 發(fā)表于 2020-8-28 09:45 | 只看該作者
jjjjjjir 發(fā)表于 2020-8-27 16:29
TB買一個(gè)串行數(shù)碼管,用數(shù)碼管顯示接收值。
飛線也就4、5根。

好主意呢,不錯(cuò),謝謝啦
回復(fù)

使用道具 舉報(bào)

17#
ID:540927 發(fā)表于 2020-8-28 11:08 | 只看該作者
lovezjf234 發(fā)表于 2020-8-26 10:33
有LCD顯示的話,把你需要看的數(shù)據(jù)實(shí)時(shí)在LCD上顯示出來(lái),或者有串口的話,把debug的數(shù)據(jù)用串口傳輸看結(jié)果。 ...

不好意思了,前天嘗試了用串口通信到電腦上看數(shù)據(jù),結(jié)果昨天一整天單片機(jī)引腳檢測(cè)不到電平信號(hào),我換了好多器件都沒(méi)解決,今天我才發(fā)現(xiàn),我的串口就是輸入信號(hào)的接口,再做串口通信就沖突了
回復(fù)

使用道具 舉報(bào)

18#
ID:540927 發(fā)表于 2020-8-28 11:50 | 只看該作者
jjjjjjir 發(fā)表于 2020-8-27 16:29
TB買一個(gè)串行數(shù)碼管,用數(shù)碼管顯示接收值。
飛線也就4、5根。

感謝您的建言,果然是個(gè)好方法的,我會(huì)參考的,謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩视频在线 | 亚洲欧美自拍偷拍视频 | 黄色网址av | 久久久久久国产精品 | 成人无遮挡毛片免费看 | 男人天堂网av | 久久精品97 | 国产精品资源在线观看 | 国产一级片 | 国产美女一区二区 | 亚洲国产看片 | 精品中文字幕一区二区三区 | 久久在线| 久久久国产精品 | 亚洲第一网站 | 亚洲精品视频在线 | av电影手机在线看 | 亚洲精品中文字幕 | 五月花丁香婷婷 | 精品欧美一区二区三区 | 成人免费观看男女羞羞视频 | 亚洲国产精品视频 | 国产日韩视频在线 | 欧美日韩国产一区二区三区 | 欧美亚洲成人网 | 成人精品一区二区三区四区 | 亚洲精品久久久一区二区三区 | 久久久久九九九女人毛片 | 日韩精品区 | 拍真实国产伦偷精品 | 天堂中文资源在线 | 亚洲免费久久久 | 欧美久久精品一级黑人c片 91免费在线视频 | 成人黄色电影在线播放 | 久久亚洲欧美日韩精品专区 | 久久一区二 | 亚洲一一在线 | 日韩福利在线 | 亚洲国产成人精品久久久国产成人一区 | 嫩草视频网 | 日韩av电影院|