导航:首页 > 操作系统 > 单片机延时怎么调整

单片机延时怎么调整

发布时间:2022-07-15 22:29:21

单片机的延时设置

for(i=2211;i>0;i--); //所做的事情是把i减一,并判断其是否为零。。

下面是其反汇编的代码:VC上的,单片机也是类似的(指令等等不同而已)。。。。
123: {
124: for(i=2211;i>0;i--);
004015F9 mov dword ptr [ebp-4],8A3h
00401600 jmp DelayMs+3Bh (0040160b)
00401602 mov ecx,dword ptr [ebp-4]
00401605 sub ecx,1
00401608 mov dword ptr [ebp-4],ecx
0040160B cmp dword ptr [ebp-4],0
0040160F jbe DelayMs+43h (00401613)
00401611 jmp DelayMs+32h (00401602)
125: }
一次循环就会执行以上的汇编,而这些汇编语句的指令周期是固定的,所以可以算出一次循环需要多少个机器周期(不同的MCU or CPU,以及不同的指令所用的机器周期都会不一样,查datasheet可以知道)。。。

而机器周期和时钟周期(系统时钟)有必然的联系。。不同的MCU也不一样。比如51的机器周期=12×时钟周期(但楼主用得应该不是51);也有的是机器周期=时钟周期

所以,如果设机器周期=n个时钟周期,
设而执行一次循环的汇编指令花m个机器周期;
时钟周期 = 1 / 22118400;

for(i=2211;i>0;i--);所用时间则是:2211×m×n×(1/22118400)
如果m=10,n=1,则恰好是1MS。

也即:(22118400/1)/1000/10=2211

❷ pic单片机如何设置延时

一般来说有两种方式;第一用定时器实现延时,第二用计时器实现延时。如果需要比较精准的延时一般用定时器延时,比如应用到PWM脉冲时间的延时,比如时间显示等等,另一种计时器用于普通的延时,比如流水灯的亮暗延时等等

❸ 单片机怎么设置延时一个小时

用定时器做最精确,用延时程序的话,误差较大。以下用定时器来做一个。
#include<reg51.h>
#define uchar unsigned char
uchar sec,min,cnt;
sbit key=P1^0;
sbit led=P1^4;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>20)
{
cnt=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59){min=0;TR0=0;led=0;}
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
TR0=1;
}
}
}

❹ 51单片机的一个延时,我问下这个延时是具体怎么执行延时的

  1. 需要延时的时候,在程序中带参数调用DelayMs,参数传递给DelayMs的形式参数“unsigned char t”,t就有了数值。

  2. “while(t--);”执行t个循环后退出,t个循环用了若干时间。

  3. 连续执行两条“DelayUs2x(245);”,原理同第1,2步,也用了若干时间。

  4. 以上执行用的时间就是你延时的时间。

  5. 问题点:程序有失误,DelayMs里的while(t--)后边不能有分号,这样t个循环才能作用到下边的两条“DelayUs2x(245);”

❺ 怎么在单片机中时钟延时两秒

可以根据单片机的时钟和指令执行时间延时
void
delay
(int
m)
{
while(m--)
{_NOP();}
}
也可以用单片机的定时器延时,设置timer的时钟源,设置溢出计数,然后再中断里处理。
如果延迟2秒,最好用定时中断。

❻ 单片机,通过按键修改程序内的延时时间。

这个时间存储在单片机内部,掉电不丢失,是完全可以,STC89C52有内部EEPROM,就保存这里,根本就不需要什么外部器件。
只要定义一个变量,根本时间长短,定义成8位,或16位数。
按加和减按键时,就增加或减少这个变量,每次调节后就保存一次这个变量,即保存在EEPROM中,STC技术资料中有EEPROM读写例子程序。
然后开机后先读出保存在EEPROM中的数。
外部中断查询这个时间也没问题,其实就是由这个变量决定中断的次数吧,从面改变延时的时间长短吗。再用一个变量,对中断计数,当这个计数值等于保存的变量值就是延时到。这样,保存的变量值是可以调节的,也就调节了延时的时间了。

❼ 通过用按键调整单片机的延时时间

#include<reg51.h>
sbitkey=P1^0;
sbitled=P1^2;
voiddelay(unsignedcharx)
{
unsignedchari;
while(x--)for(i=0;i<120;i++);
}
main()
{
unsignedcharnn;
while(1)
{
if(key==0)
{
while(key==0);
nn++;
if(nn>250)nn=50;
}
led=0;
delay(nn);
led=1;
delay(nn);
}
}

❽ 如何用按键调整单片机的延时时间

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key1,key2,key3; //定义三个按键的代号
uchar a,i,temp,temp1; //定义主体函数所用变量
uint x,y,z; //定义延时函数所用三个变量
void delay1(uint); //定义延时函数1
void delay2(uint); //定义流水灯大间隔所用延时函数
void keyscan(); //定义键盘扫描函数
void main()
{ TMOD=0x01; //为了保证及时扫描到键盘变动,只好开启中断了
TH0=(65536-500)/256;//中断0.5ms开启一次
TL0=(65536-500)%256;
EA=1;
ET0=1;
a=0xfe;
i=0;
temp1=1;
while(1)
{

P1=a;
temp=a<<1;
a=a>>7;
a=temp|a;
i=i+1;
delay1(100);
if(i==8)
{
i=0;
delay2(temp1);
}
}
}
void delay1(uint z)
{

for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay2(uint temp1)
{

for(x=temp1;x>0;x--)
for(y=1100;y>0;y--);
}
void keyscan()
{
if(key1==0)
{
delay1(10); //键盘消抖
if(key1==0)
{
temp1=10;
while(!key1); //等待按键释放
}
}
if(key2==0)
{
delay1(10); //键盘消抖
if(key1==0)
{
temp1=20;
while(!key2); //等待按键释放
}
}
if(key3==0)
{
delay1(10); //键盘消抖
if(key3==0)
{
temp1=30;
while(!key3); //等待按键释放
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-500)/256; //重装初值
TL0=(65536-500)%256;
keyscan();

}
我的proteus坏了,不能模拟,现手写的,如果有问题可以再告诉我,我的QQ378773957,用的ATMEL51单片机
三个按所在的IO口我没有进行位定义,你在开头位定义一下应该就可以可以了

❾ 单片机 延迟一秒程序怎么写延迟2秒我是初学者,想请教一下。

你好!
你要先写一个延时基准(50毫秒),在延时1秒就是做20次基准,2秒就是40个基准!
也可以用定时器,定时50毫秒,定时器中断计数,计数20就是1秒,计数40次就是2秒(推荐用定时器!)
仅代表个人观点,不喜勿喷,谢谢。

阅读全文

与单片机延时怎么调整相关的资料

热点内容
闽政通无法请求服务器是什么 浏览:48
怎么做积木解压神器 浏览:203
王者荣耀解压玩具抽奖 浏览:49
12位是由啥加密的 浏览:868
程序员编迷你世界代码 浏览:895
php取现在时间 浏览:246
单片机高吸收 浏览:427
怎么区分五代头是不是加密喷头 浏览:244
hunt测试服务器是什么意思 浏览:510
2013程序员考试 浏览:641
毕业论文是pdf 浏览:736
服务器跑网心云划算吗 浏览:471
单片机定时器计数初值的计算公式 浏览:801
win7控制台命令 浏览:567
猫咪成年app怎么升级 浏览:692
360有没有加密软件 浏览:315
清除cisco交换机配置命令 浏览:751
华为删除交换机配置命令 浏览:473
shell打包命令 浏览:827
加密狗插上输不了密码 浏览:187