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

51单片机如何调用两个不同的中断子程序?

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    我的目的是这样:在while(1)里,检测开关条件后运行中断1,运行完后,再调用中断2,两个中断设置的参数不一样。比如:
    ( v* O+ G- z6 D% G% a; [
    6 Y0 f7 `1 K/ \2 @void main();
    . }' A: I( H1 D' E4 `  z{9 h& D" h# S' x1 F+ s
       InitTimer0();
    % p2 h) w( m7 K2 ?
    7 q& z# u4 ^" B* J  fled==~led;2 V7 H9 b9 O" T: O
      InitTimer1();
    9 z7 O: ^* o2 {: z" ]
    6 R8 q1 s2 l8 I  K; b4 J; Wled1==~led1; q. z' \) K0 X  A  o
    }* l+ |" O8 @2 S. @  ]. @$ N) s1 P

    ; W7 Z* I2 d' o. G' lvoid time0() interrupt 1% H: H$ n6 H- y* i
    {TH0=0XDD;   I6 V9 l. o1 C; `( }+ Z& S) }. [, c. j
    TL0=0Xa4;
    & _, ]4 k) P( p9 `pp++;" C3 |$ w5 _6 p& f& K0 g& ?% a, A- d/ k8 [
    }
    $ w1 B: R! n$ }. U/ h
    1 |9 l" C2 y  x3 ?" B8 [void time1() interrupt 1, E' ?+ K1 K% f0 h
    {TH0=0Xff;5 y. ^% Z( A9 S
    TL0=0Xa4;
    - J/ f$ S% b( e( cpp++;2 c; |! m: j/ w. `2 Q
    }
    ' ~2 K* @0 n* H2 q
    ( g1 Z, x" g% Z: j0 C请问以上程序可行吗?* H8 `/ H& r# d% p+ h
    没有表达清楚,补充一下:我的程序目的是
    $ K' d2 y% W  p1 U  P在程序运行开始,检测控制开关闭合时,定时器1模式为计时开始,+ N0 w0 l. y3 F
    当扫描到开关再次闭合,计时停止(得到两次开关闭合时间间隔为假设1000周期,再以定时模式,以前面的计时时间的一半即500周期为定时器2时长开始倒计时。, S+ t2 P, R( N9 Z% h; n5 J$ e
    当倒计时结束,输出取反;
    6 o5 \; x7 C1 a. M" C) b定时器2再以250周期倒计时,倒计时结束时,再次输出取反。
    " W. |- V  T3 D4 ?, R这里,定时器2需要两次中断,两次写入不同的时间参数。请问如何实现?
    2 ]8 T4 [5 i  ]- o9 O

    该用户从未签到

    2#
    发表于 2022-5-16 10:12 | 只看该作者
    当然不可行了,中断服务程序是不能调用的,只能靠硬件触发。
    / v' e& M2 j) K& k3 C* H  L: F% S你可以初始化时只开启第一个中断,在第一个中断服务程序里,开启第二个中断,这样还是可以的。
  • TA的每日心情
    奋斗
    2022-1-21 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2022-5-16 10:30 | 只看该作者
    在单片机里区别是不大。不过在其它处理器上就大了。比如arm,中断会直接改变运行模式,使用不同的寄存器集。单片机区别不大的原因是他只有一个工作模式。 不过,中断最主要的特点是有中断线触发的,而子程序是程序触发的。你不可能知道什么地方转到中断处理。在编程思录上完全是两回事,尽管代码上差不多。
  • TA的每日心情
    开心
    2022-1-29 15:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    4#
    发表于 2022-5-16 10:43 | 只看该作者
    中断程序 不是 调用的,是在满足中断条件时 产生中断 后 才执行 中断服务程序的,
    ! V+ x- s# V8 X4 V% ^' X7 X3 J! V这样的 结构 是 不可行的。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-21 07:41 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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