1. 程式人生 > >基於WINAVR + avr studio 4 使用外部晶振時及延時可能遇到的問題( By-炬本)

基於WINAVR + avr studio 4 使用外部晶振時及延時可能遇到的問題( By-炬本)

第一步,使用外部晶振

1.    連線isp下載線

2.    開啟avr fighter

a” 如下介面,在熔絲位那框架,點選“讀取”  

 

(注:上圖是預設的熔絲位)

b.單擊滑鼠,把熔絲位改為下圖(僅是JTAGENCKOPT 為0),單擊寫入:


這樣就能使用外部晶振啦~

修改過一次下次就不用修改了,但注意這是外部晶振,而不是RC振盪器,還有不要亂改熔絲位,亂改會鎖晶片的。


第二步,使用gcc自帶延時函式及設定avrstudio

例:

#include<util/delay.h>             //宣告

//us級別的延時函式

voidDelayus(unsigned int lus)

{

       while(lus--)

       {

              _delay_loop_2(3);      //_delay_loop_2(1)是延時4個時鐘週期,引數為4則延時16

                         //個時鐘週期,本實驗用12M晶體,則12個時鐘週期為12/12=1us

    }

}

//ms級別的延時函式

voidDelayms(unsigned int lms)

{

       while(lms--)

       {

              Delayus(1000);        //延時1ms

    }

}

Avr studio設定:

在avr studio 選單欄上


單擊ConfigurationOptions


要正確使用它們是有如下條件的:

1. 首先,你要正確定義你的 F_CPU 的值,也就是你的AVR微控制器實際的頻率。否則延時不準,這個就是Frequency的值。

2. 你在編譯時一定要開啟優化,Makefile中OPT 不要選 0 ,如果AVR_studio不要選O0 。要不然就會出現# warning"Compiler optimizations disabled; functions from <util/delay.h>won't work as designed"編譯警告,且延時失準。

====================================================================================================

-00 無優化。
-01 減少程式碼尺寸和執行時間,不進行需要大量編譯時間的優化。
-O2 幾乎執行所有優化,而不考慮程式碼尺寸和執行時間。
-O3 執行-O2所有的優化,以及行內函數,重新命名暫存器的優化。
-OS 針對尺寸的優化。執行所有-O2優化而不增加程式碼尺寸。

====================================================================================================
複選框:
1. 所有char認為是unsined char
2.所有bitfields 認為是unsigned
3.定義結構體時,連續儲存
4.定義列舉型別時,使用最大需要的儲存空間 (3,4兩項真是多餘,不選中肯定出錯)

一般選-OS優化,複選框全選。

2012/7/4