[PIC®/AVR®/dsPIC®产品]

【8月晒板卡】+ 如何开启按键的中断方式和启用定时器?

[复制链接]
1654|9
手机看帖
扫描二维码
随时随地手机跟帖
hu9jj|  楼主 | 2019-10-3 18:03 | 显示全部楼层 |阅读模式
一、如何启用按键的中断方式?
    按键的中断方式比轮询方式更合理高效,我查看了pin_manager.h中对引脚的宏定义,发现可以通过代码来定义中断,但不知道中断处理函数是哪个、在哪个位置?
    这是我写的配置代码,不知道正确否:
int main(void)
{
    /* Initializes MCU, drivers and middleware */
    SYSTEM_Initialize();
   
    /* 开启按键中断 */
    IO_PF6_SetDigitalInput();                  //设置数字输入方式
    IO_PF6_EnableInterruptForLowLevelSensing();//启用低电平感应中断
   

    /* Replace with your application code */
    while (1){
        if(IO_PF6_GetValue()==0){
            DELAY_milliseconds(50);
            if(IO_PF6_GetValue()==0){
                if(direction==1){
                    delays = delays << 1;
                    if(delays > 1000){
                        direction = 0;
                        delays = 800;
                    }
                }
                else{
                    delays = delays >> 1;
                    if(delays < 100){
                        direction = 1;
                        delays = 100;
                    }
                }
            }
        }
        IO_PF5_Toggle();
        DELAY_milliseconds(delays);
    }
}





二、如何启用定时器
    我想启用定时器的功能来控制LED的闪烁,免得使用低效的延时程序,但不清楚如何配置和启用定时器,在数据手册里也没有找到有关定时器的部分,在此请教大家该如何配置和启用定时器。

使用特权

评论回复
hu9jj|  楼主 | 2019-10-3 18:19 | 显示全部楼层
    在pin_manager.c文件中找到了中断处理函数(见下图),但定时器配置和启用仍不知道。
interrupted_03.jpg


使用特权

评论回复
hu9jj|  楼主 | 2019-10-3 18:29 | 显示全部楼层
    按键中断方式测试不成功,也许是还有哪里没有设置好。主函数中的代码如下:
int main(void)
{
    /* Initializes MCU, drivers and middleware */
    SYSTEM_Initialize();
   
    /* 开启按键中断 */
    IO_PF6_SetDigitalInput();                  //设置数字输入方式
    IO_PF6_EnableInterruptForLowLevelSensing();//启用低电平感应中断
   

    /* Replace with your application code */
    while (1){
        if(keys>0){
//        if(IO_PF6_GetValue()==0){
            keyok = 1;                        //锁定按键,此时不接收新按键
            DELAY_milliseconds(50);           //延时防抖
            if(IO_PF6_GetValue()==0){
                if(direction==1){
                    delays = delays << 1;
                    if(delays > 1000){
                        direction = 0;
                        delays = 800;
                    }
                }
                else{
                    delays = delays >> 1;
                    if(delays < 100){
                        direction = 1;
                        delays = 100;
                    }
                }
            }
            keyok = 0;                      //释放按键锁定
        }
        IO_PF5_Toggle();
        DELAY_milliseconds(delays);
    }
}




    中断处理函数中的代码如下:
void PORTF_IO_PF6_DefaultInterruptHandler(void)
{
    // add your PORTF_IO_PF6 interrupt custom code
    if(keyok==0)
        keys++;
    // or set custom function using PORTF_IO_PF6_SetInterruptHandler()
}


使用特权

评论回复
hu9jj|  楼主 | 2019-10-3 18:39 | 显示全部楼层
我启用下降沿中断也没反映。


    IO_PF6_SetDigitalInput();                  //设置数字输入方式
//    IO_PF6_EnableInterruptForLowLevelSensing();//启用低电平感应中断
    IO_PF6_EnableInterruptForFallingEdge();    //启用下降沿中断

使用特权

评论回复
评论
gjiang6789 2019-10-5 21:11 回复TA
晕晕乎乎的 
hu9jj|  楼主 | 2019-10-3 18:40 | 显示全部楼层
启用双边缘中断也无反映。

    /* 开启按键中断 */
//    PORTF_IO_PF6_SetInterruptHandler();        //此函数的参数未知
    IO_PF6_SetDigitalInput();                  //设置数字输入方式
//    IO_PF6_EnableInterruptForLowLevelSensing();//启用低电平感应中断
//    IO_PF6_EnableInterruptForFallingEdge();    //启用下降沿中断
    IO_PF6_EnableInterruptForBothEdges();      //启用双边缘中断

使用特权

评论回复
小卡| | 2019-10-4 12:01 | 显示全部楼层
放到月月送讨论区了

使用特权

评论回复
zhuomuniao110| | 2019-10-5 12:03 | 显示全部楼层
为何我自己写的延时函数看不到效果

使用特权

评论回复
hu9jj|  楼主 | 2019-10-5 18:29 | 显示全部楼层
zhuomuniao110 发表于 2019-10-5 12:03
为何我自己写的延时函数看不到效果

我的也是,三重循环,分别循环20000次都看不到延时效果,与没有延时一样。

使用特权

评论回复
hu9jj|  楼主 | 2019-10-13 12:38 | 显示全部楼层
    通过网上浏览帖子,终于了解到TCA和TAB就是定时器。这也是原来观察不仔细,在MCC中这两个选项之前就是闹钟的图标,我尝试配置TCA,过程很简单,只需要填上要定时的时间就行,定时的时间可在600ns到19.661ms之间,然后在使能溢出中断打勾就行(参见下图)。

TCA_20191013094705.jpg


    不过目前我还未找到中断处理程序的入口。

使用特权

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

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

144

主题

1031

帖子

11

粉丝