亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Keil C51通用精確延時程序設計

        2020-04-10 06:42:18余巧書
        科技風 2020年10期
        關鍵詞:匯編語言編譯器存儲器

        余巧書

        摘 要:本文從實際應用出發(fā),探討一種通用精確延時程序設計方法,并給出使用的詳細步驟,以便開發(fā)者能很好的理解和掌握。

        關鍵詞:Keil C51;精確延時;C語言與匯編語言混合編程

        單片機因具有體積小、功能強、成本低以及便于實現(xiàn)分布式控制而有非常廣泛的應用領域。單片機開發(fā)者在編制各種應用程序時經常會遇到實現(xiàn)精確延時的問題。用匯編語言編制程序時,這種問題比較容易解決,而目前開發(fā)單片機應用系統(tǒng)的主流工具為C語言。相對匯編語言來說,C語言有很多優(yōu)點,但缺點就是實時性沒有保證,因而在實時性要求高的場合,還需要匯編語言和C語言的聯(lián)合應用。

        使用C語言編寫單片機程序時,生成的機器代碼、代碼大小和效率,除了與C語言代碼本身有關外,還與編譯器有非常重要的關系。本文以Keil C51為例,探討如何編制通用精確的延時程序。為獲得通用精確的延時程序,可通過編譯器合理配置和優(yōu)化代碼編寫兩方面來達到目的。

        一、模塊化編程

        采用模塊化編程,將常用延時函數(shù)程序封裝為獨立模塊。項目中需要時僅需調用延時程序頭文件并將C語言源文件添加到項目中即可,便于修改和維護。同時模塊化也有利于在配置編譯器時有針對性對該模塊進行相應配置。

        二、合理配置編譯器

        對于Keil C51編譯器來說,可以從“存儲器類型及存儲器模型、代碼優(yōu)化”兩方面來配置。

        (一)存儲器類型

        Keil C51編譯器提供對所有8051內存區(qū)域的訪問。變量可以顯式地分配給特定的內存空間(通過在聲明中包含存儲器類型說明符)或隱式地分配(基于存儲器模型)。

        (二)存儲器模型

        存儲器模型用于確定函數(shù)參數(shù)、自動變量和不包含顯式存儲器類型的聲明的默認存儲器類型。Keil C51編譯器提供三種存儲器模型。

        Keil C51編譯器在CPU寄存器中最多可傳遞三個函數(shù)自變量。參數(shù)的傳遞可通過“REGPARMS”和“NOREGPARMS”控制命令進行控制。如果沒有寄存器可用于參數(shù)傳遞或包含的參數(shù)太多,使用固定存儲器位置傳遞超出部分的參數(shù)。

        (三)代碼優(yōu)化

        Keil C51編譯器提供了多層次、多種類的優(yōu)化配置,高級別優(yōu)化包含低級別優(yōu)化。優(yōu)化配置作用范圍有項目級(全局)、文件級(私有)和函數(shù)級(私有)。優(yōu)化設置包括優(yōu)化級別(用數(shù)字表示,數(shù)字越大級別越高)和優(yōu)化偏好(關鍵字為“SIZE”和“SPEED”)。

        項目級優(yōu)化可在項目選項的“C51”標簽中進行配置,具有全局性,若項目中的文件或函數(shù)沒有進行單獨優(yōu)化配置,則繼承項目級優(yōu)化。

        文件級優(yōu)化可在該文件選項的“C51”標簽中進行配置,配置后不受項目級優(yōu)化的影響;若選擇“Default”表示文件繼承項目級優(yōu)化。另外,也可以在文件的頭部使用“#pragma OPTIMIZE(9,SPEED)”指定文件級優(yōu)化。

        函數(shù)級優(yōu)化是在函數(shù)前使用“#pragma OT(9,SPEED)”指定函數(shù)的優(yōu)化。

        三、優(yōu)化代碼編寫

        對于短暫延時(通常10微秒以下),可以直接調用Keil C51頭文件“Intrins.h”,使用“_nop_();”函數(shù)獲得一個機器周期的延時時間。

        為保證延時的精確性,代碼采用匯編語言編寫,這樣每一條指令都有固定的機器周期。為了使延時程序具有一定的通用性和使用方便,采用C語言函數(shù)封裝。在Keil C51中通過預處理指令“#pragma asm”和“#pragma endasm”可以嵌套匯編語言語句。也可以采用“__asm”進行匯編的嵌入。為計算延時時間方便,函數(shù)參數(shù)數(shù)據(jù)類型選擇“unsigned char”。

        四、程序編寫范例

        五、仿真及實踐檢驗

        使用Proteus進行仿真,編寫測試程序如下:

        對測試程序進行反匯編,從匯編代碼中可以看出,測試程序IO端口電平的變化時間比延時時間多了3個機器周期(測試程序本身引入的時間),即一個脈沖周期多了6個機器周期時間。

        使用高精度示波器測量脈沖周期為206微秒,延時時間實際為(206微秒-6微秒),誤差為0,符合設計預期目的。

        六、歸納總結

        保障延時程序延時精確性和程序的通用性的關鍵:

        (1)采用模塊化編程并指定模塊私有優(yōu)化級,不受編譯器全局優(yōu)化級影響;

        (2)指定變量、函數(shù)存儲模式,避免因編譯器編譯模式影響;

        (3)延時程序核心采用匯編語言編寫,每條指令有確定的指令周期;

        (4)為保證程序通用、方便性,采用C語言函數(shù)封裝。

        猜你喜歡
        匯編語言編譯器存儲器
        靜態(tài)隨機存儲器在軌自檢算法
        高等學校計算機專業(yè)課程教學改革實踐——以匯編語言與接口技術課程為例
        計算機教育(2020年5期)2020-07-24 08:52:50
        基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
        匯編語言與C語言的混合程序設計技術研究
        電子制作(2019年10期)2019-06-17 11:45:16
        提高《匯編語言程序設計》教學效率的思考與實踐
        存儲器——安格爾(墨西哥)▲
        通用NC代碼編譯器的設計與實現(xiàn)
        基于Nand Flash的高速存儲器結構設計
        編譯器無關性編碼在微控制器中的優(yōu)勢
        基于ARM嵌入式平臺的x86譯碼SOC架構設計
        狠狠躁18三区二区一区| 亚洲熟妇av一区二区在线观看| av高潮一区二区三区| 邻居人妻的肉欲满足中文字幕| 欧美群妇大交群| 亚洲国产精品久久电影欧美| 西西人体444www大胆无码视频| 国精产品一区二区三区| 成人区人妻精品一区二区不卡网站| 国产一区二区在线视频| 国产又色又爽无遮挡免费动态图 | 国产av一区二区三区传媒| 欧美大黑帍在线播放| 91av手机在线观看| 午夜爽毛片| 少妇激情一区二区三区| 第一九区另类中文字幕| 久久影院午夜理论片无码| 精品人妻午夜一区二区三区四区 | 女人被狂c躁到高潮视频| 婷婷综合缴情亚洲| 国产九色AV刺激露脸对白| 亚洲av成人一区二区三区不卡| 日本av一区二区在线| 亚洲国产中文字幕视频| 正在播放国产多p交换视频| 内射中出无码护士在线| 婷婷亚洲国产成人精品性色 | 成a人片亚洲日本久久| 午夜一区二区三区观看| 夜夜躁狠狠躁日日躁2022| 亚洲精品综合欧美一区二区三区| 99久久免费国产精品2017| 天堂网av在线| 日韩中文字幕在线丰满| 欧美性白人极品1819hd| 亚洲成a∨人片在无码2023| 亚洲最新版无码AV| 久久久精品国产亚洲av网| 亚洲国产系列一区二区| 中文字幕久久熟女蜜桃 |