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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    部分源代码:
    5 z5 a- F4 ^; V2 T$ n% f: |5 ?5 `6 w
    . ?' [, }7 L% n! h
    void ReadIr() interrupt 00 s* m8 x0 ]! v. u
    {4 n/ ^8 N2 K, ~* |8 q! W
            uchar j,k;
    - }7 C0 t$ V0 m' M" z$ N        uint err;- q$ U7 C# \" d1 ?3 h9 H
    # O! q. a( e" y- Y% W4 C7 x
            Time=0;% x; x: o6 q: R# d. j" Z7 O* L* o; I6 V
                                                     ! G( g( ]* R- x
            delay(700);        //7ms% ^6 Y2 r: {# j) K" `
            if(IRIN==0)                //确认是否真的接收到正确的信号
    3 v1 f# k  @8 k; V  U        {         
    " k* P& M6 C( s8 ?% }; ]1 Q( e               
    - R3 i% c( J: O$ v/ d, b! g                err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号
    8 K$ D. x6 I% S% ]2 e                /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
    6 c. t  \7 }% [7 Y5 G                侯,程序死在这里*/       - C$ w& }8 b  Y% D; C% E" a% J
                    while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                 
    6 a* I+ f1 q4 V3 {0 h                {                       6 X' p- K3 b- I: X* v8 f% o
                            delay(1);7 y  y2 A' V0 V, w6 Y
                            err--;0 v* w8 E6 s2 S$ _# v9 S3 y
                    }3 I+ r: j  [8 O! l* s
                    if(IRIN==1)                        //如果正确等到9ms低电平
    ( T1 x3 W# k% O% a# @                {
    6 P7 ?" ]3 [; q" s& Z8 e8 \                        err=500;
    ! ?) B+ Q) X; M5 W                        while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去6 N8 U# p1 v. J1 Y
                            {
    2 s5 ]2 w+ K5 _* B+ V) C' a0 X                                delay(1);% g: V* @  b# o0 Y- n
                                    err--;; q' }. O7 p& ?6 P( Q
                            }, Q. T/ c, o  k! l9 B
                            for(k=0;k<4;k++)                //共有4组数据
    # V( ^0 d9 J. b                        {                               ; d1 O( C4 r& D' I3 Z& W
                                    for(j=0;j<8;j++)        //接收一组数据
    ! f- N# u* Z, S4 T                                {
    9 V" G% [2 ?3 G- M0 j2 c- {4 K  E, V' D/ S3 ]% R# x/ F
                                            err=60;               ( J  V% j; z0 Q5 r0 r# g6 w
                                            while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去% Y$ E8 G' [, j6 N+ \; D" x2 Q
                                            {
    & D; q; M! {2 [" c9 G: K                                                delay(1);
    5 \- F8 o- B% m9 x% p% |9 K* u" m                                                err--;
    9 [4 m+ S5 W( V6 R% F# A  h                                        }5 A5 e* {0 o! x3 I
                                            err=500;
    7 j  {: }' J; P$ m# T+ b0 [                                        while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
    ) \! v% m0 d# G4 n                                        {1 S( Y8 [3 g1 ?- Y1 q3 F/ B$ B- E
                                                    delay(10);         //0.1ms
    6 p  [" P! H4 v5 I" M8 J9 n                                                Time++;
    , G# L- l4 U2 E/ j: C/ N, s% M+ {8 c                                                err--;
    / K8 V3 d2 F6 l. E% J                                                if(Time>30)
    / a, r% Y' u9 F& e5 b$ T4 X5 Q                                                {# A" }2 K7 U# n6 x
                                                            return;         //因为位1信号最长持续时间也只为2.25ms  超过3ms肯定接收失败
    , \3 v, T, Y; m  I  T5 Q, T                                                }
    # v8 I, G" C3 w                                        }1 O1 D' [6 W7 m& R/ u. S- e( E
                                            IrValue[k]>>=1;         //k表示第几组数据
    5 y/ z8 `' x" W2 ^: J# R                                        if(Time>=8)                        //如果高电平出现大于565us,那么是15 v  Q# A1 ~5 Q. ^+ Z) O5 G- E2 b% E- l1 N
                                            {& @/ x% s/ V# k* }
                                                    IrValue[k]|=0x80;
    - R; I" X# x2 u4 e) U) {" T                                        }5 x9 V0 A- @6 y+ w# O
                                            Time=0;                //用完时间要重新赋值                                                      
    , d; r  @' w2 g8 H+ ]  k                                }" v  `  L9 |* y0 d
                            }" Z6 J- }! P# E. ?9 D* z4 A7 R
                    }+ s4 H% j3 W9 e8 ^( w. y5 M" p, K
                    if(IrValue[2]!=~IrValue[3])
    6 g7 @. s2 X  f- ?                {
      U( `6 m4 I' m5 E- U                        return;
    7 a# s0 A4 Q- n0 `- O. Z% _                }& h9 `: y- h1 p1 E2 x1 [8 G
            }4 X3 _! t* I0 V
            keystate=1;                       , n. B4 t6 e  i- b6 r( n& _
    }
    ; l$ v8 {7 i# d% c
  • 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-10-8 23:05 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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