[導(dǎo)讀]單片機(jī)的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語(yǔ)言環(huán)境下對(duì)其訪問(wèn)歸納起來(lái)有兩種方法。1采用標(biāo)準(zhǔn)C的強(qiáng)制類型轉(zhuǎn)換和指針來(lái)實(shí)現(xiàn)采用標(biāo)準(zhǔn)C的強(qiáng)制轉(zhuǎn)換和指針的概念來(lái)實(shí)現(xiàn)訪問(wèn)MCU的寄存器,例如:#defineDDRB(*(volatileunsignedchar...
單片機(jī)、ARM、嵌入式等硬件、軟件設(shè)計(jì)經(jīng)驗(yàn)的分享,并提供一定的技術(shù)支持。我已加入“維權(quán)騎士”(rightknights.com)的版權(quán)保護(hù)計(jì)劃" data-from="0">單片機(jī)的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語(yǔ)言環(huán)境下對(duì)其訪問(wèn)歸納起來(lái)有兩種方法。1采用標(biāo)準(zhǔn)C的強(qiáng)制類型轉(zhuǎn)換和指針來(lái)實(shí)現(xiàn)采用標(biāo)準(zhǔn)C的強(qiáng)制轉(zhuǎn)換和指針的概念來(lái)實(shí)現(xiàn)訪問(wèn)MCU的寄存器,例如:#define DDRB (*(volatile unsigned char *)0x25)分析如下:這樣讀/寫以0x25為地址的SRAM單元,直接書寫DDRB即可,即DDRB為變量,只不過(guò)變量的地址固定為0x25。例如:DDRB = 0xff;這樣比直接采用指針變量的方法直觀和方便的多,例如:unsigned char *p, i;p = 0x25;i = *p; //把地址為0x25單元中的數(shù)據(jù)讀出送入i變量*p = 0; //向地址為0x25的單元中寫入0總結(jié)一下,就是(*(volatile unsigned char *)0x25)可以看作是一個(gè)普通變量,這個(gè)變量由固定的地址,指向0x25。而0x25只是個(gè)常量,不是指針,更不是變量。2對(duì)C編譯器進(jìn)行語(yǔ)法擴(kuò)充對(duì)C編譯器進(jìn)行語(yǔ)法擴(kuò)充。例如MCS51系列KeilC中擴(kuò)充sfr關(guān)鍵字,舉例如下:sfr P0 = 0x80;這樣操作0x80單元直接寫P0即可。下面對(duì)AVR的C編譯器對(duì)訪問(wèn)MCU寄存器的方法進(jìn)行簡(jiǎn)介。A:采用標(biāo)準(zhǔn)C的強(qiáng)制類型轉(zhuǎn)換和指針來(lái)實(shí)現(xiàn)訪問(wèn)MCU的寄存器,每一個(gè)C編譯器都支持,原因很簡(jiǎn)單,這是標(biāo)準(zhǔn)C。B:ICCAVR和GCCAVR沒(méi)有定義新的數(shù)據(jù)類型,只能采用標(biāo)準(zhǔn)C的強(qiáng)制類型轉(zhuǎn)換和指針來(lái)實(shí)現(xiàn)訪問(wèn)MCU的寄存器。而IAR和CodeVisionAVR編譯器對(duì)ANSI C進(jìn)行了擴(kuò)充,都定義了新的數(shù)據(jù)類型,是C語(yǔ)言可以直接訪問(wèn)MCU的有關(guān)寄存器,例如,IAR中:SFR_B(DDRB, 0x28)CodeVisionAVR中:sfrb DDRB = 0x28這樣,PORTB=0xff;等同于(*(volatile unsigned char *)0x05) = 0xff;而0x25正好是寄存器PORTB在器件ATmega48/88/168中的地址。GCCAVR每個(gè)AVR器件在頭文件不采用直接定義特殊功能寄存器宏,例如在iomx8.h文件中一個(gè)定義如下:
#define?PORTB?_SFR_IO8(0x25)
而在sfr_defs.h中可以找到如下兩個(gè)宏定義:#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) 0x20)#define?_MMIO_BYTE(mem_addr)?(*(volatile?unit8_t?*)(mem_addr))實(shí)質(zhì)上與直接的強(qiáng)制類型轉(zhuǎn)換和指針定義是一樣的。另外,GCCAVR中宏_BV(bit)是操作I/O寄存器是頻繁用到的,avr-libc建議使用這一宏進(jìn)行寄存器的位操作,他在文件sfr_defs.h中定義如下:#define _BV(bit)以下是他的使用示例:
DDRB?=?_BV(PB0)?|?_BV(PB1);?//器件頭文件中已經(jīng)定義PB0代表0,PB1代表1
他等同于“DDRB=0x03;”,這樣寫的目的是為了提供程序的可讀性。不要擔(dān)心它會(huì)生成比“DDRB=0x03;”更大的代碼,編譯器會(huì)處理這種事情,最終會(huì)輸出與“DDRB=0x03;”同樣的結(jié)果。C語(yǔ)言編程:LCD驅(qū)動(dòng)編寫思路一個(gè)產(chǎn)品級(jí)MCU菜單框架設(shè)計(jì)程序員的一天,看問(wèn)了你還想做程序員嗎?你用哪個(gè)軟件設(shè)計(jì)電路?10種免費(fèi)好用的電路設(shè)計(jì)軟件盤點(diǎn)!單片機(jī)、ARM、嵌入式等硬件、軟件設(shè)計(jì)經(jīng)驗(yàn)的分享,并提供一定的技術(shù)支持。我已加入“維權(quán)騎士”(rightknights.com)的版權(quán)保護(hù)計(jì)劃" data-from="0">
欲知詳情,請(qǐng)下載word文檔
下載文檔
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
串口作為單片機(jī)開(kāi)發(fā)的一個(gè)常用的外設(shè),應(yīng)用范圍非常廣。大部分時(shí)候,串口需要接收處理的數(shù)據(jù)長(zhǎng)度是不定的。那么怎么才能判斷一幀數(shù)據(jù)是否結(jié)束呢,今天就以STM32單片機(jī)為例,介紹幾種接收不定長(zhǎng)數(shù)據(jù)的方法。
關(guān)鍵字:
單片機(jī)
串口
STM32
單片機(jī)誕生于1971年,經(jīng)歷了SCM、MCU、SoC三大階段。單片機(jī)由以前的1位、4位、8位、16位,發(fā)展到現(xiàn)在的32位甚至64位。當(dāng)前國(guó)內(nèi)MCU廠商已有上百家,對(duì)標(biāo)進(jìn)口芯片的情況非常嚴(yán)重,導(dǎo)致國(guó)內(nèi)MCU產(chǎn)品將陷入同質(zhì)化...
關(guān)鍵字:
單片機(jī)
MCU
市場(chǎng)
最近看到APP上,給我推送了很多類似的回答,借此機(jī)會(huì),也想著重新審視一下自己的學(xué)習(xí)歷程,以及結(jié)合自身和大牛,分享一些學(xué)習(xí)經(jīng)驗(yàn),希望對(duì)大家有所啟發(fā)和幫助。
關(guān)鍵字:
APP
嵌入式
C語(yǔ)言
(微控制單元 MCU(Microcontroller Unit),又稱單片機(jī),是把中央處理器(CentralProcess Unit; CPU)的頻率與規(guī)格做適當(dāng)縮減,并將內(nèi)存(memory)、計(jì)數(shù)器(Timer)、US...
關(guān)鍵字:
單片機(jī)
芯片
CPU
本文中,小編將對(duì)無(wú)線模塊予以介紹,如果你想對(duì)無(wú)線模塊的詳細(xì)情況有所認(rèn)識(shí),或者想要增進(jìn)對(duì)它的了解程度,不妨請(qǐng)看以下內(nèi)容哦。
關(guān)鍵字:
無(wú)線模塊
寄存器
處理器
在疫情的影響下,出門后、用餐前使用酒精消毒已成了人們的日常,而酒精噴霧機(jī)也因此變得十分熱銷。為了避免交叉感染的風(fēng)險(xiǎn),自動(dòng)酒精噴霧器也就應(yīng)運(yùn)而生。不同于傳統(tǒng)手動(dòng)噴霧器不美觀、手部接觸不衛(wèi)生的bug,此款自動(dòng)感應(yīng)酒精噴霧器使...
關(guān)鍵字:
芯嶺技術(shù)
方案開(kāi)發(fā)
解決方案
單片機(jī)
在實(shí)際的單片機(jī)控制系統(tǒng)中,有時(shí)候會(huì)使用數(shù)字邏輯芯片對(duì)單片機(jī)和受控元件進(jìn)行隔離,以保護(hù)單片機(jī),或者令單片機(jī)更好地對(duì)后級(jí)進(jìn)行控制。
關(guān)鍵字:
單片機(jī)
數(shù)字邏輯芯片
受控元件
MH32F103AVET6使用高性能的32位內(nèi)核,內(nèi)置了多達(dá)2個(gè)高級(jí)定時(shí)器、10個(gè)通用定時(shí)器、2個(gè)基本定時(shí)器、3個(gè)12位的ADC、2個(gè)12位的DAC,還包含標(biāo)準(zhǔn)和先進(jìn)的通信接口包括:3個(gè)SPI接口、2個(gè)I2S接口、2個(gè)I...
關(guān)鍵字:
單片機(jī)
MCU
最近由于換季,天氣突然的轉(zhuǎn)涼,大家也是直呼好冷。天冷了自然是要注意防寒保暖。一個(gè)能夠當(dāng)充電寶用的暖手寶會(huì)是你最好的陪伴。暖手寶是一種非常便捷易用的發(fā)熱工具,并且體形小巧,可以隨身攜帶并輕易握在手中,也可以放置在身上的其它...
關(guān)鍵字:
芯嶺技術(shù)
方案開(kāi)發(fā)
解決方案
單片機(jī)
SQLite是一個(gè)跨平臺(tái)的輕量級(jí)數(shù)據(jù)庫(kù),支持C/C++開(kāi)發(fā),可用于嵌入式中,關(guān)于C/C++使用SQLite的簡(jiǎn)單實(shí)例,可參考這篇:“玩轉(zhuǎn)SQLite6:使用C語(yǔ)言來(lái)讀寫數(shù)據(jù)庫(kù)”,本篇來(lái)繼續(xù)介紹SQLite的基礎(chǔ)運(yùn)算符與表...
關(guān)鍵字:
SQLite
C語(yǔ)言
數(shù)據(jù)庫(kù)
XL32F003 系列微控制器采用高性能的 32 位 ARM?Cortex?- M0+ 內(nèi)核,寬電壓工作范圍的MCU。嵌入高達(dá)64 Kbytes flash和8 Kbytes SRAM存儲(chǔ)器,最高工作頻率32 MHz。包...
關(guān)鍵字:
單片機(jī)
MCU
電動(dòng)洗鼻器是一種全新的鼻腔清潔工具,一般是通過(guò)水壓將生理鹽水送進(jìn)鼻腔,借助于生理鹽水的殺菌作用及水流的沖擊力,將鼻腔內(nèi)已聚集的致病菌及污洉排出,從而使鼻腔恢復(fù)正常的生理環(huán)境,恢復(fù)鼻腔的自我排毒功能,達(dá)到保護(hù)鼻腔的目的。讓...
關(guān)鍵字:
芯嶺技術(shù)
方案開(kāi)發(fā)
解決方案
單片機(jī)
大家好,我是小舒,今天我?guī)?lái)了一個(gè)開(kāi)源項(xiàng)目。學(xué)習(xí)單片機(jī)的小伙伴,對(duì)J-link一定不會(huì)陌生。J-link可以使用JATA和SWD接口進(jìn)行在線Debug和程序的燒錄,曾經(jīng)一段時(shí)間,某寶上J-Link鋪天蓋地,各種各樣,價(jià)格...
關(guān)鍵字:
開(kāi)源項(xiàng)目
J-link
單片機(jī)
51單片機(jī)是對(duì)兼容英特爾8051指令系統(tǒng)的單片機(jī)的統(tǒng)稱。51單片機(jī)廣泛應(yīng)用于家用電器、汽車、工業(yè)測(cè)控、通信設(shè)備中。因?yàn)?1單片機(jī)的指令系統(tǒng)、內(nèi)部結(jié)構(gòu)相對(duì)簡(jiǎn)單,所以國(guó)內(nèi)許多高校用其進(jìn)行單片機(jī)入門教學(xué)。
關(guān)鍵字:
51
單片機(jī)
51單片機(jī)論壇
單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。相當(dāng)于一個(gè)微型的計(jì)算機(jī),和計(jì)算機(jī)相比,單片機(jī)只缺少了I/O設(shè)備。概括的講:一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便...
關(guān)鍵字:
單片機(jī)
微控制器
芯片
前幾天直播間不小心給物聯(lián)網(wǎng)開(kāi)發(fā)板通入了12V電源。原本開(kāi)發(fā)板的供電要求是5V。不小心將拾音磁流體的適配器12V插了進(jìn)去。瞬間板子出現(xiàn)燒焦的味道,馬上斷電。當(dāng)時(shí)并沒(méi)有發(fā)現(xiàn)是哪里出現(xiàn)發(fā)熱,首先害怕是WiFi模塊燒壞,因?yàn)檫@個(gè)...
關(guān)鍵字:
單片機(jī)
物聯(lián)網(wǎng)
在計(jì)算機(jī)科學(xué)中,內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存。
關(guān)鍵字:
C語(yǔ)言
內(nèi)存泄漏
C語(yǔ)言使用函數(shù)調(diào)用,我們?cè)偈煜げ贿^(guò)了,但是函數(shù)調(diào)用在內(nèi)存中究竟發(fā)生了什么真的清楚嗎?只有搞清楚內(nèi)存里的內(nèi)幕,才算完全搞懂函數(shù)的調(diào)用。
關(guān)鍵字:
C語(yǔ)言
函數(shù)調(diào)用
從事計(jì)算機(jī)和或電子行業(yè)相關(guān)領(lǐng)域工作的朋友,一般都聽(tīng)說(shuō)過(guò)單片機(jī)和嵌入式。但是要問(wèn)單片機(jī)和嵌入式兩者之間有什么聯(lián)系,大多數(shù)人都不能很好的解釋清楚。想要弄清楚嵌入式和單片機(jī)有什么聯(lián)系,首先就要弄明白什么是嵌入式,什么是單片機(jī)。...
關(guān)鍵字:
嵌入式
單片機(jī)
最經(jīng)典的2DFF 1-bit同步器如下,下圖結(jié)構(gòu)通常用于單bit控制信號(hào)的異步處理:
關(guān)鍵字:
異步電路
寄存器