这是单片机的延时程序,晶振是12MHZ,延时10ms。请问是怎么计算的?其中,c=50。

void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
for (;c>0;c--) //c=50
for (b=38;b>0;b--)
for (a=130;a>0;a--);

不要试图去计算,计算不准确,软件延时本身都不准确,这些都是试验得来的,如果晶振频率不同,可以调整a=130,但想刚好是10ms基本无可能,用汇编语言延时准确一些,但计算也比较麻烦如果要准确延时的话,还要用定时器
假如b=38 时,刚好延时38ms的话,b=50延时不会刚好是50ms
同样 a=130 时,刚好延时13ms的话,a=150延时不会刚好是15ms
所以一般是按比例改变a b取值,然后根据仿真结果再去调整,误差不大就可以了
还有unsigned char a, b和unsigned int a, b延时结果是不一样的
温馨提示:内容为网友见解,仅供参考
无其他回答

1、 已知单片机的晶振为12M,请以子函数形式写出10毫秒延时程序。该怎...
晶振12MHZ,延时1s,定时器0工作方式为方式1 DELAY1:MOV R7,#0AH ;;晶振12MHZ,延时0.5秒 AJMP DELAY DELAY2:MOV R7,#14H ;;晶振12MHZ,延时1秒 DELAY:CLR EX0 MOV TMOD,#01H ;设置定时器的工作方式为方式1 MOV TL0,#0B0H ;给定时器设置计数初始值 MOV ...

单片机,一秒的定时器初值怎么算?不要结果要过程谢了哈!
一。10MS定时器初值的计算:1.晶振12M12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次 机器周期。65536-10000=55536(d8f0)TH0=0xd8,TL0=0xf02.晶振11.0592M11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。65536-9216=56320(dc00)TH0=0xdc,TL0=...

单片机中断里的程序可以有个10ms的延时么
可以作定时器中断方式延时10ms , 举例说明如下:51系统单片机晶振频率12MHz,机器周期T =12\/Fosc =12\/(12x10^6Hz) = 1μs 计数值 =10ms\/1μs =10000,使用T1定时\/计数器,工作方式1,是16位计数器 计数初值 =2^16 -10000 =65536-10000 =55536 =D8F0h, h是十六进制数后缀 初始化程序如下...

单片机定时器计算?
计算定时器,最原始的公式是(65536-初值)*12\/晶振值=定时的时间,由此式子推出:初值=65536-(晶振值*定时时间\/12)。则TH0=初值\/256,TL0=初值%256,最终结果就是 TH0 = 255-CLOCK\/TIME_PER_SEC\/12\/256;TL0 = 255-CLOCK\/TIME_PER_SEC\/12%256;其中除以TIME_PER_SEC,是因为TIME_PER_SEC表...

延时函数的编写,频率为12MHZ时,如果延时10ms,请问需要循环计数多少次...
C语言程序:include void main (void){ TMOD = 0x10;TH1 = (-50000>>8);TL1 = -50000;TCON = 0x40;IE = 0x88;while(1);} void T1_int (void) interrupt 3 { TH1 = (-50000>>8);TL1 = -50000;} 汇编程序如下:ORG 0000H AJMP MAIN ORG 001BH AJMP T1INT ORG ...

单片机程序 计算延时多长时间
先给你一个实例:石英晶体为12MHz,因此,1个机器周期为1微秒 机器周期 微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 DJNZ R7,$ 2个 2×248 DJNZ R6,D1 2个 2+ 20*(2+2*248+2)=10002 因此,上面的延时程序时间为10.002ms。由以上可知,当R6=10、R7=248时,延时5...

已知单片机系统晶振频率为12MHz,若要求定时值为10ms时,定时器T0工作在...
已知单片机系统晶振频率为12MHz,若要求定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值TH0=( (65536-10000)\/256 ),T L0=( (65536-10000)%256 ),TMOD的值是( 0x01 ) 。

和延时程序,最好简单点儿。基于单片机设计的红绿灯电路图。很狠很急...
可以循环嵌套结构:假设单片机晶振频率为12MHZ YS: MOV R6,#200 YS1: MOV R5,#250 YS2: NOP NOP DJNZ R5,YS2 DJNZ R6,YS1 DJNZ R7,YS RET 延时时间=((4×R5)×R6)×R7=((4×250)×R6)×R7=1000×200×5=1秒 延时子程序入口:R7=5 为定时1秒 R7=10 ...

单片机:系统时钟12MHz,设计1个10ms延时子程序。
1最短,0最久 { while (us--);} delay(12000000\/4\/1000*10);即可 1秒能执行12000000条指令,每次循环花费4个时钟,除以4得1秒能循环多少次,再除以1000得1ms循环多少次,再乘10就得10ms循环多少次。其他单片机请先把delay的循环时钟数,以及主频和时钟关系研究清楚,方法类似 ...

单片机中的延时程序的延时时间怎样计算的?
允许误差范围在十几微秒以内[2],否则,芯片无法工作。用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统软件的主流工具为C语言,用C51写延时程序时需要一些技巧[3]。因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法 ...

相似回答