本帖最后由 mxkw0514 于 2021-1-1 19:37 编辑
定时器定时点亮LED灯
本测评报告主要包含以下三个方面:
1、实物展示
2、项目开发
3、测评心得
1、实物展示
收到PIC16F15244Curiosity Nano评估工具包后,发现这款评估工具包有点不一样,主控芯片的封装变成了VQFN,评估版的尺寸少了一半,主要是主控芯片的引脚少了。评估板上的插针引脚连了一排半孔,这种半孔究竟有什么用呢?我有一次打样的PCB有半孔,是有实际用途的,结果价格加了好几倍,难道半孔对生产工艺要求很高吗?PIC16F15244Curiosity Nano评估工具包的实物图如下:
2、项目开发
改项目利用pic16f15244中的Timer1实现每1秒切换一次LED0。pic16f15244有三个定时器,分别为Timer0、Timer1和Timer3,其中Timer0为 8/16-Bit,Timer1为16Bit,Timer3为8Bit,时钟频率最大能达到32MHz,速度应该还算可以的。Timer1的寄存器结构图如下所示:
根据上面这张图,直接利用MCC配置好相关寄存器,就可以添加自己的程序了。这个项目比较简单,主程序main不用写程序。接下来说具体的项目程序
既然是定时器,那就免不了中断。该项目中关于定时器的核心程序如下(具体程序见附件):
void TMR1_ISR(void)
{ PIR1bits.TMR1IF = 0; //清楚定时器中断标志位
TMR1_WriteTimer(timer1ReloadVal);
if(TMR1_InterruptHandler)
{
TMR1_InterruptHandler();
}
}
void TMR1_DefaultInterruptHandler(void)
{
if(LED0_TRIS == 1)
{
LED0_SetDigitalOutput(); // 打开灯LED0
}
else
{
LED0_SetDigitalInput(); // 关闭灯LED0
}
总共分两步就可以看到该定时器的核心函数。按住Ctrl+鼠标左键点击SYSTEM_Initialize()函数,进入该函数所在的文件;按住Ctrl+鼠标左键TMR1_Initialize(),进入该函数所在的文件。定时每隔1S使灯LED0的状态翻转一次,那么这一秒的定时是如何做到的呢?这一段代码如下(对上面核心代码起到解释的作用,MCC自动生成,主要包括定时器的初值和时钟频率的设置):
void TMR1_Initialize(void)
{
T1GCON = 0x00; // T1GE disabled; T1GTM disabled; T1GSPM disabled;
T1GATE = 0x00;
T1CLK = 0x06; // CS MFINTOSC_500kHz;
TMR1H = 0x0B;
TMR1L = 0xDC;
PIR1bits.TMR1IF = 0; // Clear IF flag before enabling the interrupt.
timer1ReloadVal=(uint16_t)((TMR1H << 8) | TMR1L); // Load the TMR value to reload variable
PIE1bits.TMR1IE = 1; // Enabling TMR1 interrupt.
TMR1_SetInterruptHandler(TMR1_DefaultInterruptHandler); // Set Default Interrupt Handler
T1CON = 0x31; // CKPS 1:8; NOT_SYNC synchronize; TMR1ON enabled; T1RD16 disabled;
}
void TMR1_WriteTimer(uint16_t timerVal)
{
if (T1CONbits.NOT_SYNC == 1)
{
T1CONbits.TMR1ON = 0; // Stop the Timer by writing to TMRxON bit
TMR1H = (timerVal >> 8); // Write to the Timer1 register
TMR1L = timerVal;
T1CONbits.TMR1ON = 1; // Start the Timer after writing to the register
}
else // Write to the Timer1 register
{
TMR1H = (timerVal >> 8);
TMR1L = timerVal;
}
}
实验结果如**末尾所示(灯LED0每隔1S钟闪烁一次,与上述既定的功能一致):
3、测评心得
这款PIC16F15244Curiosity Nano评估工具包,我在官网没有找到它的相关的设计文件。总体来说利用MCC配置比较方便,MCC只是一个工具,简化工作量,还是要对底层的嵌入式硬件要熟悉,不然换一款不同公司的单片机后,习惯了MCC后将很难进行下一步工作。PIC单片机是以稳定出名的,听说很多年前广受欢迎,不知道最近几年怎么样了,恕我孤陋寡闻,我还是个单片机的新手。总之,能用最简单的方法,绝不用复杂的方法,低配的8位单片机能实现的功能就不用高配的单片机,这样节省成本。PIC16F15244应该算是中配的单片机吧,这次测试还是比较让人满意。
|
“这种半孔究竟有什么用呢?”—— 根据MicroChip自己的资料解释,这种半孔的目的是方便扩展板的使用,这里所说的扩展板类似于Arduino中的盾(shield)。它的用法是这样:不用焊接,将两排半孔直接卡在下边的扩展板的两排排针之间。不过,说明书也接着又说道,为了稳固,建议还是焊接。