打印

RTCC问题:

[复制链接]
4434|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
457878|  楼主 | 2012-3-10 17:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RTC, TE, TI, se, EDA
官方的例子,跑不起来,秒始终不会增加!:L



 

#include "p18cxxx.h" //PIC18F26J50
#include <rtcc.h>
#pragma config WDTEN = OFF          //WDT disabled (enabled by SWDTEN bit)
#pragma config PLLDIV = 2           //Divide by 3 (12 MHz oscillator input)
#pragma config STVREN = ON          //stack overflow/underflow reset enabled
#pragma config XINST = OFF          //Extended instruction set disabled
#pragma config CPUDIV = OSC1        //No CPU system clock divide
#pragma config CP0 = OFF            //Program memory is not code-protected
// #pragma config OSC = HSPLL          //HS oscillator, PLL enabled, HSPLL used by USB
#pragma config OSC = INTOSCPLL
#pragma config T1DIG = OFF           //Sec Osc clock source may be selected
#pragma config LPT1OSC = OFF        //high power Timer1 mode

#pragma config FCMEN = OFF          //Fail-Safe Clock Monitor disabled
#pragma config IESO = OFF           //Two-Speed Start-up disabled
#pragma config WDTPS = 32768        //1:32768
#pragma config RTCOSC = INTOSCREF    //RTCC uses INTRC as clock

#pragma config DSBOREN = OFF        //Zero-Power BOR disabled in Deep Sleep
#pragma config DSWDTOSC = INTOSCREF //DSWDT uses INTOSC/INTRC as clock
#pragma config DSWDTEN = OFF        //Disabled
#pragma config DSWDTPS = 2048       //1:8,192 (8.5 seconds)

#pragma config IOL1WAY = OFF        //IOLOCK bit can be set and cleared
#pragma config MSSP7B_EN = MSK7     //7 Bit address masking
#pragma config WPFP = PAGE_0        //Write Protect Program Flash Page 0
#pragma config WPEND = PAGE_0       //Start protection at page 0
#pragma config WPCFG = OFF          //Write/Erase last page protect Disabled
#pragma config WPDIS = OFF          //WPFP[5:0], WPEND, and WPCFG bits ignored

rtccTimeDate rtccTimeDate ,rtccAlrmTimeDate, rtcc_read_TimeDate ;

void drv_RTCC_Init(void)
{
RtccInitClock();                                       //turn on clock source
RtccWrOn();                                            //write enable the rtcc registers
mRtccSetClockOe(1);                                    //enable RTCC output on RTCC output pin
PIE3bits.RTCCIE=1;
//Set Date and time using global structures defined in libraries
rtccTimeDate.f.hour = 1;                                //Set Hour
rtccTimeDate.f.min =  0;                                //Set minute
rtccTimeDate.f.sec =  0;                                //Set second
rtccTimeDate.f.mday = 04;                            //Set day
rtccTimeDate.f.mon =  04;                            //Se month
rtccTimeDate.f.year = 09;                             //set year
rtccTimeDate.f.wday = 6;                              //Set which day of the week for the corrsponding date

//Set the alarm time and date using gloabl structures defined in libraries
rtccAlrmTimeDate.f.hour = rtccTimeDate.f.hour;        //Set Hour
rtccAlrmTimeDate.f.min =  rtccTimeDate.f.min ;        //Set minute
rtccAlrmTimeDate.f.sec =  rtccTimeDate.f.sec + 4;    //alarm after ten seconds
rtccAlrmTimeDate.f.mday = rtccTimeDate.f.mday;        //Set day
rtccAlrmTimeDate.f.wday = rtccTimeDate.f.wday;        //Set which day of the week for the corrsponding date
rtccAlrmTimeDate.f.mon =  rtccTimeDate.f.mon;        //Se month
rtccAlrmTimeDate.f.year = rtccTimeDate.f.year;        //set year

RtccWriteTimeDate(&rtccTimeDate,1);                    //write into registers
// RtccSetAlarmRpt(RTCC_RPT_TEN_SEC,1);                        //Set the alarm repeat to every minute
// RtccSetAlarmRptCount(5,1);                            //set alarm repeat count
// RtccWriteAlrmTimeDate(&rtccAlrmTimeDate);            //write the time for alarm into alarm registers
mRtccOn();                                            //enable the rtcc
// mRtccAlrmEnable();                                    //enable the rtcc alarm to wake the device up from deep sleep
mRtccAlrmDisable();
}
void main(void)
{
drv_RTCC_Init();
mRtcc_Clear_Intr_Status_Bit;                //clears the RTCC interrupt status bit
while(1)
{
  while(PIR3bits.RTCCIF==0)                    //wait untill alarm is set
  {
   
   RtccReadTimeDate(&rtcc_read_TimeDate);        //rtcc_read_TimeDate will have latest time
   Nop(); //这里设断点观察rtcc_read_TimeDate,发现秒始终不会增加
   Nop();
  }
  Nop();
  Nop();

}
}
沙发
NE5532| | 2012-3-11 09:39 | 只看该作者
真是官方例子啊,楼主连注释都懒得改啊。人家用的是哪个晶体工作的?晶体起振了没?拿示波器看过没?

使用特权

评论回复
板凳
Ryanhsiung| | 2012-3-11 11:32 | 只看该作者
检测硬件电路,若电路没有问题 再仔细看代码

使用特权

评论回复
地板
457878|  楼主 | 2012-3-11 12:55 | 只看该作者
2# NE5532   我懒?这两天都快累死了...

用的是内部RC:

#pragma config RTCOSC = INTOSCREF //RTCC uses INTRC as clock,这个是内部RC 

使用特权

评论回复
5
yewuyi| | 2012-3-11 14:25 | 只看该作者
2# NE5532   我懒?这两天都快累死了...

用的是内部RC:

#pragma config RTCOSC = INTOSCREF //RTCC uses INTRC as clock,这个是内部RC
457878 发表于 2012-3-11 12:55


RTCC需要外挂晶体振荡器的吧?

使用特权

评论回复
6
NE5532| | 2012-3-11 14:59 | 只看该作者
有可以使用内部RC的RTC,但是楼主要确认。如果手册明确说了可以用内部,除了逐个研究相关的寄存器,没其他办法滴。

使用特权

评论回复
7
457878|  楼主 | 2012-3-13 09:08 | 只看该作者
已搞定... 是代码中没有延时!

使用特权

评论回复
8
457878|  楼主 | 2012-3-13 09:10 | 只看该作者
:L

使用特权

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

本版积分规则

270

主题

885

帖子

3

粉丝