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;来设置时钟端口为输出?
首先,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语言的位操作吧
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。