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

標題: 又是一個奇怪的問題,關于單片機串口的程序 [打印本頁]

作者: anubis577    時間: 2019-8-27 22:52
標題: 又是一個奇怪的問題,關于單片機串口的程序
是這樣的,我想用查詢的方式用串口發送數據,結果數據不對,懷疑是發送標志位有問題,我就寫了如下測試代碼:
SCON |= 0X02;
SCON &= 0XFD;
發送標志位正常清零了,但是!
我寫這樣:void CF(void){if(SCON&0X02)SCON &= 0XFD; }
SCON  |=0X02;
CF();
這樣就不行是為什么
作者: csmyldl    時間: 2019-8-28 01:40
就你這個問題,我親自加入程序中進行了調式STC15F2K60S2
void cf(void) {if(SCON&0X02)SCON &= 0XFD;}

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


所以不存在你所說的標志位TI不能清除的現象
作者: csmyldl    時間: 2019-8-28 01:49
這是仿真結果

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

6.png

作者: anubis577    時間: 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去了就正常了,只是不太理解其中的原因
作者: anubis577    時間: 2019-8-28 10:04
csmyldl 發表于 2019-8-28 01:49
這是仿真結果

感謝回答,代碼這樣是正確運行的,只是if(SCON&0X02!=0)就無法清除,好尷尬,是不是這個判斷有問題
作者: csmyldl    時間: 2019-8-29 11:17
其實這樣的邏輯也是可以的,只是語句的優先級未分清,應把if(SCON&0X02!=0)改為if((SCON&0X02)!=0),因為&的優先級低于!=,你那樣寫是先執行0x02!=0的結果1與SCON進行按位與
作者: anubis577    時間: 2019-8-29 14:27
csmyldl 發表于 2019-8-29 11:17
其實這樣的邏輯也是可以的,只是語句的優先級未分清,應把if(SCON&0X02!=0)改為if((SCON&0X02)!=0) ...

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




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1