at89c51微控制器怎麼用組合語言寫「多個延時程式」

2021-12-21 11:18:40 字數 5332 閱讀 4909

1樓:匿名使用者

微控制器組合語言中要使一個延時程式可以被不同情況下呼叫而延時不同的時間,可以通過類似於c語言中傳遞引數的方式來實現,舉例如下:

org 0000h

ljmp main

org 0030h

main:

mov p0,#5ah ;p0上的led燈間隔點亮mov r7,#50 ;r7是延時傳遞引數lcall delay ;呼叫延時函式mov p0,#0a5h ;p0上led燈另一半點亮mov r7,#100 ;延時時間加長lcall delay

mov p0,#00h ;led等全部點亮mov r7,#150 ;延時再次加長lcall delay

mov p0,#0ffh ;燈滅

mov r7,#200 ;延時時間再次加長lcall delay

sjmp main ;迴圈

delay:

mov r2,#100

dly:

mov r3,#250

djnz r3,$

djnz r2,dly

djnz r7,delay ;r7是呼叫前賦值的傳遞引數。

retend

2樓:做而論道

標號可以用 $ 代替。

每使用一個 $,就可以少寫一個標號。

下面的寫法,和你原來的,轉移功能完全相同,但卻節約了三個標號。

delay:mov r7,#10

mov r6,#50

mov r5,#200

djnz r5, $ ; = d2: djnz r5, d2

djnz r6, $ - 4 ; = djnz r6, d1djnz r7, $ - 8 ; = djnz r7, d0ret

3樓:匿名使用者

;晶振24m

delay1s:  ;子程式

mov   a,r4

jz    enddelay

mov   r5,#10h           ; ∵ 1s=2000000*0.5us

mov   r6,#43h          ; ∴ 2000000/2=1000000

mov   r7,#40h           ; 1000000用16進製表示為: 0f4240

; 所以 r5=0fh+1=10h

;     r6=042h+1=043h

;     r7=40h

loop:   djnz  r7,$              ; 延時時間≈2×[(r5-1)×256+r6-1]×256+r7

djnz  r6,loop           ; 當r5、r6等於0,相當於256參與運算

djnz  r5,loop           ; 當r5、r6等於0,相當於256參與運算

djnz  r4,delay1s

enddelay: ret

上面是延時子程式,基礎延時是1s,呼叫前給r4賦值,r4的值就是延時的秒數,比如:

mov  r4,#3      ;表示延時3秒

lcall   delay1s

希望你能參考著用,這個用法有點像帶引數的函式

4樓:匿名使用者

如果延時時間是成倍數關係 的,可以以一個為基數 。比如10ms的子程式 ,呼叫10次就是100ms。

r不夠用,也可以用記憶體單元

5樓:0開拓者

例如delay_r7: ;delay=r7*10ms

de10ms: ;@12m

mov r6,#01h

dl1:

mov r5,#26h

dl0:

mov r4,#82h

djnz r4,$

djnz r5,dl0

djnz r6,dl1

djnz r7,de10ms

ret使用延時10ms: mov r7,#1lcall delay_r7

使用延時100ms:mov r7,#10

lcall delay_r7

使用延時2.5s: mov r7,#250lcall delay_r7

組合語言是一種什麼程式設計語言?

6樓:娛樂大潮咖

組合語言是用於電子計算機,微處理器,微控制器或其他可程式設計裝置的低階語言,e68a8462616964757a686964616f31333431366431也稱為符號語言。 在組合語言中,助記符用於替換機器指令的操作碼,並且使用地址或運算元代替指令或運算元的地址。

在不同的裝置中,組合語言對應於不同的機器語言指令集,這些指令集通過彙編過程轉換為機器指令。 特定的組合語言和特定的機器語言指令集是一一對應的,不能直接移植到不同的平臺上。

由於彙編指令系統龐大,因此有必要構建一種指令系統,該指令系統具有大量指令,複雜的格式以及較差的儲存空間。 指令中最難的部分是指令支援的定址模式。 指令的本質是如何獲取指令中的運算元。

(1)傳送指令:

包括通用資料傳送指令mov、條件傳送指令cmovcc、堆疊操作指令push/pusha/pushad/pop/popa/popad、交換指令xchg/xlat/bswap、地址或段描述符選擇子傳送指令lea/lds/les/lfs/lgs/lss等

(2)邏輯運算:

這部分指令用於執行算術和邏輯運算,包括加法指令add/adc、減法指令sub/sbb、加一指令inc、減一指令dec、比較操作指令cmp等。

(3)移位指令:

這部分指令用於將暫存器或記憶體運算元移動指定的次數。包括邏輯左移指令shl、邏輯右移指令shr、算術左移指令sal、算術右移指令sar、迴圈左移指令rol、迴圈右移指令ror等。

但是,對於計算機的基本組合語言而言,這種型別的定址將涉及大量與複雜的儲存管理方法密切相關的計算儲存格式,因此很難理解。 最後,彙編指令還與標誌的影響方式有關,但是處理器標誌非常複雜,因此很難掌握該機制。

組合語言是計算機提供給使用者的最快,最高效的語言,並且是唯一可以利用計算機的所有硬體功能並直接控制硬體的語言。 但是,由於編寫和除錯組合語言程式比高階語言複雜,因此它們的應用程式目前不如高階語言廣泛。

暫存器可以理解為cpu中的儲存器或者記憶體,是cpu中可以儲存資料的器件,一個cpu中可以有多個暫存器。上述示例中的 ax 、bx 就是暫存器的代號。

組合語言比機器語言更具可讀性,但是組合語言仍然比高階語言更不可讀。 但是,用它編寫的程式具有儲存空間低和執行速度快的特性,並且不能用高階語言代替。 在實際應用中,組合語言的使用取決於特定的應用程式要求,軟體開發時間和質量。

7樓:鶴髮童顏

組合語言是依賴於計算機的低階的程式設計語言。

這些指令都是二進位制的,稱為操作碼(opcode),比如加法指令就是00000011。編譯器的作用,就是將高階語言寫好的程式,翻譯成一條條操作碼。

對於人類來說,二進位制程式是不可讀的,根本看不出來機器幹了什麼。為了解決可讀性的問題,以及偶爾的編輯需求,就誕生了組合語言。

由於彙編更接近機器語言,能夠直接對硬體進行操作,生成的程式與其他的語言相比具有更高的執行速度,佔用更小的記憶體,因此在一些對於時效性要求很高的程式、許多大型程式的核心模組以及工業控制方面大量應用。

組合語言是二進位制指令的文字形式,與指令是一一對應的關係。比如,加法指令00000011寫成組合語言就是 add。只要還原成二進位制,組合語言就可以被 cpu 直接執行,所以它是最底層的低階語言。

組合語言基礎命令就只有「將資訊從某處移到某處」和加、減等,都是幼兒園小孩能理解的計算。跳轉命令分直接跳轉和有條件跳轉,總共加起來也沒幾個。

而且每個模組都很小,能寫的內容非常有限。但在這麼簡陋的基礎上,可以從最基礎的傳輸資訊、到用加法減法配合儲存單元實現乘法除法等運算、再到更復雜的資訊處理,可以說這個遊戲在其設計範圍內真的做到極致了。

學習組合語言的好處:

可以自己編寫出比較高階的程式,開始專精彙編分支的某一種比如51微控制器,arm,x86,懂得硬體基本構造和計算機邏輯電路和cpu原理。可以自己編寫除錯底層系統。可以彙編/反彙編,可以進行病毒的編寫和除錯和破譯。

移動端系統底層/電子產品/硬體基本系統熟練於心,可以進階成一個真正的電子極客了。

8樓:魏啟

組合語言是一種助記符,一種低階語言,直接面對指令,將二進位制指令替換**類便於記憶的字串,並冠以特殊的格式。每一條彙編指令對應一條二進位制指令。根據核心架構的不同,不同的指令有不同的長度和格式。

9樓:江柳兒情感生活

組合語言(assembly language)包含用抄短bai助記符如 add、mov、sub 和 call 書寫的語句。彙編du語言與機器語言是一zhi對一(daoone-to-one)的關係:每一條組合語言指令對應一條機器語言指令。

10樓:匿名使用者

組合語言是一種依賴於計算機的低階 程式設計語言 。

組合語言是直接告訴cpu的每個暫存器及每個外設去做什麼,因為是最基本的語言,比這再低階的語言就職110100010101011110之類的語言了。

11樓:左手半夏

組合語言本身很簡單,常用指令沒幾個,語法規則也不多,看幾個小時資料似乎就明白了,但其實不然。彙編的背後是體系結構,是程式設計拋開各種高層形態的最根本,最本質的解釋。

12樓:傑哥來說電影

組合語言是依賴於計算機的低階的程式設計語言。

以匯言但編譯機語,故其不從根本版上解決機言之特殊性。是權故,匯語與機身之程式設計境同候。難推與植,然其言之有仍之機行。高效,以其可讀性、簡性,匯言猶為常用之程式設計語一。

13樓:匿名使用者

組合語言是最古老的程式語言,在所有的語言中,它與原生機器語言最為接近。它能直接訪問計算機硬體,要求使用者瞭解計算機架構和作業系統。

14樓:沙裡波特

組合語言du

,是和機器zhi語dao言專

同一層次的程式語言。

組合語言的主體,是機器語

屬言的助記符,比機器語言易懂,好記。

用組合語言編寫程式,也就是用機器語言程式設計,難度很高。

一般初學者,學不進去。

會了高階語言,如果不學會組合語言,就難稱高手。

組合語言是最低階的程式語言嗎?

15樓:匿名使用者

朋友 不要說某種語言最低階 每種語言都有自己的優勢 彙編優勢就在於它的效率高 簡潔 好用 至於安全性 要看你想做什麼東西 選擇一個合適你的程式語言

以AT89C51微控制器為控制器的智慧交通燈控制系統,基於

需要給你完成一份嗎 我做微控制器設計的 你好!這樣的效果可以嗎 這個是比較基礎的管腳控制哦 理工學科是什麼 理工學科是指理學和工學兩大學科。理工,是一個廣大的領域包含物理 化學 生物 工程 天文 數學及前面六大類的各種運用與組合。理學理學是中國大學教育中重要的一支學科,是指研究自然物質運動基本規律的...

51微控制器資料搬運c語言程式,51微控制器訪問片內資料儲存器某單元的內容用c語言怎麼寫???

aa i bb i 51微控制器訪問片內資料儲存器某單元的內容用c語言怎麼寫?方法1 char data p 定義一個指向片內ram地址的指標 p 0x30 片內ram地址為0x30 p 0x12 向0x30內寫入立即數0x12 方法2 include char x x dbyte 0x30 將片內...

如何用組合語言實現微控制器比較轉移

pan clr cy mov 30h,a subb a,10 jb cy,prog1 mov a,30h clr cy subb a,20 jb cy,prog2 mov a,30h clr cy subb a,30 jb cy,prog3 prog1 nop prog2 nop prog3 nop...