I/O寄存器的C言语源程序及分析
在ICCAVR中拜访0x00~0x3f的寄存器空间,能够运用内汇编和预处理宏。一个数据内存地址能够经过加指针类型符号直接拜访。
例如,SREG寄存器的地址是0x5f,对它的拜访操作:
unsigned char c;
c=*(volatile unsigned char *)0x5f;//读取SREG寄存器
*(volatile unsigned char *)0x5f|=0x80;//翻开大局中止答应位
提示:数据内存地址0x00~0x31指向CPU通用寄存器R0~R31,不能随意修正它们的地址(或许输入过错的地址),不然可能会形成丧命的过错。
ICCAVR C在io*v.h文件顶用define伪指令给大部分的寄存器界说了指针方式符号,如界说SREG:#define SREG *(volatile unsigned char *)0x5f
上面临SREG的操作也能够改为:
unsigned char c;
c=SREG;//读取SREG寄存器
SREG|=0X80;//翻开大局中止答应位
阐明:
1.在ICCAVR中对I/O寄存器进行操作,编译器主动生成用于拜访I/O寄存器的专用指令,如IN、OUT、BSET、BCLR等,并且已将地址0X5F变换为0x3f。
2.#define句子也能够界说肯定内存空间,用以指向一个固定地址的字节,如:#define LED_OUT *(volatile unsigned char *)0x80aa