‘壹’ 51单片机定时器模式1定时1us为什么用了好几秒啊
你的程序只有这几行吗看那没有ET1=1,开定时器中断没有啊。
定时到了,是不能中断的。
其实,这么设置没有什么意义的,因为,执行完TR1=1,这条指令,就开始计时了,只要1个机器周期就定时到。执行完TR1=1,定时就到了。但是还没有执行EA=1;就不能中断,还得等到ET1=1以后,才能中断。其实,早就定时到了,但没有执行ET1=1是不能中断。
单片机响应中断后,转去执行中断服务子程序,这需要更多的机器周期,远远超过1个机器周期,因此,你的设置是无理的。
而你的程序就没有ET1=1,所以,不可能中断的。
等了好几秒.........为什么啊看就应该等啊。
‘贰’ 51单片机c语言延时函数 Void delay 1ms(unsigned int ms){un
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;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;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;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
‘叁’ c语言中一个标准的延时1us的函数怎么写
如果是单片机上,是有可能的
单片机12M晶振执行一条指令1us,所以C语言1us延时程序 用12M晶振延时1us,用—_nop_();
#include<intrins.h> //头文件
_nop_(); //这一个语句表示1us延时
‘肆’ 15单片机的1us延时,要精确,11.0592MHZ,1T的,就是蓝桥杯的那个板子,谢谢^_^
纠正一下,STC12C5A60S2内核是1T的,默认是没有进行12分频的,11.0592晶振,那么机器周期=时钟周期=1/11.0592=0.09042us
这个软件延时是有点误差,1us左右,想要精准,还是用定时器吧。
那么1us延时如下:
void Delay1us() //@11.0592MHz
{
_nop_();
}
或者
void delay1us(void) //误差 -0.005353009259us
{
unsigned char a;
for(a=4;a>0;a--);
}
或者
void delayus(unsigned int us)
{
while(us--);
}
‘伍’ 如何在11.0592MHZ的频率下给单片机一个1US的延时。
1us?在11.0592MHZ晶振下,机器周期就是12/11.0592M约等于1us,用一条空操作指令就行噻。汇编:NOP;
C语言:用_nop_();时记得加上#include <intrins.h> 头文件
‘陆’ 89C51单片机一个机器周期为1us,把下列延时程序时间精确到50000us,程序越短越好,尽量使用下面的指令。
差不多就成了,用不着那么精确,相同类型的不同个晶振间都还存在着差异,不在乎那么一点点,再说,如果有中断干扰,这种延时误差会增大
‘柒’ 51单片机1us延时c语言程序 while语句 晶振12MHZ
51单片机12M晶振延时1us,只需要执行一个NOP就是了。C语言中也是如此。
#include<reg51.h>
#include<intrins.h>
main()
{
_nop_(); //延时1us
while(1);
}
‘捌’ 51单片机12M晶振延迟1us代码解析
12MHz频率,延迟1us,是不可能的。
就是调用函数、什么也不干、马上就返回,也不止 4us。
‘玖’ 求一个1ms的单片机C语言延时程序
void
delay(char
x)
{
unsigned
char
a,b,c;
for(c=x;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
学过标准C就知道了,char
和
int
是可以相互转换的,char的取值范围是-128~+127
unsigned
char
的是0~255
可以用unsigned
int啊,我一般都是用char的,用unsigned
int的话占的字节比较多,运行速度也没char那么快,计算机会麻烦点,建议使用char