avr单片机c语言 右移,AVR单片机位操作的C语言编程实现

AVR单片机位操作的C语言编程实现

电子报/2011年/1月/16日/第015版

智能电子

AVR单片机位操作的C语言编程实现

湖北 曾安君

一、常规方法

AVR单片机的各类教材或编程应用参考资料,对介绍的端口位操作方法不外乎宏定义及整体和某个常量相或、相与来实现某一单个位状态的改变。如:PORT&=~(1<<1);等价于:PORTB&=oxfd;作用是PB1清零而其余位不变。与之类似的还有:

PORTB1=(1<<4);PB4置位,其余位不变。

PORTBA=(1<<4);PB4翻转,其余位不变。

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

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

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

#define PAO 0

#define PAl 1

#define PA2 2

#define PA3 3

#define PA4 4

#deffine PA5 5

#define PA6 6

#define PA7 7

#define CPL_BIT(x、y)(x^=(1

#define SET_BIT(x、y)(xl=(1

#define CLR_BIT(x、y)(x&=~(1

#define GET_BIT(x、y)(x&=(1

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

CPLBIT(PORTA,PA2);//PB2取反

GET_BIT(PORTA,PA6);//读取PA6的状态

CLR_BIT(PORTA,PA5);//清零PA5

SET BIT(PORTA,PAl);//PA1置1

此法在运用时,依旧用了移位操作,只是为了方便程序操作,笔者只在小规模程序中运用。 下面,笔者将充分利用C语言自身的强大位运算能力和指针相结合,构建一个ICC6.31A平台下的位定义头文件,希望能给大家一些启示。

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

在ICC6 31A的安装目录中有个in-elude文件夹,里面有大量编译器开发人员已为我们开发好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值