樓上的程序,彎缺少了個@.
MOV R0, #40H
MOV R1, #60H
MOV R2, #0AH
CLR C
LOOP1:
MOV A, @R0
ADDC A, @R1
MOV @R1, A ;這里少帆侍了態鬧吵個@.
INC R0
INC R1
DJNZ R2, LOOP1
END
❷ 51單片機匯編程序,將存放在內部RAM起始地址為30H和40H的兩個3位元組無符號數相加...
;啟動入口
ORG 0000H ;復殲手位啟謹橘動
LJMP START ;
ORG 0100H ;
;
;主控程氏晌嫌序
START: MOV A,30H
ADD A,40H
MOV 70H,A
MOV A,31H
ADDC A,41H
MOV 71H,A
MOV A,32H
ADDC A,42H
MOV 72H,A
ADDC A,#0
MOV 73H,A
JMP $
END ;
❸ 單片機中把兩個16位無符號單位元組數求和相加,設計程序
如果把6MHZ改成12MHZ程序應該怎麼改?
可以使用方式1。
X = M-N = 65 536 - 1 000 = 64 536 = FC 18H
需要修改的指令為如下三條。
MOV TH0, #0FCH ; T0賦初值
MOV TL0, #18H
MOV TMOD, #01H
========================
如果把題目改成把兩個16位無符號單位元組數求和相加,程序怎麼變化?
把:
ADDC A, @R1 ; 兩個高位位元組帶Cy相加
改為:
ADD A, @R1 ; 兩個高位位元組帶Cy相加
即可。
❹ 單片機無符號十進制加法
;51單片機程序如下
CLR C
LOOP:
MOV A, @R0
ADDC A, @R1
DA A
MOV @R0, A
INC R0
INC R1
DJNZ R7, LOOP
END
❺ 單片機 八位二進制數相加的程序 匯編語言
嘿嘿 八位二進制數相加的程序 應該設計成一個子程序ADD8:
程序入口迅姿蘆為2個: 累加器A(存放被加數)
寄存器R5(存放加數)
程序出口1個: ( R3)(R4)=加法的和(高8 位)、(低8 位)畝帶
樓上的老兄設計的八位二進冊唯制數相加的程序,是存在錯誤的,沒有考慮進位(即2個數相加超過256的情況)
ADD8: ADD A,R5
MOV R4,A
ADDC A,#0
MOV R3,A
RET
呵呵 滿意 就選滿意回答
❻ 單片機習題:將內部RAM中從data單元開始的10個無符號數相加,其和送sum單元。假定相加結果小於255.編寫...
CLR A
MOV R0, #data
MOV R2, #10
LOOP:
ADD A, @R0
INC R0
DJNZ R2, LOOP
MOV sum, A
END
❼ 單片機:求解
第一個:MOV R7,#04H //做計數使用,DJNZ R7,四次循環
第二缺謹個:ADD A,@R1 //加法計算,並存於A
第三運扮大個:INC R0 //R0自加
第四個: R0: DA A //跳到R0 ,旁豎執行十進制調整指令
❽ 51單片機 兩個雙位元組無符號數的加法
不帶進位位的單片機加法指令
ADD A,#DATA ;例:ADD A,#10H
ADD A,direct ;例:ADD A,10H
ADD A,Rn ;例:ADD A,R7
ADD A,@Ri ;例:ADD A,@R0
用途:將A中的值與其後面的值相加,最終結果否是回到A中。
例:MOV A,#30H
ADD A,#10H
帶進位位的加法指令
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data
用途:將A中的值和其後面的值相加,並且加上進位位C中的值。
由於51單片機是一種8位機,所以只能做8位的數學運算,但8位運算的范圍只有0-255,這在實際工作中是不夠的,因此就要進行擴展,一般是將2個8位的數學運算合起來,成為一個16位的運算,這樣,能表達的數的范圍就能達到0-65535
如何合並呢?其實很簡單,讓我們看一個10進制數的常式:
66+78。
這兩個數相加,我們根本不在意這的過程,但事實上我們是這樣做的:先做6+8(低位),然後再做6+7,這是高位。做了兩次加法,只是我們做的時候並沒有刻意分成兩次加法來做罷了,或者說我們並沒有意識到我們做了兩次加法。之所以要分成兩次來做,是因為這兩個數超過了一位數所能表達的范置(0-9)。
在做低位時產生了進位,我們做的時候是在適當的位置點一下,然後在做高位加法是將這一點加進去。那麼計算機中做16位加法時同樣如此,先做低8位的,如果兩數相加產生了進位,也要「點一下」做個標記,這個標記就是進位位C,在PSW中。在進行高位加法是將這個C加進去。例:1067H+10A0H,先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是7,而1則到了PSW中的CY位了,換言之,CY就相當於是100H。然後再做10H+10H+CY,結果是21H,所以最終的結果是2107H。
至於數據如何定義到你要的位置,這個問題不用我教你了吧!!!
❾ 單片機程序菜鳥問題
CLR A
清楚累加器A,此時A的毀手內容為0
ADDC A,#00H
ADDC是帶進位的加法,之前最高位元組加完之後,如果有進1,則進位標志位C為1,如果纖臘嫌沒有進位,那麼C為0。ADDC A,#00H,把累加器A(內容為0)和立即數0(根據語境,這里是立即數,不是地址)執行帶進位加法(數和0相加,就是數本身,這里相當於A+C+0,即累加器(0)+C(即50H和53H相加後的進位,可能有進位,可能沒有進位)+ 立即數0,目的就是取出進位位C的值),相加的結果是0(如果之前沒有進位)或局大者1(如果之前有進位),相加結果放在累加器A內,後面的語句就是把A的內容存到地址00的地方去。舉個16進制數的加法的例子,例如0x445566 + 0xCC22AA = 0x1107810明白了嗎,最後那一句就是取出最高位的進位的,也即最高位第七位。再教你一個小知識,兩個數相加,結果最多隻比原來數字多一位,並且多出的這位數字不會超過1,比如9+9,最多隻是18,即十位是1,不會是2到9的,在比如說99+99=198,嘿嘿。懂了吧
雖然我不用匯編寫程序,但是看懂還是很容易的