AVR單片機I/O寄存器的C語(yǔ)言源程序及剖析詳解
在ICCAVR中訪(fǎng)問(wèn)0x00~0x3f的寄存器空間,可以使用內匯編和預處理宏。一個(gè)數據內存地址可以通過(guò)加指針類(lèi)型符號直接訪(fǎng)問(wèn)。
本文引用地址:http://dyxdggzs.com/article/201611/323654.htm例如,SREG寄存器的地址是0x5f,對它的訪(fǎng)問(wèn)操作:
unsigned char c;
c=*(volatile unsigned char *)0x5f;//讀取SREG寄存器
*(volatile unsigned char *)0x5f|=0x80;//打開(kāi)全局中斷允許位
提示:數據內存地址0x00~0x31指向CPU通用寄存器R0~R31,不能隨意修改它們的地址(或者輸入錯誤的地址),否則可能會(huì )造成致命的錯誤。
ICCAVR C在io*v.h文件中用define偽指令給大部分的寄存器定義了指針形式符號,如定義SREG:#define SREG *(volatile unsigned char *)0x5f
上面對SREG的操作也可以改為:
unsigned char c;
c=SREG;//讀取SREG寄存器
SREG|=0X80;//打開(kāi)全局中斷允許位
說(shuō)明:
1.在ICCAVR中對I/O寄存器進(jìn)行操作,編譯器自動(dòng)生成用于訪(fǎng)問(wèn)I/O寄存器的專(zhuān)用指令,如IN、OUT、BSET、BCLR等,而且已將地址0X5F變換為0x3f。
2.#define語(yǔ)句也可以定義絕對內存空間,用以指向一個(gè)固定地址的字節,如:#define LED_OUT *(volatile unsigned char *)0x80aa
評論