<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        IAR使用時報錯處理與AVR精確延時

        作者:liht1634   來源:轉自liht1634   點擊數:  更新時間:2014年07月28日   【字體:

        一、出現“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++;
          }
        }

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮