chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教大家如何在單片機(jī)中用匯編優(yōu)雅的點(diǎn)燈

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-07-27 15:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

現(xiàn)在可能很少看到匯編程序了,但單片機(jī)的啟動(dòng)文件、RTOS底層代碼等一些地方,依然還有匯編代碼的身影。

不知道大家有沒(méi)有學(xué)過(guò)匯編,或者有沒(méi)有用匯編語(yǔ)言編過(guò)程?

今天就給大家分享一下匯編語(yǔ)言的那些事。

1

學(xué)習(xí)匯編語(yǔ)言我在10年學(xué)習(xí)單片機(jī)編程的時(shí)候,老師教學(xué)都還是用匯編教我們,包括教學(xué)實(shí)驗(yàn),也是要求我們用匯編寫程序。

MOV A,#00HMOV P1,A

我記得那會(huì)兒,老師要求我們把匯編指令背下來(lái)。雖然現(xiàn)在很多匯編指令寫不出來(lái)了,但看到很多匯編代碼,還是基本明白它的意思。

以前計(jì)算機(jī)三級(jí)(PC技術(shù))的上機(jī)考試,就是用匯編編程,我那個(gè)時(shí)候上機(jī)考試還是滿分。當(dāng)時(shí)覺(jué)得自己很牛逼,現(xiàn)在看來(lái)就是一菜鳥

2

匯編轉(zhuǎn)C語(yǔ)言剛開(kāi)始學(xué)習(xí)匯編那會(huì)兒,我真的用匯編在51單片機(jī)上寫流水燈程序。后面看了用C語(yǔ)言寫流水燈程序,突然發(fā)現(xiàn),哇,用C語(yǔ)言寫程序還能這么簡(jiǎn)單、方便。

于是,我就那個(gè)時(shí)候開(kāi)始放棄了匯編,轉(zhuǎn)向了C語(yǔ)言。包括后面我在大學(xué)實(shí)驗(yàn)室自己學(xué)習(xí)、DIY做東西、以及后面的全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽,都是用C語(yǔ)言編寫的程序。

10行匯編程序,可能只需要一行C語(yǔ)言代碼就能實(shí)現(xiàn),這是C語(yǔ)言相比匯編簡(jiǎn)化的優(yōu)點(diǎn)。

但是,C語(yǔ)言編寫的程序,經(jīng)過(guò)編譯,也會(huì)轉(zhuǎn)為匯編。比如我們?cè)诰€調(diào)試代碼的時(shí)候,會(huì)看到類似的“匯編窗口”:

9ce82660-eb93-11eb-a97a-12bb97331649.png

因?yàn)橐郧皢纹瑱C(jī)的運(yùn)行速度不高,且內(nèi)存和Flash容量不大,要求節(jié)約程序空間。

所以使用匯編的優(yōu)點(diǎn):代碼運(yùn)行效率更高、更節(jié)約代碼存儲(chǔ)空間。

3

對(duì)比用匯編和C語(yǔ)言寫流水燈程序匯編語(yǔ)言寫程序的主要缺點(diǎn):語(yǔ)法復(fù)雜、可讀性差、代碼量大等。

下面分享一個(gè)實(shí)例:51單片機(jī)上的流水燈程序。分別用C語(yǔ)言和匯編寫出來(lái),大家對(duì)比一下就知道了。

C語(yǔ)言版:

/******************** 宏定義 **************************/#define MAIN_Fosc 22118400L //定義主時(shí)鐘

/******************** 延時(shí)函數(shù) **************************/void delay_ms(u8 ms){ u16 i; do{ i = MAIN_Fosc / 13000; while(--i) ; //14T per loop }while(--ms);}

/******************** 主函數(shù) **************************/void main(void){ P0M1 = 0; P0M0 = 0; //設(shè)置為準(zhǔn)雙向口 P1M1 = 0; P1M0 = 0; //設(shè)置為準(zhǔn)雙向口 P2M1 = 0; P2M0 = 0; //設(shè)置為準(zhǔn)雙向口 P3M1 = 0; P3M0 = 0; //設(shè)置為準(zhǔn)雙向口 P4M1 = 0; P4M0 = 0; //設(shè)置為準(zhǔn)雙向口 P5M1 = 0; P5M0 = 0; //設(shè)置為準(zhǔn)雙向口 P6M1 = 0; P6M0 = 0; //設(shè)置為準(zhǔn)雙向口 P7M1 = 0; P7M0 = 0; //設(shè)置為準(zhǔn)雙向口

while(1) { P17 = 0; delay_ms(250); delay_ms(250); P17 = 1; P16 = 0; delay_ms(250); delay_ms(250); P16 = 1; P47 = 0; delay_ms(250); delay_ms(250); P47 = 1; P46 = 0; delay_ms(250); delay_ms(250); P46 = 1; }}

匯編語(yǔ)言版:

;******************** 宏定義 **************************/Fosc_KHZ EQU 22118 ;22118KHZ

STACK_POIRTER EQU 0D0H ;堆棧開(kāi)始地質(zhì)

;******************** 延時(shí)函數(shù) **************************/F_delay_ms: PUSH 02H ;入棧R2 PUSH 03H ;入棧R3 PUSH 04H ;入棧R4

MOV R2,A

L_delay_ms_1: MOV R3, #HIGH (Fosc_KHZ / 13) MOV R4, #LOW (Fosc_KHZ / 13) L_delay_ms_2: MOV A, R4 ;1T Total 13T/loop DEC R4 ;2T JNZ L_delay_ms_3 ;4T DEC R3L_delay_ms_3: DEC A ;1T ORL A, R3 ;1T JNZ L_delay_ms_2 ;4T DJNZ R2, L_delay_ms_1

POP 04H ;出棧R2 POP 03H ;出棧R3 POP 02H ;出棧R4 RET

;******************** 主程序 **************************/ ORG 0100H ;resetF_Main: CLR A MOV P0M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P0M0, A MOV P1M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P1M0, A MOV P2M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P2M0, A MOV P3M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P3M0, A MOV P4M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P4M0, A MOV P5M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P5M0, A MOV P6M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P6M0, A MOV P7M1, A ;設(shè)置為準(zhǔn)雙向口 MOV P7M0, A

MOV SP, #STACK_POIRTER MOV PSW, #0 ;選擇第0組R0~R7

L_MainLoop: CLR P1.7 MOV A, #250 LCALL F_delay_ms ;延時(shí)250ms LCALL F_delay_ms ;延時(shí)250ms SETB P1.7

CLR P1.6 MOV A, #250 LCALL F_delay_ms ;延時(shí)250ms LCALL F_delay_ms ;延時(shí)250ms SETB P1.6

CLR P4.7 MOV A, #250 LCALL F_delay_ms ;延時(shí)250ms LCALL F_delay_ms ;延時(shí)250ms SETB P4.7

CLR P4.6 MOV A, #250 LCALL F_delay_ms ;延時(shí)250ms LCALL F_delay_ms ;延時(shí)250ms SETB P4.6

SJMP L_MainLoop

上面兩個(gè)程序,實(shí)現(xiàn)的功能都一樣(流水燈),但對(duì)比代碼,大家發(fā)現(xiàn)有啥區(qū)別?

對(duì)于有匯編基礎(chǔ)的同學(xué)來(lái)說(shuō),可能這個(gè)簡(jiǎn)單的流水燈程序還是很好理解。

但是,對(duì)于大部分人來(lái)說(shuō),肯定都會(huì)覺(jué)得匯編很難讀。是的,這個(gè)是匯編的“特點(diǎn)”。

4

最后匯編語(yǔ)法,對(duì)于絕大部分讀者來(lái)說(shuō),我現(xiàn)在是不建議再深入學(xué)習(xí)了,只需要了解一些基礎(chǔ)的內(nèi)容即可。

有少部分人,想從事底層開(kāi)發(fā),比如底層驅(qū)動(dòng)、單片機(jī)驗(yàn)證、固件庫(kù)開(kāi)發(fā)等這些讀者,有時(shí)間還是可以進(jìn)一步了解匯編的一些技術(shù)。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6074

    文章

    45340

    瀏覽量

    663629

原文標(biāo)題:如何在單片機(jī)中用匯編優(yōu)雅的點(diǎn)燈

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    為什么單片機(jī)還在用C語(yǔ)言編程?

    的缺陷 高級(jí)語(yǔ)言存在的目的是可以實(shí)現(xiàn)更為優(yōu)化的算法,更多的是為了方便的執(zhí)行方案,但是,高級(jí)語(yǔ)言對(duì)程序存儲(chǔ)空間的占用要比匯編和C語(yǔ)言多很多。由于這個(gè)原因就決定了其他高級(jí)語(yǔ)言不適用在單片機(jī)上,單片機(jī)
    發(fā)表于 11-28 07:37

    編寫簡(jiǎn)單高效單片機(jī)匯編程序

    的行數(shù)多并不一定意味著效率低。 關(guān)鍵在于寫代碼時(shí)避免冗余,靈活運(yùn)用模塊化設(shè)計(jì)和單片機(jī)資源。 最終程序既要高效運(yùn)轉(zhuǎn),又不失結(jié)構(gòu)清晰。 匯編語(yǔ)言的難點(diǎn)在于編寫簡(jiǎn)短而高效的代碼,需要理解單片機(jī)的指令集
    發(fā)表于 11-24 07:00

    單片機(jī)和嵌入式,到底是什么關(guān)系?

    的關(guān)系:什么是單片機(jī)?什么是嵌入式?它們到底是不是一回事?先說(shuō)說(shuō)大家最先聽(tīng)說(shuō)的那個(gè)詞——單片機(jī)(MCU)。單片機(jī),全稱是MicrocontrollerUnit,顧名思
    的頭像 發(fā)表于 11-14 10:28 ?591次閱讀
    <b class='flag-5'>單片機(jī)</b>和嵌入式,到底是什么關(guān)系?

    C語(yǔ)言和單片機(jī)C語(yǔ)言有什么差異

    單片機(jī)c語(yǔ)言相對(duì)于普通C語(yǔ)言增加了一些基本的指令,還有變量的賦值是16進(jìn)制,當(dāng)然單片機(jī)c語(yǔ)言只牽涉到普通c語(yǔ)言非常基礎(chǔ)部分。 主要的差異具體體現(xiàn)在: 1、單片機(jī)中C的語(yǔ)法一般都對(duì) ANSI C
    發(fā)表于 11-14 07:55

    單片機(jī)用什么封裝

    單片機(jī)封裝是將芯片內(nèi)部電路與外部引腳連接并包裹保護(hù)的結(jié)構(gòu),不僅影響單片機(jī)的安裝方式、適用場(chǎng)景,還與電路設(shè)計(jì)的緊湊性、散熱性能密切相關(guān)。不同封裝類型各有特點(diǎn),適配從簡(jiǎn)單電路到復(fù)雜系統(tǒng)的多樣化需求
    的頭像 發(fā)表于 08-01 13:47 ?896次閱讀

    什么單片機(jī)比較耐用

    ? ? ? ? 在工業(yè)控制、戶外設(shè)備、醫(yī)療儀器等場(chǎng)景中,單片機(jī)的耐用性直接決定了設(shè)備的穩(wěn)定運(yùn)行與維護(hù)成本。耐用的單片機(jī)通常具備寬溫工作范圍、強(qiáng)抗干擾能力、穩(wěn)定的電源適應(yīng)性和長(zhǎng)壽命的硬件設(shè)計(jì)。深圳市安
    的頭像 發(fā)表于 07-31 13:48 ?556次閱讀

    怎么測(cè)單片機(jī)系統(tǒng)頻率

    單片機(jī)系統(tǒng)頻率是指單片機(jī)工作時(shí)的時(shí)鐘頻率,它直接影響單片機(jī)的運(yùn)行速度和處理能力,準(zhǔn)確測(cè)量系統(tǒng)頻率對(duì)單片機(jī)應(yīng)用開(kāi)發(fā)、程序調(diào)試和性能優(yōu)化具有重要意義。測(cè)量
    的頭像 發(fā)表于 07-25 11:39 ?477次閱讀

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

    在各類自動(dòng)化設(shè)備和智能裝置中,電機(jī)是重要的執(zhí)行部件,而單片機(jī)作為控制核心,需要通過(guò)特定的方式驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)驅(qū)動(dòng)電機(jī)并非直接連接即可,而是要根據(jù)電機(jī)類型和功率,搭配合適的驅(qū)動(dòng)電路,才能實(shí)現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?439次閱讀

    單片機(jī)怎么燒程序

    單片機(jī)燒程序是將編寫好的程序代碼寫入單片機(jī)內(nèi)部存儲(chǔ)單元,讓單片機(jī)按照預(yù)設(shè)邏輯工作的過(guò)程,是單片機(jī)應(yīng)用開(kāi)發(fā)中不可或缺的環(huán)節(jié)。無(wú)論是簡(jiǎn)單的燈光控制程序,還是復(fù)雜的工業(yè)控制算法,都需要通過(guò)燒
    的頭像 發(fā)表于 07-23 11:47 ?653次閱讀

    單片機(jī)原理及應(yīng)用

    本書全面系統(tǒng)地介紹了 MCS-51 系列單片機(jī)的基本結(jié)構(gòu)、工作原理及應(yīng)用技術(shù)。主要內(nèi)容包括:微型計(jì)算機(jī)的基礎(chǔ)知識(shí)、MCS-51 單片機(jī)的基本結(jié)構(gòu)、匯編語(yǔ)言和 C51 語(yǔ)言程序設(shè)計(jì)方法、中斷系統(tǒng)
    發(fā)表于 06-16 16:58

    圖解單片機(jī)功能與應(yīng)用(完整版)

    從基礎(chǔ)知識(shí)的介紹出發(fā),圖文并茂,直觀、系統(tǒng)地介紹了單片機(jī)的內(nèi)部結(jié)構(gòu)、工作原理和應(yīng)用技巧。全書分為10章,內(nèi)容包括51單片機(jī)編程資源圖解、51單片機(jī)指令系統(tǒng)圖解、匯編語(yǔ)言程序設(shè)計(jì)圖解、輸
    發(fā)表于 06-16 16:52

    PLC和單片機(jī)到底有什么區(qū)別?

    在自動(dòng)化和嵌入式開(kāi)發(fā)領(lǐng)域,PLC和單片機(jī)是兩種常見(jiàn)的控制系統(tǒng)。雖然它們有許多相似之處,但它們的功能、應(yīng)用范圍、開(kāi)發(fā)成本等方面也存在顯著差異。本文將從多個(gè)角度詳細(xì)探討這兩者的不同之處,幫助大家更好地理
    的頭像 發(fā)表于 04-07 11:58 ?4637次閱讀
    PLC和<b class='flag-5'>單片機(jī)</b>到底有什么區(qū)別?

    單片機(jī)科普總結(jié),建議收藏!

    單片機(jī)(MicrocontrollerUnit,MCU)作為嵌入式系統(tǒng)的核心之一,在現(xiàn)代電子產(chǎn)品中無(wú)處不在。從智能家居、汽車電子,到工業(yè)控制、醫(yī)療設(shè)備,單片機(jī)支撐著無(wú)數(shù)智能化應(yīng)用的發(fā)展。對(duì)于初學(xué)者
    的頭像 發(fā)表于 04-07 11:58 ?4479次閱讀
    <b class='flag-5'>單片機(jī)</b>科普總結(jié),建議收藏!

    EE-128:C語(yǔ)言中的DSP:從C調(diào)用匯編類成員函數(shù)

    電子發(fā)燒友網(wǎng)站提供《EE-128:C語(yǔ)言中的DSP:從C調(diào)用匯編類成員函數(shù).pdf》資料免費(fèi)下載
    發(fā)表于 01-07 13:48 ?0次下載
    EE-128:C語(yǔ)言中的DSP:從C調(diào)<b class='flag-5'>用匯編</b>類成員函數(shù)

    單片機(jī)Debug工具性能對(duì)比 單片機(jī)調(diào)試常用命令

    單片機(jī)(Microcontroller Unit, MCU)調(diào)試是嵌入式開(kāi)發(fā)中的一個(gè)重要環(huán)節(jié),它幫助開(kāi)發(fā)者發(fā)現(xiàn)和修復(fù)代碼中的錯(cuò)誤,優(yōu)化程序性能。不同的單片機(jī)和開(kāi)發(fā)環(huán)境可能使用不同的調(diào)試工具和命令
    的頭像 發(fā)表于 12-19 09:56 ?2172次閱讀