标题:
TimerConvert.h头文件下载-AVR定时器参数转换通用头文件
[打印本页]
作者:
daming
时间:
2014-12-30 12:34
标题:
TimerConvert.h头文件下载-AVR定时器参数转换通用头文件
本帖最后由 daming 于 2014-12-30 12:37 编辑
在代码下方点复制代码,然后另存到电脑磁盘即可下载.
/*****************************************************************************
单 位:广西民族大学物理与电子工程学院07物本班
文件名称:TimerConvert.h
文件标识:_TIMERCONVERT_H_
摘 要:AVR定时器参数转换通用头文件
当前版本: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)使用了条件编译,这个条件编译是基于如下假设:对于具有定时/计
数器3的AVR单片机,定时/计数器2不存在外部输入引脚; 对于没有定时/计数器3的AVR单
单片机,定时/计数器2必存在外部输入引脚。这是一个尚未证明的假设。 ^_^
另外,如果输入的分频系数不对,则强制CSX[2:0]=0,定时/计数器拒绝运行。
*****************************************************************************/
#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)使用了条件编译,这个条件编译是基于如下假设:对于具有定时/计
数器3的AVR单片机,定时/计数器2不存在外部输入引脚; 对于没有定时/计数器3的AVR单
单片机,定时/计数器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)使用了条件编译,这个条件编译是基于如下假设:对于具有定时/计
数器3的AVR单片机,定时/计数器2不存在外部输入引脚; 对于没有定时/计数器3的AVR单
单片机,定时/计数器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.51hei.com/bbs/)
Powered by Discuz! X3.1