查看: 2676|回复: 9

[已解决] 有中断为什么还用查询?(已解决)

[复制链接]

该用户从未签到

5

主题

19

帖子

0

注册会员

Rank: 2

积分
67
最后登录
1970-1-1
发表于 2014-7-6 17:03:23 | 显示全部楼层 |阅读模式
 新手请教一个问题,为什么例程KINETIS512_V2_SC_GPIO里面用了中断开关灯,程序如下
    while(1)
    {
        //Toggle LED, blue and green
        led_toggle();
 
        //Look at status of SW1 on PTA19
        if((GPIOA_PDIR & GPIO_PDIR_PDI(GPIO_PIN(19)))==0) //if pressed...
        {
            GPIOA_PDOR&=~GPIO_PDOR_PDO(GPIO_PIN(28)); //Set PTA28 to 0 (turns on yellow LED)
        }
        else //else if SW1 not pressed...
        {
            GPIOA_PDOR|=GPIO_PDOR_PDO(GPIO_PIN(28)); //Set PTA28 to 1 (turns off yellow LED)
        }
 
        //Look at status of SW2 on PTE26
        if((GPIOE_PDIR & GPIO_PDIR_PDI(GPIO_PIN(26)))==0)  //If pressed...
        {
            GPIOA_PCOR = GPIO_PIN(11); //Set PTA11 to 0 (turns on orange LED)
        }
        else //else if SW2 not pressed...
        {
            GPIOA_PSOR = GPIO_PIN(11); //Set PTA11 to 1 ((turns off orange LED)
        }
 
        delay();
    }
}
 
 
问题是,为什么中断但主程序还用IF来循环?
我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-7-7 10:15:26 | 显示全部楼层

RE:有中断为什么还用查询?

你好,楼主!
这样的设计在实际应用中,肯定是不可取的,但是因为这是例程吗,而且功能也很简单,只要功能实现就可以啊!
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

19

帖子

0

注册会员

Rank: 2

积分
67
最后登录
1970-1-1
 楼主| 发表于 2014-7-7 11:01:18 | 显示全部楼层

回复:有中断为什么还用查询?

很感谢楼主的回复指点,那么请问如果我要用中断实现,在那个例程中,我是不是要把程序加在PTX_ISR那个中断函数里?谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-7-7 13:31:20 | 显示全部楼层

回复:有中断为什么还用查询?

回复第 3 楼 于2014-07-07 11:01:18发表:
很感谢楼主的回复指点,那么请问如果我要用中断实现,在那个例程中,我是不是要把程序加在PTX_ISR那个中断函数里?谢谢!
是的,一般都是这样处理,不然MCU用于查询的时间太久了。
 
回复 支持 反对

使用道具 举报

该用户从未签到

65

主题

204

帖子

0

中级会员

Rank: 3Rank: 3

积分
270
最后登录
1970-1-1
发表于 2014-7-8 10:28:21 | 显示全部楼层

RE:有中断为什么还用查询?

这只是个简单的例程,如果用中断实现,主函数直接while()就行,但是需要考虑抖动的问题。如果没有不考虑抖动问题,主函数里面实现更可靠,保证不会抖动问题引发的错误开关灯。
回复 支持 反对

使用道具 举报

该用户从未签到

65

主题

204

帖子

0

中级会员

Rank: 3Rank: 3

积分
270
最后登录
1970-1-1
发表于 2014-7-8 10:28:56 | 显示全部楼层

RE:有中断为什么还用查询?

这只是个简单的例程,如果用中断实现,主函数直接while()就行,但是需要考虑抖动的问题。如果没有不考虑抖动问题,主函数里面实现更可靠,保证不会抖动问题引发的错误开关灯。
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-7-8 10:44:34 | 显示全部楼层

RE:有中断为什么还用查询?

5楼的网友说的很对!
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

354

帖子

0

高级会员

Rank: 4

积分
693
最后登录
1970-1-1
发表于 2014-7-8 10:50:53 | 显示全部楼层

回复:有中断为什么还用查询?

实现按键功能可以有很多种方法,这个例程这么写即实现了中断法又实现了查询法。(我猜的)
如果你要放中断函数里也可以呀,就找到对应的中断函数在函数里面操作即可。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

802

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1763
最后登录
1970-1-1
发表于 2014-7-9 15:45:29 | 显示全部楼层

RE:有中断为什么还用查询?

中断, 防错, 查询, 在程序里都会做相应设置
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2019-4-1 22:48
  • 签到天数: 302 天

    连续签到: 1 天

    [LV.8]以坛为家I

    87

    主题

    7322

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    4614
    最后登录
    2021-1-25
    发表于 2014-7-18 01:40:48 | 显示全部楼层

    RE:有中断为什么还用查询?

    看看主函数里有没有异常
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 12:02 , Processed in 0.110638 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表