欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5882|回復: 8
收起左側

匯編延時程序如何編寫

[復制鏈接]
ID:223571 發表于 2017-8-16 11:35 | 顯示全部樓層 |閱讀模式
設計一個延時100毫秒的延時程序?匯編怎么寫呀
回復

使用道具 舉報

ID:111634 發表于 2017-8-16 20:26 | 顯示全部樓層
本帖最后由 zl2168 于 2017-8-17 21:10 編輯

【例3-24】 延時程序是單片機應用系統常用的模塊程序。試按下列要求編寫延時子程序:
⑴ 延時1ms,fOSC=6MHz;
⑵ 延時10ms,fOSC=12MHz;
⑶ 延時0.5s,fOSC=12MHz。


解:⑴ 延時1msfOSC =6MHz,一個機器周期為2msDJNZ指令為2個機器周期。


DY1ms:     MOV      R7,#250          ;置循環次數(指令為1個機器周期)


LOP:       DJNZ      R7,LOP           ;250×2機周=500機周


RET       ;子程序返回(單獨Keil調試時,需用END替代RET


上述子程序實際延時(500 +1)機周×2ms/機周=1002ms


延時10msfOSC =12MHz,一個機器周期為1ms


DY10ms:    MOV      R6,#20           ;置外循環次數


DY1:       MOV      R7,#250          ;置內循環次數


DY2:       DJNZ      R7,DY2          ;250×2機周=500機周


DJNZ      R6,DY1           ;500機周×20=10000機周


RET                         ;子程序返回(單獨Keil調試時,需用END替代RET


實際延時[(500+2+1)×20+1]機周×1ms /機周=10061ms


延時0.5sfOSC=12MHz,一個機器周期為1ms


DY05s:     MOV      R5,#5            ;置外循環次數


DY0:       MOV      R6,#200          ;置中循環次數


DY1:       MOV      R7,#250          ;置內循環次數


DY2:       DJNZ      R7,DY2          ;250×2機周=500機周


DJNZ      R6,DY1           ;500機周×200 =100000機周


DJNZ      R5,DY0           ;100000機周×5=500000機周


RET                       ;子程序返回(單獨Keil調試時,需用END替代RET


實際延時{[(2×250+2+1)×200+2+1]×5+1}機周×1ms/機周=503016ms


說明: RET(返回)指令需與子程序調用指令成對出現,單獨執行時會出錯。因此,Keil調試時,需去除RET指令,用END替代RET,才能得到正確的延時時間。但實際調用時,仍需加上RET指令,延時時間增加2機周。
以上摘自張志良編著《80C51單片機實用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學。

回復

使用道具 舉報

ID:123289 發表于 2017-8-16 20:50 | 顯示全部樓層
看手冊中,查指令執行所占用的時鐘同期數,你就一目了然了。
回復

使用道具 舉報

ID:227393 發表于 2017-8-16 21:02 | 顯示全部樓層
DL1MS:  MOV            27H,#10                                 ;2MS(10*200)us
DL2:        MOV            28H,#200
        DJNZ           28H,$
                DJNZ           27H,DL2
                RET
你可以再改一下就可以了
回復

使用道具 舉報

ID:7485 發表于 2017-8-16 21:52 | 顯示全部樓層
DLY_L:
       MOV   R6,#200
D10:
       MOV   R7,#247
       DJNZ  R7,$
           nop
           nop
           nop
       DJNZ  R6,D10
       RET建議你100ms的延時,最好用定時器。循環延時,將會使mcu停在這里100ms,按鍵、顯示都會受影響。
回復

使用道具 舉報

ID:7485 發表于 2017-8-16 21:53 | 顯示全部樓層
本帖最后由 ahshmj 于 2017-8-17 08:05 編輯

基于12m晶振。現在的誤差約0.02ms,如果要求的精度高,可以用“NOP”指令配合小循環調整到理論上的零誤差。如下:
DLY_L:
       MOV   R6,#200
D10:
       MOV   R7,#247
       DJNZ  R7,$
;      nop
       nop
       nop
       DJNZ  R6,D10
       mov  r6, #99
       djnz r6,$
       RET

回復

使用道具 舉報

ID:7485 發表于 2017-8-16 21:54 | 顯示全部樓層
“回復需要審核,請等待通過”真的挺麻煩的,沒法編輯。
回復

使用道具 舉報

ID:1 發表于 2017-8-16 22:31 | 顯示全部樓層
ahshmj 發表于 2017-8-16 21:54
“回復需要審核,請等待通過”真的挺麻煩的,沒法編輯。

這個問題,正在解決中,估計快了。主要是有非常多的機器人發廣告.
回復

使用道具 舉報

ID:770227 發表于 2020-7-15 11:44 來自觸屏版 | 顯示全部樓層
24MHZ頻率,1ms延時怎么算,需要可以自定義時間的那種
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表