求高手写 用51单片机C语言 TMOD=0X01 定时一秒的程序

晶振11.0596mhz
接在定时一秒下的 时钟显示电路 有误
当秒为59时 直接跳到11了
a[6] 时分秒 各两位
if(aa==20)
{ aa=0;
if(a[5]==9)
{ a[5]=0;
if(a[4]==6)
{ a[4]=0;
if(a[3]==9)
{a[3]=0;
if(a[2]==6)
{a[2]=0;
if(a[0]==0)
{ if(a[1]==9)
{ a[1]=0;
a[0]=1;
}
a[1]++;
}
if(a[0]==1)
{ if(a[1]==2)
{ a[0]=0;
a[1]=0;

}
a[1]++;
}
}
a[2]++;
}
a[3]++;
}
a[4]++;

}
a[5]++;
}

下面以运用中断对LED进行控制,举一个例子吧,定时时间50ms,设置为一秒的话,加个for循环,相应改动即可!
#include<reg52.h>
sbit LED=P1^2; //定义LED端口
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1
TH0=(65535-50000)/256; //给定初值
TL0=(65535-50000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
Init_Timer0();
while(1);
}

/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x00; //重新赋值
TL0=0x00;
LED=~LED; //指示灯反相,可以看到闪烁
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-12
#include <reg51.h>
#define uchar unsigned char
sbit LED=P1^0;
uchar time;

void initT0( )
{
TMOD = 0x01; //定时器0,工作方式1
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256; //50ms中断一次
EA = 1;
ET0 = 1;
TR0 = 1;
}

void main(void)
{
initT0();
while(1)
if(time==20) //中断20次,1s
{
time=0;
LED=~LED; //P1.0上的LED1s亮或灭一次
}

}

void T0int( ) interrupt 1
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
time++;
}追问

可 做时钟的时候 这一秒感觉跳的好快啊

追答

不会吧,你TMOD=0X01; 这条有没?

追问

有啊

追答

程序贴上来看看
刚看到补充:晶振是11.0592吧
那初值改一下:(重加载那个也一样要改)
TH0 = 0x4C;
TL0 = 0x00;

本回答被提问者和网友采纳
相似回答