標題: 單片機S2CON&=~S2TI; 請教大神 [打印本頁]

作者: jackduan2018    時間: 2023-10-13 16:39
標題: 單片機S2CON&=~S2TI; 請教大神
串口通訊里有這樣一個語句看不懂:S2CON&=~S2TI;  這條語句的目的是對寄存器  S2CON 的 S2TI位進行軟件清零;  
它是不是等價于:    S2CON&(~S2TI);  ?
S2CON 不支持位尋址,那這個語句怎么還可以這么寫?這樣的操作得出來的結果會是什么 ?
求教大神,謝謝!      




作者: aking991    時間: 2023-10-14 08:43
S2TI定議時0x02,那對應的bit.1是1,那~S2TI就是把這個對應位取反即是0,值就等于0xFD,那么把S2CON這個0xFD相與,那么S2CON的bit.1也就是0,即是清發(fā)送標志,那樣寫沒毛病
作者: joyb    時間: 2023-10-14 09:01
S2RI 定義為 0000 0001 即0x01
或者 sbit S2RI =S2CON^0//說明S2RI是寄存器 S2CON中的第幾位
S2TI 定義為 0000 0010 即0x02
或者 sbit S2TI =S2CON^1
這樣 當S2RI=1時 S2CON&S2RI 即為非0
當S2RI=0時 S2CON&S2RI 即為0
作者: jackduan2018    時間: 2023-10-14 13:40
謝謝各位大神
大神就是大神 不用看就知道定義過了
S2RI是SCON里的一個位
但是在頭文件里把S2RI定義成了0X02,我沒看頭文件,所以怎么看也看不明白
謝謝各位大神


作者: powerdruy    時間: 2023-10-26 18:35
教你一個套路,可以用在不能位尋址的寄存器上,
比如MSP430的GPIO輸出寄存器

  1. #define BIT0 0x01
  2. #define BIT1 0x02
  3. #define BIT2 0x04
  4. #define BIT3 0x08
  5. P0 |= BIT0;//P0.0置1,P0.0口輸出1
  6. P1 &=~BIT3;//P1.3清0,P1.3口輸出0
復制代碼


作者: 圣博朗西斯    時間: 2023-10-27 09:55
那樣寫的語法是沒問題的。對于支不支持位尋址應該還是支持位尋址吧,要不然會報錯的或者你看一下程序里有沒有宏定義
作者: jackduan2018    時間: 2025-2-14 08:26
powerdruy 發(fā)表于 2023-10-26 18:35
教你一個套路,可以用在不能位尋址的寄存器上,
比如MSP430的GPIO輸出寄存器

謝謝大神,學習了




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