国产一级淫片A视频免费观看,欧美激情精品久久久,无码性午夜视频在线观看,亚洲精品久久久久久久久久久,亚洲中文av中文字幕,中文日韩AV影院在线观看

聯(lián)系我們

銷(xiāo)售直撥
     025-85550202;
     025-85550520;


master@csch.com.cn

技術(shù)咨詢(xún):
     025-85550520

duan@csch.com.cn

售后服務(wù)專(zhuān)線(xiàn):

     15251851604    

wu_yuyang@csch.com.cn

傳 真:025-85550303


深圳市中霍電子技術(shù)有限公司
地址:深圳市龍華新區龍華街道牛地埔村美滿(mǎn)圓小區
聯(lián)系人:顏安軍/副總
Mobile:18038070895
E-mail: szyanaj@csch.com.cn  
 

C語(yǔ)言訪(fǎng)問(wèn)MCU寄存器的兩種方式

單片機的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語(yǔ)言環(huán)境下對其訪(fǎng)問(wèn)歸納起來(lái)有兩種方法。

1、采用標準C的強制類(lèi)型轉換和指針來(lái)實(shí)現
采用標準C的強制轉換和指針的概念來(lái)實(shí)現訪(fǎng)問(wèn)MCU的寄存器,例如:
#define DDRB (*(volatile unsigned char *)0x25)

分析如下:
A:(unsigned char *)0x25中的0x25只是個(gè)值,前面加(unsigned char *)表示0x25是個(gè)地址,而且這個(gè)地址所存儲的數據的數據類(lèi)型是unsigned char,意思就是說(shuō)讀/寫(xiě)這個(gè)地址時(shí),要寫(xiě)進(jìn)unsigned char的值,讀出也是unsigned char的值。

(*(volatile unsigned char *)0x25)是一個(gè)固定的指針,是不可變的,而不是指針變量。再在前面加"*",即*(volatile unsigned char *)0x25則變成了變量(普通的unsigned char變量,不是指針變量),如果是#define i (*(volatile unsigned char *)0x25),則與unsigned char i是一樣的,只不過(guò)前面i的地址是固定的。

B:關(guān)鍵字volatile確保本指令不會(huì )以為C編譯器的優(yōu)化而被省略,且要求每次直接讀值。例如使用while(*(unsigned char *)0x25)時(shí),有時(shí)系統可能不能真正去讀0x25的值,而是用第 一次讀出的值,如果這樣,這個(gè)循環(huán)可能就是個(gè)死循環(huán)。用了volatile則要求每次都去讀0x25的實(shí)際值。

這樣讀/寫(xiě)以0x25為地址的SRAM單元,直接書(shū)寫(xiě)DDRB即可,即DDRB為變量,只不過(guò)變量的地址固定為0x25。例如:
DDRB = 0xff;
這樣比直接采用指針變量的方法直觀(guān)和方便的多,例如:
unsigned char *p, i;
p = 0x25;
i = *p; //把地址為0x25單元中的數據讀出送入i變量
*p = 0; //向地址為0x25的單元中寫(xiě)入0

總結一下,就是(*(volatile unsigned char *)0x25)可以看作是一個(gè)普通變量,這個(gè)變量喲固定的地址,指向0x25。而0x25只是個(gè)常量,不是指針,更不是變量。

2、對C編譯器進(jìn)行語(yǔ)法擴充
對C編譯器進(jìn)行語(yǔ)法擴充。例如MCS51系列KeilC中擴充sfr關(guān)鍵字,舉例如下:
sfr P0 = 0x80;
這樣操作0x80單元直接寫(xiě)P0即可。

下面對AVR的歌C編譯器對訪(fǎng)問(wèn)MCU寄存器的方法進(jìn)行簡(jiǎn)介。

A:采用標準C的強制類(lèi)型轉換和指針來(lái)實(shí)現訪(fǎng)問(wèn)MCU的寄存器,每一個(gè)C編譯器都支持,原因很簡(jiǎn)單,這是標準C。

B:ICCAVR和GCCAVR沒(méi)有定義新的數據類(lèi)型,只能采用標準C的強制類(lèi)型轉換和指針來(lái)實(shí)現訪(fǎng)問(wèn)MCU的寄存器。而IAR和CodeVisionAVR編譯器對ANSI C進(jìn)行了擴充,都定義了新的數據類(lèi)型,是C語(yǔ)言可以直接訪(fǎng)問(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ì)上與直接的強制類(lèi)型轉換和指針定義是一樣的。

另外,GCCAVR中宏_BV(bit)是操作I/O寄存器是頻繁用到的,avr-libc建議使用這一宏進(jìn)行寄存器的位操作,他在文件sfr_defs.h中定義如下:
#define _BV(bit) (1<<(bit))

以下是他的使用示例;
DDRB = _BV(PB0) | _BV(PB1); //器件頭文件中已經(jīng)定義PB0代表0,PB1代表1
他等同于“DDRB=0x03;”,這樣寫(xiě)的目的是為了提供程序的可讀性。不要擔心它會(huì )生成比“DDRB=0x03;”更大的代碼,編譯器會(huì )處理這種事情,更終會(huì )輸出與“DDRB=0x03;”同樣的結果。
Copyright@ 2003-2026  南京信瑞譜傳感技術(shù)有限公司版權所有     

熱門(mén)導航電壓傳感器  霍爾電流傳感器  互感器  高精度電流傳感器  直流漏電流傳感器  直流電流變送器  霍爾傳感器工作原理 傳感器資料下載

           

        在線(xiàn)購買(mǎi)-直達淘寶店

     具體購買(mǎi)產(chǎn)品請聯(lián)系淘寶客服

(淘寶店拍買(mǎi)請聯(lián)系淘寶在線(xiàn)服務(wù),告知型號或在線(xiàn)經(jīng)理的姓名即可)

国产一级淫片A视频免费观看,欧美激情精品久久久,无码性午夜视频在线观看,亚洲精品久久久久久久久久久,亚洲中文av中文字幕,中文日韩AV影院在线观看 曰本女同互慰高清在线观看| 亚洲成a人片在线观看无码专区| 在线精品自偷自拍无码| 亚洲人成人无码网WWW国产| 日韩丰满少妇无吗视频激情内射| 三级国产爽死你个荡货| 91精品观看91久久久久久| 亚洲国产成a人v在线观看| 国产成人精品免高潮在线观看| 在线全集隔壁老王国产在线精品| 人妻免费精品久久一区| 午夜无码乱码在线观看| 韩国伦理手机免费播放| 亚洲国产午夜精品不卡| 亚洲中字无码AV电影在线观看| 亚洲免费福利在线观看| 亚洲av无码一区二区三区四| 一区二区三区精品视频| 亚洲av综合色区无码专区桃色| 亚洲综合男人的天堂| 亚洲精品国产suv一区| 一级床片40分钟免费视频| 人妻av无码专区五月天| 中文字幕+乱码+www| 伊人久久大香线蕉av色婷婷色| 性色AV浪潮AV色欲AV| 亚洲一区二区三区不卡在线播放| 免费无码AV一区二区三区| 亚洲色AV性色在线| 综合久久一本伊一区| 国产精品久久久久久久久午夜福利| 国产精品久久久中文字幕| 国产精品欧美韩国日本久久| 一级特黄高清aaaa大片一| 午夜影院0606免费| 在线天堂》电影全集免费观看全集| 亚洲欧美日韩国产综合| 熟妇少妇任你躁在线观看| 一本道(日本电影公司)| 国产一区视频在线观看| 日本97久久久久久久久精品| http://niekeke.com http://shbuxian.com http://hxbay.com http://voshang.com http://51wkcar.com http://fxjsmj.com