‘壹’ 51单片机,晶振为6M请帮忙写一个10ms的延时程序,能有详细解释的。因为我还不知道这个延时的时间是怎么算
延时有很多种方法,有一种是让单片机去做无聊的循环,
还有一种是用定时器。
我本身也是菜鸟所以只能粗略的讲一下。
第一种的算法是
晶振的周期T1=1/f; 这里f=6MHz 所以T1=1/6 us;(微秒)
单片机花12个T1去执行一个指令,
所以一个机器周期等于12个晶振周期,
T2=12*T1=2us
10ms=1000 0us
所以你要得到10ms的延时就要想办法让机器去做5000条“无聊的指令”
所以
DEL: MOV R5,#05H
F1: MOV R6,#05H
F2: MOV R7,#32H
F3: DJNZ R7,F3
DJNZ R6,F2
DJNZ R5,F1
RET
这种方法是用于对时间要求不高的地方,我说的是其思想,程序中可能有错的地方
用定时器的方法我不太会就不误人了 (补充一下就是这个是用汇编写的,你在主程序中用ACALL DEL调用就延时了。
‘贰’ 求助单片机软件延时10ms的程序和计算方法(急)
程序如下.
ORG 0000H
SJMP START
ORG 0030H
START:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #0D8H ;10ms@12MHz
MOV TL0, #0F0H ;65536-10000=D8F0H
SETB TR0 ;启动.
WAIT: ;下面使用查询方式.
JNB TF0, WAIT ;没有溢出就循环等待.
MOV TH0, #0D8H ;到了10ms,重新写入初始值.
MOV TL0, #0F0H ;65536-10000=D8F0H
CLR TF0
;-----------------------------------------------
;在这里编写 每到10ms 应该执行的指令.
CPL P1.0 ;可以使外接的LED闪光.
;-----------------------------------------------
SJMP WAIT ;继续查询.
END
‘叁’ 单片机的延时10ms是多长时间啊
延时多长时间要看你单片机的频率和使用的语言种类,比如同一个延时程序,在8M晶振单片机跑就比在4M的快接近一倍,用汇编写的延时就比用c的要准些,一般都用c写,用不同软件转换相同延时程序时间也不同。由于软件将你编的程序转成汇编交给单片机识别,它所执行的时间为单片机一个周期*程序运行的条数
‘肆’ 谁能帮我解释下这个单片机延时10ms的程序,延时时间是怎么算出来的 12M的晶振
这只是大概十毫秒。根据单片机的晶振频率来算的。比如你用的12M晶振,执行一条指令要三个机器周期,根据你循环了多少次,算出大概延时了多久。
‘伍’ 有关单片机延时程序的计算
这个根据单片机的晶振频率来算的,你先看看晶振周期是多大,然后一个机器周期是多少个晶振,一个机器周期就是一条代码执行的周期
51的指令周期是对晶振12分频
如果晶振是12M
那么执行一条一个机器周期的的指令就是1US
即1S/(12M/12分频)
=1US
一个机器周期是12个时钟周期
‘陆’ 单片机延时程序的计算
本程序的耗时计算如下:
1 + [1 + (1 + 1 + 2) * 249 + 2] * 5 + 2 = 4998 T
如果再算上主程序中的调用指令的2T,总共延时5000T。
如果时钟频率是6MHz,那么正好延时10ms。
‘柒’ pic单片机 实现10ms定时的简单程序
这个可以用几种办法:
1、直接用软件延时,如用以下的DELAY()延时子程序,如要延时5ms,直接调用DELAY(5)就好了,但这种是纯软件的延时。
//======延时(n)ms,在4MHz晶振下!!!
void DELAY(uint n)
{ uint j;
uchar k;
for (j=0;j<n;j++)
for (k=246;k>0;k--) NOP();
}
2、用定时器延时,要通过计算延时的时间来确定延时的常数(分频比和定时器初值)。
‘捌’ 这是单片机的延时程序,晶振是12MHZ,延时10ms。请问是怎么计算的其中,c=50。
不要试图去计算,计算不准确,软件延时本身都不准确,这些都是试验得来的,如果晶振频率不同,可以调整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延时结果是不一样的
‘玖’ 单片机延时时间怎样计算
如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。
如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059
2
mhz、12
mhz或6
mhz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1
μs和2
μs,便于精确延时。本程序中假设使用频率为12
mhz的晶振。最长的延时时间可达216=65
536
μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。
‘拾’ 如何利用单片机汇编指令编程实现延时10ms利用汇编指令设计多重循环编程实现20ms延时
这是调用一个延时10毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了
DELAY10MS:
MOV R2,#20
DELAY10MS1:
MOV R3,#250
DJNZ R3,$
DJNZ R3,DELAY10MS1
RET
这是调用一个延时20毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了
DELAY20MS:
MOV R2,#40
DELAY20MS1:
MOV R3,#250
DJNZ R3,$
DJNZ R3,DELAY20MS1
RET
RETRET的作用是子程序返回。调用一个子程序,当单片机执行到RET语句的时候,单片机就会返回到调用的地方并继续向下执行。
下面给你一个例程:
闪烁灯
ORG 00H
AJMP START
ORG 30H
START:
MOV P0,#00H
LCALL DELY;调用延时子程序
MOV P0,#0FFH
LCALL DELY;调用延时子程序
AJMP START
DELY:
MOV R7,#250
DL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DL1
RET