织赢在路上ios开发培训中心提供:iOS培训,iOS培训班,iOS工程师培训,iOS程序员培训,iOS开发,iOS编程,iOS系统开发等一系列培训服务。

免费咨询热线:4006-113-575
当前位置: > OC语言 >

编译器自动生成用于访问I/O寄存器的专用指令

时间:2016-03-11 05:40来源:网络整理 作者:iOS开发 点击:
I O寄存器的C语言源程序及剖析 在ICCAVR中访问0x00~0x3f的寄存器空间,可以使用内汇编和预处理宏。一个数据内存地址可以通过加指针类型

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

(责任编辑:admin)
织梦二维码生成器
------分隔线----------------------------
栏目列表
推荐内容