RTCC问题:

[复制链接]
5096|7
 楼主| 457878 发表于 2012-3-10 17:59 | 显示全部楼层 |阅读模式
RTC, TE, TI, se, EDA
官方的例子,跑不起来,秒始终不会增加!:L





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

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

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

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

  27. rtccTimeDate rtccTimeDate ,rtccAlrmTimeDate, rtcc_read_TimeDate ;

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

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

  50. RtccWriteTimeDate(&rtccTimeDate,1);                    //write into registers
  51. // RtccSetAlarmRpt(RTCC_RPT_TEN_SEC,1);                        //Set the alarm repeat to every minute
  52. // RtccSetAlarmRptCount(5,1);                            //set alarm repeat count
  53. // RtccWriteAlrmTimeDate(&rtccAlrmTimeDate);            //write the time for alarm into alarm registers
  54. mRtccOn();                                            //enable the rtcc
  55. // mRtccAlrmEnable();                                    //enable the rtcc alarm to wake the device up from deep sleep
  56. mRtccAlrmDisable();
  57. }
  58. void main(void)
  59. {
  60. drv_RTCC_Init();
  61. mRtcc_Clear_Intr_Status_Bit;                //clears the RTCC interrupt status bit
  62. while(1)
  63. {
  64.   while(PIR3bits.RTCCIF==0)                    //wait untill alarm is set
  65.   {
  66.    
  67.    RtccReadTimeDate(&rtcc_read_TimeDate);        //rtcc_read_TimeDate will have latest time
  68.    Nop(); //这里设断点观察rtcc_read_TimeDate,发现秒始终不会增加
  69.    Nop();
  70.   }
  71.   Nop();
  72.   Nop();

  73. }
  74. }
NE5532 发表于 2012-3-11 09:39 | 显示全部楼层
真是官方例子啊,楼主连注释都懒得改啊。人家用的是哪个晶体工作的?晶体起振了没?拿示波器看过没?
Ryanhsiung 发表于 2012-3-11 11:32 | 显示全部楼层
检测硬件电路,若电路没有问题 再仔细看代码
 楼主| 457878 发表于 2012-3-11 12:55 | 显示全部楼层
2# NE5532   我懒?这两天都快累死了...

用的是内部RC:

  1. #pragma config RTCOSC = INTOSCREF //RTCC uses INTRC as clock,这个是内部RC
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需要外挂晶体振荡器的吧?
NE5532 发表于 2012-3-11 14:59 | 显示全部楼层
有可以使用内部RC的RTC,但是楼主要确认。如果手册明确说了可以用内部,除了逐个研究相关的寄存器,没其他办法滴。
 楼主| 457878 发表于 2012-3-13 09:08 | 显示全部楼层
已搞定... 是代码中没有延时!
 楼主| 457878 发表于 2012-3-13 09:10 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

270

主题

885

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部