欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

定时器中断程序

更新时间: 2014-01-05 03:14:22 责任编辑: Author_N1

 

定时器中断程序求助
1、变量tim的作用是什么?
2、两个定时器间的工作机制是怎样的。

/*******************************************************************/
/*                                                          
同时用两个定时器控制蜂鸣器发声,
定时器0控制频率,定时器1控制同个
频率持续的时间,间隔2s依次输出
1,10,50,  100,200,  400,  800,  1k(hz)的方波? (8)
()时间间隔。
设晶振频率为12MHz。
*/
/*********************************************************/
#include<reg52.h>  //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
sbit beep=P2^3;
uchar tt;
uint tim,flag;

void main()     //主函数
{
tim=50000;
beep=0;
TMOD=0x11;//设置定时器0,定时器1为工作方式1
TH0=(65536-tim)/256;
TL0=(65536-tim)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR1=1;
TR0=1;//启动定时器0
while(1);//等待中断产生

}

void timer0() interrupt 1   //定时器0中断
{
TR0=0;    //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失
TH0=(65536-tim)/256;
TL0=(65536-tim)%256;
tt++;
if(flag<40)    //以下几个if分别用来选取不同的频率
if(tt==10)
{
tt=0;
tim=50000;
beep=~beep;
}
if(flag>=40&&flag<80)
{
tt=0;
tim=50000;
beep=~beep;
}
if(flag>=80&&flag<120)
{
tt=0;
tim=10000;
beep=~beep;
}
if(flag>=120&&flag<160)
{
tt=0;
tim=5000;
beep=~beep;
}
if(flag>=160&&flag<200)
{
tt=0;
tim=2500;
beep=~beep;
}
if(flag>=200&&flag<240)
{
tt=0;
tim=1250;
beep=~beep;
}
if(flag>=240&&flag<280)
{
tt=0;
tim=625;
beep=~beep;
}
if(flag>=280&&flag<320)
{
tt=0;
tim=312;
beep=~beep;
}
if(flag>=320&&flag<360)
{
tt=0;
tim=156;
beep=~beep;
}
TR0=1;
}
void timer1() interrupt 3  //定时器1中断用来产生2秒时间定时
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag++;
if(flag==360)
  {
    flag=0;
    tim=50000;
  }
}

--参考方法--
书上不是写的很详细吗?各个参数的功能,定义,甚至定时器的工作机制都说的很明白。说明你看书不认真
--参考方法--
两个问题倒过来回答比较容易理解:

2 两个定时器是各自独立工作的。但在 Timer1 计时 2 秒时,会为 Timer0 改变计时参数,从而缩短了蜂鸣器通断时间,改变了开关频率。

1 tim 变量用来控制 Timer0 的溢出时间,它不断变小,就使蜂鸣器开关频率不断提高。
--参考方法--
1、tim就是一个变量,决定了定时器的TH0和TL0的大小,就是定时器的时间的大小!!
2、TIME1的时间是固定的,是50ms进一次中断!!然后TIME1每进一次中断,标志位flag加1,标志位flag的次数决定了TIME0的时间变化,因为每次进中断后定时器的初始值是要重新赋值的!!
--参考方法--
给个蜂鸣器的例子供大家参考,有源无源通用http://blog.csdn.net/libiaojs/article/details/9496651
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:22
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19913/
本文WWW.DOC100.NET DOC100.NET版权所有。