第一次弄16位pic24的RTCC.中断驱动,led周期1秒。插入的汇编部分是规定的RTCWREN修改程序。
#include <p24FV32KA302.h>
//******************主程序************************
int main(void)
{
unsigned char i,j;
//***************系统初始化部分*********************
TRISBbits.TRISB6=0; //两口均为测试灯
TRISBbits.TRISB5=0;
LATBbits.LATB6=1;
LATBbits.LATB5=1;
//************RTCC settings****************************
IEC3bits.RTCIE=1; //RTCC interrupt enabled
//Open RTCC
asm volatile ("push w7");
asm volatile ("push w8");
asm volatile ("disi #5");
asm volatile ("mov #0x55, w7");
asm volatile ("mov w7, _NVMKEY");
asm volatile ("mov #0xAA, w8");
asm volatile ("mov w8, _NVMKEY");
asm volatile ("bset _RCFGCAL, #13"); //set the RTCWREN bit
asm volatile ("bset _RCFGCAL, #15"); //set the RTCEN bit
asm volatile ("pop w8");
asm volatile ("pop w7");
RTCPWC=0x0100;
ALCFGRPT=0xc300; //半秒中断一次,LED每秒明暗变化一次
//****************主循环***************************
while(1)
{ // The ever versatile Infinite Loop!
for (i=0;i<200;i++)
for (j=0;j<200;j++);
//LATBbits.LATB5^=1;
} //end of mainloop
} //end of main()
//*******************interrupt***************************
void __attribute__((__interrupt__, __shadow__)) _RTCCInterrupt(void)
{
IFS3bits.RTCIF=0; //Clear the flag
LATBbits.LATB6^=1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个芯片的中断结构是不可屏蔽的,共有118个中断向量。似乎C手册里面提到了让某段程序不被低优先级中断打断的方法,没有去看呢。英格利是的手册,新型号都如此,让人很无奈,阅读速度一定会降低下来,特别是要仔细斟酌的部分。
写这个RTCC开关程序段的时候,当然自然地想到了pic18里面把gie关闭的方便。查手册没找到。只好先如此了。未来这个平台不会有太频繁的中断,10mS级别的timer中断和秒级的RTCC中断吧。要干重活的话,还是要去找pic18:2*IIC+2*USRT+RTCC,这么多中断驱动搞在一起,仍然很稳定。现在不过是找款支持5V电源的16位型号试探一下。
一周热门 更多>