1. 如何计算单片机延迟程序的延迟时间
Delay: MOV R7,#64H ;本条指令1T
LOOP: MOV R7,#0FAH ;本条指令1T执行100次
DJNZ R6,$ ;本条指令2T执行100*250次
DJNZ R7,LOOP ;本条指令2T执行100次
RET ;本条指令2T
延时时间为:1+100+2*100*250+2*100+2=50303T=100606us=100.606ms
2. 单片机延时程序时间怎么算
晶振频率是12MHz,说明单周期指令的执行时间是1us;DJNZ R5,$ 这条指令是自减并判断是否为零的语句,耗时2us,因此会执行2*248*20=4960us;同理,DJNZ R4,D2 这条指令会执行20*2=40us;另外,MOV R5,248 是单周期指令,执行一次耗时1us,因此 MOV R5,248 这条指令会执行1*20=20us;最后,MOV R4,#20 这条指令执行一次,耗时 1 us ,该程序共耗时 4960us+40us+20us+1us=5021us=5.021ms;
3. 单片机延时0.5秒的程序
晶振11.0592M下的标准延时函数:
void
one_msDelay(uint16
mtime)
//1ms延时函数
{
for(;
mtime
>
0;
mtime--)
{
uint16
j
=
650;
while(--j);
}
}
循环个500次就是0.5s,你可以用示波器测一下。
4. 单片机定时器延时计算方法
用延时函数就可以实现;
首先,设置定时器工作方式,也就是TMOD,在设置TH0/1,TL0/1的初值,也就是定时时间的设置,然后设置中断允许,并开中断就可以;
参考例子如下:
#include<reg51.h>
void main()
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void timer0() interrupt 1
{
TH0=0X3F;
TL0=0XB0;
}
5. 单片机小精灵的里延时函数的1T和STC1T问题。
STC12C5A60S2单片机是STC系列 1T 的单片机,应该选择 1T 参数。
6. 1T单片机和12T单片机的延时程序怎么改
晶振频率一样吗?如果一样,原理上说,将1T延时常数变成12T延时常数的12倍就行了,否则按照比例调整。
但是可能不一定与之前延时完全一致,比如,有时候循环嵌套深了,计算还要考虑嵌套深度引起的附加延时,否则会出现时间偏差。
另外,如果是我,毫秒级延时多数使用定时中断,;微秒级延时使用程序中循环延时,并且在程序头文件中,包含晶振、分频等因子的宏定义,为中断、程序循环赋值,这样修改程序简单。
7. 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--);
}
8. 单片机程序需要考虑外围芯片传输延迟时间吗比如stc1T或stm32采用最高频率时
假如是要非常精确的测量数据,就必须考虑输出延迟。因为外围芯片从启动到输出也要一定的时间,一般会维持在US级别。你可以去查看芯片的Datasheet
9. Stc12c5a60s2单片机 用他的延时默认情况是安1T计算延时还是按12T。怎么网上有人说默认
STC下载软件上对应的Y3选项STC12的“软件延时计算器”是1T的,“定时器计算器”可以从下拉栏设置选择1T或12T
10. 为了不修改延时函数,1t的stc单片机如何设置成12t的
12C系列的没法设置指令执行周期为12T的,但是可以设置CPU时钟的分频,从而降低执行速度. 可以参考下CLK_DIV这个寄存器的设置