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

单片机时间函数

发布时间: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,退出子程序
}
当然这样定时精度可能需要调整,但思路可以试试。

阅读全文

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

热点内容
数据库查询系统源码 浏览:614
php5314 浏览:354
完美国际安装到哪个文件夹 浏览:666
什么app可以扫一扫做题 浏览:537
程序员编码论坛 浏览:923
淘点是什么app 浏览:658
中国高等植物pdf 浏览:453
51单片机时间 浏览:181
后台如何获取服务器ip 浏览:265
单片机流水灯程序c语言 浏览:232
程序员第二职业挣钱 浏览:237
运行里怎么输入服务器路径 浏览:837
pythonstepwise 浏览:508
刘一男词汇速记指南pdf 浏览:61
php认证级别 浏览:366
方舟编译啥时候推送 浏览:1009
php手机验证码生成 浏览:674
哲学思维pdf 浏览:14
凌达压缩机有限公司招聘 浏览:533
weblogic命令部署 浏览:36