找回密码
 注册
关于网站域名变更的通知
查看: 129|回复: 3
打印 上一主题 下一主题

51单片机红外中断INT0多次进入怎么解决

[复制链接]
  • TA的每日心情
    开心
    2022-1-21 15:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2022-7-19 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    部分源代码:
    # W% n8 l% ?/ q6 T" @5 n$ R' T% \  r8 m
    $ Z' ^, @+ M  l! [& F1 P. j
    void ReadIr() interrupt 0) K% D3 I) W9 q- g4 k
    {
    1 i: _$ T6 d+ u* _        uchar j,k;: L+ Q4 z. Z( o5 b6 I
            uint err;, _1 o# c9 }8 j

    5 T$ g( c+ p* F2 t2 [        Time=0;
    8 F; I0 G  r. I8 A% c. Z8 q9 X  ]                                                 $ J# i9 X9 b" d+ \: c- l* t) [
            delay(700);        //7ms# R* N0 ]3 K0 q6 s5 `
            if(IRIN==0)                //确认是否真的接收到正确的信号
    8 t% q6 `/ e8 l/ q( f; Y4 w        {         8 @' Z. I, B  ]) j7 R
                   
      }) ?) G; e: U& K4 P* k0 g                err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号; v7 j9 A5 B* Y6 Y
                    /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时- x7 s# E& d9 X' t4 b
                    侯,程序死在这里*/       ) J) I% A, e- y: ~4 }) S
                    while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                 + `  U3 ^' W. l4 N9 Y! H# q0 t
                    {                       : N0 |& Y# g/ l6 |# q
                            delay(1);' ^  ^" f  ^5 a1 O1 w* H
                            err--;
    / R5 P' L* @% u5 l7 B6 Z' m                }% X* }) C: |7 d5 `% H5 x2 b
                    if(IRIN==1)                        //如果正确等到9ms低电平/ B$ N# M7 l4 z
                    {* h; G$ S. y( a  z) e
                            err=500;; U& ]9 _/ }! l" i; t# a2 Z1 P5 j
                            while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去# o" t; ~. |. H' f! ^/ j% j
                            {
    % V' F9 V2 I, n" N( ?! v: g                                delay(1);
    " G$ G" R: g4 K                                err--;
    * [; m9 [) C1 T" ?/ l  ^! ?                        }
      P; y4 p: b% Y$ B                        for(k=0;k<4;k++)                //共有4组数据
    4 C& u% c8 Z3 I5 r. A                        {                               ! V7 v- k6 n2 l% J  L
                                    for(j=0;j<8;j++)        //接收一组数据
    * S9 G9 J8 }; b$ K                                {, a5 K5 |6 \0 }  Q9 Q4 j" v
    3 W; ?8 N& y: V, k2 R5 }
                                            err=60;               . G1 h( _1 X- l' n: I6 y
                                            while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去# R# U% m% h9 s0 t% ~
                                            {; D; i' ~9 `, H0 I4 w* E/ m
                                                    delay(1);9 `/ q  B3 g* n' M; ?9 [' c
                                                    err--;
    ' g, M) W3 |) k! \  v: G/ o                                        }8 ?( ^5 V: C% n' A/ z: ^
                                            err=500;
    " {: I$ D0 L. m" }2 @% ~                                        while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
      p6 R4 `2 _5 m/ R                                        {% G6 |6 r: f2 W  }
                                                    delay(10);         //0.1ms' D6 a2 u, e6 c9 @" \9 l7 S, F
                                                    Time++;
    3 H4 s2 ]0 {: {0 g                                                err--;  _8 e$ c: ?& E. G
                                                    if(Time>30)0 y; v* L4 z9 x
                                                    {
    9 Q2 A0 ~/ S; A                                                        return;         //因为位1信号最长持续时间也只为2.25ms  超过3ms肯定接收失败) u$ S6 ^! [7 e! Q6 `  W2 Y
                                                    }
    0 A6 J7 k1 N% o6 O- p                                        }7 Z2 j" T! r# i2 O
                                            IrValue[k]>>=1;         //k表示第几组数据
    5 D+ u" {7 q2 g) n2 ^                                        if(Time>=8)                        //如果高电平出现大于565us,那么是1, m: B8 V) ~$ z1 F
                                            {, g4 z. }6 G+ w( D9 T) v7 X
                                                    IrValue[k]|=0x80;
    7 C: j9 K) v. B, S% H6 Z  v                                        }0 g+ F$ r+ r0 O6 b+ A) U
                                            Time=0;                //用完时间要重新赋值                                                       - ^5 x' Q" L* w6 ~$ O' D3 |
                                    }
    * `3 L5 T& j8 l, c9 Q6 Y. o                        }/ ^. y9 K9 J" C) w- m1 O
                    }8 E6 @* x2 z% S, y. u
                    if(IrValue[2]!=~IrValue[3])
    3 |# L: E6 V% G& Q* v9 v+ [& O                {; y# W* V, Q0 P4 @
                            return;
    ( O5 V' d2 E9 ~/ y" K                }
    * {. l0 I9 d8 P/ E; J5 T' ^& y: C        }
      Z, u% U! A7 P: l: l. _        keystate=1;                       
    6 Z& ?& B; O$ V& h8 j}
    ( N; {, I4 j. l( {/ u+ M, L7 y
  • TA的每日心情
    慵懒
    2022-1-21 15:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-7-19 17:01 | 只看该作者
    可以进中断后,EA=0;禁止中断,中断处理完后开中断,EA=1
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2022-7-19 17:04 | 只看该作者
    应该具体说是按一次红外遥控器的按键 多次进入了这个中断0

    该用户从未签到

    4#
    发表于 2022-7-19 17:15 | 只看该作者
    好像没有清中断标志位
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-9-11 06:25 , Processed in 0.125000 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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