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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    部分源代码:
    / }' O/ |4 O' V0 l7 m" i% N0 j' C$ h& \$ N% M5 W5 p
    8 ^- ~+ M, c2 T6 s2 D" _
    void ReadIr() interrupt 0: `, J) T  N+ Y  {, e
    {; T* V7 @* Q4 ]- s+ Q. a
            uchar j,k;$ ~# ~+ G! h; `: Z
            uint err;9 M3 y$ _4 t: t) D  f+ |2 f# y/ D" [$ d
    0 b9 N1 m8 J+ I0 F) Q, v
            Time=0;
    5 ]4 [: D4 Z2 E: \0 S8 h+ V% T                                                 ( M" _  K# Y! `
            delay(700);        //7ms* |1 [& ], n" n0 Z+ k! P" z
            if(IRIN==0)                //确认是否真的接收到正确的信号
    5 c  b9 |' x! [' }( |9 N* _        {         * j- T. m& Q, Z" u- |& B7 n
                   " m: B; \% Z3 m# q+ ?0 w2 m
                    err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号
    8 J* ~! T) @  s8 J0 g                /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时( t# h; M4 C# C9 F
                    侯,程序死在这里*/      
    ( i2 |' I; }4 i" V9 ^9 _, ?                while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                 
    % Z2 S# D. F2 j0 ]1 @( Z& @                {                       $ l) q5 s' B8 h" R9 X9 a
                            delay(1);/ x, D4 s6 \+ L; m8 [! x+ `  D  Z8 U3 d
                            err--;
    * s& U9 }2 I" J                }6 \( q* M* {  x7 t
                    if(IRIN==1)                        //如果正确等到9ms低电平. l& K9 B6 i" B+ a, ^
                    {  P' }. a0 R+ T6 e0 ?. h% a
                            err=500;& N' X3 \( k5 D0 _
                            while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去
    1 [0 F3 N4 @, x* ]: q0 h5 f! e! W                        {2 P6 t( o2 N: Y: T3 J6 \9 ?9 C- V
                                    delay(1);7 L* R7 g2 M$ c& @7 B+ C/ E0 U5 q
                                    err--;
    " q) G$ F" o( o% n$ z) r                        }
    " r  {  c+ {5 h1 Q/ E3 d                        for(k=0;k<4;k++)                //共有4组数据
    2 v0 O0 |9 i$ L) `  k" ^" d                        {                              
    0 g$ m5 {$ M) q2 u6 P5 W                                for(j=0;j<8;j++)        //接收一组数据
    . g0 d- t6 a5 f' m7 [$ k& w                                {6 h7 z4 B' N. Q( R; N, ], m
    ' b" X+ T0 ~" J, L9 j, h
                                            err=60;               1 T+ ~* y1 X4 v( i, f
                                            while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
    # O' B2 V4 g9 `! U9 S  b                                        {1 o' n. |6 U1 `$ R
                                                    delay(1);8 X9 A; t8 T# l# S$ N. _: ?
                                                    err--;3 ^" ^' z3 g$ _0 \  A# q
                                            }
    1 Y. t9 `2 l; E: j( ~# B                                        err=500;# ?8 Q0 e2 }% N9 g/ ]
                                            while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
    % H/ ?2 B; X2 I6 W- F                                        {! T1 }/ N5 b$ `, o# `6 @
                                                    delay(10);         //0.1ms; H5 e8 i7 h& V- N" a2 }
                                                    Time++;
    , X( M% i3 I: y! \                                                err--;
    ! k& D3 V' |/ o# g                                                if(Time>30)
    : H$ X2 ^7 o" a' H5 N                                                {
    6 A3 Y( S; S+ x) q( N                                                        return;         //因为位1信号最长持续时间也只为2.25ms  超过3ms肯定接收失败
    & @, V0 W7 |; }( Q3 s                                                }6 g" W# [4 f2 g% N2 V% h
                                            }
    # ?4 d" ]. f/ t- f7 C; I/ d                                        IrValue[k]>>=1;         //k表示第几组数据
    2 Y' A" q2 G1 A, y' J                                        if(Time>=8)                        //如果高电平出现大于565us,那么是1
    7 P6 c4 R( @9 k( [                                        {' u4 J# N. X" I3 ~
                                                    IrValue[k]|=0x80;4 z8 e9 F5 M& Q5 J5 q
                                            }! z- i0 U9 c% ~! B; v! z
                                            Time=0;                //用完时间要重新赋值                                                       ' C6 y) G6 {9 u
                                    }
    3 d. ^& ^* d$ _6 N4 j                        }( J3 Y/ ^2 R" a& N1 _# \0 g9 T
                    }
    ! c$ ]/ w& @  O2 ]5 I  j                if(IrValue[2]!=~IrValue[3])
    ( i; r) `5 \6 v$ F' o9 Y# ?/ E                {
    + ^$ }4 v( o! T+ R: C                        return;
    4 e* n) Z4 \: t" R) x7 b                }& r: d  J& r3 r1 r: [
            }
    : j8 \1 ]0 \3 \        keystate=1;                       
    % {  L3 f' p: v1 a! W, ^}
    . u9 D! W( S6 ~+ Y% I* [: i) j$ K
  • 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-6-8 08:01 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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