打印
[51单片机]

C8051F9x内部SmaRTClock问题

[复制链接]
1750|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huhaomcu|  楼主 | 2013-11-17 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想利用C8051内部的SmaRTClock的闹钟事件,但不知道驱动那里写的不对!还请大家帮我看一下!!
void SysInit( void )
{
FLSCL     = 0x40;                                                                                                       
OSCICN    = 0x8F;
CLKSEL    = 0x00;
PCA0MD    &= ~0x40;                                                                                                // disable WDT
XBR2      = 0x40;                                                                                                        // enable crossbar
}

unsigned char SmaRTClockRead( unsigned char add )
{
        RTC0ADR = (0x90 | add);
        NOP();
        NOP();
        NOP();
        return RTC0DAT;
}

void SmaRTClockWrite( unsigned char add,unsigned char val )
{
        RTC0ADR = (0x10 | add);
        RTC0DAT = val;
}

void SmaRTClockWriteAlarm( unsigned long val )
{
        unsigned char temp;
       
        RTC0ADR = (0x10 | RTC0CN);
        RTC0DAT &= ~RTC0AEN;                                                                                                        //SamRTClock alarm disable
        NOP();
       
        //Write the value to the alarm registers
        RTC0ADR = (0x10 | ALARM0);
       RTC0DAT = val;
        NOP();
        RTC0DAT = (val>>8);
        NOP();
        RTC0DAT = (val>>16);
        NOP();
        RTC0DAT = (val>>24);
        NOP();
       
      temp = SmaRTClockRead(RTC0CN);
      RTC0ADR = (0x10 | RTC0CN);
     RTC0DAT = (temp | RTC0AEN | RTC0TR);                                                                                  // SamRTClock alarm enable
}


void SmaRTClockInit( void )
{
        // If the interface is locked
        if(RTC0KEY == 0x00)
  {
                RTC0KEY = 0xA5;                  // Unlock the smaRTClock interface
                RTC0KEY = 0xF1;
        }
       
        #ifdef CRYSTALMODE
        #endif
       
        #ifdef SELFOSC
          SmaRTClockWrite(RTC0PIN, 0xE7);       // Short XTAL3 and XTAL4 together
          SmaRTClockWrite(RTC0XCN, 0x00);       // Configure smaRTClock in

          SmaRTClockWrite(RTC0XCF, 0x80);       // enable Automatic Load Capacitiance
          SmaRTClockWrite(RTC0CN, 0x80);        // Enable smaRTClock oscillator
          SmaRTClockWrite(RTC0CN, 0xC0);   

}

void main( void )
{
        unsigned char temp;
       
        SysInit();
        SmaRTClockInit();
        //SmaRTClockWriteAlarm(0x30d40);
        SmaRTClockWriteAlarm(0x4E20);
        while(1)
        {
                temp = SmaRTClockRead(RTC0CN);
                if( temp & 0x04 )
                {
                        P2_0 = !P2_0;
            temp = SmaRTClockRead(RTC0CN);
            temp &= ~0x08;                                                                        // clear alarm interrupt flag
            SmaRTClockWrite(RTC0CN,temp);
                       
                  temp = SmaRTClockRead(RTC0CN);
            temp |= 0x08;                                                                        // clear alarm interrupt flag
            SmaRTClockWrite(RTC0CN,temp);
                }
        }
}



相关帖子

沙发
hnkf118| | 2015-8-24 22:45 | 只看该作者
还行的把。你什么问题?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

189

主题

508

帖子

3

粉丝