工具/软件:Code Composer Studio
您好!
由于 MSP430F67xx MCU 在 RTC 模块中没有计数器模式、因此我尝试实现一个简单的函数来计算 epoch (1970-01-01 00:00:00)之后的秒数。 下面是我使用的公式:
tm_sec + tm_min*60 + tm_hour*3600 + tm_yday *86400 +(tm_your-70)*31536000 +(tm_your-69)/4)*86400 -(tm_your-1)/100)*86400 +(tm_your+299)/400)*86400
如下面所附代码中的示例所示、使用硬编码的年/月/日/小时/分钟/秒、计算出的 MSP430输出的秒数似乎总是小于我在计算器中手动计算的65536或0x00010000。
如果硬编码日历为2016-06-25 20:59:12、则 MSP430计算出的秒数为 1466736416/0x576C9F20、而正确的值应为 1466801952/0x576D9F20
我在这里缺少什么? 如果有任何意见或反馈、我们将不胜感激。
//WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器sysinit (); WDTCTL = WDTPW | WDTSSEL_ACLK | WDTIS_3;//启用看门狗计时器:ACLK、4分钟和16秒 initSystem(); unsigned long seconds = 0; char output[5]、i; 国际年、月、日、小时、分钟、 第二,每日; while (1){ 年=116; 月= 6; 天= 25; 小时= 20; 分钟= 59; 秒= 12; //dayOfYear = getDayOfYear (月、日、RTCYEAR); 每日= 175; 秒数=秒+分钟* 60 +小时* 3600 +每日活动时间* 86400 +(年- 70)* 31536000 +((无符号整型)((年- 69)/4)* 86400 -(无符号整型)(((年- 1)/ 100))* 86400 +((年+ 299)/ 400)* 86400; //秒= calenda2Seconds (月、日、RTCYEAR); output[0]= RTCYEAR >> 8; OUTPUT [1]= RTCYEAR; output[2]=月; output[3]=天; output[4]=小时; output[5]=分钟; OUTPUT [6]=秒; output[7]= dayOfYear >> 8; output[8]= dayOfYear; output[9]=秒>> 24; output[10]=秒>> 16; output[11]=秒>> 8; output[12]=秒; 对于(i = 0;i < 13;i++){ while (!(UCA1IFG&UCTXIFG));// USCI_A0 TX 缓冲器准备就绪? UCA1TXBUF = OUTPUT[i]; } __no_operation(); }