你把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 个灯、跪求用单片机制作长延时定时器的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)