52单片机把这段调用定时器0的程序改为用定时器1,功能相同

如题,想用这段程序实现计时到30秒的时候在主函数main里跑一个函数。
但是因为主函数已经在while(1)了,而且已经调用了定时器0来实现其他功能,所有想把这个改成用定时器1实现,麻烦大神帮忙改一下。
PS:在我本身的大程序里,有一个子程序,uart.c 应该是负责串口通信的,里面已经赋值TH1=TL1=0xfd了,这个和下面这段程序改到定时器1工作会冲突吗? 麻烦大神了
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar timer[3]={0,0,0};//时分秒 按实际的情况修改这个数组里的数字 分别为{时,分,秒} 另外我很费解电动机是啥 所以我就写一个定时功能
uint timer_data;

void timer_init()//程序初始化
{
timer_data=0;//数据初始化
TMOD=1;//使用到 定时器0
TH0=0xfc;TL0=0x18;//定时 1毫秒
TR0=ET0=EA=1;//定时器开启
}

void timer()
{
timer_init();
while(1)
{
if(timer[3]={00,00,30}) //然后在这里判断if () 你所需要的时间数据 就可以做一些动作了;
}
}

void timer0()interrupt 1//定时器0入口
{
TH0=0xfc;TL0=0x18;//本次定时 1毫秒
if(timer_data==1000)//1000毫秒=1秒
{
timer[2]++;
if (timer[2]==60)//判断是否过了60秒;
{
timer[1]++;//分钟加1;
timer[2]=0;//秒清0
if (timer[1]==60)//判断是否过了60分;
{
timer[0]++;//小时加1;
timer[1]=0;//分清0
if (timer[0]==24)//判断是否过了24小时
{
timer[0]=0;//时清0
}
}
}
timer_data=0;
}
else
{
timer_data++;
}
}

修改如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar timer[3]={0,0,0};//时分秒 按实际的情况修改这个数组里的数字 分别为{时,分,秒} 另外我很费解电动机是啥 所以我就写一个定时功能
uint timer_data;

void timer_init()//程序初始化
{
timer_data=0;//数据初始化
TMOD&=0x0f;//使用到 定时器1
TMOD|=0x10;
TH1=0xfc;TL1=0x18;//定时 1毫秒
TR0=ET0=EA=1;//定时器开启
}

void timer()
{
timer_init();
while(1)
{
if(timer[3]={00,00,30}) //然后在这里判断if () 你所需要的时间数据 就可以做一些动作了;
}
}

void timer1()interrupt 2//定时器0入口
{
TH1=0xfc;TL1=0x18;//本次定时 1毫秒
timer_data++;
if(timer_data==1000)//1000毫秒=1秒
    {
    timer[2]++;
    if (timer[2]==60)//判断是否过了60秒;
        {
        timer[1]++;//分钟加1;
        timer[2]=0;//秒清0
        if (timer[1]==60)//判断是否过了60分;
            {
            timer[0]++;//小时加1;
            timer[1]=0;//分清0
            if (timer[0]==24)//判断是否过了24小时
                {
                timer[0]=0;//时清0
                }
            }
        }
    timer_data=0;
    }
}追问

您好,这里用interrupt2的话是用的外部中断吗?修改的话应该用外部中断吗请问0 0

温馨提示:答案为网友推荐,仅供参考
相似回答