ICCAVR与CodeVisionAVR

发布者:SereneDreams最新更新时间:2016-10-18 来源: eefocus关键字:ICCAVR  CodeVisionAVR 手机看文章 扫描二维码
随时随地手机看文章
1. 中断的用法

ICCAVR
#pragma interrupt_handler :
       如果想要多个中断入口使用同一个中断服务程序,只要用不同的向量号多次声明就可以了,例如,计划定时器1和0溢出共用time_ovf中断函数,可以定义如下:
#pragma interrupt_handler time_ovf:7 time_ovf:8

CodeVisionAVR
       中断的用法:
       interrupt[interrupt_vetor_number] function_name
       如:
interrupt [TIM1_OVF] void timer1_overflow(void)

2. 头文件
ICCAVR
       在macros.h中,定义了一个“#define BIT(x) (1<<(x))”的宏,用该宏来操作位变量,编译后生成的代码质量更高。如下例:
#define PORTA0 0
#define PORTA1 1
#define PORTA2 2
#define PORTA3 3
#define PORTA4 4
#define PORTA5 5
#define PORTA6 6
#define PORTA7 7
       在使用时,应该在文件头加入“#include ”定义,如要将PORTA7清零,可能使用如下语句:
PORTA&=~BIT(PORTA7)
       要装饰PORTA7置位,可以使用如下语句:
PORTA|=BIT(PORTA7)

3. 对寄存器变量的访问
CodeVisionAVR
       定义了新的数据类型“sfrb”和“sfrw”,使C语言可以直接访问MCU的有关寄存器。如:
sfrb DDRD=x011

ICCAVR
       没有定义类似的数据类型,而是采用强制类型转换和指针的概念来实现访问MCU的寄存器,如:
#define DDRD (*(volatile unsigned char *)0x31) //加上了0x20
       则在ICCAVR中访问:
DDRD=0xff;

4. 使用AVR片内不同的存储空间
       由于AVR单片机内部有三种类型的存储空间(ARM、EEPROM和FLASH),CodeVisionAVR和ICCAVR均对语法进行的扩充。
       对字符串的处理两者相同,即对于用户没有指定只能保存在Flash中的字符串,在启动时将字符从程序存储区复制到数据存储区。
ICCAVR
       对const类型进行的扩充,编译器会自将const类型数据分配进FLASH存储中,对片内EEPROM存贮器的访问,ICCAVR只能通过调用头文件eeprom.h中的函数EEPROM进行。ICCAVR不支持将全局变量或局部变量分配至EEPROM,通常只将常量分配至有EEPROM中,一般定义如下:
#program data:eeprom/flash
const unsigned char table[]={0x3f,0x06...,};
#program data:data

CodeVisionAVR
       扩充了flash和eeprom两个关键词,使用flash将const定义的常量分配进Flash存器,以节省RAM的使用。而eeprom关键词限定的变量则被分配进片内EEPROM中,在C语言中访问EEPROM中变量的方法与访问RAM中变量的方法完全相同,包括指针形式的访问。   
       注意:在CVAVR中,有两种存储模式“TINY”和“SMALL”,其中“TINY”模式使用1个字节(8位)的指针,因此只能访问不大于256字节的存储空间;“SMALL”模式使用2个字节的指针,可以访问不大于64K字节的存储空间。当使用外部数据存储器时,必须使用“SMALL”,如果没有使用外部数据存储器,应优先使用“TINY”模式。
       CVAVR指向字符串的指针数组至多只支持8个元素,注意,是指向字符串的指针数组,普通数组则没有这个限制。
       如:
char flash *string[8]={"a","b","c","d","e","f","g","h"};

5. 位变量
CodeVisionAVR
       可以直接定义位变量
bit on_off=1;
ICCAVR
       在ICCAVR 6.26C中,不能直接定义位变量,但是可以使用C语言中的结构体定义位变量,如下例:
struct data //存放于SRAM中
       {
              unsigned bit0:1;
              unsigned bit1:1;
              unsigned bit2:1;
              unsigned bit3:1;
              unsigned bit4:1;
              unsigned bit5:1;
              unsigned bit6:1;
              unsigned bit7:1;
       }
       上例中,成员列表的位域的类型必须用unsigned或signed定义关键字。a、b均占用一个字节的存储空间。定义之后就可以直接使用位变量了,如:
a.bit1=0;
a.bit7=1;
if(a.bit5==1)

关键字:ICCAVR  CodeVisionAVR 引用地址:ICCAVR与CodeVisionAVR

上一篇:基于AVR单片机的SPI接口的25C256
下一篇:AVR USART串口程序

推荐阅读最新更新时间:2024-03-16 15:16

ICCAVR编译报错 !E (197): area 'bss' not large enough
错误信息如下: !E library (197): area 'bss' not large enough want size 384 lo 910 hi 1119 size 210 错误分析:bss段是编译器存放全局数组和局部静态数组的地方。如果我们在编写程序时声明了过大的数组、或局部静态数组,就有可能看到这个提示。 解决方法:如果某些数组是常量,我们就可以增加const关键字,将其放到空间相对宽裕的FLASH中(例如段码表、字模等)。对于其他情况,就只有简化程序或者外扩SRAM存储器了。
[单片机]
CodeVisionAVR中的一个配置
CodeVisionAVR中的一个配置 (2010-06-22 14:41:23) 标签: 杂谈 分类: AVR单片机 下面是一段简单的程序: char a0; signed char a1; signed int a2; signed long a3; LCD_CLS(); a0 = -16; a0 = 2; LCD_DispHex(8,0,a0,0,0); a0 = 16; a0 = 2; LCD_DispHex(64,0,a0,0,0); a1 = -16; a1 = 2; LCD_DispHex
[单片机]
ICCAVR编译器的介绍
ICCAVR是一种符合ANSI标准的C语言来开发MCU程序的一个工具,它具有作用合适、使用方便、技术支持强大等优点。ICCAVR就是ATMEL公司为AT90系列单片机开发我编译工具。 ICCAVR 介  1 ImageCraft 的ICCAVR 介绍   ImageCraft 的ICCAVR 是一种使用符合 ANSI 标准的 C 语言来开发微控制器 MCU程序的一个工具 它有以下几个主要特点:   ICCAVR 是一个综合了编辑器和工程管理器的集成工作环境 IDE 其可在WINDOWS9X/NT 下工作。   源文件全部被组织到工程之中 文件的编辑和工程的构筑也在这个环境中完成 编译错误显示在状态窗口中 并且当你用鼠标单击编译
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved