標題:
TimerConvert.h頭文件下載-AVR定時器參數(shù)轉換通用頭文件
[打印本頁]
作者:
daming
時間:
2014-12-30 12:34
標題:
TimerConvert.h頭文件下載-AVR定時器參數(shù)轉換通用頭文件
本帖最后由 daming 于 2014-12-30 12:37 編輯
在代碼下方點復制代碼,然后另存到電腦磁盤即可下載.
/*****************************************************************************
單 位:廣西民族大學物理與電子工程學院07物本班
文件名稱:TimerConvert.h
文件標識:_TIMERCONVERT_H_
摘 要:AVR定時器參數(shù)轉換通用頭文件
當前版本:V1.0
作 者 【白 羽】
完成日期:2010年11月16日
*****************************************************************************/
#ifndef _TIMERCONVERT_H_
#define _TIMERCONVERT_H_
#define WGM0(WGM) (((WGM & 0X01) << 6) | ((WGM & 0X02) << 3))
#define WGM1L(WGM) (WGM & 0X03)
#define WGM1H(WGM) (((WGM) & 0X0C) << 1)
#define WGM2(WGM) (((WGM & 0X01) << 6) | ((WGM & 0X02) << 3))
#define WGM3L(WGM) (WGM & 0X03)
#define WGM3H(WGM) (((WGM) & 0X0C) << 1)
#define COM0(COM) ((COM) << 4)
#define COM1A(COM) ((COM) << 6)
#define COM1B(COM) ((COM) << 4)
#define COM1C(COM) ((COM) << 2)
#define COM2(COM) ((COM) << 4)
#define COM3A(COM) ((COM) << 6)
#define COM3B(COM) ((COM) << 4)
#define COM3C(COM) ((COM) << 2)
/*****************************************************************************
PRESCALE --> CSX[2:0]
說明:CS2(PRESCALE)使用了條件編譯,這個條件編譯是基于如下假設:對于具有定時/計
數(shù)器3的AVR單片機,定時/計數(shù)器2不存在外部輸入引腳; 對于沒有定時/計數(shù)器3的AVR單
單片機,定時/計數(shù)器2必存在外部輸入引腳。這是一個尚未證明的假設。 ^_^
另外,如果輸入的分頻系數(shù)不對,則強制CSX[2:0]=0,定時/計數(shù)器拒絕運行。
*****************************************************************************/
#define CS0(PRESCALE) \
( \
(PRESCALE) == 0 ? 0 : \
(PRESCALE) == 1 ? 1 : \
(PRESCALE) == 8 ? 2 : \
(PRESCALE) == 64 ? 3 : \
(PRESCALE) == 256 ? 4 : \
(PRESCALE) == 1024? 5 : 0 \
)
#define CS1(PRESCALE) \
( \
(PRESCALE) == 0 ? 0 : \
(PRESCALE) == 1 ? 1 : \
(PRESCALE) == 8 ? 2 : \
(PRESCALE) == 64 ? 3 : \
(PRESCALE) == 256 ? 4 : \
(PRESCALE) == 1024? 5 : 0 \
)
#ifndef TCNT3
#define CS2(PRESCALE) \
( \
(PRESCALE) == 0 ? 0 : \
(PRESCALE) == 1 ? 1 : \
(PRESCALE) == 8 ? 2 : \
(PRESCALE) == 64 ? 3 : \
(PRESCALE) == 256 ? 4 : \
(PRESCALE) == 1024? 5 : 0 \
)
#else
#define CS2(PRESCALE) \
( \
(PRESCALE) == 0 ? 0 : \
(PRESCALE) == 1 ? 1 : \
(PRESCALE) == 8 ? 2 : \
(PRESCALE) == 32 ? 3 : \
(PRESCALE) == 64 ? 4 : \
(PRESCALE) == 128 ? 5 : \
(PRESCALE) == 256 ? 6 : \
(PRESCALE) == 1024? 7 : 0 \
)
#endif
#define CS3(PRESCALE) \
( \
(PRESCALE) == 0 ? 0 : \
(PRESCALE) == 1 ? 1 : \
(PRESCALE) == 8 ? 2 : \
(PRESCALE) == 64 ? 3 : \
(PRESCALE) == 256 ? 4 : \
(PRESCALE) == 1024? 5 : 0 \
)
/*****************************************************************************
STEPS --> OCRX
說明:CS2(PRESCALE)使用了條件編譯,這個條件編譯是基于如下假設:對于具有定時/計
數(shù)器3的AVR單片機,定時/計數(shù)器2不存在外部輸入引腳; 對于沒有定時/計數(shù)器3的AVR單
單片機,定時/計數(shù)器2必存在外部輸入引腳。這是一個尚未證明的假設。 ^_^
*****************************************************************************/
#define _OCR0(STEPS) \
( \
(STEPS) <= 256 ? ((STEPS) - 1) : \
(STEPS) <= 256*8 ? ((STEPS)/8 - 1) : \
(STEPS) <= 256*64 ? ((STEPS)/64 - 1) : \
(STEPS) <= 256*256 ? ((STEPS)/256 - 1) : \
(STEPS) <= 256*1024 ? ((STEPS)/1024 - 1) : 255 \
)
#define _OCR1(STEPS) \
( \
(STEPS) <= 65536 ? ((STEPS) - 1) : \
(STEPS) <= 65536*8 ? ((STEPS)/8 - 1) : \
(STEPS) <= 65536*64 ? ((STEPS)/64 - 1) : \
(STEPS) <= 65536*256 ? ((STEPS)/256 - 1) : \
(STEPS) <= 65536*1024 ? ((STEPS)/1024 - 1) : 65535 \
)
#ifndef TCNT3
#define _OCR2(STEPS) \
( \
(STEPS) <= 256 ? ((STEPS) - 1) : \
(STEPS) <= 256*8 ? ((STEPS)/8 - 1) : \
(STEPS) <= 256*64 ? ((STEPS)/64 - 1) : \
(STEPS) <= 256*256 ? ((STEPS)/256 - 1) : \
(STEPS) <= 256*1024 ? ((STEPS)/1024 - 1) : 255 \
)
#else
#define _OCR2(STEPS) \
( \
(STEPS) <= 256 ? ((STEPS) - 1) : \
(STEPS) <= 256*8 ? ((STEPS)/8 - 1) : \
(STEPS) <= 256*32 ? ((STEPS)/32 - 1) : \
(STEPS) <= 256*64 ? ((STEPS)/64 - 1) : \
(STEPS) <= 256*128 ? ((STEPS)/128 - 1) : \
(STEPS) <= 256*256 ? ((STEPS)/256 - 1) : \
(STEPS) <= 256*1024 ? ((STEPS)/1024 - 1) : 255 \
)
#endif
#define _OCR3(STEPS) \
( \
(STEPS) <= 65536 ? ((STEPS) - 1) : \
(STEPS) <= 65536*8 ? ((STEPS)/8 - 1) : \
(STEPS) <= 65536*64 ? ((STEPS)/64 - 1) : \
(STEPS) <= 65536*256 ? ((STEPS)/256 - 1) : \
(STEPS) <= 65536*1024 ? ((STEPS)/1024 - 1) : 65535 \
)
/*****************************************************************************
//STEPS --> CSX[2:0]
說明:CS2(PRESCALE)使用了條件編譯,這個條件編譯是基于如下假設:對于具有定時/計
數(shù)器3的AVR單片機,定時/計數(shù)器2不存在外部輸入引腳; 對于沒有定時/計數(shù)器3的AVR單
單片機,定時/計數(shù)器2必存在外部輸入引腳。這是一個尚未證明的假設。 ^_^
*****************************************************************************/
#define _CS0(STEPS) \
( \
(STEPS) == 0 ? 0 : \
(STEPS) <= 256 ? 1 : \
(STEPS) <= 256*8 ? 2 : \
(STEPS) <= 256*64 ? 3 : \
(STEPS) <= 256*256 ? 4 : 5 \
)
#define _CS1(STEPS) \
( \
(STEPS) == 0 ? 0 : \
(STEPS) <= 65536 ? 1 : \
(STEPS) <= 65536*8 ? 2 : \
(STEPS) <= 65536*64 ? 3 : \
(STEPS) <= 65536*256 ? 4 : 5 \
)
#ifndef TCNT3
#define _CS2(STEPS) \
( \
(STEPS) == 0 ? 0 : \
(STEPS) <= 256 ? 1 : \
(STEPS) <= 256*8 ? 2 : \
(STEPS) <= 256*32 ? 3 : \
(STEPS) <= 256*64 ? 4 : \
(STEPS) <= 256*128 ? 5 : \
(STEPS) <= 256*256 ? 6 : 7 \
)
#else
#define _CS2(STEPS) \
( \
(STEPS) == 0 ? 0 : \
(STEPS) <= 256 ? 1 : \
(STEPS) <= 256*8 ? 2 : \
(STEPS) <= 256*64 ? 3 : \
(STEPS) <= 256*256 ? 4 : 5 \
)
#endif
#define _CS3(STEPS) \
( \
(STEPS) == 0 ? 0 : \
(STEPS) <= 65536 ? 1 : \
(STEPS) <= 65536*8 ? 2 : \
(STEPS) <= 65536*64 ? 3 : \
(STEPS) <= 65536*256 ? 4 : 5 \
)
#endif
復制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1