单片机51软件延时1s 晶振6M的编程

如题所述

通过调用这个子程序就可以实现
DEL1S: MOV R1,#10
DEL1: MOV R2,#100
DEL2: MOV R3,#250
DEL3: DJNZ R3,DEL3 ;2*2*250*100*10=1000000us
DJNZ R2,DEL2
DJNZ R1,DEL1
RET
没有做具体计算,要准确的定时1s的话可以稍微改动一下R1R2R3的值。6M晶振则机器周期为2us,一条指令执行为2个机器周期,由此得出其延时时间

最好的方式是使用定时器中断来做延时,更精确
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-02-26
  通过调用这个子程序就可以实现:
  DEL1S: MOV R1,#10
  DEL1: MOV R2,#100
  DEL2: MOV R3,#250
  DEL3: DJNZ R3,DEL3 ;2*2*250*100*10=1000000us
  DJNZ R2,DEL2
  DJNZ R1,DEL1
  RET
  没有做具体计算,要准确的定时1s的话可以稍微改动一下R1R2R3的值。6M晶振则机器周期为2us,一条指令执行为2个机器周期,由此得出其延时时间。
第2个回答  2016-02-17
出现故障有各样的原因,需要从外到内、从机械到电气、从软件到硬件逐步进行检查测试和判断。但更重要的是要注意防范,要改善不良的使用环境,改变不良的使用习惯,坚持按科学合理的使用程序开机、关机和操作。电脑工作时,尤其是读写数据时不能突然关机,否则可能会损坏驱动器(硬盘、软驱等);不能在机器工作时搬动机器。当然,即使机器未工作时,也应尽避免搬动机器,因为过大的震动会对硬盘一类的配件造成损坏。另外,关机时必须先关闭所有的程序,再按正常的顺序退出,否则有可能损坏应用程序。总而言之,电脑出现的故障,既有复杂故障也有简单故障,其中大部分故障都有一定的蛛丝马迹,甚至是一些十分明显的外观表现,比如电容器体积膨胀、未装散热片的非功率型集成块的表面出现严重发热现象等。实际上,只要我们能够通过“望、闻、听、切”并认真分析,其中的大部分故障完全可以采用简单的方法来顺利解决的。
第3个回答  2008-12-03
void delay(int s)
{int i;
for(;s>0;s--)
for(i=0;i<65;i++)
{;}}
修改s就可以改变延时的时间,比如s=1000就是一秒,因为内层短延时是1ms,所以你看看想延时多少,自己修改可以了
第4个回答  2016-05-07
1、初始化

TMOD &= 0xf0; // 方式1
TMOD |= 0x01;
TL0 = 0xb0; // 100mS初始值
TH0 = 0x3c;
Atemp = 0; // 累加器复位
ET0 = 1; // 允许定时器中断
TR0 = 1; // 启动定时器
EA = 1;

2、中断

TL0 = 0xb0; // 100mS重装
TH0 = 0x3c;
Atemp++;
if(Atemp >= 10)
{
Atemp = 0;
}