
通过调用这个子程序就可以实现
DEL1S: MOV R1,#10
DEL1: MOV R2,#100
DEL2: MOV R3,#250
DEL3: DJNZ R3,DEL3 ;2225010010=1000000us
DJNZ R2,DEL2
DJNZ R1,DEL1
RET
没有做具体计算,要准确的定时1s的话可以稍微改动一下R1R2R3的值。6M晶振则机器周期为2us,一条指令执行为2个机器周期,由此得出其延时时间
最好的方式是使用定时器中断来做延时,更精确
这个程序不一定能实现1ms延时,这种循环延时与单片机有关,不同的单片机是不一样的。
还与编译器有关,不同的编译器编译出来的结果是不一样的。
还与编译器的设置有关,比如代码优化方式设置,同一种编译器不同的设置方式也是不一样的。
还与程序执行的过程有关,比如程序在延时的过程中经常进中断,也会使延时不准确。
那样子你的调用系统的API来获得调用此函数之前的系统时间,还有调用此函数返回之后的系统时间进行比较。
#include <windowsh>
#include <stdioh>
voidmain()
{
SYSTEMTIME sys;
GetLocalTime( &sys );
int start=syswMilliseconds;//获取开始时的毫秒数
//下面调用你的函数
delay(uint型变量);//这里面的参数你必须自己看着办
GetLocalTime( &sys );
int end=syswMilliseconds;//获取调用delay函数之后的秒数
printf("调用delay函数消耗了%d毫秒!\n",end-start);
printf("注意:此程序只能处理1秒以内的延迟毫秒数!");
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void Delay(uint del)
{
uint i,j,k;
for(i=0; i<del; i++)
for(j=0; j<100; j++)
for(j=0; j<1827; j++)
;
}
;==========<延时子程序>=========882us
DELAY882: ;1085x((202x4)+5)=882
MOV R7,#202
DELAY882_A:
NOP
NOP
DJNZ R7,DELAY882_A
RET
;==========<延时子程序>========1000us
DELAY1000: ;1085x((229x4)+5)=999285
MOV R7,#229
DELAY1000_A:
NOP
NOP
DJNZ R7,DELAY1000_A
RET
;==========<延时子程序>========2400us
DELAY2400: ;1085x((245x9)+5)=239785
MOV R7,#245
DELAY2400_A:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
RET
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 110592MHz)
{
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)以及超级电脑等作业平台。
以上就是关于单片机51软件延时1s 晶振6M的编程全部的内容,包括:单片机51软件延时1s 晶振6M的编程、单片机编程:设置一个1ms的延时程序 晶振12MHZ、用C语言编程如何计算延时时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)