欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

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

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

單片機(jī)串口SBUF數(shù)據(jù)接收問(wèn)題,如何判斷接受程序?yàn)?111?

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 20 黑幣 回復(fù)本帖可獲得 20 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
ID:661664 發(fā)表于 2020-7-15 14:59 | 顯示全部樓層 |閱讀模式
你好 想向你請(qǐng)教一個(gè)問(wèn)題 就是我想判斷接收的數(shù)據(jù)為1111應(yīng)該怎么做?現(xiàn)在只能接收判斷一個(gè)字符,自己改過(guò)用字符數(shù)組接收但還是不能實(shí)現(xiàn)

void Usart() interrupt 4   //串口相應(yīng)中斷

{
  char buf;
  
        if(RI == 1 && receiveFlag == 0)
        {
                RI = 0;//清除接收中斷標(biāo)志位
                buf = SBUF;
                if(buf =='1')
                {
                 receiveFlag = ’1‘;                                                                                                                                                                                                                                          
                }
  }
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2020-7-16 08:55 | 顯示全部樓層
char接收1111已經(jīng)超范圍了,用int變量接收。
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2020-7-16 08:58 | 顯示全部樓層
本帖最后由 xianfajushi 于 2020-7-17 06:42 編輯

驗(yàn)證一個(gè)串口能接受的數(shù)據(jù)范圍有多種方法,比如我寫(xiě)的發(fā)送251-255的值,接收端判斷是否大于250是就取余顯示數(shù)碼。
錄像15_轉(zhuǎn).gif
51hei.png
回復(fù)

使用道具 舉報(bào)

ID:661664 發(fā)表于 2020-7-16 09:10 | 顯示全部樓層
xianfajushi 發(fā)表于 2020-7-16 08:55
char接收1111已經(jīng)超范圍了,用int變量接收。

我試過(guò)用int 類(lèi)型 還是不行啊
回復(fù)

使用道具 舉報(bào)

ID:267719 發(fā)表于 2020-7-16 09:23 | 顯示全部樓層
#define MaxReceiveLen 100
unsigned int ReceiveCount=0;
unsigned char ReceiveDat[MaxReceiveLen];
void Usart() interrupt 4   //串口相應(yīng)中斷
{
        if(RI == 1 && receiveFlag == 0)
        {
                RI = 0;//清除接收中斷標(biāo)志位
                ReceiveDat[ReceiveCount]= SBUF;                ReceiveCount++;
                if (ReceiveCount>=MaxReceiveLen)
                {
                   //接收緩存溢出處理
                   ReceiveCount=0;
                }
                if (ReceiveCount>=4)
                {
                    if (memcmp(&ReceiveDat[ReceiveCount-4],"1111",4)==0)
                    {
                          receiveFlag =1;
                          ReceiveCount=0;
                    }
                }
        }
}

回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2020-7-16 13:54 | 顯示全部樓層
更正一下,剛研究了一下串口一次能接收的數(shù)據(jù)范圍應(yīng)從0-255這個(gè)值范圍,因此是無(wú)法使用int類(lèi)型接收的。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-7-17 07:01 | 顯示全部樓層
//數(shù)據(jù)格式 A 1 1 1 1

unsigned char buf[5];
bit flag=0;

void Usart() interrupt 4
{
        static unsigned char num=0;        //靜態(tài)變量
        RI=0;                                                //接收中斷請(qǐng)求標(biāo)志位清0
        buf[num]=SBUF;                                  //保存SBUF接收到的數(shù)據(jù)
        if(buf[0]=='A')                                //驗(yàn)證數(shù)據(jù)頭 OK-繼續(xù)接收 NO-被下一個(gè)數(shù)據(jù)覆蓋
        {
                num++;
                if(num>=5)
                {
                        num=0;
                        flag=1;                                //接收完成標(biāo)志置1
                }
        }
}

void parsing()//在主函數(shù)中調(diào)用
{
        unsigned char i;
        if(flag==1)
        {
                flag=0;
                if(buf[1]=='1' && buf[2]=='1' && buf[3]=='1' && buf[4]=='1')
                {
                        //任務(wù)
                }
                for(i=0;i<5;i++)
                        buf[i]=0x00;//清除緩存
        }
}


回復(fù)

使用道具 舉報(bào)

ID:801878 發(fā)表于 2020-7-28 09:59 | 顯示全部樓層
定義的變量超過(guò)量程,建議用long
回復(fù)

使用道具 舉報(bào)

ID:367460 發(fā)表于 2020-7-28 10:15 | 顯示全部樓層
BUF是一個(gè)8位的寄存器,你的1111超了, 你要么先發(fā)高八位,再發(fā)低八位試試
回復(fù)

使用道具 舉報(bào)

ID:808700 發(fā)表于 2020-7-28 10:22 | 顯示全部樓層
你可以加個(gè)變量K,判斷值為1時(shí),k+1,對(duì)K進(jìn)行判斷,k=4時(shí),說(shuō)明接受到了1111,其后清零,這個(gè)過(guò)程中有一次接受到0.   k也直接清零
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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