找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5086|回复: 4
打印 上一主题 下一主题
收起左侧

定时器工作时,程序继续向下执行吗?

[复制链接]
跳转到指定楼层
楼主
ID:52780 发表于 2013-8-7 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 godisme 于 2013-8-7 22:07 编辑

LZ小白一个,有个一直困扰了我很久的问题。
定时器在工作的时候,程序是继续向下执行(同时还在定时),还是要等定时器触发了中断,执行完中断操作后,再向下执行程序呢?
举个例子:产生一个周期为20ms,占空比为3:40的方波。
  1. #include<reg52.h>
  2. sbit PWM = P2^5;
  3. //------------------------------------------
  4. void timer_init()
  5. {
  6.          EA = 1;
  7.          TMOD = 0x21;                         //T0定时方式1,T1为8位自动重载定时器;
  8.          TH0 = (65536-20000) / 256;   //20ms
  9.          TL0 = (65536-20000) % 256;
  10.          TL1 = (65536-1500) % 256;   //1.5ms
  11.          ET0 = 1; ET1 = 1;
  12.          TR0 = 1;   
  13. }
  14. //------------------------------------------
  15. void time0() interrupt 1
  16. {
  17.         TH0 = (65536-20000) / 256;   
  18.         TL0 = (65536-20000) % 256;
  19.         TR1 = 1;
  20.         PWM = 1;   
  21. }

  22. void time1() interrupt 3
  23. {
  24.         TR1 = 0;
  25.         PWM = 0;
  26. }
  27. void main()
  28. {
  29.      timer_init();
  30.      while(1);
  31. }
复制代码
只看main()函数。当执行到timer_init()后,
定时器完成了初始化,timer0已经处于定时状态,这时候,程序是一直在等timer0的中断出现后,再执行while(1)呢?还是让timer0继续定时,同时向下执行while(1)??
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2013-8-8 18:25 | 只看该作者
定时器每个机器周期加1,溢出时产生中断信号,程序会跳转到相应的中断入口执行程序(中断入口(向量)处只有不超过8个字节,一般放置一个跳转指令)执行完中断服务程序后会回到中断前的地方继续之前的工作。在响应中断请求之前是不需要cpu干预的。

回复

使用道具 举报

板凳
ID:52771 发表于 2013-8-8 19:10 | 只看该作者
程序会一直等待中断的出现,中断执行完后,跳转到中断之前的地方,等待再次中断
回复

使用道具 举报

地板
ID:52901 发表于 2013-8-10 15:56 | 只看该作者
程序会继续循环。。。等到定时结束执行中断
回复

使用道具 举报

5#
ID:76287 发表于 2015-4-10 09:10 | 只看该作者
虽然不懂,但还是要顶,毕竟每一位老手都是从新手蜕变而来的,赞一个。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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