51单片机12M晶振延时1us,只需要执行一个NOP就是了。C语言中也是如此。
创新互联公司是一家专注于成都做网站、成都网站建设与策划设计,湾里网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:湾里等地区。湾里做网站价格咨询:028-86922220
一般12M晶振的话用 for(j=time;j0;j--);延时时,1毫秒time大概为125左右,这里用110,大概晶振为10592M,所以这段程序,内部循环完成1毫秒延时,外部循环完成500毫秒延时。希望对你能有所帮助。
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。
比如12M晶振for(j=0;j120;j++);大概延时1毫秒,10592M晶振那么for(j=0;j110;j++);延时1毫秒,你这里的for(j=0;j100;j++);延时1毫秒的话,晶振应该是10M,不太常见哟,特别是在单片机方面。
void delay(uint n){ uint i,j;for(i=n;i0;i--){ for(j=110;j0;j--);} } 当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值。
C语言延时,就慢慢实验吧。 比汇编可要难多了。
首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示。然后添加c文件,接下来输入代码,先输入一个头文件命令。然后,进行宏定义,代码如图所示。然后声明P1口,如下图所示。
现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1/12M *100(s),即1/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。
这个程序应该是板子上延时的程序。a就是需要延迟的毫秒数(也可能是其他单位)。
首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示。然后添加c文件,接下来输入代码,先输入一个头文件命令。然后,进行宏定义,代码如图所示。然后声明P1口,如下图所示。
找到延时1毫秒的值,把Delay函数改名为Delay1ms,之后调用这个函数完成精确延时 -其他的延时函数也可以类似上述方法完成,但记住在调试和实际使用时要用同样的CPU主频。
方式三:利用COleDateTime类和COleDateTimeSpan类结合WINDOWS的消息处理过程来实现秒级延时。如示例工程中的Timer3和Timer3_1。
现,上面的函数适用于程序简单,对时间性要求不高,如:点led灯,单个按键操作等等。