51单片机,求用汇编语言编写延时1小时的子程序,要精确到秒级别
发布网友
发布时间:2022-04-25 21:50
我来回答
共3个回答
热心网友
时间:2022-06-17 20:31
这个可以做到,如果晶振是12M的话,一下方法可以实现延时1小时,精确度在秒级别。
DELAY1H:
MOV R7,#180 ;1/1000000
DLY1H:
LCALL DELAY_20S ;180*19.960603s +2*180
DJNZ R7,DLY1H ;2*180/1000000
RET 2/1000000
共延时时间:3592.9s误差为7.1秒,如果再精确的话,再加一点延时就可以了。
DELAY_20S: ;Total=19.960603s
MOV R2,# ;1
DLY1:
MOV R3,#200 ;1*200
DLY2:
MOV R4,#248 ;1**200*200
DJNZ R4,$ ;2**248*200*200
DJNZ R3,DLY2 ;2*200*200
DJNZ R2,DLY1 ;2*200
RET ;2
热心网友
时间:2022-06-17 20:31
延时一小时,这么长,应该要用定时器,不能用循环的方式。
ORG00H
AJMPMAIN
ORG0BH
AJMPT0INT0
ORG30H
MAIN:
MOV SP,#60H
MOVR4,#20
MOVTMOD,#01H
MOVTH0,#3CH;12M晶振时定时初值取#3CB0H,还可细调如 TL=#0B7H,可以更准
MOVTL0,#0B7H
SETBEA
SETBET0
SETBTR0
AJMP$
T0INT0:
MOVTH0,#3CH;定时中断子程序。重装定时常数
MOVTL0,#0B7H
DJNZR4,RTI;未1S,跳出中断
MOVR4,#20
INC26H;秒+1
MOVA,26H
CJNEA,#60,RTI
MOV26H,#0
INC27H;分+1
MOVA,27H
CJNEA,#60,RTI
MOV27H,#0
INC28H;时+1
MOVA,28H
CJNEA,#24,RTI
MOV28H,#0
RTI:
RETI
END追问定时器肯定用的,还有这段代码你用软件仿真过了,正确?如果没问题的话,我还可以多加20分
追答应该是没错的。1小时太长我也没仿真,我只试过满60秒分钟能+1,试了3分钟正常。
热心网友
时间:2022-06-17 20:32
单片机时钟,时分秒。
时,即每隔一小时,加一次一。
利用这种程序即可,不用单独编写子程序。