定时器1定时1秒,可是好像不对
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit d1=P1^0;
sbit wela=P2^7;
uchar num,tt;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71};
//void delay(uint );
void main()
{
tt=0;
TMOD=0X01;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;// 开总中断
ET1=1;//开中断定时器1中断
TR1=1;//启动零定时器1
wela=1;
P0=0xfe;//第一个数码管亮
wela=0;
while(1)
{ if(tt==20)
{tt=0;
num++;
dula=1;
d1=~d1;
if(num>15)
num=0;
P0=table[num];
dula=0;
}
}
}
void T1_time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
tt++;
}
大家帮忙看一下,那里错了,中断时间不对啊。我定时1s,可是实际效果很快,0.几秒。如果TMOD=0X01;改为TMOD=0X11;时间时间变得正常。不能理解为什么这么改,,我用的是tx—c的板。高手望指教
你用的是什么晶振,确实是12m?
兄弟,你自己算的时候是整数吗?肯定会有误差的啊,要不然还有时钟芯片出现?
晶振11.0592
但是误差很大,感觉是一秒与0.1秒的时间差别,
唉,冲你的头像回复你,你的问题
1,TMOD这个寄存器是什么?你没搞懂
2,你自己说说你用的定时器1还是定时器0?
3,有个问题你考虑没有,数码管动态显示时间在你定时的1S内吗?
4,你定时时间计算过吗?用11.0592M晶振
好好想想上面的问题,想明白了,问题就解决了
定时器没有搞懂!有问题,好好看看
大哥,TMOD=0x01是工作方式为定时器0的方式1啊,你装初值怎么会在TH1和TL1呢,所以你开0x11会变正常,因为0x11是让定时器1和定时器0都工作在方式1了
还有,你这么编数码管可能有问题
数码管有什么问题,求指出
感谢啊,你是科密?那个时间是大概一秒,是定时器tmod这里除了问题,改为,tmod=0x10;就行了
第三个问题还是不懂,求指出
数码管动态显示的时间间隔要小,否则会闪烁
