51单片机中延时5s用定时器实现 下面的程序对吗 求指点

51单片机中延时5s用定时器实现 下面的程序对吗 求指点,第1张

你把5ms写成5s了吧

不对

你没有开启定时器TR0=1;

你在开启定时器的时候 定时器就开始开始计时了 所以TR0=1;

要加在while(num==1); 前

我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧

这个是用定时器0控制一个灯的亮和灭

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

//

uchar num;

bit tt;

sbit d=P1^0;

/主程序入口/

void main()

{

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

TCON=0x10;

EA=1;

ET0=1;

tt=255;

while(1)

{

if(num==20)

{

tt=!tt;

d=tt;

num=0;

}

}

}

void timer() interrupt 1

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

num++;

}

这个程序是逐个点亮的(思路:由256逐减1,值由LED灯显示)

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

//

uchar num,tt;

//bit tt;

sbit d=P1^0;

/主程序入口/

void main()

{

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

TCON=0x10;

EA=1;

ET0=1;

tt=255;

while(1)

{

if(num==20)

{

tt--;

P1=tt;

num=0;

}

}

}

void timer() interrupt 1

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

num++;

}

多简单的事啊,我贴一个AVR采用定时器0计时的,你参考一下吧。

#pragma interrupt_handler timer0_ovf_isr:10 //TIMER0 定时2ms中断

void timer0_ovf_isr(void)

{

TCNT0 = 0xD9; //reload counter value

timer2ms++;

if(timer2ms >= 5)

{

timer2ms = 0;

timer10ms ++;

systimer10ms ++;

if(systimer10ms >= 22) //内部1M晶振

{

systimer10ms = 0;

timer1s ++;

}

}

也就是说。你另外起一个变量。与响应时间对照。你别说9999分钟。你就是9999年都可以做到。不理解时加我QQ问我吧。

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 TL1,#0B0H

DJNZ R3,LP1 ;20次循环完成则退出,否则转LP1

RET

;综述:以上共延时1秒。

unsigned long TimeTickCount;//1ms计时器

void Timer0Configuration();

void Delay1ms(unsigned int a);

void main()

{

while(1)

{

Delay1ms(1000);//1s延时;

}

}

void Delay1ms(unsigned int a)//0~65535

{

unsigned long b;//0~0xffffffff

b = TimeTickCount;//记下及时器初始值

while((TimeTickCount-b<a)||(0xffffffff+TimeTickCount-b<a));

//当计数器未溢出只须用 计数器实时变化的值-其初始值

//当计数器溢出则须用 计时器上限值+计数器实时变化的值-其初始值

}

void Timer1Configuration()

{

TMOD=0X10;//选择为定时器模式,工作方式1。

TH1=0Xfc; //给定时器赋初值,定时1000us

TL1=0X18;

ET1=1;//打开定时器1中断允许

EA=1;//打开总中断

TR1=1;//打开定时器

}

void interrupt_timer1() interrupt 3 //1000us

{

TH1 = 0xfc; //重装

TL1 = 0x18;

TimeTickCount++;//1000us计时器

}

以上就是关于51单片机中延时5s用定时器实现 下面的程序对吗 求指点全部的内容,包括:51单片机中延时5s用定时器实现 下面的程序对吗 求指点、用C语言编写,单片机控制LED灯并用定时器延时,每隔一秒使LED依次点亮,8 个灯、跪求用单片机制作长延时定时器的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9297856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存