找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 17329|回復(fù): 32
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)教STC15系列單片機(jī)中的AUXR寄存器使用

  [復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 25 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
AUXR = 0x14;                    //T2為1T模式, 并啟動(dòng)定時(shí)器2
AUXR |= 0x01;                    //選擇定時(shí)器2為串口1的波特率發(fā)生器

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




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:25310 發(fā)表于 2019-10-7 09:09 | 只看該作者
要合并就是  AUXR = 0x15;    第二句話是位操作,將0x01按位或到AUXR。
回復(fù)

使用道具 舉報(bào)

板凳
ID:25310 發(fā)表于 2019-10-7 09:11 | 只看該作者
合并后為: AUXR = 0x15;   
AUXR |= 0x01; 是按位或   0x01 到 AUXR 的意思
   
回復(fù)

使用道具 舉報(bào)

地板
ID:609989 發(fā)表于 2019-10-7 09:13 | 只看該作者
這句寫錯(cuò)了:
是:我是不是可以直接寫成:AUXR = 0x15;  (既允許打開(kāi)定時(shí)器2,定時(shí)器2是8051  12倍,不分頻。又可以直接選擇定時(shí)器2 位UART1的波特率發(fā)生器)?
回復(fù)

使用道具 舉報(bào)

5#
ID:25310 發(fā)表于 2019-10-7 09:13 | 只看該作者
合并后為: AUXR = 0x15;   
  |   是按位或 的意思
回復(fù)

使用道具 舉報(bào)

6#
ID:609989 發(fā)表于 2019-10-7 09:15 | 只看該作者
寫錯(cuò)了一句:我是不是可以直接寫成:AUXR = 0x15;  (既允許打開(kāi)定時(shí)器2,定時(shí)器2是8051  12倍,不分頻。又可以直接選擇定時(shí)器2 位UART1的波特率發(fā)生器)?
回復(fù)

使用道具 舉報(bào)

7#
ID:609989 發(fā)表于 2019-10-7 11:32 | 只看該作者
pcbboy 發(fā)表于 2019-10-7 09:11
合并后為: AUXR = 0x15;   
AUXR |= 0x01; 是按位或   0x01 到 AUXR 的意思

往往是最基本的容易疏忽,謝謝。之前一直用“||”(對(duì)應(yīng)一個(gè)字節(jié)),沒(méi)用過(guò)單個(gè)“|”(對(duì)應(yīng)字節(jié)中的某位)。
擴(kuò)展了一個(gè)問(wèn)題,如果我相對(duì)AUXR 第二位單獨(dú)操作,應(yīng)該怎么寫? AUXR | = 0x02?;第三位單獨(dú)操作,應(yīng)該
寫成: AUXR | = 0x04;。。。第8位“AUXR | = 0x80”.
回復(fù)

使用道具 舉報(bào)

8#
ID:390416 發(fā)表于 2019-10-7 12:36 來(lái)自觸屏版 | 只看該作者
我們?nèi)巳藢W(xué)會(huì)單片機(jī)的課程,就是這樣操作的,意思就是,你單獨(dú)控制某一位,而其他位則是保持不變。郭傻瓜得課程,就是直接賦值了,是不安全的寫法。
回復(fù)

使用道具 舉報(bào)

9#
ID:609989 發(fā)表于 2019-10-7 15:45 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2019-10-7 12:36
我們?nèi)巳藢W(xué)會(huì)單片機(jī)的課程,就是這樣操作的,意思就是,你單獨(dú)控制某一位,而其他位則是保持不變。郭傻瓜得 ...

1.他也是單獨(dú)控制寄存器的某一位,假如控制 SCON寄存器中的 REN(第5位),人家直接寫REN=1,不用就 REN=0,也挺好理解。
你的可以寫成:SCON | = 0x10。
你們 是一樣的 。
2.對(duì)于控制位還是控制字節(jié),我感覺(jué)對(duì)于初學(xué)者不了解的,使用位控制,可以使他們充分理解寄存器功能。
對(duì)于比較熟練的,直接進(jìn)行字節(jié)賦值,可以減少程序長(zhǎng)度。
回復(fù)

使用道具 舉報(bào)

10#
ID:213173 發(fā)表于 2019-10-8 13:20 | 只看該作者
STC15系列單片機(jī)中的AUXR寄存器不支持位操作,這是一個(gè)特殊功能寄存器,并且各個(gè)位的功能甚至沒(méi)有直接關(guān)聯(lián)。因此對(duì)其中某一位或某幾位操作時(shí)不能隨意改變其它位的狀態(tài),所以用按位與“&”和按位或“|”的方式操作其中某一位或某幾位就不會(huì)改變其它位的狀態(tài)。這個(gè)方法同樣適用于支持位操作的寄存器,可以使代碼簡(jiǎn)潔高效。
回復(fù)

使用道具 舉報(bào)

11#
ID:881491 發(fā)表于 2021-2-4 11:09 | 只看該作者
AUXR |= 0x04;                //定時(shí)器時(shí)鐘1T模式
回復(fù)

使用道具 舉報(bào)

12#
ID:382454 發(fā)表于 2021-2-4 15:36 | 只看該作者
要多看看例程了,  AUXR “|”這里面的 |  是單單干寄存里的單單某一位,而其它的原封不動(dòng)。
回復(fù)

使用道具 舉報(bào)

13#
ID:206350 發(fā)表于 2021-11-24 14:42 | 只看該作者
按照位或,學(xué)習(xí)了。。!
回復(fù)

使用道具 舉報(bào)

14#
ID:897866 發(fā)表于 2021-11-27 17:40 | 只看該作者
合并后就是  AUXR = 0x15;   
第二句應(yīng)該是位操作,將0x01按位或到AUXR。
回復(fù)

使用道具 舉報(bào)

15#
ID:975054 發(fā)表于 2022-3-1 21:57 | 只看該作者
wulin 發(fā)表于 2019-10-8 13:20
STC15系列單片機(jī)中的AUXR寄存器不支持位操作,這是一個(gè)特殊功能寄存器,并且各個(gè)位的功能甚至沒(méi)有直接關(guān)聯(lián) ...

厲害了我的哥! 手冊(cè)里 對(duì)PCON 、AUXR等寄存器的位功能描述比較分散,我也是看了又看才知道。
熟悉對(duì)的話兩種寫法都可以,不熟悉就分開(kāi)確實(shí)安心些!
回復(fù)

使用道具 舉報(bào)

16#
ID:975054 發(fā)表于 2022-3-1 23:35 | 只看該作者
void Uart1Init()          //串口1初始化;
{
    SCON = 0x40;          //串口1模1: 0100: 010模式1,可變波特率8位數(shù)據(jù)方式,0禁收只發(fā)(關(guān)鍵:原來(lái)0X50可收,平時(shí)斷開(kāi)只發(fā)不收0X40才能杜絕收發(fā)串?dāng)_!已驗(yàn)證ok!);
    TMOD = 0x20;    //T1模2: 8位自動(dòng)重載模式;PCON:未設(shè)定,復(fù)位值0011,0000默認(rèn)SMOD=0波特率不加速!;
    TL1 = BRT;            //T1: BRT:相當(dāng)于串口1使用獨(dú)立波特率發(fā)射器為波特率發(fā)生器; 也可前面不定義直接賦值(如:0xDC);
    TH1 = BRT;      //    計(jì)數(shù)寄存器高低各一個(gè),8位自動(dòng)重載模式周期計(jì)算公式:定時(shí)器周期=(256–TH1)/SYSclk (自動(dòng)重載);
    TR1 = 1;          //    T1運(yùn)行控制位:軟件置位和清零。TR1=1允許T1開(kāi)始計(jì)數(shù),TR1=0時(shí)禁止;
  //AUXR = 0x40;          //輔助寄存器(特殊,不可位尋址),建議分開(kāi)寫成:AUXR |= 0x40;AUXR &= 0xFE;
    AUXR |= 0x40;   //    B6(T1x12):T1速度控制位,"1"選T1且1T模式不分頻FOSC/1;
    AUXR &= 0xFE;   //    B0(S1ST2):串口1波特率發(fā)射器選擇位,“0”選T1為波特率發(fā)射器);
  //bufferPtr = 0;  //只發(fā)不收可去掉!改0X00無(wú)變化;          
    Uart1Busy = 0;  //
    delay_ms(100);  //延時(shí)0.1S;
回復(fù)

使用道具 舉報(bào)

17#
ID:47286 發(fā)表于 2022-3-2 00:47 來(lái)自觸屏版 | 只看該作者
不能位操作的寄存器就要整個(gè)賦值 你那么寫當(dāng)然可以 但不如手冊(cè)上那么寫方便 也容易出錯(cuò)
回復(fù)

使用道具 舉報(bào)

18#
ID:57657 發(fā)表于 2022-3-2 11:33 | 只看該作者
AUXR寄存器由8個(gè)功能不同的位寄存器組成,不可位尋址。
使用C語(yǔ)言的 &= ,|= 運(yùn)算符按位配置。
回復(fù)

使用道具 舉報(bào)

19#
ID:983641 發(fā)表于 2022-3-2 15:57 | 只看該作者
AUXR寄存器講的太好了。
回復(fù)

使用道具 舉報(bào)

20#
ID:61261 發(fā)表于 2022-3-4 13:09 | 只看該作者
stm32搞多了,51的也忘差不多了
回復(fù)

使用道具 舉報(bào)

21#
ID:382454 發(fā)表于 2022-3-5 20:08 | 只看該作者
AUXR |= 0x01;         這個(gè)代表只動(dòng)它的第一位,置1,其它的不會(huì)動(dòng)。
回復(fù)

使用道具 舉報(bào)

22#
ID:983641 發(fā)表于 2022-3-5 21:54 | 只看該作者
AUXR寄存器 主要是什么作用?
回復(fù)

使用道具 舉報(bào)

23#
ID:624769 發(fā)表于 2022-3-5 22:12 | 只看該作者
youlinys 發(fā)表于 2022-3-5 21:54
AUXR寄存器 主要是什么作用?

你這問(wèn)題問(wèn)得…… , 名稱上來(lái)講,就是輔助寄存器。
不同的單片機(jī),用處不同,

樓主貼的是 STC15 系列的,基本都是牽涉到定時(shí)器的設(shè)置
如果你看 STC89 的手冊(cè),里面還有 控制 ALE 的開(kāi)關(guān)。
如果你去看 STC12 的手冊(cè), 里面還有 中斷開(kāi)關(guān)。

所以,如果拋開(kāi)型號(hào)不講,光說(shuō)某個(gè)寄存器,壓根沒(méi)法泛泛回答。
回復(fù)

使用道具 舉報(bào)

24#
ID:1113460 發(fā)表于 2024-3-21 14:56 | 只看該作者
pcbboy 發(fā)表于 2019-10-7 09:09
要合并就是  AUXR = 0x15;    第二句話是位操作,將0x01按位或到AUXR。

確實(shí)如此,不過(guò)一般不合并吧,便于程序維護(hù)與修改。
回復(fù)

使用道具 舉報(bào)

25#
ID:517951 發(fā)表于 2024-3-24 10:35 | 只看該作者
=0x14; |=0x01; 兩條分開(kāi)寫, 合并寫都是一樣的.
回復(fù)

使用道具 舉報(bào)

26#
ID:965189 發(fā)表于 2024-3-24 12:08 | 只看該作者
分開(kāi)寫的好處是:不管之前打開(kāi)了那些位,現(xiàn)在加上這一位。
回復(fù)

使用道具 舉報(bào)

27#
ID:1034262 發(fā)表于 2024-3-24 12:56 | 只看該作者
通常為了單獨(dú)控制某個(gè)位,就這樣操作的,也便于理解。
我常用方法:
AUXR = 0;
AUXR |= 0x04;   //T2 1T模式
AUXR |= 0x01;   //串口1選擇T2做波特率發(fā)生器
AUXR |= 0x10;   //啟動(dòng)T2
回復(fù)

使用道具 舉報(bào)

28#
ID:419968 發(fā)表于 2024-3-24 15:38 | 只看該作者
AUXR |= 0x01;其實(shí)就是AUX = AUX | 0X1;
回復(fù)

使用道具 舉報(bào)

29#
ID:1069659 發(fā)表于 2024-3-25 17:54 | 只看該作者
AUXR |= 0x04;                //定時(shí)器時(shí)鐘1T模式
回復(fù)

使用道具 舉報(bào)

30#
ID:402383 發(fā)表于 2024-3-26 10:19 | 只看該作者
本帖最后由 fosu頑童 于 2024-3-26 10:24 編輯

1、AUXR |= 0x01等價(jià)于AUXR= AUXR|0X01 ,這是按位或運(yùn)算,將AUXR的8位按高到低分別與0000 0001進(jìn)行或運(yùn)算。

2、兩語(yǔ)句可以合并寫,可以分開(kāi)寫。
寫例程的人員是為了方便移植所以分開(kāi)兩個(gè)語(yǔ)句寫出來(lái),抑或是他想給讀者傳達(dá)的編程思路是先配置好定時(shí)器參數(shù),最后再配置串口的設(shè)置。
回復(fù)

使用道具 舉報(bào)

31#
ID:1069659 發(fā)表于 2024-3-27 23:05 | 只看該作者
要合并:  AUXR = 0x15;   
第二句話是位操作,將0x01按位或到AUXR。
回復(fù)

使用道具 舉報(bào)

32#
ID:874002 發(fā)表于 2024-3-28 14:03 | 只看該作者
問(wèn)問(wèn)大佬:里面的EXTRAM位為1的話禁止訪問(wèn)內(nèi)部擴(kuò)展ram,也就是說(shuō)不能定義xdata的數(shù)據(jù);但是上電的話EXTRAM默認(rèn)是零嗎,如果默認(rèn)為零的話是不是可以直接在程序中定義xdata數(shù)據(jù)。
回復(fù)

使用道具 舉報(bào)

33#
ID:993578 發(fā)表于 2024-3-29 10:51 | 只看該作者
合并后為: AUXR = 0x15;   
AUXR |= 0x01; 是按位或   0x01 到 AUXR 的意思
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表