求C51单片机延时程序…要求是用查询法的…且要用if语句的。
延时多少不是c语言决定的,是编译后的汇编语言执行时间和单片机晶振共同决定的;
首先通过编译器,看看这个函数汇编之后,翻译成了什么,然后根据翻译过来汇编语言的时钟周期,计算该段程序的总执行周期(每条汇编语言指令执行的周期数都是确定的);
再用总周期乘以你的晶振时间(频率的倒数),就可以计算了。
你需要知道,机器周期、指令周期这些概念。也可以用其他的办法,很多单片机内置函数NOP,或者_delay_cycles这些内容。真想搞懂的话,希望多学学基础知识。
当z=50相当于 50*125 = 62500次自减
单片机晶振决定一次自减的时间也就是机器周期
12M的话一个机器周期是1us,那你这个程序就是延时62.5ms
6M的话一个机器周期是2us,那你这个程序就是延时125ms
比如你可以把定时器设定为每1ms进一次中断,在中断里面把一个标志位(如flag)置一
当你需要1ms延时的时候你可以先初始化定时器,然后查询标志位是否置一,置一则执行if后面的语句,即if(flag){};
当你需要10ms延时时,你可以把flag设置为uchar,中断里面flag++;外面查询用if(10==flag){};
以此类推
这得高端专业人士来解决!!
求51单片机 延时1秒钟的子程序(没什么要求)
如果使用的是11.0592MHz的晶振,那么编写延时子程序的方式可以如下所示:void delay(uint xms) { int i,j; for(int i=xms;i>0;i--) for(j=148;j>0;j--); } 在上述代码中,delay(1)代表延时1毫秒(ms),因此要实现1秒的延时,只需调用delay(1000)。这种方法基于内部循环和固定值148的...
51单片机怎么延时程序
500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}
基于51单片机的C语言延时函数程序编写
12M晶振延时5s的程序如下:void delayus2x(char n)\/\/延时nx2 us { while(--n);} void delayms(unsigned int t)\/\/延时 t x 1ms { while(t--){ delayus2x(245);delayux2x(245);} } delayms(50000);\/\/调用此句延时5s 至于不能大于255,因为你的数据类型为char型,及8字节,最大值...
请问51单片机定时器延时的调用是怎么调用的我有点不明白,谢谢
可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us()、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下: void Delay10us( ) { _NOP_( ); _NOP_( ); _NOP_(...
51单片机C语言中delay函数是怎么定义和使用的
在51单片机的C语言编程中,我们经常需要使用延时函数来控制程序的执行速度。延迟函数通常由程序员自己编写,其核心思想是通过执行无意义的指令来实现时间上的延迟。这是一种简单且常见的方法,特别是在硬件资源有限的环境下。下面,我们来探讨一个经典的延时函数的实现方式。这个函数的目的是根据给定的毫秒数...
求一个单片机的延时子程序延时20ms 谢谢
12M晶振 51单片机 (一)51C 循环 include <reg51.h> void delay_ms(unsigned int ms) \/\/ 延时子程序 { unsigned int a,b;for(a=ms;a>0;a--)for(b=123;b>0;b--);} void main (){ while(1){ delay_ms(20); \/\/20ms延时,数字即为多少毫秒 \/\/这里写自己的程序 } } (...
51单片机编写延时1分钟、1小时的子程序
include <reg51.h> unsigned char time_1m=120;unsigned char time_1h=60;\/\/timer init void initTimer(void) \/\/1Mhz晶振 { TMOD=0x1;TH0=0x5d;TL0=0x3e;} \/\/timer0\/counter0 interrupt void timer0(void) interrupt 1 \/\/ 500MS 中断一次 { TH0=0x5d;TL0=0x3e;time_1m--;if(...
需要一个C语言程序。51单片机控制:按键按一下,延迟1分钟后开灯,灯亮半...
void delay1s(uint i) \/\/1s延时程序 { for(;i>0;i--){delay1ms(1000);} } void main(){ led=0;while(1){ if (s==0){ delayms(20);if (s==0);{delay1s(60);led=1; } } if(led==1){delay1s(1800);led=0; } } } 如果对时间要求精确,则要用到定时器,还要确保电路...
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....
mcs-51单片机怎么编一个延时一小时的程序
首先你要加一个时钟中断,不知道51机里有没有。然后在时钟里加一个计数器就行了,这个计数器要够大.在程序的其它地方可以这样做:long a a=count+1000*60*60;\/\/count就是时钟里的计算器 \/\/上面的计数器频率为每秒1000次 while(a!=count);