求助单片机定时器的应用,程序中tt有什么作用?为什么开始的时候要判断等于10?过程为什么要置零?

2019-07-15 13:14发布

#include<reg52.h>  //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
sbit beep=P2^3;
uchar tt;
uint fre,flag;

void main()                    //主函数
{
        fre=50000;
        beep=0;
        TMOD=0x11;//设置定时器0,定时器1为工作方式1
        TH0=(65536-fre)/256;
        TL0=(65536-fre)%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-fre)/256;
        TL0=(65536-fre)%256;
        tt++;
        if(flag<40)    //以下几个if分别用来选取不同的频率
                if(tt==10)
                        {
                                tt=0;
                                fre=50000;
                                beep=~beep;
                        }
        if(flag>=40&&flag<80)
                {
                        tt=0;
                        fre=50000;
                        beep=~beep;       
                }
        if(flag>=80&&flag<120)
                {
                        tt=0;
                        fre=10000;
                        beep=~beep;       
                }
        if(flag>=120&&flag<160)
                {
                        tt=0;
                        fre=5000;
                        beep=~beep;       
                }
        if(flag>=160&&flag<200)
                {
                        tt=0;
                        fre=2500;
                        beep=~beep;       
                }
        if(flag>=200&&flag<240)
                {
                        tt=0;
                        fre=1250;
                        beep=~beep;       
                }
        if(flag>=240&&flag<280)
                {
                        tt=0;
                        fre=625;
                        beep=~beep;       
                }
        if(flag>=280&&flag<320)
                {
                        tt=0;
                        fre=312;
                        beep=~beep;       
                }
        if(flag>=320&&flag<360)
                {
                        tt=0;
                        fre=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;
            fre=50000;
          }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
caizh
1楼-- · 2019-07-15 13:38
 精彩回答 2  元偷偷看……
dabing89
2楼-- · 2019-07-15 17:41
去看看我这个帖子的写法吧,可能写法不一样,我的话,我就不去这么写
dabing89
3楼-- · 2019-07-15 23:28
dabing89 发表于 2016-8-14 20:48
去看看我这个帖子的写法吧,可能写法不一样,我的话,我就不去这么写

开源实用---51单片机项目技术分享(连载中)
http://bbs.elecfans.com/jishu_924440_1_1.html
(出处: 中国电子技术论坛)

一周热门 更多>