PIC24 RTCC设置一例

2020-02-08 09:04发布

第一次弄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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
millwood0
1楼-- · 2020-02-08 13:27
 精彩回答 2  元偷偷看……
surf_131
2楼-- · 2020-02-08 17:15
millwood0 发表于 2012-6-6 18:25
the unlock / lock sequence has to be done uninterrupted. one way to do it is to prohibit interrupt u ...

这个芯片的中断结构是不可屏蔽的,共有118个中断向量。似乎C手册里面提到了让某段程序不被低优先级中断打断的方法,没有去看呢。英格利是的手册,新型号都如此,让人很无奈,阅读速度一定会降低下来,特别是要仔细斟酌的部分。
写这个RTCC开关程序段的时候,当然自然地想到了pic18里面把gie关闭的方便。查手册没找到。只好先如此了。未来这个平台不会有太频繁的中断,10mS级别的timer中断和秒级的RTCC中断吧。要干重活的话,还是要去找pic18:2*IIC+2*USRT+RTCC,这么多中断驱动搞在一起,仍然很稳定。现在不过是找款支持5V电源的16位型号试探一下。
millwood0
3楼-- · 2020-02-08 17:17
the interrupt can be prohibited for a user-specified number of cycles.

surf_131
4楼-- · 2020-02-08 19:03
millwood0 发表于 2012-6-6 20:00
the interrupt can be prohibited for a user-specified number of cycles.

呵呵,英格利是不很强,就只能先“泛读”,大体弄个大概,然后再“精读”,做到可以把知识用于编程的程度。
“禁止一定指令周期数内的中断”,这个解释很到位。谢谢!
等等再去找中文版的C30手册看一下。
millwood0
5楼-- · 2020-02-09 00:52
pic24s are some of the best chips made by Microchip, in my view. the pic10/12/16 are quite good for simple tasks but no vectored interrupt makes programming them modularly a difficult task. pic18 should have gotten vectored interrupts and it would have then the ability to compete with avrs.

the remappable pins on pic24s are simply great. the consistency of peripherals also makes coding a breeze.

all in all, it is a good chip.
memory4597
6楼-- · 2020-02-09 04:14
 精彩回答 2  元偷偷看……

一周热门 更多>