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

標題: 我想把一個寄存器的一個位,引出了,但是出錯了 [打印本頁]

作者: 祥ZD    時間: 2022-8-9 19:11
標題: 我想把一個寄存器的一個位,引出了,但是出錯了
這個RI是頭文件定義的,S3RI是我自己加的

51hei圖片20220809191025.png (89.74 KB, 下載次數: 211)

51hei圖片20220809191025.png

作者: 188610329    時間: 2022-8-9 19:28
不是所有的 寄存器 都能未尋址的,S3CON 恰好屬于不能位尋址的寄存器。
你需要補一下基礎知識啊。
作者: lkc8210    時間: 2022-8-9 19:49
哪里有S3RI?
作者: 風之痕于夢想    時間: 2022-8-9 20:10
這個地址無效
作者: wulin    時間: 2022-8-9 20:13
本帖最后由 wulin 于 2022-8-9 21:00 編輯

注意:寄存器地址能夠被8整除的才可以進行位操作,不能夠被8整除的不可以進行位操作

作者: Hephaestus    時間: 2022-8-9 21:18
錯誤出在229、230行,你把216~226行貼出來是什么意思?
作者: Y_G_G    時間: 2022-8-9 21:24
lkc8210 發表于 2022-8-9 19:49
哪里有S3RI?

截圖就截了錯誤頁面
作者: Y_G_G    時間: 2022-8-9 21:31
8051的寄存器只有1/8能位尋址
寄存器地址的低位為0和8的可以位尋址
除此之外,都不能位操作
作者: wufa1986    時間: 2022-8-10 08:33
在標準C中,位操作是通過或與等邏輯運算進行的,要習慣這種寫法,因為大部分單片機都不支持位操作
作者: npn    時間: 2022-8-10 13:04
wulin 發表于 2022-8-9 20:13
注意:寄存器地址能夠被8整除的才可以進行位操作,不能夠被8整除的不可以進行位操作

STC32 除xfr寄存器外,其余sfr寄存器0x80~0xFF都可以位尋址操作。
  1. #include "STC32G.H"
  2. sbit a = P3M0 ^ 0;
  3. sbit b = P3M1 ^ 0;
  4. sbit c= DPL ^ 0;
  5. sbit d = DPH ^ 4;
  6. sbit e = SBUF ^ 3;
  7. sbit f = SP ^ 5;
  8. sbit g = AUXR2 ^ 6;
  9. sbit h = IAP_CONTR ^ 4;

  10. void main() {
  11.         while (1);
  12. }
復制代碼

作者: 188610329    時間: 2022-8-10 14:27
npn 發表于 2022-8-10 13:04
STC32 除xfr寄存器外,其余sfr寄存器0x80~0xFF都可以位尋址操作。

樓主貼圖顯示,他用的stc8
作者: Y_G_G    時間: 2022-8-10 14:56
npn 發表于 2022-8-10 13:04
STC32 除xfr寄存器外,其余sfr寄存器0x80~0xFF都可以位尋址操作。

人家這是STC8單片機,不是STC32G32位單片機
作者: yzwzfyz    時間: 2022-8-10 17:05
51單片機中:
20-2FH可以直接位尋址。
高端特殊寄存器(80H - FFH)中,地址能被8整除的可以位尋址。
其它內存,需要位尋址,只能間接進行。如將它傳送到A中,再位尋址A。
作者: npn    時間: 2022-8-10 17:46
頭文件里的內容嚴禁亂改,不支持位尋址的寄存器用 &=、 |= 運算符字節操作即可。
作者: pcbboy    時間: 2022-8-11 10:05
#define S3RI  0x01              //S3CON.0
#define S3TI  0x02              //S3CON.1
#define S3RB8 0x04              //S3CON.2
#define S3TB8 0x08              //S3CON.3

UART3 中斷服務程序
-----------------------------*/
void Uart3() interrupt 17 using 0
{
       
if( S3CON & S3RI)
    {
                       
    S3CON &= ~S3RI;
       
                }
               
         if ((S3CON & S3TI)!= 0) {S3CON &= ~S3TI;busy=0; }
  
}
作者: pcbboy    時間: 2022-8-11 10:08
多看看官方的頭文件,里面其實都做了不少直接能用的,只是我們沒去看沿用舊的方法而已。

#define                S3_MODE0()                        S3CON &= ~(1<<7)        /* 串口3模式0,8位UART,波特率 = 定時器的溢出率 / 4  */
#define                S3_MODE1()                        S3CON |=  (1<<7)        /* 串口3模式1,9位UART,波特率 = 定時器的溢出率 / 4  */
#define                S3_8bit()                        S3CON &= ~(1<<7)        /* 串口3模式0,8位UART,波特率 = 定時器的溢出率 / 4  */
#define                S3_9bit()                        S3CON |=  (1<<7)        /* 串口3模式1,9位UART,波特率 = 定時器的溢出率 / 4  */
#define                S3_RX_Enable()                S3CON |=  (1<<4)        /* 允許串3接收                                                                             */
#define                S3_RX_Disable()                S3CON &= ~(1<<4)        /* 禁止串3接收                                                                             */
#define                TI3                                        (S3CON & 2) != 0        /* 判斷TI3是否發送完成                                                                 */
#define                RI3                                        (S3CON & 1) != 0        /* 判斷RI3是否接收完成                                                                 */
#define                SET_TI3()                        S3CON |=  (1<<1)        /* 設置TI3(引起中斷)                                                                 */
#define                CLR_TI3()                        S3CON &= ~(1<<1)        /* 清除TI3                                                                                         */
#define                CLR_RI3()                        S3CON &= ~1                        /* 清除RI3                                                                                         */
#define                S3TB8_SET()                        S3CON |=  (1<<3)        /* 設置TB8                                                                                         */
#define                S3TB8_CLR()                        S3CON &= ~(1<<3)        /* 清除TB8                                                                                         */
#define                S3_Int_Enable()                IE2   |=  (1<<3)        /* 串口3允許中斷                                                                     */
#define                S3_Int_Disable()        IE2   &= ~(1<<3)        /* 串口3禁止中斷                                                                     */
#define         S3_BRT_UseTimer3()        S3CON |=  (1<<6)        /* BRT select Timer3                                                                 */
#define         S3_BRT_UseTimer2()        S3CON &= ~(1<<6)        /* BRT select Timer2                                                                 */
#define                S3_USE_P00P01()                P_SW2 &= ~2                        /* UART3 使用P0口        默認                                                     */
#define                S3_USE_P50P51()                P_SW2 |=  2                        /* UART3 使用P5口                                                                     */

作者: Y_G_G    時間: 2022-8-12 07:04
pcbboy 發表于 2022-8-11 10:08
多看看官方的頭文件,里面其實都做了不少直接能用的,只是我們沒去看沿用舊的方法而已。

#define                S3_MO ...

STC早就把數據手冊上的所有寄存器名稱和位都用頭文件定義了的
但并不是所有的都是以"位"來定義的,大多是unsigned char 變量定義的
樓主這是想要用bit的,這不是什么好習慣,并不是所有的單片機C語言都支持位的,到時候換一個單片機類型,移植起來不方便,用unsigned char要好很多
作者: armstrong    時間: 2022-8-12 15:05
pcbboy 發表于 2022-8-11 10:08
多看看官方的頭文件,里面其實都做了不少直接能用的,只是我們沒去看沿用舊的方法而已。

#define                S3_MO ...

  強




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