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

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

QQ登錄

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

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

單片機(jī)串口模塊的程序用while和if的結(jié)果不一樣

[復(fù)制鏈接]
ID:685478 發(fā)表于 2020-1-31 21:14 | 顯示全部樓層 |閱讀模式
在郭天祥師傅的視頻中,也出現(xiàn)了使用while和if結(jié)果不一樣的現(xiàn)象,郭天祥師傅說(shuō)不太清楚為什么,用if的時(shí)候都是正確的。舉個(gè)例子,每次亮一個(gè)led,傳01的時(shí)候P1=0Xfe,02的時(shí)候P1=0Xfd;03的時(shí)候P1=0Xfb;04的時(shí)候P1=0Xf7;用while的話,接收區(qū)只能得到第一次傳過(guò)去的數(shù)據(jù),也可以得到?jīng)]有進(jìn)入while的數(shù)據(jù),比如連續(xù)發(fā)送 01,02,03,03,06 ,接收區(qū)得到 01 06,但是led亮的很正常,傳01就亮01的,02就亮02的,是為什么?

單片機(jī)源程序如下:
#include<reg52.h>
unsigned char flag,a;

void delay(int a)            //延時(shí)1ms函數(shù)
{
int i,x;
for(i=0;i<a;i++)
  for(x=0;x<115;x++) ;
}
void main()
{
REN=1;
SM0=0;
SM1=1;
TMOD=0X20;          //定時(shí)器方式二
TH1=0XFD;            //3us
TL1=0XFD;
TR1=1;
EA=1;
ES=1;
while(1)
{
  if(flag==1)             //這里是郭天祥師傅碰見(jiàn)的第一處while和if
  {
   ES=0;
   flag=0;
   SBUF=a;              //想在這里接收
   while(!TI);
   TI=0;
   ES=1;
  }
if(a==0x01)           //以下為我碰見(jiàn)的while和if
{
P1=0xfe;
delay(50);
}

if(a==0x02)
{
P1=0xfd;
delay(50);
}
if(a==0x03)
{
P1=0xfb;
delay(50);
}
  if(a==0x04)
{
P1=0xf7;
delay(50);
}
}
}
void ser() interrupt 4                //中斷方式5
{
RI=0;
a=SBUF;
flag=1;
}


回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2020-2-1 00:53 | 顯示全部樓層
while(1)循環(huán)中接收到falg標(biāo)記并判斷,同時(shí)關(guān)閉了ES,并把接收數(shù)據(jù)發(fā)送回去后再開(kāi)啟中斷ES,在接下來(lái)的程序判斷a值并點(diǎn)亮其對(duì)應(yīng)的LED燈時(shí),同樣可接收發(fā)送過(guò)來(lái)的值存入a(因a是全程變量),所以能說(shuō)明你所說(shuō)的"但是led亮的很正常,傳01就亮01的,02就亮02的",程序的邏輯錯(cuò)誤,應(yīng)該修改為每接收一個(gè)數(shù)據(jù)進(jìn)行處理后才允許接收下一次數(shù)據(jù),或者一次接收完所有數(shù)據(jù),然后對(duì)所接收的所有數(shù)據(jù)進(jìn)行一次處理后清除數(shù)據(jù),這樣兩種方法均可實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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