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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    部分源代码:
    5 {- }" u: S8 E- x- @# J' B
    ) `1 n* v$ ~8 Z4 T% ^7 }' Z  c$ |" a9 F" Z; c& V8 b" ?
    void ReadIr() interrupt 09 |+ V- s% Y. b% s, d
    {. x, j5 h6 a. e
            uchar j,k;
    ; F7 D. B7 s1 B1 B        uint err;4 a2 Q- z& [0 l9 E* B
    - H5 T, w! I/ A# t+ h" r
            Time=0;
    8 p9 j' B! q# i- f% r                                                 0 y6 e" F9 @- D% e2 }5 {
            delay(700);        //7ms
    ! \; H% N5 f/ E2 P. T        if(IRIN==0)                //确认是否真的接收到正确的信号
    $ X9 Y9 ]+ b  x0 ?* j9 t        {         
    + ~. X" t' b8 @1 V# A( [$ a# H               . q0 H0 X( o. f, Z& r  Y9 ?- v
                    err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号
    0 s$ [( l3 _" Q7 x. ?- w                /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
    # d2 w1 \& t% ~% e1 ?                侯,程序死在这里*/      
    + l) z, D1 }& Y4 [7 X1 |# d/ u  E                while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                 5 G5 R0 ]; q1 b# g1 U4 S: V
                    {                       
    ( U5 B. R! c* N; |' \% {* D, ^, t                        delay(1);
    - b0 w+ ?4 L3 t4 S5 G' {' L9 W, Z                        err--;! d* S. r9 ~; V
                    }# }# N# t. C5 _1 H! [
                    if(IRIN==1)                        //如果正确等到9ms低电平1 w( q( ^' e% |  i. O- e4 M+ D
                    {0 d6 r6 w3 [& I$ E6 r, R
                            err=500;
      |3 C0 s3 F4 Z5 L. R- h                        while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去/ I! X  i1 t. A9 M, ^( s
                            {4 g0 \1 O: s3 g8 e2 B; }, b
                                    delay(1);
    3 @7 R/ W" \: s, {                                err--;, N: M3 W  }* U. B& L# |# v" i( \7 v
                            }& ?" Q. ~6 v9 ~4 b1 a% f
                            for(k=0;k<4;k++)                //共有4组数据
    4 M9 ^1 I2 x& T" K/ W* I: e                        {                              
    " P3 X5 S( a" ~+ o, M6 }% H$ h                                for(j=0;j<8;j++)        //接收一组数据# I8 U5 _$ r1 t) j# ~
                                    {& ?" r$ }4 J0 R& T4 a* Q

    5 t' x0 `/ x6 D- S/ z                                        err=60;                 t: ]! w$ n" K5 x$ h6 Z
                                            while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
      `- u3 P( j3 [' C3 h; j/ m                                        {
    ' P2 a5 l+ P3 d                                                delay(1);1 O! N5 w9 B0 q- D
                                                    err--;" _! R6 o' z0 @, V
                                            }; a; M( ^2 P5 ^# B4 R8 [
                                            err=500;
    , F3 M3 U7 Z( b+ ^  M8 g3 _                                        while((IRIN==1)&&(err>0))         //计算高电平的时间长度。) l4 o. _5 }. G# h, u5 V4 m
                                            {
    4 _& E: s& K2 T% P& i                                                delay(10);         //0.1ms  G9 ]6 d' d. }
                                                    Time++;
    3 t' c( t" f4 y2 F, x0 c; h                                                err--;
    ( H9 r+ B" ~; L; `- V                                                if(Time>30)% }1 y* s* V- O! ]
                                                    {
    1 i3 ^  i7 e& J, z2 d. u$ y8 P                                                        return;         //因为位1信号最长持续时间也只为2.25ms  超过3ms肯定接收失败- y: C+ T6 |2 D' z
                                                    }
    ( x/ [0 g4 V9 Q" N                                        }/ _' h, k! F/ D1 I1 M, y$ F* O
                                            IrValue[k]>>=1;         //k表示第几组数据; C* B- G3 [2 m7 Y& A$ F- f- `
                                            if(Time>=8)                        //如果高电平出现大于565us,那么是1
    0 k. O; q" Q+ O; _" N. `                                        {+ J  Y- h- w  F
                                                    IrValue[k]|=0x80;# k: D& `! @3 D4 ^; }# ?/ T& n) p
                                            }  {+ M, Z: D: w4 \! o& s& \
                                            Time=0;                //用完时间要重新赋值                                                       1 G: R, [/ y3 P  V/ ?& \( Q
                                    }
    ) y7 x% m4 [0 [0 D                        }
    8 Y% I1 I7 ?; `8 p8 B% w4 l8 ?                }7 w, T- C' n7 a
                    if(IrValue[2]!=~IrValue[3])
    , @" b  N0 q+ g                {1 X* E! V" J1 O5 S' h8 \
                            return;% Y" E4 C" ^' ?/ u: x% C
                    }3 l7 t5 L, R( b6 \: n
            }
    2 W; {& ^; c4 N% m1 d" X        keystate=1;                       5 F; s& k& X/ k( m$ O% N5 E7 `
    }
    / N0 z& U9 v. L: `% q* U1 r* H4 R
  • 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-8-24 09:29 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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