开发者社区> 问答> 正文

单片机编程 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;来设置时钟端口为输出?

展开
收起
杨冬芳 2016-05-30 17:15:18 2284 0
1 条回答
写回答
取消 提交回答
  • IT从业

    首先,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语言的位操作吧

    2019-07-17 19:20:48
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spark SQL 2.0/2.1 Experiences using TPC-DS 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载