/*****************************************************************************
文件名称:TimerConvert.h
文件标识:_TIMERCONVERT_H_
摘 要:AVR定时器参数转换通用头文件
当前版本:V1.0
*****************************************************************************/
#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) :
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』