求一个关于单片机定时器和计数器的c语言程序!大神出现吧~~~

作者&投稿:集肩 (若有异议请与网页底部的电邮联系)
谁有51单片机定时器计数器和中断的C编程程序,越多越好。学习中,感激不尽!告诉我网址或者给我下载地~

你看看这个例子行不?里面都有定时器计数器和中断的程序,你可以借鉴一下。。。http://dl.21ic.com/download/at8951-c-doc-ic-107123.html

不会呀,一般情况只要一个定时器就可以满足各种定时要求了。在定时器中断里设定各种定时间隔的记时变量进行累加操作即可。

//说明:p11产生方波。p0口显示。按键接数码管的阳极公共端。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,
~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//数码管段码
sbit p11=P1^1;
uchar y,z,c;
/*时间中断程序*/
void int1() interrupt 1 //时间为50MS
{
TH0=0X4C;
TL0=0X00;
z++;
if(z==10)
{z=0;
p11=~p11;
y++;
}
if(y==2) //既一高一低,2次计数才为一个周期
{y=0;
c++;
if(c==10) //满十归0
c=0;
}
P0=LED7Code[c];
}
void main()
{
TMOD=0X01;
TL0=0X00;
TH0=0x4c;
TR0=1; //启动定时计数器0
ET0=1; //开定时器中断0
EA=1; //开总中断
while(1); //原地等待
}

书上资料多,很简单的。如果是为了应付老师的话超超就行了。如果是自己想设计的话好好研究把
把TMOD 设置为一个定时一个为计数,定时的定0.5秒然后计算出TH1和TLI 的初值 计数的就8位的定为中断在中断里显示就行了

只要设置好TMOD方波就能产生,用方式一,我认为计数用中断比较好,不浪费CPU,在中断程序里加显示程序!


请教一个关于51单片机定时器的问题
第一种,定时中断触发,引脚翻转,但是立刻回到while循环中,将引脚置低,所以只有极短暂的瞬间引脚电平变高,人眼根本不可能反应过来 另外,由于使用模式1,且定时中断中没有有对计数器赋值,所以导致计时器溢出,从0开始计数,所以实际上第一次触发中断后,每次都是从0计数到65536才触发的中断 ...

请帮忙写一段程序,单片机定时器如何定时1小时后停5S又接着定时1...
RCLK=0;\/\/接收时钟标志,0:使用定时器1作为串口接收发生器 1:使用定时器2作为串口接收发生器 TCLK=0;\/\/发送时钟标志,0:使用定时器1作为串口发送发生器 1:使用定时器2作为串口发送发生器 switch(control) \/\/启动方式选择 { case 0x00:CP_RL2=0;EXEN2=0;break; \/\/ 0:16位自动重装定时器计...

关于51单片机定时器的问题。
1.关于定时器最长的定时时间,假如晶振频率是12MHz,机器周期是1us,最长定时的时间是65.536ms。所以,你想定时1秒是不可能的。通常是定时50ms,以中断方式,这样,每中断一次50ms,则中断20次就是1秒。2.你这个程序就是定时50ms的,变成50000us。晶振频率是12M,初始值计算,X=65535-50000=15536=...

单片机怎么实现5秒的定时
定时之前、定时完毕,都干什么呀?下面就是定时 5 秒(fosc = 6MHz)的完整程序。DL5S(){ unsigned char t = 0;TMOD = 0X01;TR0 = 1;while(t < 200) { TH0 = (65535 - 50000) \/ 256;TL0 = (65535 - 50000) % 256;while(TF0 == 0);TF0 = 0;t++;} } --- 用汇编...

单片机怎么做定时器 能定时几个小时到几十个小时的
1、我确信你知道如何采用单片机的定时器中断,而且你也知道,51系列一般只能定时间隔达到秒级;2、再定义一个int 全局变量,用于记录定时中断的次数,一旦判断达到3600秒,就干什么 3、如果时间还认为短,再定义一个int全局变量,在中断函数中,记录上述int记录到3600的次数 4、按此法,想必你想定时一个...

如何用单片机定时
朋友,我觉得你还是要懂得定时的原理。c52内部有两个定时器,t0和t1,。他们分别有4中工作模式。就拿t0来说。模式0:是一个13位计数器。模式1:是一个16位计数器。模式2:是一个自带重装的8为计数器。模式3:t0被拆为两个独立的计数器。定时计数器,是定时还是计数要看自己对相关寄存器的设置,...

请问这段单片机汇编语言程序(关于定时器延时)是什么意思
DELAY:MOV R3,#14H ;循环20次 MOV TMOD,#10H ;定时器1工作于模式1(16位定时器)MOV TH1,#3CH ;赋初值,50毫秒溢出一次 MOV TL1,#0B0H SETB TR1 ;启动定时器1 LP1:JBC TF1,LP2 ;溢出位为1,则清0后转移到LP2 SJMP LP1 ;否则等待TF1置1 LP2 :MOV TH1,#3CH ;重新赋初值 MOV TL...

单片机有两个定时器,定时器的工作方式
单片机有两个定时器,定时器的工作方式由寄存器决定,定时器的启动与溢出由寄存器控制。定时器的工作方式主要是通过THOD低4位是定时器0的工作方式控制位,高4位为定时器1的工作方式控制方式。

用单片机汇编语言编写一秒的定时 用定时器T0 方式2 急求!!
ACC POP PSW RETI END 注:以上设计为12M晶振,仿真通过。此方法并未达到精确的定时,因为8位定时器,要做好多4000次才完成1秒的定时。它的时间会延长了一点点,每一秒种有0。01秒的误差左右,要看你用的是什么单片机。若要精确定时建议用16位定时方式,这样误差会更小一点。我爱梅梅头 ...

关于单片机长时间定时问题
这很简单啊,程序我就不写了,我说一下理论,如果说得好请把分给我,呵呵!首先是建立一个时钟,定义time_125us,time_1ms,time_100ms,time_1s,time_1min,time_1hour这几个变量,利用定时器每125us产生一次中断(最好是自动重载,这样误差就比较小),中断里的代码要实现每中断一次time_125us加1,...

黎城县18521911097: 求一个关于单片机定时器和计数器的c语言程序!大神出现吧~~~ -
钦毓欧贝: //说明:p11产生方波.p0口显示.按键接数码管的阳极公共端. #include#define uchar unsigned char #define uint unsigned int unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66, ~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//数码管...

黎城县18521911097: 单片机用c语言编一个程序,要求用内部定时/计数器对30个脉冲进行计数,并同时对这三十个脉冲进行计时. -
钦毓欧贝: 看了一下你的要求,单片机里有个GATE位的设置如果你懂得用,编这个程序就不难了.下面是我个人按照你要求刚编的程序:/*********************** 功能:内部定时/计数器记录脉冲个数和这些脉冲通过后所用的时间.硬件:单片机用AT89c51,...

黎城县18521911097: 基于单片机的脉冲定时计数器C语言程序 -
钦毓欧贝: #include<reg52.h>unsigned int ui_n = 0;void main(void) {TR0 = 1; //启动IE = 0x82;while(1); } void T0_INT(void) interrupt 1 {ui_n++;if(ui_n == 7324) ui_n = 0; }

黎城县18521911097: 急求51单片机计数器的C程序!!! -
钦毓欧贝: #include "reg51.h" unsigned char time; void main() { EX0=1; //开外部中断 IT0=1;//设置边沿触发 EA=1; //开放全局中断 while(1) { P0=~time; // 通过P0口的LED显示出计数值(二进制形式) } } void INT_0() interrupt 0 { while(INT0==0); time++;//每按下一次计数加1.}

黎城县18521911097: 单片机定时器C语言 -
钦毓欧贝: //定时器中断初始化 void init() {TMOD=0x02;//方式2TH0=6;TL0=6;EA=1;ET0=1;TR0=1; } //中断函数 void time() interrupt 1 {t++;if(t==3686) //1s到了m++,t=0;//m=2就是两秒了 } 1秒钟t就要加到3686,0.1秒t要加到多少,根据比例就算得出了,其他的也一样.时间算得出,然后在这段时间内做什么就很简单了.

黎城县18521911097: 基于51单片机的简易计数器设计,求c语言程序! -
钦毓欧贝: #include<reg51.h>#define uchar unsigned char uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9 unsigned char sec=0,scanled; unsigned char disdat[2]; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; void ...

黎城县18521911097: 单片机c语言,设计一个计数器,中断一次,数码管数字从0起加1, 4位的数码管 -
钦毓欧贝: 我直接拿一个现成的例子吧.这个是用定时器中断的,你可以改成外部中断.这是8位的数码管,对4位稍加修改就行了.#include <reg52.h> //包括一个52标准内核的头文件#include<intrins.h> /****************************声明函数********************...

黎城县18521911097: 跪求一个定时/计数器中断单片机C语言的程序TT -
钦毓欧贝: T0,T1叫定时器/计数器,其实就是计数器,功能是一样的.所以,哪个计数,哪个定时,都是一回事,无所谓,只要写程序时能区分开就行. 但计数时,是要由引脚从外部输入脉冲的,所以,有外部输入脉冲的才能计数. 计数时,也同样计算初始值,要计四次,就计4个数,所以,T1工作在方式2,初始值=256-4=252,即TL1=252;这样,计4次后才中断,就是题目要求的.

黎城县18521911097: 用汇编语言写一个单片机定时器/计数器的程序 -
钦毓欧贝: 1.以查询方式工作,每计满100个脉冲,则取反P1.0口线状态.ORG 0000H MOV TMOD, #06H MOV TH0, #156 MOV TL0, #156 SETB TR0 LP: JNB TF0, LP CPL P1.0 SJMP LP END2.以中断方式工作,每计满200个脉冲,则取反P1.0口线状态. ORG 0000H SJMP START ORG 000BH CPL P1.0 RETI START: MOV TMOD, #06H MOV TH0, #56 MOV TL0, #56 SETB TR0 MOV IE, #82H SJMP $ END

黎城县18521911097: 用c语言编写一个计数器(单片机为51型,数码管为共阴)要求有三个按键分别控制停止、加、减 -
钦毓欧贝: 一看到你说是计数器,又看到你要求有停止功能,意思是把Timer改为计数器,然后可以通过一个键停止计数对吧?如果这样的话挺简单的,51单片机的计数器io口记得好像是P3^0和P3^1,但不管怎么,首先设置TMOD,将C/T位置1,这就改为计数器了,然后可以编写函数来对一个变量进行加减;同样利用51单片机的外部中断也可以实现计数功能,打开外部中断开关,在外部中断服务函数对计数变量进行加减;最简单的,直接利用io口高低电平变化来进行计数,编写if函数,只要某个io口电平变化了,就对计数变量进行加减.如果你对这个有点陌生,那么回复我一起讨论或者我可以帮你写程序.希望我的回答能帮助到你.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网