精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

匯編實現循環判斷與延時

汽車電子技術 ? 來源:滑小稽筆記 ? 作者:滑小稽 ? 2023-03-02 10:03 ? 次閱讀

7.1 循環結構的實現

循環語句可以使用以下架構實現C語言中的for語句。設存在一個代碼段OBA0。

OBA0:

;輸入循環的代碼

JMP OBA0

只不過這種方式是無限次循環,若想要有限次循環,則應該這么寫。

START:

MOV CX,n ;n代表循環的次數

JMP OBA0

OBA0:

;輸入循環的代碼

SEC CX

JNZ START

JMP OBA0

對于while語句的實現則可以使用LOOP,設存在一個代碼段OBA0。

OBA0:

MOV CX,n ;n代表循環的時間,即一個時鐘周期

LOOP $

上述的結構可以作為簡單的延時函數使用。

7.2 判斷結構的實現

常用的結構是利用按位與異或運算實現的,因為異或指令相同出0,相反出1的特性,所以可以寫成以下結構,設存在一個代碼段OBA0。

OBA0:

MOV AL,n ;n代表要參加比較的數

NOR n,x ;x代表比較的數

JNZ OBA1 ;相同跳轉到OBA1

JMP OBA0

OBA1:

;相當于if成立執行的指令

還有一種是利用減法,判斷全零標志位,思想與上面的例子一樣,區別就是將上面例子中的NOR改成減法指令SUB就可以了。

7.3 延時函數的實現

設存在一個代碼段OBA0。

OBA0:

MOV CX,n ;n代表循環的時間,即一個時鐘周期

LOOP $

注意:由于CX是一個16位寄存器,最大支持的數是65535,如果需要更長的時間,可以多寫幾遍,或者是采用以下結構的循環嵌套。

設存在一個代碼段OBA0。

START:MOV AX,n ;n代表循環n次LOOP延時

JMP OBA0

OBA0:

MOV CX,n ;n代表循環時間,即一個時鐘周期

LOOP $

DEC AX

JNZ START

JMP OBA0

這種結構最多支持計數2^32個脈沖。

注:為什么要使用延時函數?

在之前計算機的C語言編程中,由于不考慮通信協議以及視覺效果,所以沒有提到延時函數,所謂的延時函數通俗的說法就是讓CPU進行沒有意義的運算,一般低端的處理器采用的是讓CPU不停地做循環來達到延時的效果,后續的Cortex-M系列處理器由于增加了滴答時鐘,所以也可以采用定時器的方式達到延時的效果,因為處理器的速度都是MHz甚至GHz程度,但是通信協議有的最高速度也就幾百KHz,這就需要處理器來遷就通信協議的,因為有的芯片如果速度太快是根本無法工作的,所以加入適當的延時來適應這種低速芯片。現在的計算機中引入Cache緩存,目的也是為了匹配低速設備與高速CPU的通信。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7599

    瀏覽量

    136225
  • for
    for
    +關注

    關注

    0

    文章

    44

    瀏覽量

    15797
  • 循環語句
    +關注

    關注

    0

    文章

    9

    瀏覽量

    4858
收藏 人收藏

    評論

    相關推薦

    【原創分享】單片機延時的兩種實現方法

    單片機延時大家程序中都會用到,那么怎么實現呢?通常我們有軟件實現,就是語句循環;或者硬件實現,通過定時器/計數器。對于精準而言,從
    發表于 10-08 15:32

    通過循環次數的累加實現延時

    通過循環次數的累加實現延時是一種十分實用的延時技巧,在處理一些對時間精度沒要求,又要不間斷切換狀態的任務時,就可以使用這種方法實現
    發表于 01-18 09:32

    怎樣使用arm匯編指令實現for循環結構呢

    1,使用arm匯編指令 實現for循環結構2, while呢?3, do...while呢?4. switch 呢?麻煩高手指教下哈。最好給出具體的匯編指令!
    發表于 10-18 11:24

    單片機延時程序時間長度的記憶方法

    在利用MCS-51 匯編語言編寫單片機應用程序的時候,經常會用延時子程序來配合主程序功能的實現。大部分的延時子程序采用由MOV、NOP、DJNZ 指令構成的多重
    發表于 04-16 14:20 ?47次下載

    快速反復循環延時繼電器電路圖

    快速反復循環延時繼電器電路圖
    發表于 07-03 14:27 ?6329次閱讀
    快速反復<b class='flag-5'>循環</b>的<b class='flag-5'>延時</b>繼電器電路圖

    51單片機匯編語言教程_單片機延時程序分析

    51單片機匯編語言教程:5課單片機延時程序分析
    發表于 01-19 15:26 ?0次下載

    匯編編寫采用定時器延時控制速度的Protuse仿真步進電機

    采用匯編語言編寫的,通過定時器去實現延時的,步進電機Protuse 仿真的步進電機。 分享參考學習。
    發表于 12-04 13:37 ?2次下載

    關于單片機匯編延時程序的一些了解

    如果用高級語言編程,只需要簡單地調用延時函數就可以實現,但是計算機具體是怎么實現的呢?要想知其所以然,還得從匯編開始學起。
    發表于 08-04 09:19 ?2749次閱讀

    51單片機的匯編延時程序免費下載

    本文檔的主要內容詳細介紹的是51單片機的匯編延時程序免費下載。用6MHz晶振,51單片機,一個機器周期為2us。延時10s子程序如下
    發表于 08-05 17:34 ?4次下載
    51單片機的<b class='flag-5'>匯編</b><b class='flag-5'>延時</b>程序免費下載

    單片機實現延時的方法

    實現延時通常有兩種方法:一種是硬件延時,要用到定時器/計數器,這種方法可以提高CPU的工作效率,也能做到精確延時;另一種是軟件延時,這種方法
    的頭像 發表于 09-22 11:46 ?7449次閱讀

    51匯編模擬延時交通燈PCB及仿真文件

    51匯編模擬延時交通燈PCB及仿真文件
    發表于 06-25 09:19 ?13次下載

    單片機延時是怎么實現

    單片機延時大家程序中都會用到,那么怎么實現呢?通常我們有軟件實現,就是語句循環;或者硬件實現,通過定時器/計數器。 對于精準而言,從
    的頭像 發表于 10-12 17:18 ?9660次閱讀

    51匯編(五):延時函數

    ,這時我們就需要通過循環執行NOP,控制循環次數實現延時,并包裝成函數,便于隨時調用。;執行2×20×100次NOPDELAY:MOV R7, #2DELAYLOOP1:MOV R
    發表于 11-20 17:21 ?7次下載
    51<b class='flag-5'>匯編</b>(五):<b class='flag-5'>延時</b>函數

    EFR32上實現精確的軟件延時

    > 0; n--) for(i = 0; i < loops; i++) ;}這意味著:最內層的for語句,執行一次循環需要12個CPU時鐘周期。反匯編如下圖:在編譯器的優化選項設置為“-O2”時,上面的代碼里的循環
    發表于 11-24 19:06 ?3次下載
    EFR32上<b class='flag-5'>實現</b>精確的軟件<b class='flag-5'>延時</b>

    STM32關延時功能實現方式研究

    STM32常見延時實現方式研究一、阻塞延時函數1. 循環延時(V1.0.0)代碼(while形式)測試數據特點總結2. SYSTICK非中斷
    發表于 11-24 19:21 ?4次下載
    STM32關<b class='flag-5'>延時</b>功能<b class='flag-5'>實現</b>方式研究