基於WINAVR + avr studio 4 使用外部晶振時及延時可能遇到的問題( By-炬本)
第一步,使用外部晶振
1. 連線isp下載線
2. 開啟avr fighter
a” 如下介面,在熔絲位那框架,點選“讀取”
(注:上圖是預設的熔絲位)
b.單擊滑鼠,把熔絲位改為下圖(僅是JTAGEN 和CKOPT 為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