重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你
创新互联是专业的灌云网站建设公司,灌云接单;提供成都网站建设、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行灌云网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
的程序有问题额。
void
daly()
{unsigned
char
j;
for(j=60;j〈=0;j--)
}
你可去看看单片机的时钟信号产生电路中的有关
节拍:指振荡脉冲周期
状态:振荡脉冲尽过2分频后,就是单片机时钟信号的周期,定义为状态,一个状态等于两个节拍
机器周期:单片机采用定时控制方式,有固定的机器周期,一个机器周期等于6个状态,
机器周期=6个状态=12个节拍
当振荡脉冲频率为12mhz时,一个机器周期为1微秒,振荡脉冲频率为6mhz,一个机器周期为2微秒
数据类型中unsigned
char为无符号字符型值域是在0~~~255范围里
在上面我设的是60次的循环,且晶振是约在12mhz,那么可以看出我们的算值是用60x1微秒,即可得到我们所要的延时值啊
1)首先要知道你用的是什么C语言?
2)其次要知道你的编程环境:是在DOS下编程?还是在Windows下编程?还是为嵌入式系统编程?
3)第三步才是找对应的C语言环境下有没有延时函数?
4)如果是单线程程序,没有可用函数库,就编个循环,在开始时去取系统时间(时间以毫秒表示),然后在每次循环中取当前时间,如果前后时间差达到1秒,则退出循环,这个精度一般不高。
如果更准确一点,通过时间中断器,在时间达到1秒后产生中断,这个方法精度好一些。
如果是单片机上,是有可能的
单片机12M晶振执行一条指令1us,所以C语言1us延时程序 用12M晶振延时1us,用—_nop_();
#includeintrins.h //头文件
_nop_(); //这一个语句表示1us延时
//***********
微秒延时函数
********************************************
void
Delayus(unsigned
int
US)
{
unsigned
i;
US=US*5/4;
//5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
for(
i=0;iUS;i++);
}
//*********************************************************************
以上函数式根据AVR单片机在8MHZ时钟频率下得出的结果。
如果系统频率不一样,就按比例改变。
下面是delay
函数原型:
原型:
void
Delay(unsigned
int
nDelay)
{
unsigned
int
i,j,k;
for
(
i=0;inDelay;i++
)
for
(
j=0;j6144;j++
)
k++;
}
用法:#include
system.h
功能:短暂延时
说明:延时msec*4毫秒所以,delay的延迟时间是和你的cpu时钟周期相关的
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;ims;i++)
{
for(j=0;j200;j++);
for(j=0;j102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a?;a++)
for(b=0;b?;b++)
for(c=0;c?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;ims;i++)
{
for(j=0;j200;j++);
for(j=0;j102;j++);
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。