找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1814|回复: 3
打印 上一主题 下一主题
收起左侧

MSP430F4152RTC实时时钟不动,求大佬帮忙看看代码哪里出错了

[复制链接]
回帖奖励 40 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:682691 发表于 2020-3-16 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是部分代码:void main(void)
{

  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  rtc();
  RTCSEC =  0x00;                       // Set Seconds
  RTCMIN =  0x58;                       // Set Minutes
  RTCHOUR = 0x08;                       // Set Hours

  // Init date
  RTCDOW =  0x02;                       // Set DOW
  RTCDAY =  0x23;                       // Set Day
  RTCMON =  0x08;                       // Set Month
  RTCYEAR = 0x2005;                     // Set Year

  initlcd();
  p[0]=RTCSEC;    //秒
  p[1]=RTCMIN; //分
  p[2]=RTCHOUR;   //时
  p[3]=RTCDAY;   //日
  p[4]=RTCMON;   //月
  p[5]=RTCYEAR;
  disp(13,p[0],16);//显示秒
    disp(11,p[1],16);//显示分钟
    disp(9,p[2],16);//显示小时
    disp(5,p[3],16);//显示日
    disp(3,p[4],16);//显示月
    disp(1,p[5],16);//显示nian


////////////////////////
void rtc(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop Watchdog Timer

  FLL_CTL0 = XCAP11PF;                  // Configure load caps

  P2SEL = BIT4+BIT5;                         // P2.4,5 = USART0 TXD/RXD
  P5DIR |= BIT1;                        // Set P5.1 to output direction

  // SetupUSCI0:
  UCA0CTL1 = UCSWRST;                   // To set hold the module in reset
  UCA0CTL1 = UCSSEL0;                   // ACLK
  UCA0BR0 = 13;                         // 32k - 2400 baudrate control setting
  UCA0BR1 = 0;
  UCA0MCTL = UCBRS2+UCBRS1;             // Second modulation stage values
  UCA0STAT = UCFE+UCOE+UCPE+UCBRK+UCRXERR;

  // RTC
  RTCCTL = RTCBCD+RTCHOLD+RTCMODE_3+RTCTEV_0+RTCIE;
                                        // RTC enable, BCD mode,
                                        // alarm every Minute,
                                        // enable RTC interrupt
  // Init time
  RTCSEC =  0x00;                       // Set Seconds
  RTCMIN =  0x58;                       // Set Minutes
  RTCHOUR = 0x08;                       // Set Hours

  // Init date
  RTCDOW =  0x02;                       // Set DOW
  RTCDAY =  0x23;                       // Set Day
  RTCMON =  0x08;                       // Set Month
  RTCYEAR = 0x2005;                     // Set Year

  RTCCTL &= ~RTCHOLD;                   // Enable RTC

  while (1)
  {
    //__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
    __no_operation();                   // Required for debugger

    tx_char((RTCHOUR>>4)+0x30);         // Send high nibble of hour
    tx_char((RTCHOUR&0x0F)+0x30);       // Send low nibble of hour
    tx_char(':');                       // Send ':'
    tx_char((RTCMIN>>4)+0x30);          // Send high nibble of minute
    tx_char((RTCMIN&0x0F)+0x30);        // Send low nibble of minute
    tx_char('\n');                      // Send new line
  }
}

void tx_char(char c)
{
  while ((IFG2 & UCA0TXIFG)==0){}       // wait till TXbuf empty
  UCA0TXBUF = c;                        // TX char
}
// Basic Timer interrupt service routine
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer(void)
{
  P5OUT ^= BIT1;                        // Toggle P5.1 using exclusive-OR
  LPM3_EXIT;                            // Exit LPM after interrupt
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:395176 发表于 2020-3-16 14:25 | 只看该作者
你这程序rtc初始化是没问题的,USCI串口我记得配置完要将UCSWRST复位的。
总中断也没开....
最后如果两个模块都不熟悉先一个个来
回复

使用道具 举报

板凳
ID:282850 发表于 2020-3-30 16:43 | 只看该作者
RTCYEAR = 0x2005;                     // Set Year
0x2005不是2005年,是8197年,不知道万年历算法能支持到8000年不
回复

使用道具 举报

地板
ID:282850 发表于 2020-3-31 10:39 | 只看该作者
RTCHOLD是这样说的:The counter can be stopped by setting the RTCHOLD bit.带有HOLD的说法一般是保持、停止。
RTCCTL = RTCBCD+RTCHOLD+RTCMODE_3+RTCTEV_0+RTCIE;这句中不对,RTCHOLD默认rw(1)了。
改成这样试试:
RTCCTL = RTCBCD+RTCMODE_3+RTCTEV_0+RTCIE;
RTCCTL &= ~RTCHOLD;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表