久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 請教STC15系列單片機中的AUXR寄存器使用 [打印本頁]

作者: baiyun1234    時間: 2019-10-7 08:36
標題: 請教STC15系列單片機中的AUXR寄存器使用
AUXR = 0x14;                    //T2為1T模式, 并啟動定時器2
AUXR |= 0x01;                    //選擇定時器2為串口1的波特率發生器

這里面的AUXR明明是一個寄存器,為什么分開寫? 為什么第二個是   AUXR “|”這里面的 |是什么意思?
我是不是可以直接寫成:
AUXR = 0x14;  (既允許打開定時器2,定時器2是8051  12倍,不分頻。又可以直接選擇定時器2 位UART1的波特率發生器)?
兩個問題。





作者: pcbboy    時間: 2019-10-7 09:09
要合并就是  AUXR = 0x15;    第二句話是位操作,將0x01按位或到AUXR。
作者: pcbboy    時間: 2019-10-7 09:11
合并后為: AUXR = 0x15;   
AUXR |= 0x01; 是按位或   0x01 到 AUXR 的意思
   
作者: baiyun1234    時間: 2019-10-7 09:13
這句寫錯了:
是:我是不是可以直接寫成:AUXR = 0x15;  (既允許打開定時器2,定時器2是8051  12倍,不分頻。又可以直接選擇定時器2 位UART1的波特率發生器)?
作者: pcbboy    時間: 2019-10-7 09:13
合并后為: AUXR = 0x15;   
  |   是按位或 的意思
作者: baiyun1234    時間: 2019-10-7 09:15
寫錯了一句:我是不是可以直接寫成:AUXR = 0x15;  (既允許打開定時器2,定時器2是8051  12倍,不分頻。又可以直接選擇定時器2 位UART1的波特率發生器)?
作者: baiyun1234    時間: 2019-10-7 11:32
pcbboy 發表于 2019-10-7 09:11
合并后為: AUXR = 0x15;   
AUXR |= 0x01; 是按位或   0x01 到 AUXR 的意思

往往是最基本的容易疏忽,謝謝。之前一直用“||”(對應一個字節),沒用過單個“|”(對應字節中的某位)。
擴展了一個問題,如果我相對AUXR 第二位單獨操作,應該怎么寫? AUXR | = 0x02?;第三位單獨操作,應該
寫成: AUXR | = 0x04;。。。第8位“AUXR | = 0x80”.
作者: 人人學會單片機    時間: 2019-10-7 12:36
我們人人學會單片機的課程,就是這樣操作的,意思就是,你單獨控制某一位,而其他位則是保持不變。郭傻瓜得課程,就是直接賦值了,是不安全的寫法。
作者: baiyun1234    時間: 2019-10-7 15:45
人人學會單片機 發表于 2019-10-7 12:36
我們人人學會單片機的課程,就是這樣操作的,意思就是,你單獨控制某一位,而其他位則是保持不變。郭傻瓜得 ...

1.他也是單獨控制寄存器的某一位,假如控制 SCON寄存器中的 REN(第5位),人家直接寫REN=1,不用就 REN=0,也挺好理解。
你的可以寫成:SCON | = 0x10。
你們 是一樣的 。
2.對于控制位還是控制字節,我感覺對于初學者不了解的,使用位控制,可以使他們充分理解寄存器功能。
對于比較熟練的,直接進行字節賦值,可以減少程序長度。
作者: wulin    時間: 2019-10-8 13:20
STC15系列單片機中的AUXR寄存器不支持位操作,這是一個特殊功能寄存器,并且各個位的功能甚至沒有直接關聯。因此對其中某一位或某幾位操作時不能隨意改變其它位的狀態,所以用按位與“&”和按位或“|”的方式操作其中某一位或某幾位就不會改變其它位的狀態。這個方法同樣適用于支持位操作的寄存器,可以使代碼簡潔高效。
作者: 隨丶緣    時間: 2021-2-4 11:09
AUXR |= 0x04;                //定時器時鐘1T模式
作者: univers    時間: 2021-2-4 15:36
要多看看例程了,  AUXR “|”這里面的 |  是單單干寄存里的單單某一位,而其它的原封不動。
作者: guolh    時間: 2021-11-24 14:42
按照位或,學習了!!!!
作者: plb1213    時間: 2021-11-27 17:40
合并后就是  AUXR = 0x15;   
第二句應該是位操作,將0x01按位或到AUXR。
作者: ax6808    時間: 2022-3-1 21:57
wulin 發表于 2019-10-8 13:20
STC15系列單片機中的AUXR寄存器不支持位操作,這是一個特殊功能寄存器,并且各個位的功能甚至沒有直接關聯 ...

厲害了我的哥! 手冊里 對PCON 、AUXR等寄存器的位功能描述比較分散,我也是看了又看才知道。
熟悉對的話兩種寫法都可以,不熟悉就分開確實安心些!
作者: ax6808    時間: 2022-3-1 23:35
void Uart1Init()          //串口1初始化;
{
    SCON = 0x40;          //串口1模1: 0100: 010模式1,可變波特率8位數據方式,0禁收只發(關鍵:原來0X50可收,平時斷開只發不收0X40才能杜絕收發串擾!已驗證ok!);
    TMOD = 0x20;    //T1模2: 8位自動重載模式;PCON:未設定,復位值0011,0000默認SMOD=0波特率不加速!;
    TL1 = BRT;            //T1: BRT:相當于串口1使用獨立波特率發射器為波特率發生器; 也可前面不定義直接賦值(如:0xDC);
    TH1 = BRT;      //    計數寄存器高低各一個,8位自動重載模式周期計算公式:定時器周期=(256–TH1)/SYSclk (自動重載);
    TR1 = 1;          //    T1運行控制位:軟件置位和清零。TR1=1允許T1開始計數,TR1=0時禁止;
  //AUXR = 0x40;          //輔助寄存器(特殊,不可位尋址),建議分開寫成:AUXR |= 0x40;AUXR &= 0xFE;
    AUXR |= 0x40;   //    B6(T1x12):T1速度控制位,"1"選T1且1T模式不分頻FOSC/1;
    AUXR &= 0xFE;   //    B0(S1ST2):串口1波特率發射器選擇位,“0”選T1為波特率發射器);
  //bufferPtr = 0;  //只發不收可去掉!改0X00無變化;          
    Uart1Busy = 0;  //
    delay_ms(100);  //延時0.1S;
作者: dzbj    時間: 2022-3-2 00:47
不能位操作的寄存器就要整個賦值 你那么寫當然可以 但不如手冊上那么寫方便 也容易出錯
作者: npn    時間: 2022-3-2 11:33
AUXR寄存器由8個功能不同的位寄存器組成,不可位尋址。
使用C語言的 &= ,|= 運算符按位配置。
作者: youlinys    時間: 2022-3-2 15:57
AUXR寄存器講的太好了。
作者: fhsgjsgjsfgjsfj    時間: 2022-3-4 13:09
stm32搞多了,51的也忘差不多了
作者: univers    時間: 2022-3-5 20:08
AUXR |= 0x01;         這個代表只動它的第一位,置1,其它的不會動。
作者: youlinys    時間: 2022-3-5 21:54
AUXR寄存器 主要是什么作用?
作者: 188610329    時間: 2022-3-5 22:12
youlinys 發表于 2022-3-5 21:54
AUXR寄存器 主要是什么作用?

你這問題問得…… , 名稱上來講,就是輔助寄存器。
不同的單片機,用處不同,

樓主貼的是 STC15 系列的,基本都是牽涉到定時器的設置
如果你看 STC89 的手冊,里面還有 控制 ALE 的開關。
如果你去看 STC12 的手冊, 里面還有 中斷開關。

所以,如果拋開型號不講,光說某個寄存器,壓根沒法泛泛回答。
作者: Ottifant127    時間: 2024-3-21 14:56
pcbboy 發表于 2019-10-7 09:09
要合并就是  AUXR = 0x15;    第二句話是位操作,將0x01按位或到AUXR。

確實如此,不過一般不合并吧,便于程序維護與修改。

作者: rayin    時間: 2024-3-24 10:35
=0x14; |=0x01; 兩條分開寫, 合并寫都是一樣的.
作者: 君工創    時間: 2024-3-24 12:08
分開寫的好處是:不管之前打開了那些位,現在加上這一位。
作者: coody_sz    時間: 2024-3-24 12:56
通常為了單獨控制某個位,就這樣操作的,也便于理解。
我常用方法:
AUXR = 0;
AUXR |= 0x04;   //T2 1T模式
AUXR |= 0x01;   //串口1選擇T2做波特率發生器
AUXR |= 0x10;   //啟動T2
作者: adject    時間: 2024-3-24 15:38
AUXR |= 0x01;其實就是AUX = AUX | 0X1;
作者: 雪糕yya    時間: 2024-3-25 17:54
AUXR |= 0x04;                //定時器時鐘1T模式
作者: fosu頑童    時間: 2024-3-26 10:19
本帖最后由 fosu頑童 于 2024-3-26 10:24 編輯

1、AUXR |= 0x01等價于AUXR= AUXR|0X01 ,這是按位或運算,將AUXR的8位按高到低分別與0000 0001進行或運算。

2、兩語句可以合并寫,可以分開寫。
寫例程的人員是為了方便移植所以分開兩個語句寫出來,抑或是他想給讀者傳達的編程思路是先配置好定時器參數,最后再配置串口的設置。
作者: 雪糕yya    時間: 2024-3-27 23:05
要合并:  AUXR = 0x15;   
第二句話是位操作,將0x01按位或到AUXR。
作者: lsylsyyyy    時間: 2024-3-28 14:03
問問大佬:里面的EXTRAM位為1的話禁止訪問內部擴展ram,也就是說不能定義xdata的數據;但是上電的話EXTRAM默認是零嗎,如果默認為零的話是不是可以直接在程序中定義xdata數據。

作者: a1592608215    時間: 2024-3-29 10:51
合并后為: AUXR = 0x15;   
AUXR |= 0x01; 是按位或   0x01 到 AUXR 的意思




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91久久网站 | 日韩亚洲视频 | 日本免费一区二区三区视频 | 日韩精品中文字幕一区二区三区 | 成人国产午夜在线观看 | 日韩毛片中文字幕 | 最新日韩精品 | 色视频网站免费 | 九九久久国产 | 国产伦精品一区二区三区四区视频 | 国产成人免费视频网站高清观看视频 | 国产精品国产三级国产a | 自拍视频网 | 日本三级线观看 视频 | 日本三级电影免费 | 91欧美激情一区二区三区成人 | 亚洲欧美中文日韩在线v日本 | 日韩福利| 一区二区三区高清不卡 | 日韩成人精品一区二区三区 | 中文字幕 在线观看 | 免费人成激情视频在线观看冫 | 亚洲精品成人av | 久久国产精品视频 | 国产精品欧美一区二区 | 日本网站在线看 | 国产成人亚洲精品 | 在线成人免费视频 | 在线看无码的免费网站 | 欧美日韩精品久久久免费观看 | 一区二区三区欧美大片 | 国产综合第一页 | 国产欧美日韩一区二区三区 | 91综合在线观看 | 欧美日韩电影一区二区 | 亚洲一区二区免费视频 | 久久精品国产亚洲 | 中文在线www | 国产精品日女人 | 国产福利久久 | 国产欧美性成人精品午夜 |