組合語言編寫AT89C52,組合語言編寫AT89C

2022-07-05 13:12:01 字數 3449 閱讀 4397

1樓:做而論道

怎麼都是輸出?

沒有輸入作依據,根據什麼輸出不同的值?

把題目改為:

p1.0口輸入為1,則p1.3口輸出為1,p1.

0口輸入為0,則p1.3口輸出為0,p1.1口輸入為1,則p1.

4口輸出為1,p1.1口輸入為0,則p1.4口輸出為0

程式:org   0000h

mov   c, p1.0

mov   p1.3, c

mov   c, p1.1

mov   p1.4, c

sjmp  0000hend

2樓:匿名使用者

org 0000h

ljmp main

org 0030h

main:

mov p1.3,p1.0

mov p1.4,p1.1

mov p1.5,p1.2

sjmp mainend

3樓:一萬光年

org 0000h

l_main:

jb  p1.0, l_p13_set_hclr p1.3

ajmp l_next

l_p13_set_h:

setb p1.3

l_next:

jb  p1.1, l_p14_set_hclr p1.4

ajmp l_main

l_p14_set_h:

setb p1.4

ljmp l_mainend

微控制器組合語言程式設計,通過用at89c52微控制器定時/計數器0的定時功能構成一簡單的方波發生器

用微控制器組合語言編寫微控制器at89c52控制led燈

4樓:匿名使用者

控制埠週期的輸出0和1

led就跟著亮-滅了。

具體要根據你的電路來編寫軟體。

用keil編譯組合語言編寫的程式,顯示有錯誤且目標未建立,驅動是at89c52,程式如下:

5樓:匿名使用者

你的程式不全,缺少以下子程式或**:

1、delay

2、wri

3、wrd

4、delay1

5、dab2

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

6樓:匿名使用者

微控制器組合語言中要使一個延時程式可以被不同情況下呼叫而延時不同的時間,可以通過類似於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

7樓:做而論道

標號可以用 $ 代替。

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

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

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

8樓:匿名使用者

;晶振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

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

9樓:匿名使用者

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

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

10樓: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

11樓:

r可以重複呼叫,所以是夠用的

組合語言與C 的區別,組合語言和C 語言有什麼區別

彙編是最基礎的程式語言.c 是一種物件導向物件的語言.c 要想在系統上執行,最終是轉換為機器碼.彙編也是,但是彙編轉換為機器碼比較容易.c 轉換則要先轉換為彙編.c也可以稱作高階語言.但是,c語言在c 之下.起一個過渡作用.如果你想學好程式設計.先學c語言或者組合語言.鄙人建議你先學組合語言 然後再...

組合語言程式設計的問題,組合語言程式設計問題

1.jmp bx 如果 bx 1020h,那麼 ip 1020h,因為此種形式為通過暫存器的段內間接轉移,執行時將把暫存器的內容直接送ip,所以執行此指令後ip的值為1020h 2.jmp tab bx si 如果 ds 2000h,bx 1020h,si 0002h,tab 0010h,21032...

組合語言程式編寫程式顯示藍屏

對的,建立彩色文字區80 25比較穩定,如果你要顯示滿屏,請把 mov cx,25 這一句中的25改成50 或75,即25的倍數,400 即可。assume cs code code segment start mov ax,0b800hmov es,ax mov di,0 mov cx,25 s ...