最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 单片机的特殊功能寄存器SFR对访问归纳起来的两种方法简介

    单片机的特殊功能寄存器SFR是SRAM地址已经确定的SRAM单元。在 C 语言环境中访问它有两种方法。

    1

    使用标准 C 类型转换和指针实现

    使用标准 C 类型转换和指针的概念来访问 MCU 寄存器,例如:

    #define DDRB (*(volatile unsigned char *)0x25)

    分析如下:

    这样就可以读写地址为0x25的SRAM单元,直接写入DDRB,即DDRB是一个变量,但变量的地址固定为0x25。例如:

    这比直接使用指针变量要直观方便得多,例如:

    综上所述,(*(volatile unsigned char *)0x25)可以看成是一个普通变量c语言实现词法分析器,这个变量有一个固定的地址,指向0x25。而0x25只是一个常数,不是指针,也不是一个多变的。

    2

    C 编译器的语法扩展

    C 编译器的语法扩展。例如在MCS51系列的KeilC中扩展了sfr关键字,例如:

    这样0x80单元就可以直接写入P0了。

    下面简单介绍一下AVR的C编译器访问MCU寄存器的方法。

    答:标准 C 类型转换和指针用于访问 MCU 的寄存器。每个 C 编译器都支持它。原因很简单。这是标准C。

    B:ICCAVR和GCCAVR没有定义新的数据类型,只能使用标准的C cast类型转换和指针访问MCU寄存器。IAR和CodeVisionAVR编译器扩展了ANSI C,都定义了新的数据类型,即C语言可以直接访问MCU的相关寄存器,例如在IAR中:

    这样,PORTB=0xff;等价于 (*(volatile unsigned char *)0x05) = 0xff; 而 0x25 正是设备 ATmega48/88/168 中寄存器 PORTB 的地址。

    GCCAVR 的每个 AVR 设备都没有直接在头文件中定义特殊功能寄存器宏。例如,在iomx8.h文件中c语言实现词法分析器,定义如下:

    在 sfr_defs.h 中可以找到以下两个宏定义:

    本质上与直接强制转换和指针定义相同。

    此外,GCCAVR 中的宏_BV(bit) 经常用于操作I/O 寄存器。avr-libc 建议将此宏用于寄存器位操作。它在文件 sfr_defs.h 中定义如下:

    以下是他的用法示例:

    他相当于“DDRB=0x03;”,写这个的目的是为了提供程序可读性。不用担心它会生成比“DDRB=0x03;”更大的代码,编译器会处理这种事情并最终输出与“DDRB=0x03;”相同的结果。

    产品级MCU菜单框架设计

    程序员生活中的一天,你还想做程序员吗?

    你用什么软件来设计电路?10种免费好用的电路设计软件盘点!

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 单片机的特殊功能寄存器SFR对访问归纳起来的两种方法简介

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论