|
发表于 2009-6-24 10:14:36
|
显示全部楼层
下面是ATmega48的,我常用的定义方法,这样不写注释...
#define BIT2(xx, b1,b0) ( (b1<<xx##1)|(b0<<xx##0) )
#define BIT3(xx, b2,b1,b0) ( (b2<<xx##2)|(b1<<xx##1)|(b0<<xx##0) )
//
// TCCR0A
#define COM0A_OFF BIT2(COM0A,0,0)
#define COM0A_COM BIT2(COM0A,0,1)
#define COM0A_CLR BIT2(COM0A,1,0)
#define COM0A_SET BIT2(COM0A,1,1)
//
#define COM0B_OFF BIT2(COM0B,0,0)
#define COM0B_COM BIT2(COM0B,0,1)
#define COM0B_CLR BIT2(COM0B,1,0)
#define COM0B_SET BIT2(COM0B,1,1)
//
#define WGM0_OFF BIT2(WGM0, 0,0)
#define WGM0_SPWM BIT2(WGM0, 0,1)
#define WGM0_CTC BIT2(WGM0, 1,0)
#define WGM0_FPWM BIT2(WGM0, 1,1)
//
// TCCR0B
#define FOC0A_CLR (0<<FOC0A)
#define FOC0B_CLR (0<<FOC0B)
#define FOC0A_SET (1<<FOC0A)
#define FOC0B_SET (1<<FOC0B)
#define CLK0_STOP BIT3(CS0, 0,0,0)
#define CLK0_PRE1 BIT3(CS0, 0,0,1)
#define CLK0_PRE8 BIT3(CS0, 0,1,0)
#define CLK0_PRE64 BIT3(CS0, 0,1,1)
#define CLK0_PRE256 BIT3(CS0, 1,0,0)
#define CLK0_PRE1024 BIT3(CS0, 1,0,1)
#define CLK0_FALL BIT3(CS0, 1,1,0)
#define CLK0_RISE BIT3(CS0, 1,1,1)
=========================================
TCCR0A = COM0A_OFF | COM0B_OFF | WGM0_FPWM;
TCCR0B = FOC0A_CLR | FOC0B_CLR | CLK0_PRE1; |
|