最近在写程序,用到好几个DS18B20,本来是每个18B20一个读写函数和采集函数,突然想到为什么不把各个DS18B20的读写函数和采集函数整合在一起,然后用选择采集那个18B20,写了程序想试验一下,
我在自己的文件里定义了IO口操作语句:
#define IO_Output_High_Level(Registers,Bit) (Registers|=(1<<Bit))
#define IO_Output_Low_Level(Registers,Bit) (IO&=~(1<<Bit))
#define Set_IO_Output(Registers,Bit) (Registers|=(1<<Bit))
#define Set_IO_Pull_up_Input(Registers_1,Registers_2,Bit) {Registers_2|=(1<<Bit);Registers_1&=~(1<<Bit);}
#define Set_IO_Hi_Z_Input(Registers_1,Registers_2,Bit) {Registers_2&=~(1<<Bit);Registers_1&=~(1<<Bit);}
#define Read_IO_Level(Registers,Bit) (Registers&(1<<Bit))
DS18B20文件中:
#define DQ_DDR_Registers DDRC
#define DQ_PORT_Registers PORTC
#define DQ_PIN_Registers PINC
#define First_DQ_Registers_Bit PC0
#define Second_DQ_Registers_Bit PC1
然后定义变量Registers_Bit 选着不同的DS18B20,Registers_Bit取对应的宏定义的值,试验了可以运行,
void Choose_DS18B20(unsigned char Sensor_Num)
{
switch(Sensor_Num)
{
case 1:
{DQ_Registers_Bit=First_DQ_Registers_Bit;}break;
case 2:
{DQ_Registers_Bit=Second_DQ_Registers_Bit;}break;
default:{}break;
}
}
后来我在想如果不在同一组端口该怎么弄,然后就卡住了,主要是在DDR PORT PIN这几个寄存器的操作在选择的时候变量赋值上,不知道该如何处理,
比如我想将DQ_PORT_Registers 这个宏定义赋值给一个变量,我该怎么处理?
|