AVR单片机ICCAVR应用的一些小技巧

2020-02-14来源: eefocus关键字:AVR单片机  ICCAVR  小技巧

1.在汇编里面位造作用SEIPORTA3,把PORTA的第三位置1,

在C里面,可以用&与|表达:

PORTA=PORTA|0x08,简写为PORTA|=(0x08);

PORTA=PORTB&(0xF7)简写为PORTA&=0xF7

以上是对寄存器的某一位操作,当然也可以同时操作几个位,|0x0F,则低四位置1;

在很多地方,如ATMEL的文档里我们会看到像TCCR1A|=(1<

这样的操作,这是怎么回事呢?

首先要知道<<,>>的意思,这是左移,右移操作,(A<<3)是把A的二进制数向左移3位,即乘以2的三次方.

COM1A0是TCCR1A的第6位,这是ATMEL给TCCR1A寄存器第6位取的名字,在ICCAVR编译器的头文件iom16v.h里可以找到这样的定义"#defineOCR1A06",所以TCCR1A|=(1<

而TCCR1A&=~(1<

以上是某一个或几个位置一或清零操作,当然可以直接赋值,例如PORTA=0X0F,则是把低四位置1,高四位清零,这样看起来最简单但是对于我们想要改变某些位而不影响其它位的场合是不行的,例如1602液晶操作E和RS,还有数据等等,有严格的时间顺序,彼此要独立,按4data线统统接到PORTA,则无法用=直接赋值.


2.ICCAVR的macros.h里定义了一些有用的宏,如SEI(),其实是"asm("SEI")",此外还有CLI(),NOP()等等,大家可以去看看,顺便说说,ICCAVR嵌入汇编的格式是asm("汇编指令");

C里面我们把一些宏定义,函数的声明等写到.h头文件,而.c则是函数具体实现,当程序比较大时可以把一般函数和main函数分开,一起ADD到Project里面,便于管理.


3.ICCAVR里面的中断用#pragmainterrupt_handlerINTTERRUPT_NAME:INTERRUPT_NUM,INTERRUPT_NAME是自己取的中断函数名,

INTERRPT_NUM是所选中断的中断号,在DATAsheet里有..在这之后就可以写自己的中断函数体了.


4.在嵌入式的C程序编写里边,尽量少用float,double等等数据类型,可以用整数运算,到最后一步再除以10的多少次方得到所要的数.此外像sin,log这样的高级函数,虽然C编译器自动给你生成,不想汇编那样自己用加减移位来编写,但是对于这样的函数,C编译器会比较大的代码,所以尽量少用.除法运算若被除数是2的次方,可以用移位操作代替.


以上是我个人感觉写C时要注意的问题,希望对初写C的人有一些帮助

关键字:AVR单片机  ICCAVR  小技巧 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488244.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于AVR单片机的125 kHz简易RFID阅读器设计
下一篇:AVR单片机基础知识及其特点

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR单片机实现对步进电机的细分控制及其应用
受负载变化的影响,即给电机某相线圈加一脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变得非常简单。虽然步进电机已被广泛地应用,但步进电机并不像普通的直流电机、交流电机那样在常规下使用。它必须在双环形脉冲信号、功率驱动电路等组成控制系统下使用。仪表步进电机属于步进电机中体积、功耗较小的类别,可以由单片机或专用芯片的引脚直接驱动,不需外接驱动器,因而在仪表中被用于指针的旋转控制。步进电机的细分技术是一种电子阻尼技术,其主要目的是提高电机的运转精度,实现步进电机步距角的高精度细分。其基本概念为:步进电机通过细分驱动器的驱动,其步距角变小了。如驱动器
发表于 2020-02-08
AVR单片机实现对步进电机的细分控制及其应用
AVR单片机熔丝位的配置
(1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态, “Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是 “配置熔丝位成为未编程状态“1”或成为已编程状态“0””。(2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“0”还是为“1”。(3)使用CVAVR中的编程下载程序时应特别注意,由于CVAVR编程下载界面初始打开时,大部分熔丝位的初始状态定义为“1”,因此不要使用其编程菜单选项中的
发表于 2020-02-08
AVR单片机性能简介
什么是AVR单片机?AVR单片机有什么优点?为什么要选择AVR单片机?AVR单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比具有一系列的优点:1:在相同的系统时钟下AVR运行速度最快;2: 芯片内部的Flsah、EEPROM、SRAM容量较大;3:所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP);4:多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作;5:每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强;6:内部资源丰富,一般都集成AD、DA模数器;PWM;SPI、USART、TWI、I2C通信口;丰富的中断源等。目前支持
发表于 2020-02-08
AVR单片机硬件电路设计方法详解
,以便以后升级AVR内的软件。JTAG仿真接口设计仿真接口也是使用双排2*5插座。需要四只10K的上拉电阻。重要说明:实际应用时,如果你不想使用JTAG仿真,并且不想受四只10K的上拉电阻的影响,可以将JP1-JP4断开。电源设计AVR单片机最常用的是5V与3.3V两种电压。本线路以开关切换两种电压,并且以双色二极管指示(5V时为绿灯,3.3V时为红灯)。二极管D1防止用户插错电源极性。D2可以允许用户将电压倒灌入此电路内,不会损坏1117-ADJ。1117-ADJ的特性为1脚会有50uA的电流输出,1-2脚会有1.25V电压。利用这个特点,可以计算出输出电压:当 SW开关打向左边时,R6上的电流为 1.25/0.33
发表于 2020-02-08
AVR单片机硬件电路设计方法详解
AVR单片机主要的特性
AVR的主要特性高可靠性、功能强、高速度、低功耗和低价位 , 一直是衡量单片机性能的重要指标,也是单片机占领市场、赖以生存的必要条件。早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的 CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作
发表于 2020-02-07
AVR单片机学习SPI串行口与DS1302
之间怎样进行互联呢?我们看以采用下面的这种方法。来看下电路图上图的PB5 PB6 PB7是单片机的三个I/O口。 可以看他它的第二功能是SPI功能PB5可以看到MOSI M是主 S 是从 意思就是主机输出 从机输入同理PB6 MISO 是主机输入从机输出也就是AVR的SPI正常工作的时候PB6这个引脚它应该是处于一个输入的状态PB5应该是一个输出的状态。我们就将PB5 与PB6之间串上一个10K的电阻然后再将PB6直接接到I/O上,下面我们可以简单的分析一下原理图是怎样正常工作的,首先这个DS1302对它处于写的状态的时候呢,DS1302的I/O口是处于输入的,而PB6呢也是一个输入口始终是一个输入口。
发表于 2020-02-07
AVR单片机学习SPI串行口与DS1302
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved