单片机编程 ds1302

void DS1302_portinit(void){

DDRB |= BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);        //将时钟短(RTC_CLK)、数据端(RTC_DATA)、片选端(RTC_CS)设置为输出
DS1302_writeD(C_WP|WR,UPROETCT);        //写入写允许命令
DS1302_writeD(C_SEC|WR,CLK_START);        //启动振荡器,DS1302开始工作
DS1302_writeD(C_WP|WR,PROTECT);            //控制命令,WP位为1,不允许写操作

}

为什么 DDRB |= BIT(RTC_CLK) 就叫将时钟设置为输出? 为什么不是 将时钟端口 DDRB3 = 1;来设置时钟端口为输出?

阅读 2.2k
1 个回答

首先,DDRB |= BIT(x)等效于DDRBx=1,都是将DDRB的x位置1。

DDRB |= BIT(RTC_CLK) 也就是 DDRB = DDRB | BIT(RTC_CLK) , 也就是把DDRB的RTC_CLK位设置为1,如果你的RTC_CLK刚好就是3的话也就等效于DDRB3=1了。

你代码里面的 DDRB |= BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS) 也就是把DDRB的第RTC_CLK、RTC_DATA、RTC_CS位都设置成1。

去看一下C语言的位操作吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进