



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第 页共4页电子报/2011年/I月/16日/第015版智能电子AVR单片机位操作的C语言编程实现湖北曾安君一、常规方法AVR单片机的各类教材或编程应用参考资料,对介绍的端II位操作方法不外乎宏定义及整体和某个常吊湘或、相与來实现某一单个位状态的改变。如:PORT&=(11):等价J:PORTB&=oxfd:作用是PB1清零而其余位不变。与之类似的还有:PORTB1=(14);PB4置位,其余位不变。PORTBA=(14);PB4翻转,其余位不变。上述方法,无论是常屋值参与还是移位操作,用起来总嫌麻烦,不够直观,且具体常崑值还需人工推算,易出错。移位操作生成的目标代码偏人,在人鼠运用时,占用
2、系统内存或flash空间,执行效率低。以笔者实际运用效果來看,宏定义比较好。笔者也偏好运用宏定义。C编译器在编译Z前会事先进行宏替换,所以,如果宏定义讲究一些技巧,则代码执行效率将得到较人提升,编程时,操作也得心应手。常规参考手册或资料,建议用以I、宏定义:#definePAO0#definePAI1#definePA22#definePA33#definePA44#deffinePA55#definePA66#definePA77#defineCPL_BIT(x、y)(xA=(1y)#dcfineSET_BIT(x、y)(xl=(ly)#defineCLR_BIT(x、y)(x&=(lvy)
3、#defineGET_BIT(x、y)(x&=(ly)如此宏定义之后,可构成一个头文件,然后加入到新建工程文件中(编译器用ICC的ICC6.31A),但Z前需包含和应单片机的头文件,如:MCU为AT-MEGA48,则最先包含iom48V.h之后,再包含此自制头文件,即可在程序中运用:CPLBIT(PORTA.PA2);/PB2取反GET_BIT(PORTA.PA6);读取PA6的状态CLR_BIT(PORTA.PA5);清零PA5SETBIT(PORTA.PAl);/PA1置1此法在运用时,依旧用了移位操作,只是为了方便程序操作,笔者只在小规模程序中运用。I、而,笔者将充分利用C语言自身的强人
4、位运算能力和指针相结合,构建一个ICC6.31A平台卜的位定义头文件,希望能给大家一些启示。首先明确几个基本概念:位域、地址绑定,和Volatile限定关键字。在ICC631A的安装目录中有个in-elude文件夹,里而有大屋编译器开发人员已为我们开发好的各类AVR单片机预定头文件,卜面是iom48v.h头文件。AVR的ATMEGA48MCU头文件iom48v.h中关其端II地址定义部分:/*PortB*/#definePINB(*(volatileunsignedchar*)ox23)#defineDDRB(*(volatileunsignedchar*)oxx24)#definePORTB
5、(*(volatileunsignedchar*)ox25)/*PORTC*/#definePINC(*(volatileunsignedchar*)ox26)#defineDDRC(*(volatileunsignedchar*)ox27)#definePORTC(*(volatileunsignedchar*)ox28)/*PortD*/#definePIND(*(volatileunsignedchar*)ox29)#defineDDRD(*(volatileunsignedchar*)ox2A)#definePORTD(*(volatileunsignedchar*)ox2B)注:每个
6、端II均有PIN、DDR、PORT三个八位寄存器简要概括如下:Volatile一词用来规定C编译器不允许对其限定的变堂进行优化处理。如:#definePORTB(*(volatileunSignedchar*)ox25)这句宏定义要结合iom48v.h头文件来看,在前而有该头文件关丁各端II寄存器的定义。上述宏语句中,ox25被强制转化为一个指针常彊,实际上,上述宏定义的意义为:PORTB被强制定义在地址ox25,即定义了一个无符号字符型变量PORTB,且被强制绑定在ox25地址上。其他语句依此类推。有了这个概念之后,再来了解一下C语言中位域的定义。标准C语言中,可以定义一个特殊的结构,位域,
7、允许对定义的结构中的单个位进行操作。基本构成如卜:位域:stnict位域结构名位域列表;)位域类型变量名;卜面是笔者给出的位域定义等的头文件,在自定义位操作头文件中定义了一个位域BYTE_BITo相关详细架构标准请参考C语言规范,在此不再多述,只是希望人家对此有人概了解。自定义avr_bit.h头文件(节选,以ATMEGA48为例,定义其BII)定义位域tyoedefstnictByteBitunsignedBitO:1;unsignedBitl:l;unsignedBit2:l:unsignedBit3:l;unsignedBit4:1;unsignedBit5:l;unsignedBit6
8、:1;unsignedBit7:l;)BYTE.BIT:/BI1宏定义,此值参见相应头文件。#define_PINBox23#define_DDRBox24#definePORTBox25定义B端口每个位,进行地址绑定。#definePINB_BITO(*(voIatileBYTE_BIT*)(_PINB).BTTOPINB.BITlBIT1#dcfincPORTB_BITO(*(volatiIcBYTE_BIT*)(_PORTB)BITOPORTB_BIT1BIT1#defineDDRBBITO(*(volatilcBYTE_BIT*)(_DDRB)BITODDRB_B1T1Bill对各端L
9、I依同一规律均进行各位的定义即可。结合头文件的和关定义,重新对其特定地址进行另外的绑定,结合位域的概念,进而一步步将各寄存器由一个字节分成了可操控的8个位。在上述文件中,笔者仅表述了B端II。另外,Atmega48的端门不完全,只有B、C、DII,没有All,且Dll为8位,CII为6位,BII为7位,若外接晶体,则PB6和PB7不能另作端II运用。所以,端II很不完整,但为了保持位域完整性和一致性,便丁理解,将B、C、D三门均作8bit对待。实际操作时,千万注意不要去操作那些实际不存在的位。当然,若感兴趣,人家可改动头文件相关定义,来完善它。为验证这个头文件,笔者很快编写了一个测试程序Bee
10、p.c,具体如卜:Beep.c程序代码#include#includeavr_bith”包含自定义头文件#definetime40000Voidbeepcunsignedint);Voidporting):Voidmain():while(l)portint();beep(time);1)Voidbeepcunsignedintr)/蜂鸣器发声函数unsignedinti;PORTB_BIT0=0;/PBO输出低电平fori=rjoa.)PORTB_BITO=1;/PBO输出高电平for(i=r;i0;i.)voidportint()端II初始化函数DDRB_BITO=1:/PBO为输出状态P
11、ORTB_BITO=0:/PBO输出“0”1在电路拓扑中,在ATMEGA48的PB0脚,即(14)脚外接一只三极管(接b极)由三极管去控制只蜂鸣器。程序很简单。为了更直观,在PORTBII其他不用的引脚上均接了发光二极管,此时,在测试程序中,将端II初始化函数语句改为:DDRB=oxff:PORTB=oxOO;(或PORTB=oxff:视二极管接法而定),由二极管配合蜂鸣器來观察PBO位是否能单独动作。当然,运用此位定义头文件,可实现单片机任一口的任一位的位操作。二、扩展运用基上述原理,结合C语言取地址运算符&,不难实现一个通用位定义头文件,來适合所有AVR单片机,只是代码较为复杂。大家不妨自己试试。注意一点:以上头文件,笔者是参考ICC6.31A编译器的include文件夹定义的,在使用前,请首先包含系统提供的MCU头文件,并将自定义头文件复制到所建工程中,然后,就可运用自如To就目前使用情况來看,使用AT-MEGA48/16/128的MCU较多,所以即便是定义3个对应的位操作头文件,也是可以的。通用型文件往往体积较人,编制麻烦,可读性差,不适合普通爱好者。在本文中,笔者对J-AVR单片机的位操作端II编程提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修工程合同范本
- 给外地亲友写封信
- 三人合作项目合同书
- 房地产项目买卖合同书
- 电路理论习题(含参考答案)
- 文化产业园马戏表演合同合作协议书范本
- 全面升级:河南电子合同政务门户
- 度建筑废渣承包运输合同细则
- 合同法修订与工程招投标实践
- 战略合作保密合同协议
- 高中数学 66个常考特殊函数图像
- 小学生卫生知识健康教育精课件
- DL∕T 1100.1-2018 电力系统的时间同步系统 第1部分:技术规范
- 管理原理与实务
- 2024年广东省初中学业水平考试中考历史试卷(真题+答案解析)
- 煤矿防治水细则释义详解版(一)
- DZ-T+0155-1995钻孔灌注桩施工规程
- 2024年重庆市中考语文试卷真题B卷(含答案逐题解析)
- 12清贫 公开课一等奖创新教学设计
- 高血压病人护理查房课件
- 长安汽车使用说明书
评论
0/150
提交评论