打印

PIC18F24J11 RTCC 问题

[复制链接]
6552|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haoz1986|  楼主 | 2012-12-13 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<p18cxxx.h>
#include<p18f24j11.h>
#include<rtcc.h>
#include<pconfig.h>
#include<i2c.h>
#include<delays.h>
#pragma config DEBUG = ON                     //使能后台调试器; RB6 和RB7 专用于在线调试
//#pragma config XINST = ON           //使能指令集扩展和变址寻址模式
#pragma config XINST = OFF                      //禁止指令集扩展和变址寻址模式
#pragma config STVREN = OFF                     //禁止堆栈上溢/ 下溢复位
//#pragma config STVREN = ON
#pragma config WDTEN = OFF                      //禁止WDT (由SWDTEN 位控制)
//#pragma config CP0 = ON             //程序存储器受代码保护
#pragma config CP0 = OFF                        //程序存储器不受代码保护
//#pragma config FCMEN = ON           //使能故障保护时钟监视器
#pragma config FCMEN = OFF                     //禁止故障保护时钟监视器
#pragma config IESO = OFF                      //禁止双速启动
//#pragma config IESO = ON                      //禁止双速启动
#pragma config LPT1OSC = OFF                  //Timer1 振荡器配置为高功耗工作
#pragma config T1DIG = ON                 //无论T1OSCEN(T1CON<3>)的状态如何,都可以选择辅助振荡器时钟源(OSCCON<1:0> = 01)
//#pragma config T1DIG = OFF                 //除非T1CON<3> = 1,否则不能选择辅助振荡器时钟源
//#pragma config OSC = INTOSC                       //INTOSC 内部振荡器模块(INTRC/INTOSC), RA6 和RA7 均用作端口引脚
#pragma config OSC = INTOSCO                       //INTOSC 内部振荡器模块(INTRC/INTOSC), RA6 和RA7 均用作端口引脚
#pragma config WDTPS = 32768               //1:32,768
#pragma config RTCOSC = T1OSCREF      //RTCC 使用T1OSC/T1CKI 作为参考时钟
//#pragma config RTCOSC = INTOSCREF
#pragma config DSWDTOSC = T1OSCREF  //DSWDT 使用T1OSC/T1CKI 作为参考时钟
#pragma config DSBOREN = OFF        //在深度休眠模式下禁止BOR
#pragma config DSWDTEN = OFF        //禁止DSWDT
#pragma config IOL1WAY = OFF        //IOLOCK 位(PPSCON<0>)可以根据需要置1 和清零,前提是已经完成解锁序列
#pragma config MSSP7B_EN = MSK7       //使能7 位地址掩码模式
#pragma config WPCFG = OFF            //除非WPEND 和WPFP<5:0> 设置保护配置字页,否则不对配置字页进行擦/ 写保护

//-------------------------------------------------------
//                  RTCC模块写开锁
//-------------------------------------------------------
void RTCCUnlock(void)
{
        _asm movlb 0x0f _endasm        
    _asm movlw 0x55 _endasm
        _asm movwf EECON2,0 _endasm
        _asm movlw 0xAA _endasm
        _asm movwf EECON2,0 _endasm
        _asm bsf RTCCFG,5,1 _endasm

}
//-------------------------------------------------------
//                 设置RTCC初始值子函数
//-------------------------------------------------------
void setRTCCtime(void)
{       
        RTCCFG|=0X03;
        while(RTCCFGbits.RTCSYNC);
        RTCVALL=0X12;  //year 12年
        RTCVALH=0;     //保留位无用
        RTCVALL=0X12;  //day  11日
        RTCVALH=0X12;  //month 12月
        RTCVALL=0X16;  //hour 16时  
        RTCVALH=3;     //weekday 星期二
        RTCVALL=0X00;  //second  0秒
        RTCVALH=0X39;  //minute  39分
}
//-------------------------------------------------------
//                 设置RTCC闹钟值子函数
//-------------------------------------------------------
void setRTCCalarm(void)
{       
          ALRMCFG|=0x03;
            ALRMVALL=0X12;   //year 12年
          ALRMVALH=0;      //保留位无用
          ALRMVALL=0X12;   //day  11日
          ALRMVALH=0X12;   //month 12月
          ALRMVALL=0X16;   //hour 14时  
          ALRMVALH=3;      //weekday 星期五
          ALRMVALL=0X59;   //second  59秒
          ALRMVALH=0X39;   //minute  39分
}
//-------------------------------------------------------
//                RTCC初始化子函数
//-------------------------------------------------------
void RTCC_init(void)
{       
        T1GCON=0x00;           // 禁止TIMER1门控
           //T1GCON=0x80;         // 使能TIMER1门控
        T1CON=0x8f;                       //Timer1使用外部时钟、1:1预分频比、TIMER1振荡器使能、不同步、16位读写、使能TIMER1
    delay_nms(10);
        TCLKCON=0x00;          //ECCP1和ECCP2 均使用Timer3 (捕捉/ 比较)和Timer4 (PWM)

        RTCCFG=0X07;           //RTCC功能禁止、不能写入值寄存器、使能RTCC时钟输出、值指针置为11
        RTCCAL=0X00;                     //RTCC校准寄存器00000000 无调整
  //PADCFG1=0x02;          //RTCC引脚输出秒时钟脉冲   
  //PADCFG1=0x00;          //RTCC引脚输出闹钟时钟脉冲   
    PADCFG1=0x06;          //RTCC引脚输出闹钟时钟脉冲   
        ALRMCFG=0xcf;          //闹钟使能 响铃使能 闹钟间隔为1分钟
    ALRMRPT=0xff;          //闹钟重复计数器位设为 11111111
        RTCCUnlock();                     //根据DATASHEET参考程序写开锁
        RTCCFGbits.RTCEN=1;           //使能RTCC 模块
        setRTCCtime();
        PIE3bits.RTCCIE=1;           //RTCC中断允许
        IPR3bits.RTCCIP=1;      //RTCC中断高优先级
        PIR3bits.RTCCIF=0;      //中断标志位清零
    setRTCCalarm();
          RTCCFGbits.RTCWREN = 0;
}

//-------------------------------------------------------
//                中断子函数
//-------------------------------------------------------
#pragma code InterruptVectorHigh =0x08
void InterruptVectorHigh (void)
{
                _asm
                goto InterruptHandlerHigh                
                _endasm
}
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh (void)
{
        if(PIR3bits.RTCCIF)
      {
                PIR3bits.RTCCIF=0;   
                   EDP_send();
          }

}
void main(void)
{
     OSCCON=0x68;              //内部振荡器频率为4MHZ
        RCON=0x80;          //复位控制寄存器
        INTCON=0xc0;
        RTCC_init();
    I2C_init();
        EDP_init();
        EDP_send();
    while(1);

}

程序只摘了一部分跟RTCC有关系的   现在的问题是  RTCC的不走
请大神帮助  就50分  都给了  
沙发
yewuyi| | 2012-12-14 12:37 | 只看该作者
1、代码就不看了
2、RTCC走不走,可以先查查对应的定时中断是否正确进入了,如果没有进入,先去查中断相关代码,如果进入了则去查计数代码有无正确计算

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝