当前位置:首页 > 单片机 > 单片机
[导读]   一、常规方法    AVR单片机的各类教材或编程应用参考资料,对介绍的端口位操作方法不外乎宏定义及整体和某个常量相或、相与来实现某一单个位状态的改变。如:  PORT&=-(1《1);等价于:PORT

  一、常规方法
  
  AVR单片机的各类教材或编程应用参考资料,对介绍的端口位操作方法不外乎宏定义及整体和某个常量相或、相与来实现某一单个位状态的改变。如:

  PORT&=-(1《1);等价于:PORTB&=oxfd;作用是PB1清零而其余位不变。与之类似的还有:

  PORTBl=(1《4);PB4置位,其余位不变。

  PORTB=(k《4);PB4翻转,其余位不变。

  上述方法,无论是常量值参与还是移位操作,用起来总嫌麻烦,不够直观,且具体常量值还需人工推算,易出错。移位操作生成的目标代码偏大,在大量运用时,占用系统内存或flash空间,执行效率低。

  以实际运用效果来看,宏定义比较好。也偏好运用宏定义。C编译器在编译之前会事先进行宏替换,所以,如果宏定义讲究一些技巧,则代码执行效率将得到较大提升,编程时,操作也得心应手。

  常规参考手册或资料,建议用以下宏定义:

  如此宏定义之后,可构成一个头文件,然后加入到新建工程文件中(编译器用ICC的ICC6.31A),但之前需包含相应单片机的头文件,如:MCU为AT-MEGA48,则最先包含iom48V.h之后,再包含此自制头文件,即可在程序中运用:

  此法在运用时,依旧用了移位操作,只是为了方便程序操作,只在小规模程序中运用。

  下面,将充分利用C语言自身的强大位运算能力和指针相结合,构建一个ICC6.31A平台下的位定义头文件,希望能给大家一些启示。

  首先明确几个基本概念:位域、地址绑定,和Volatile限定关键字。

  在ICC6.31A的安装目录中有个in-clude文件夹,里面有大量编译器开发人员已为我们开发好的各类AVR单片机预定头文件,下面是iom48v.h头文件。

  注:每个端口均有PIN、DDR、PORT三个八位寄存器。

  简要概括如下:

  Volatile -词用来规定C编译器不允许对其限定的变量进行优化处理。如:

  这句宏定义要结合iom48v.h头文件来看,在前面有该头文件关于各端口寄存器的定义。上述宏语句中,ox25被强制转化为一个指针常量,实际上,上述宏定义的意义为:PORTB被强制定义在地址ox25上,即定义了一个无符号字符型变量PORTB,且被强制绑定在ox25地址上。其他语句依此类推。

  有了这个概念之后,再来了解一下C语言中位域的定义。标准c语言中,可以定义一个特殊的结构,位域,允许对定义的结构中的单个位进行操作。基本构成如下:

  下面给出的位域定义等的头文件,在自定义位操作头文件中定义了一个位域BYTE_BIT。

  自定义avt_bit.h头文件(节选,以ATMEGA48为例,定义其B口)

  对各端口依同一规律均进行各位的定义即可。

  结合头文件的相关定义,重新对其特定地址进行另外的绑定,结合位域的概念.进而一步步将各寄存器由一个字节分成了可操控的8个位。在上述文件中,仅表述了B端口。另外,Atmega48的端口不完全,只有B、C、D口,没有A口,且D口为8位,C口为6位.B口为7位,若外接晶体,则PB6和PB7不能另作端口运用。所以,端口很不完整,但为了保持位域完整性和一致性,便于理解,将B、C、D三口均作8bit对待。实际操作时,千万注意不要去操作那些实际不存在的位。当然,若感兴趣,大家可改动头文件相关定义,来完善它。

  为验证这个头文件,很快编写了一个测试程序Beep.e,具体如下:

  在电路拓扑中,在ATMEGA48的PBO脚,即(14)脚外接一只三极管(接b极)由三极管去控制一只蜂鸣器。程序很简单。为了更直观,在PORTB口其他不用的引脚上均接了发光二极管,此时,在测试程序中,将端口初始化函数语句改为:

  DDRB=oxff;PORTB=ox00;(或PORTB=oxff;视二极管接法而定),由二极管配合蜂鸣器来观察PBO位是否能单独动作。当然,运用此位定义头文件,可实现单片机任一口的任一位的位操作。

  二、扩展运用
  
  基于上述原理,结合C语言取地址运算符&,不难实现一个通用位定义头文件,来适合所有AVR单片机,只是代码较为复杂。大家不妨自己试试。

  注意一点:以上头文件,是参考ICC6.31A编译器的include文件夹定义的,在使用前,请首先包含系统提供的MCU头文件,并将自定义头文件复制到所建工程中,然后,就可运用自如了。

  就目前使用情况来看,使用AT-MEGA48/16/128的MCU较多,所以即便是定义3个对应的位操作头文件,也是可以的。通用型文件往往体积较大,编制麻烦,可读性差,不适合普通爱好者。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭