求一个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
你的单片机的原理图是咋的呢

求一个51单片机用T0做计数器的C语言代码。
TMOD &= 0xf0; \/\/清除原来的设定 TMOD |= 0x05; \/\/T0为计数器模式1 TH0 = 0;TL0 = 0; \/\/从0开始计数 TR0 = 1; \/\/使能T\/C0 \/\/ IE |= 0x82; \/\/Timer0中断使能,不需要就注释掉该行 另外执行不了有可能是你的实验板没有连接T0引脚 ...

51单片机按键计数器C语言编程
0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; \/\/0到fuchar number,dat,dis[4];void t0isr() interrupt 1{TH0=(65536-5000)\/256;TL0=(65536-5000)%256;number++;number%=3;

51单片机使用T0和T1外部脉冲计数,C语言如何编程?
使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,--统计脉冲个数,用外部中断更好。--T0和T1,留着定时用。用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎么用C语言编程?--编程前,要先设计出来电路。

用C语言如何开51单片机的计数器,最好编个实例程序
include <reg51.h> define uchar unsigend uchar define uint unsigned int unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};\/\/数码管段码 void main(){ uint k;TMOD=0X50;\/\/设...

51单片机c语言脉冲计数并显示程序
TMOD=0x05;TH0=0;TL0=0;TR0=1;while(1){ a=TH0*256+TL0;display(a);}

怎样用51单片机计数器测量一个高电平脉冲的宽度,c语言程式,高电平开 ...
设你的P0.0接入脉冲,用T0定时计数器计数:TR0 = 0;while(P0.0 == 0) \/\/当检测到高电平,开启计数器 TR0 =1;while(P0.0 == 1) \/\/当脉冲变低,关闭计数器 TR0 = 0;然后直接读取 TH0和TL0中的计数数据,再乘以你的计数时间间隔(每计一个数的时间,跟你的时钟频率有关系...

如何用51单片机做计算器(要求用C语言编程) 由于是新手所以没积分 对 ...
我的实验板上的键不够,所以只能做加法运算,而且两数之和不能大于十。嘿嘿,没错这个给某种人用的。\/\/*** myh.h ***有两个文件,一个是头文件myh.h一个是js.c include <reg52.h> typedef unsigned char uchar;typedef unsigned int uint;typedef bit BOOL;\/\/ sbit rs=P2^6;sbit rw...

怎么用c语言编程51单片机读写程序?
编程代码如下:ORG 0000H MOV DPTR,#1000H ;给源数据块地址指针DPTR赋初值 MOV P2, #20H ;给目的数据块地址指针P2和R0赋初值 MOV RO,#00H LOOP: MOVX A, @DPTR .MOVX @RO, A .INC DPTR INC RO CJNE RO,#64H, LOOP SJMP

51单片机 C语言 怎样测量高电平持续的时间
假设定时器不溢出,P1.0为高电平输入引脚:while(P1^0==1);\/\/等待眼前的高电平过去 while(P1^0==0);\/\/等待下一个高电平来到 TR0=1;\/\/启动定时器 while(P1^0==1);\/\/等待高电平结束 TR0=0;\/\/关闭定时器 HIGH=TL0+TH0*256;\/\/读取时间 ...

大神,求51单片机做简易计算器的那个c语言程序
uchar d,flag1;uchar fd1,fd2;uchar b1=16,b2=16,b3=16,b4=16,b5=16;uchar d1=16,d2=16,d3=16,d4=16,d5=16;uchar f1=16,f2=16,f3=16,f4=16,f5=16,f6=16,f7=16,f8=16,f9=16,f10=16;uchar key,keyval,c,temp;void Delay1ms(uint i) \/\/1ms延时程序 { uint j;for(;...

相似回答