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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    我的目的是这样:在while(1)里,检测开关条件后运行中断1,运行完后,再调用中断2,两个中断设置的参数不一样。比如: , ]) {# A9 M2 V+ G
    % {+ v4 Z4 @# c# X* N3 V7 n$ l
    void main();7 ?* ~0 A( A- Q- F+ w% l
    {- f, S2 I6 Z. |% x! o
       InitTimer0();7 v' G' d; \; Y2 H! C
    ) ]! O6 y4 D, r* q! S
    led==~led;
    1 m- D3 E8 a  h7 m+ z+ J  InitTimer1();6 C7 d' a$ {# a0 J9 T4 d

    " h) F0 Z, o) f8 _8 a& l2 ~! h5 _led1==~led1
    4 I% D, F  ^9 p( q. ^+ ?}
    5 M% q$ f$ M5 r. i% X4 z, b) a9 u. }& D4 p& b
    void time0() interrupt 1
    0 K7 K2 o- }) F& o/ n. `+ P* V{TH0=0XDD;
    3 E' p- }$ A2 R" R% o1 _4 JTL0=0Xa4;, S; x8 P5 r* _) P; Z  I( T+ j
    pp++;3 y1 `3 E  c# O
    }
    & ]5 t. J6 L* M! Q" S+ E
    4 I0 T; ^; j, u5 D3 Z" }void time1() interrupt 1
    / @6 q& |5 b  O& {3 d. p{TH0=0Xff;
    / a% b' y1 ]' c9 H2 A, vTL0=0Xa4;
    2 `- a! E+ q, I: Rpp++;
    0 H2 X' Q  s, W8 H}
    8 a. V. N& V' @, y+ o1 f# k: D: B, \1 I! s( e
    请问以上程序可行吗?
    ) m- t( Z4 D/ u" \4 n( }没有表达清楚,补充一下:我的程序目的是
    / R( p- D. e2 I4 H: X7 ~3 F在程序运行开始,检测控制开关闭合时,定时器1模式为计时开始,
    0 p/ n0 E7 i3 m8 W$ D当扫描到开关再次闭合,计时停止(得到两次开关闭合时间间隔为假设1000周期,再以定时模式,以前面的计时时间的一半即500周期为定时器2时长开始倒计时。
    9 H# ~$ i. |6 L% h# ~7 l当倒计时结束,输出取反;1 W7 y5 Z5 j# \1 Q
    定时器2再以250周期倒计时,倒计时结束时,再次输出取反。0 P7 \/ F/ z# A$ {' @1 @4 F
    这里,定时器2需要两次中断,两次写入不同的时间参数。请问如何实现?3 e2 s( Z4 F9 M! R

    该用户从未签到

    2#
    发表于 2022-5-16 10:12 | 只看该作者
    当然不可行了,中断服务程序是不能调用的,只能靠硬件触发。
    1 R2 g% X2 [6 B  M! a你可以初始化时只开启第一个中断,在第一个中断服务程序里,开启第二个中断,这样还是可以的。
  • 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 | 只看该作者
    中断程序 不是 调用的,是在满足中断条件时 产生中断 后 才执行 中断服务程序的,
    2 X* }& P9 N% w! r6 f这样的 结构 是 不可行的。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-18 07:27 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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