打印
[AVR单片机]

AVR端口操作问题

[复制链接]
1082|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wlc824136|  楼主 | 2017-1-22 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在写程序,用到好几个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 这个宏定义赋值给一个变量,我该怎么处理?


相关帖子

沙发
ayb_ice| | 2017-1-22 11:26 | 只看该作者
传个参数,根据参数操作不同的gpio.不过最好还是通过搜索命令找出各个设备,这样可以只用一个io

使用特权

评论回复
板凳
wlc824136|  楼主 | 2017-1-22 13:24 | 只看该作者
ayb_ice 发表于 2017-1-22 11:26
传个参数,根据参数操作不同的gpio.不过最好还是通过搜索命令找出各个设备,这样可以只用一个io ...

嗯,我是想传个参数,我根据参数选着需要操作的寄存器,这样的话我就可以全部统一使用一个IO口操作语句了。这样做的话,以后遇到其他的一种设备同时使用多个的话,程序应该可以简单点吧。
例如我用IO口操作语句IO_Output_High_Level(Registers,Bit)  我只需要根据参数给Registers和Bit不同的值,现在我就是Registers这边不知道怎么传递,看官方的底文件DDRC宏定义的是一个指针,可我用指针变量也不行。

使用特权

评论回复
地板
ayb_ice| | 2017-1-23 13:23 | 只看该作者
wlc824136 发表于 2017-1-22 13:24
嗯,我是想传个参数,我根据参数选着需要操作的寄存器,这样的话我就可以全部统一使用一个IO口操作语句了 ...

传个123什么的表示不同的io就行了,根据这个参数操作几个宏就可以了

使用特权

评论回复
5
su_mj000| | 2017-1-23 13:57 | 只看该作者
看看USBasp源代码里面对各端口、引脚的宏定义。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

58

帖子

0

粉丝