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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1590|回復: 6
打印 上一主題 下一主題
收起左側

又是一個奇怪的問題,關于單片機串口的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:226798 發表于 2019-8-27 22:52 來自觸屏版 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
是這樣的,我想用查詢的方式用串口發送數據,結果數據不對,懷疑是發送標志位有問題,我就寫了如下測試代碼:
SCON |= 0X02;
SCON &= 0XFD;
發送標志位正常清零了,但是!
我寫這樣:void CF(void){if(SCON&0X02)SCON &= 0XFD; }
SCON  |=0X02;
CF();
這樣就不行是為什么
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2019-8-28 01:40 | 只看該作者
就你這個問題,我親自加入程序中進行了調式STC15F2K60S2
void cf(void) {if(SCON&0X02)SCON &= 0XFD;}

//主程序
void main()
{
       
SCON|=0X02;     //運行到這步  (0x98)中內容是0x02
cf();                 //運行到這步  (0x98)中內容是0x00


所以不存在你所說的標志位TI不能清除的現象
回復

使用道具 舉報

板凳
ID:235200 發表于 2019-8-28 01:49 | 只看該作者
這是仿真結果

6.png (25.81 KB, 下載次數: 62)

6.png
回復

使用道具 舉報

地板
ID:226798 發表于 2019-8-28 10:02 來自觸屏版 | 只看該作者
csmyldl 發表于 2019-8-28 01:40
就你這個問題,我親自加入程序中進行了調式STC15F2K60S2
void cf(void) {if(SCON&0X02)SCON &= 0XFD;}


不好意思,之前代碼寫錯了,之前函數是這樣的void CF(void){if(SCON&0X02 !=0)SCON &= 0XFD; },不知道怎樣寫為什么就清除不了,后來我懷疑是SCON壓棧保存了,就又全部使用函數調用也不行,最后我就用貼出來的代碼把判斷!=0去了就正常了,只是不太理解其中的原因
回復

使用道具 舉報

5#
ID:226798 發表于 2019-8-28 10:04 來自觸屏版 | 只看該作者
csmyldl 發表于 2019-8-28 01:49
這是仿真結果

感謝回答,代碼這樣是正確運行的,只是if(SCON&0X02!=0)就無法清除,好尷尬,是不是這個判斷有問題
回復

使用道具 舉報

6#
ID:235200 發表于 2019-8-29 11:17 | 只看該作者
其實這樣的邏輯也是可以的,只是語句的優先級未分清,應把if(SCON&0X02!=0)改為if((SCON&0X02)!=0),因為&的優先級低于!=,你那樣寫是先執行0x02!=0的結果1與SCON進行按位與
回復

使用道具 舉報

7#
ID:226798 發表于 2019-8-29 14:27 來自觸屏版 | 只看該作者
csmyldl 發表于 2019-8-29 11:17
其實這樣的邏輯也是可以的,只是語句的優先級未分清,應把if(SCON&0X02!=0)改為if((SCON&0X02)!=0) ...

剛剛我查了,&作為運算符的優先級是高于邏輯符的優先級的,而且我也試過了加括號,感謝回答
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表