|
发表于 2013-8-6 14:22:03
|
显示全部楼层
本帖最后由 naiqiqnus 于 2013-8-6 14:24 编辑
我是这样操作的
#define sBit(x) _BV(x) // (1<<x)
#define sADD(x,y) x ## y // 字符串合并
#define Ddr1(x,y) sADD(DDR,x)|=sBit(y) // DDRx|=(1<<y);
#define Ddr0(x,y) sADD(DDR,x)&=~sBit(y) // DDRx&=~(1<<y);
#define Port1(x,y) sADD(PORT,x)|=sBit(y) // PORTx|=(1<<y);
#define Port0(x,y) sADD(PORT,x)&=~sBit(y) // PORTx&=~(1<<y);
#define PortFlash(x,y) sADD(PORT,x)^=sBit(y) // PORTx^=(1<<y);
#define DdrFlash(x,y) sADD(DDR,x)^=sBit(y) // PORTx^=(1<<y);
#define PinBit1(x,y) (sADD(PIN,x)&sBit(y)) // (PINx&(1<<y)) 两字节占用
#define PinBit0(x,y) (!PinBit1(x,y)) //
// 这个不常用吧
#define PinPort1(x,y) ((sADD(PIN,x)&y)==y) // PINx & y == y
#define PinPort0(x,y) ((sADD(PIN,x)&y)!=y)
示例:
//端口设置
// SetA
#define SetAport B
#define SetAnum 4
// SetB
#define SetBport B
#define SetBnum 0
// AUX 状态返回
#define AUXport B
#define AUXnum 2
#define TxMode(); { Port0(SetAport,SetAnum);Port0(SetBport,SetBnum); } // 正常模式
#define UtcMode1(); { Port0(SetAport,SetAnum);Port0(SetBport,SetBnum); } // 正常模式
#define UtcMode2(); { Port0(SetAport,SetAnum);Port1(SetBport,SetBnum); } // 主动唤醒,呼叫模式
#define UtcMode3(); { Port1(SetAport,SetAnum);Port0(SetBport,SetBnum); } // 省电,被动唤醒模式
#define UtcMode4(); { Port1(SetAport,SetAnum);Port1(SetBport,SetBnum); } // 配置状态
#define SleepMode(); { Port1(SetAport,SetAnum);Port1(SetBport,SetBnum); } // 配置状态
#define ReveOver(); {while(PinBit0(AUXport,AUXnum));} //发送接收时为低电平
#define TROver(); {while(PinBit0(AUXport,AUXnum));}
#define WaitForOver(x); {_delay_ms(x); while(PinBit0(AUXport,AUXnum));} |
|