求一个51单片机用T0做计数器的C语言代码。

在网上搜索了很多资料,执行不了,我的实验板是买的成品,执行其他程序没问题。

//timer0设定为计数器模式1
TMOD &= 0xf0; //清除原来的设定
TMOD |= 0x05; //T0为计数器模式1
TH0 = 0;
TL0 = 0; //从0开始计数
TR0 = 1; //使能T/C0
// IE |= 0x82; //Timer0中断使能,不需要就注释掉该行
另外执行不了有可能是你的实验板没有连接T0引脚追问

P3^4连接了一个开关啊,我按了开关,数字没有增加,没有反应啊。能否给一段详细的代码,数码管显示的就不用写了。

追答

#include
void Disp(void); //显示函数
unsigned char Overflow = 0; //计数溢出(中断)次数
void main(void)
{
TMOD = 0x06; //T0为计数器模式2
TH0 = 0;
TL0 = 0;
TR0 = 1; //使能T/C0
IE = 0x82; //Timer0中断使能
while(1)
{
Disp();
}
}
void Disp(void)
{
//显示函数
unsigned char c = TL0;
/*
c/100显示的百位
c/10%10十位
c%10个位
如果需要记录超过255的数,把Overflow 使用上或者设置为计数器模式1
用按键作为计数脉冲输入,每按一次可能会计数好几十次
*/
}
void Timer0Isr(void)interrupt 1 //T/C0中断函数
{
Overflow ++;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-13
void t1int(void) interrupt 3
{
uchar i,RH;
uint F=0;
float C,d; // 电容
TCON=0x00; //关闭定时器
F=TH0;
F<<=8;
F|=TL0; //停止计数
delay(50);
}

void delay(uchar ms)
{
uint x=65536-(ms*Fose/12/1000);
TMOD=0x15; //T1 16位定时器,T0 16位计数器
TH1=x/256;
TL1=x%256;
TH0=0x00;
TL0=0x00;
EA=1; //开中断
TCON=0x50;
}

void main()
{
AUXR=0x00; //定时器12分频
TCON=0x00;
SCON=0x50; //串口工作方式1.8位数据

IE=0x88; //开启T1中断

delay(50); //启动T1定时器,T0计数器
WDT_CONTR = 0x3d; //开启看门狗
while(1)
{
delay1(50);
WDT_CONTR|=0x10; //喂狗
}

}追问

您好!谢谢您的回答,你写的很详细,但是我是初入门的新学者,这些还看不懂,能有用TMOD这方式写一个?

追答

TMOD方式?什么意思?计数器是用来检测一个周期波形个数的。

追问

你这个肯定能行,只是我水平太低,看不太懂,验证不了。 谢谢您写这么长,衷心的感谢您!

第2个回答  2013-03-13
你的单片机的原理图是咋的呢
相似回答