注意事项整理如下:
1) MCU必须的头文件
Atmel Studio 6 (以下简称AS6)中统一用 #include <avr/io.h> 。这点很重要,AS6把atmel
所有的单片机头文件全都集成在一起了,以后不必再去分具体的每种芯片的头文件了
2) 汇编嵌入
在AS6 中,你可以直接使用 asm("xxx") 格式.或者用小写的 sei(); 这个其实是很爽的,
最常用的就是中断控制,使用比较方便。
3) 延时函数
在AS6中,只需要加载一个头文件 #include <util/delay.h>
,就可以使用两个标准的延时函数,分别是 _delay_ms(double __ms) 和 _delay_us(double __us),虽然参数为double型,
但可赋整型值。
注意在调用前在 delay.h 前面定义 #define F_CPU 8000000UL(这里以8000000UL为例,实际系统频率为准),如下图,
这样延时10ms
的函数写为_delay_ms(10),经过试用,只要晶振填写准确,这两个延时函数很准确。
但是不建议修改头文件,而是在项目属性里面去定义这个宏!但是不建议修改头文件,而是在项目属性里面去定义这个宏!但是不建议修改头文件,而是在项目属性里面去定义这个宏!
4) 中断函数
在AS6中,需加载头文件 #include <avr/interrupt.h>,并且函数名为ISR,不可自定义函数名,格式类似下面:
ISR( TIMER0_OVF_vect )
{„}
TIMER0_OVF_vect 含义同 iv_TIMER0_OVF ,是T0溢出中断号。不同型号mcu
的中断向量号的名称不同,A6的中断向量号请从avr/iomXXX.h中查找。
5) EEPROM操作函数
在ICC中加载头文件#include <eeprom.h>后,可以使用如下两个读写函数:
EEPROM_read(addr, var); //读EEPROM中的一个字节
EEPROM_write (addr, var); //向EEPROM中写入一个字节
6) 定义数据在flash区
主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少data区的使用,不至于使data区溢出。
在AS6中,需加载头文件#include <avr/pgmspace.h>,然后用 PROGMEM 。
举例说明:
PROGMEM const unsigned char flash[10]; 在flash区声明一个unsiged char型的数组,成员个数10。
unsigned char a;
a = pgm_read_byte(flash[0]);
把flash [0]值赋给变量a。而a = flash[0]是不会从flash区读数据的,而是读data区的数据。
二维数组: PROGMEM const unsigned char flash[3][10]={„„};
指针数组: PROGMEM const unsigned char* const flash[3]={„„};
来源:CSDN
作者:EmbededDriver
链接:https://blog.csdn.net/u012308586/article/details/104457820