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