本帖最后由 3010203109 于 2013-3-31 14:27 编辑
1、IAR与Dragon连不上先看驱动,插上DRAGON,打开设备管理器,如果其中有AVR DRAGON,说明已经有驱动了,如果没有,右键“更新驱动程序软件”,选择“浏览计算机以查找驱动程序软件”,选择IAR安装目录下的driversdragon,如C:Program FilesIAR SystemsEmbedded Workbench 5.4avrdriversdragon,确定,安装。
装好驱动后,还要设置一下IAR。鼠标右击一个工程,选择OPtiONS,在General Options中选择单片机类型,OK。接下来是重点。 进入Debugger,在Drivers中有许多仿真器可选,注意不要选Dragon,选择JTAGICE mkII,OK。进入JTAGICE mkII>Extra Options,把钩选上,在下面的框中输入“--drv_dragon”(不含引号),OK。
接下来在菜单栏Dragon中选中Fuse Handler,如果能读出熔丝位,恭喜,你的Dragon已经和IAR连上了。
2、如何延时
传统的延时函数
void delay(long t)
{while(t--);}
在IAR中会被优化掉而无法实现延时,但是IAR为我们提供了另一种延时方法
延时头文件定义如下:
#ifndef __IAR_DELAY_H
#define __IAR_DELAY_H
#include
#define F_CPU 11.059200//晶振频率,单位:MHZ。此语句最好定义在c文件开头
#define delay_us(x) __delay_cycles ((unsigned long)(x * F_CPU))
#define delay_ms(x) __delay_cycles ((unsigned long)(x * F_CPU*1000UL))
#define delay_s(x) __delay_cycles ((unsigned long)(x * F_CPU*1000000UL))
#endif
把delay.h文件放入工程文件夹下,c文件开头声明#include"delay.h"
接下来就可以在C文件中直接使用us,ms,s级的延时了。如,延时100ms,就写“delay_ms(100);”,OK。
用这种方式延时应该是相当精确的,我曾用这个延时函数模拟UART通信,成功地实现了通信。
3、如何按位操作
从51转到AVR的人很快会遇到一个烦恼,AVR似乎不能进行位操作了!不用急,来看IAR怎么进行位操作。
对PA0的位操作可以这样写:
PORTA_Bit0=1;
PORTA_Bit0=~PORTA_Bit0 ;
也可以先#define PA0 PORTA_Bit0,就可以写成:
PA0=1;
PA0=~PA0;
暂时这些,以后再有值得分享的总结我会发表在帖子后面的回复中
1