89c51单片机延时问题,怎么求出延时是100ms,求详细回答。

void Delay100ms(void) //22.1184MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}

怎么算就不说了 有个很好的软件可以直接计算延时 中断波特率等


温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-19
22.1184MHZ z=1时精确延时1ms)
void delay_1ms(uint z)
{
uint x,y;
for(x=z; x>0; x--)
for(y=1696; y>0; y--);
}//你自己设置一下数值 这个延时相对来说 比较精确了 要是要相对精确 那就得用定时器了

定时器T0 工作方式1 晶振频率22.1184MHz
定时器最大定时时间(us):32768
定时器最小定时时间(us):0.5

【1ms精确定时C51代码】
void T0_init(void) //定时器初始化
{
TMOD |= 0x01;
TH0 = 0xf8; //设置定时器计数初值,定时1000us
TL0 = 0x33;
IE |= 0x82; //打开总中断
TR0 = 1; //启动定时器
}

void T0_intservice(void) interrupt 1 //定时器
{
TH0 = 0xf8; //重装载定时器计数初值
TL0 = 0xcc;
//其他处理程序 定时器你会用很明白就看懂了 ;
}追问

1/22.1184M * 12 *1696 *1000=0.92ms约 1ms 是这样算吗

追答

en

第2个回答  推荐于2018-03-28
C 语言,是高级语言。

经过编译,可通用在不同的 CPU 上。

运行时间,取决于 CPU。

C 语言本身,根本就没有时间概念。

C 语言程序的运行时间,只能测试,不可计算。本回答被网友采纳
第3个回答  2013-04-19
void delay(uint z)
{
uint x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
这个是11.0592hz晶振的,z=1是大概是1ms,我不知道你后面注释的那个是不是你的晶振,你只要给相应z的值就好了,具体多少你可以试试追问

1MS怎么算啊

追答

用那个编写的软件keil去试

89c51单片机延时问题,怎么求出延时是100ms,求详细回答。
怎么算就不说了 有个很好的软件可以直接计算延时 中断波特率等

89c51单片机的数字钟程序?
DELAY: \/\/延时,用于扫描7段管时,在每一位停留的时间.时间太短,回使不该亮的段也有些亮 MOV 49H,#25H \/\/49H的值不可以等于FF,因为FF取反后49H为0,不会延迟了 MOV A,0FEH \/\/用取反设置循环次数, CPL A MOV 49H,AADD_1: INC 49H MOV R1,49H \/\/因为DJNZ判断完后要把判断的地址减去1,所...

Protues 任务:89c51单片机控制两个数码管显示0~99(延时不要太短)
include <reg52.h> define uchar unsigned char define uint unsigned int uchar DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };void delay(uint x){ uchar i;while(x--)for(i=0;i<120;i++);} void main(){ uchar i;P0 = 0x00;P2 = 0x00;while(...

89C51单片机实验中遇到的一个问题
其实,毛病是在按键上。普通的按键,按一下,会产生多次的脉冲信号。你的程序把多个脉冲都检测出来了,程序是完全正常的。如果把按键改用“单脉冲电路”,就不会出现这些现象了。--- 如果按键不变,可在程序中加上延时,隔10ms再确认按键的状态,也能减少计数加1的现象。这就是软件消抖。如果使用...

单片机89c51\/s51的时钟频率为6mhz,若要求定时值分别为0.1ms和1ms,10m...
一楼是对的,单片机89c51\/s51的时钟频率为6mhz,定时器时钟周期2us。拿10ms来说,10ms=10000us=5000个机器周期,TMOD=00000001 B,定时器初值:0XEC78(65536-5000\/256=TH0,65536-5000%256=TL0)

C语言delay延时时间怎么算,说的详细点谢谢
简单比喻一次振荡需要1us,那1ms就是1000次振荡,300ms就是300x1000次振荡,这样就能大概的计算出300ms delay;这得看你的CPU运行一条指令得多久,像单片机89C51一般一条1us。C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码...

89C51单片机 4*4矩阵键盘加流水灯问题,求个汇编程序代码。
;其实很简单,都不用判断键值,有键按下暂停2S程序如下:ORG 0000H LJMP STA ORG 000BH LJMP T0ISR ORG 0030H STA:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV 30,#0FEH MOV R2,#0 CLR 00H LOOP:MOV P1,#0F0H MOV A,P1 CJNE A,#0F0H,LOOP1 SJMP LOOP...

求个89c51单片机 汇编语言设计的LED跑马灯的程序
mov a,#0feh ;每次只亮一个灯。loop: mov p1,a ;输出到p1 lcall delay ; 延时 rl a ;循环左移。ajmp loop ; 跳转main继续循环 delay: mov r5,#20 ;延时子程序1闪烁灯调用 d1:mov r6,#20 d2: mov r7,#250 djnz r7,djnz r6,d2 djnz r5,d1(时间此处可自行设置)...

在89c51单片机中实现2:00:00~0:00:00的两分钟倒计时,并在五个数码管...
){\/\/显示函数static u8 a;if(++a>4)a=0;P0=0xff;P2=w[a];P0=d[ds[a]];}void init()\/\/初始化函数{ TMOD=0x01;TH0=(65536-1000)\/256;TL0=(65536-1000)%256;EA=1; ET0=1;}u16 js_s=60*100*2;u16 js_ms=0;void main()\/\/主函数{init();TR0=1;while(...

编程加实践(单片机):求利用89C51 CPU编写红绿灯程序
回答:^_^,安装一个KEILC程序,它的安装目录下面有一个交通灯的完整例子 ^_^

相似回答