导航:首页 > 操作系统 > 单片机时间函数

单片机时间函数

发布时间:2022-10-07 02:15:19

1. 请问单片机中的delay()的单位时间是什么

单片机中的delay()的单位时间不是系统提供的,而是用户自己编制的。

如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。

如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。

最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

(1)单片机时间函数扩展阅读

单片机C语言程序中延时函数delay的原理是:仅仅执行一些,没有实质性影响的所谓“无意义指令”,比如做比大小啊,做某个int的自加运算啊之类的。

单片机的有些程序需要调用延时程序,合理的安排循环次数以及空操作的个数方法:用汇编的话就根据你的当前晶振频率去推算你的指令周期,然后结合需要延迟的时间。

编写延迟程序,用C的话还是要看最后生成的汇编码是什么样的了。最简单的方法就是写好程序以后再编译器里软仿真看时间。

单片机C语言延时需注意的问题:

标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。

在keil C51中,直接调用库函数:

#include // 声明了void _nop_(void);

_nop_(); // 产生一条NOP指令

作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。

2. 单片机中时间问题

C语言的执行时间,从来就没有计算公式。
C程序的执行时间,和操作系统有很大的关系,和编译软件也有关,在单片机中,更和变量的存储类型有关(如单字节变量、两字节变量)。
因为有如此多的不确定因素,所以,从来就没有办法计算C的执行时间。
只是可以在仿真调试的时候,进行实际测量,得到一些(难以通用的)经验数据。
楼主要想准确的控制时间,应该研究使用汇编语言,或者使用硬件定时器。
C语言,只能干些粗活。

3. 单片机延时函数

一个时钟周期=晶振的倒数
51单片机的一个机器周期=6个状态周期=12个时钟周期
一个单周期指令包括一个机器周期,即12个时钟周期,所以12M晶振的话一条单周期指令执行的时间为12*(1除12M)=1Us
延时更多的话往上乘就是了

4. 求单片机计时器函数代码

#include#include#define u16 unsigned int#define u8 unsigned char/*********************************************************/u8 ds[2]; //数码管显示缓存//共阴code u8 w[]={~0x01,~0x02,~0x04,~0x08};//位码code u8 d[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,};//断码void dispaly(){//显示函数static u8 a;if(++a>2)a=0;P0=~0xff;P2=w[a];P0=d[ds[a]];}/****************************************/void init()//初始化函数{ TMOD=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;EA=1; ET0=1;}/***********************************/u16 js_ms=0;u8 count=0;//计数void main()//主函数{init();//系统初始化TR0=1; //定时器开始计时while(1){ ds[0]=count/10%10;ds[1]=count%10;}}/****************************/void timer0() interrupt 1//1ms定时器{ TH0=(65536-1000)/256;//重载初值TL0=(65536-1000)%256;dispaly();//显示if(++js_ms>=1000){js_ms=0;if(++count>59)count=0;}}

5. 这是PIC单片机中时间显示函数,我表示不懂,求大神指教

先把时分秒的数字转成十位和个位,然后将数字转成ASCII显示
例如小时的,假如hour=11,sw=hour/10=1,1在这里只是数字,显示的话要转换成对应的ASCII码,所以在显示的时候加了0x30,即0x31对应字符'1',其余的代码同理

6. 怎么写段单片机延时函数要用定时器!

1、首先分析您的程序,
void delay()
{
int i;
if(1 == TF0)//if(TF0==1),查询定时器溢出标志位
{
TF0=0;
i=10000;//定时溢出时给i赋值1000
TH0=0xDC;TL0=0x00;
i--;//i=999,如果还没有减到0时定时器又溢出,则i永远不会减到0!!!!所以您的这段程序不应该行不通!!
}
while(1)
{
if(i==0)
break ;
}
}
2、建议做法
(1)定义一个全局变量用于作定时计数如unsigned char n;
(2)定时器采用以某一时间基准(10ms)中断方式,每中断一次中断处理程序里n++;
(3)在延时函数中对n进行操作,如延时1s即1000ms则:
void delay_1s()
{
while(n<100);//如果n<100,即还没有到1s就等待

n=0;如果1s时间到则清零n,退出子程序

}

当然这样定时精度可能需要调整,但思路可以试试。

7. 怎么写段单片机延时函数要用定时器!

1、首先分析您的程序,
void
delay()
{
int
i;
if(1
==
TF0)//if(TF0==1),查询定时器溢出标志位
{
TF0=0;
i=10000;//定时溢出时给i赋值1000
TH0=0xDC;TL0=0x00;
i--;//i=999,如果还没有减到0时定时器又溢出,则i永远不会减到0!!!!所以您的这段程序不应该行不通!!
}
while(1)
{
if(i==0)
break
;
}
}
2、建议做法
(1)定义一个全局变量用于作定时计数如unsigned
char
n;
(2)定时器采用以某一时间基准(10ms)中断方式,每中断一次中断处理程序里n++;
(3)在延时函数中对n进行操作,如延时1s即1000ms则:
void
delay_1s()
{
while(n<100);//如果n<100,即还没有到1s就等待
n=0;如果1s时间到则清零n,退出子程序
}
当然这样定时精度可能需要调整,但思路可以试试。

阅读全文

与单片机时间函数相关的资料

热点内容
穿越东晋成为王凝之 浏览:958
手机里的文件夹怎么拉出来 浏览:281
饥荒怎么输入ip进服务器 浏览:470
美国恐怖三极片 浏览:995
四川虚拟主机云服务器 浏览:780
母乳喂养真人版电影 浏览:396
免费看片链接 浏览:492
编程将中断类型号 浏览:597
数字编程学院 浏览:95
程序员不时尚 浏览:746
不付费看网站 浏览:230
《代人受过》训诫文 浏览:258
1n.d5h49m6. 浏览:687
linuxweb目录权限 浏览:945
WWW 5a5e 浏览:544
id3v2java 浏览:222
怎么打开mysql命令行 浏览:522
linux文件星号 浏览:632
小城与小妈去北京旅游叫什么小说 浏览:230