① 请问这段单片机汇编语言程序(关于定时器延时)是什么意思
DELAY:MOV
R3,#14H
;循环20次
MOV
TMOD,#10H
;定时器1工作于模式1(16位定时器)
MOV
TH1,#3CH
;赋初值,50毫秒溢出一次
MOV
TL1,#0B0H
SETB
TR1
;启动定时器1
LP1:
JBC
TF1,LP2
;溢出位为1,则清0后转移到LP2
SJMP
LP1
;否则等待TF1置1
LP2
:MOV
TH1,#3CH
;重新赋初值
MOV
TL1,#0B0H
DJNZ
R3,LP1
;20次循环完成则退出,否则转LP1
RET
;综述:以上共延时1秒。
② 单片机80c51,用汇编,编写一个延时子程序,通过调用此程序实现在p1.0输出周期为10ms的方波
ORG 0000H
AJMP MAIN
ORG 000BH
T0MS EQU NOT 5000 ; 定义定时器初值 12M晶振 5 mS = 5000 10 mS = 10000
MOV TL0, #LOW T0MS
MOV TH0, #HIGH T0MS
CPL P1.0 ; P1.0 取反 输出 10 mS的方波
REIT
MAIN:MOV TMOD,#01H
MOV TL0, #LOW T0MS
MOV TH0, #HIGH T0MS
SETB TR0 ; 启动定时器
SETB ET0 ; 开 T0 中断
SETB EA ; 开 总 中断
SJMP $
END
③ 用汇编怎么写51单片机的延时程序
DEL1S:MOV R7,#10x0dx0aD1: MOV R6,#200x0dx0aD2: MOV R5,#250x0dx0a DJNZ R5,$x0dx0a DJNZ R6,D2x0dx0a DJNZ R7,D1x0dx0a RETx0dx0ax0dx0a说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等x0dx0a 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5
④ 单片机精准延时汇编语言
如果是用汇编语言的话,是可以做到精准延时的。当然首先要有一个精准的时钟,也即是晶振要准确,比如使用精准的12M晶振12T模式的51单片机延时1毫秒,程序如下:
DELAY1MS:
MOVR3,#249;1
DJNZR3,$;2*249
MOVR3,#249;1
DJNZR3,$;2*249
RET;2
延时时间为:1+2*249+1+2*249+2=1000T,这里使用12M晶振,T=1微秒,所以总共延时1000微秒也即是1毫秒。如果要延时更多时间,可以采用循环方式来实现。当然在计算延时时间时要考虑到使用的单片机类型和型号,比如STC89C51是6T,DS80320是4T,STC12C5A60S2是12T,这些因数一定要考虑进去才行。