IAR使用时报错处理与AVR精确延时

发布者:明石轩最新更新时间:2015-01-15 来源: 51hei关键字:IAR  报错处理  AVR  精确延时 手机看文章 扫描二维码
随时随地手机看文章

一、出现“IAR AVR unknown or ambiguous symbol.main” 

 

project==>options==>linker,format设置成debug。 

IAR下必须进入DEBUG模式才能进行调试,如果不连接开发工具的话,断点也是不行的

二、处于调试状态,但是不能在C语言上单步运行,也不能设置断点

project==>options==>C/C++Compiler,将Generate debug information打上勾。

三、IAR For AVR软件的精确延时

好了,废话不多说,不浪费中断的情况下的精确延时啊~~,当然是软件自带的单周期的空操作了~~,你懂得为什么,比如_nop_();(当然这个家伙是51单片机中用到的c程序,汇编就是nop;喽)

在IAR for AVR中的库函数#include"intrinsics.h"里面有个单周期的延时函数__delay_cycles();(相当于_nop_();),

如果__delay_cycles(100)就是100个mclk的周期延时。

然后就是下面的操作了:

1)建立一个.h文件,用Keilc51这个是必须懂得,我就不多解释了

2)输入代码:

#ifndef __delay_h
#define __delay_h
#include"intrinsics.h"
#define xtal       //这里就是你要使用的晶振的频率(单位NHZ)
#define delay_us(x) __delay_cycles((unsigned  long)(x*xtal))
#define delay_ms(x) __delay_cycles((unsigned  long)(x*xtal*1000))
#define delay_s(x)  __delay_cycles((unsigned  long)(x*xtal*1000000))
#endif

3)就是在你用到延时的函数里面调用#include"Delay.h"(这里是不区分大小写的,哈,不用担心这个)

这就在不浪费中断情况下的软件延时,当然你要非得精确,那非得定时计数器不可了

补充一下:

我用的是IAR for AVR,别的软件什么的似乎也有延时函数,如果没有可以用下面的这个延时(听说也是相当准的,在8MHZ晶振下,不管是外接还是内部晶振,哈都一样):

//------------------------------------------------------------------------------
//延时函数
void  delay_ms(uint k)
{
  uint  i,j;
  for(i=0;i
    for(j=0;j<1140;j++);
}

还有一个:差点忘记(这个不知道是那个哥们想到的,也可以改变晶振的~~~都贴出来,反正没事干):

//------------------------------------------------------------------------------
//延时1ms的函数,没有参数传递
void  delay_1ms()
{
  uint i;
  for(i=1;i<(uint)(xtal*143-2);i++)
    ;
}
//------------------------------------------------------------------------------
//延时nms的函数,有参数传递
void  delay_nms(uint n)
{
  uint i=0;
  while(i
  {
    delay_1ms();
    i++;
  }
}

关键字:IAR  报错处理  AVR  精确延时 引用地址:IAR使用时报错处理与AVR精确延时

上一篇:基于AVR单片机设计的电压电流功率表
下一篇:AVR单片机串口操作程序

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

MSP430F149学习之路——LED
1 #include msp430x14x.h 2 3 void int_clk(); 4 void delay(int i); 5 void main() 6 { 7 WDTCTL = WDTPW + WDTHOLD; 8 int_clk(); 9 P6DIR = 0XFF; 10 P6OUT = 0Xff; 11 while(1) 12 { 13 P6OUT = 0XFF; 14 delay(20000); 15 P6OUT = 0x00; 16 delay(20000); 17 } 18 } 19 20 void int_clk() 21 { 22 BCSCTL1 &= ~X
[单片机]
IAR Systems 宣布支持64位RISC-V内核,扩展其强大的RISC-V 解决方案
IAR Systems 宣布支持64位RISC-V内核,进一步扩展其强大的RISC-V 解决方案 面向选择新兴RISC-V 64位内核的公司,IAR Systems推出高性能且成熟应用的技术,助力其即将开展的开发项目 瑞典乌普萨拉,2022 年 3 月 —— 嵌入式开发软件和服务的全球领导者IAR Systems®日前自豪地宣布: 其专业开发工具链IAR Embedded Workbench® for RISC-V现已支持64位RISC-V内核。 凭借此次在内核支持能力方面的扩展,IAR Systems在为RISC-V提供专业开发解决方案方面继续走在前沿。 IAR Embedded Workbench for R
[嵌入式]
<font color='red'>IAR</font> Systems 宣布支持64位RISC-V内核,扩展其强大的RISC-V 解决方案
利用AVR的输入捕捉进行红外解码
使用AVR的输入捕捉可以对组码进行有效地区分,这里是对红外接收头接收到遥控器的码型进行解码,也可以扩展到其他的应用领域。 关于红外的基本知识参看下面的参考文章。需要说明的是红外的数据端口电源最好加10uf滤波电容,然后数据引脚加上1K限流电阻。 硬件平台:ATMega16-16PU 红外接收头4338 康佳遥控器 编译器: IAR For AVR 代码: /*================START==================*/ #include iom16.h #include intrinsics.h #include comp_a90.h /**************************
[单片机]
AVR_GCC_EEPROM程序
源码如下: #include avr/io.h #include avr/interrupt.h #include avr/eeprom.h int main() { unsigned char val; eeprom_busy_wait(); //等待EEPROM读/写就绪 eeprom_write_byte(0,0xaa); //将0XAA写入到单片机内部EEPROM的0地址处 eeprom_busy_wait(); //等待EEPROM读/写就绪 val=eeprom_read_byte(0); //从单片机内部EEPROM的0地址处读取一字节赋给变量val while(1) { ; //主程序 } }
[单片机]
基于AVR实现USB2.0无线测控网络
   前言   nRf2401是挪威Nordic公司推出的单片2.4GHz无线收发一体芯片,支持多点间通信,最高传输速率达到1Mbit/s,可以用于无线网络中。口传输速率是480Mbps,有即插即用和热插拔功能。接口提供内置电源,可以向外设提供5V和最多500mA的电源。因此在以计算机为上位机的控制系统中,USB口比较适合作为计算机与测控网络的接口。   USB接口器件的开发过程比较复杂,开发者需要知道USB协议、USB设备驱动程序开发、主机应用程序开发等知识,使用USB-UART桥接电路CP2102可以避免上述麻烦。    1系统的设计思想及nRf2401和CP2102介绍   系统的设计思想如图1所示。系统是由 CP
[单片机]
基于<font color='red'>AVR</font>实现USB2.0无线测控网络
STM32 无法使用IAR下载程序问题
一开始建立了工程,然后程序下载都很正常。不知道什么情况自己下载代码之后,再重新下载代码无法成功。 我按照提示找了一下FlashStm32f30x8.flash这个文件,却发现IAR的目录下没并没有。又怀疑是IAR文件丢失。 重新安装IAR,却发现问题仍然继续. ~~~~感觉像是芯片坏了~~~ 于是通过STVP工具,读取一下。 奇迹发生了,竟然可以读取程序。 嗯~~那可以排除芯片的问题。 好吧,那我重新用IAR下载应该可以吧。 于是重新下载程序, 晕~~~居然还是弹出那个错误。 难道自己的程序竟然会引起这样的错误??? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 于是通过STVP将
[单片机]
STM32 无法使用<font color='red'>IAR</font>下载程序问题
AVR128的程序——独立按键控制数码管0~99递增
#include iom128v.h #define uchar unsigned char #define uint unsigned int void Delayus(uint US); void Delayms(uint MS); void display(uchar FirstBit,uchar Num); uchar TempData ; uchar WeiMa = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar led_discode ={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,
[单片机]
数字温度传感器TC77与AVR单片机的接口设计
1 概述 TC77是Microchip公司生产的一款13位串行接口输出的集成数字温度传感器,其温度数据由热传感单元转换得来。TC77内部含有一个13位ADC,温度分辨率为0.062 5℃/LSB。在正常工作条件下,静态电流为250μA(典型值)。其他设备与TC77的通信由SPI串行总线或Microwire兼容接口实现,该总线可用于连接多个TC77,实现多区域温度监控,配置寄存器CONFIG中的SHDN位激活低功耗关断模式,此时电流消耗仅为0.1μA(典型值)。TC77具有体积小巧、低装配成本和易于操作的特点,是系统热管理的理想选择。 2 TC77的内部结构及引脚功能 图1所示为TC77的内部结构原理图。TC77由CMOS结型
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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