A. 基於51單片機的簡易加法計數器
你好!這樣的效果可以嗎
B. 單片機的簡單實驗編程題
循環3次即可。
MOV R0, #20H ;加數1地址、和的地址
MOV R1, #30H ;加數2地址
CLR C
MOV R2, #3 ;循環3次
A_LOOP:
MOV A, @R0 ;取
ADDC A, @R1 ;加
MOV @R0, A ;存
INC R0
INC R1
DJNZ R2, A_LOOP
CLR A
ADDC A, #0 ;得到進位
MOV 23H, A ;保存
RET
C. 單片機加法運算
你的問題應該出現在鍵盤處理不完善造成的,稍微修改了一下你試試。 #include #define uchar unsigned char #define unit unsigned int #define OPdata P0 //十位數據口 #define OPdata1 P1//個位數據口 sbit se0=P3^6;//十位選擇 sbit se1=P3^7;//個位選擇 sbit Q=P2^6; sbit W=P2^5; sbit E=P2^4; uchar cis; //按下鍵盤次數 uchar jia1; //加數1 uchar jia2; //加數2 uchar z; //中轉數 uchar shi; //十位數 uchar ge; //個位數 uchar s; //解碼結果 uchar j; //解碼結果 uchar sum; //加法結果 uchar keytemp; void judge(uchar m) //數碼顯像管解碼 { switch (m) { case 0: s=0x3F; break; case 1: s=0x06; break; case 2: s=0x5B; break; case 3: s=0x4F; break; case 4: s=0x66; break; case 5: s=0x6D; break; case 6: s=0x7D; break; case 7: s=0x07; break; case 8: s=0x7F; break; case 9: s=0x6F; break; } } void judge1(uchar h) //十位數碼顯像管解碼 { switch (h) { case 0: j=0x3F; break; case 1: j=0x06; break; } } void judgecis() { if (cis==1) { jia1=z; ge=z; shi=0; } else if (cis==2) { jia2=z; ge=z; shi=0; cis=0; } } void jiafa(uchar m,uchar n) //加法 { sum=m+n; if (sum>=10) { ge=sum-10; shi=1; } else { ge=sum; shi=0; } } void main() { cis=0; jia1=0; jia2=0; shi=0; ge=0; s=0; j=0; P2=0XFF; se0=0;//開啟十位 se1=0;//開啟個位 OPdata=0x3f;//十位 OPdata1=0x3f;//個位 while (1) { Q=0; keytemp=P2; switch (keytemp) { case 0xbb: z=3; cis++;while(P2==0xbb); break; case 0xbd: z=6; cis++;while(P2==0xbd); break; case 0xbe: z=9; cis++;while(P2==0xbe); break; case 0xb7: //等於號 jiafa (jia1,jia2); cis=0; break; } Q=1; W=0; keytemp=P2; switch (keytemp) { case 0xde: z=8; cis++;while(P2==0xde); break; case 0xdd: z=5; cis++;while(P2==0xdd); break; case 0xdb: z=2; cis++;while(P2==0xdb); break; case 0xd7: z=0; cis++;while(P2==0xd7); break; } W=1; E=0; keytemp=P2; switch (keytemp) { case 0xee: z=7; cis++;while(P2==0xee); break; case 0xed: z=4; cis++;while(P2==0xed); break; case 0xeb: z=1; cis++;while(P2==0xeb); break; } judgecis(); judge(ge); OPdata1=s; judge1(shi); OPdata=j; E=1; } }
D. 51單片機,使用keil軟體,4位元組加法或減法子程序
四個位元組加上四個位元組,和應該是4~5個位元組。
本程序,需要三個地址指針,但是一般只有兩個(R0和R1)可以用;如果換用工作區,就比較麻煩了。下面使用B充當「和」的地址指針,RESULT + 4單元,充當加數2的地址指針。
程序如下:
RESULT equ 30H ;和數的地址
ORG 0000H
;實驗數據如下:
MOV 20H, #22H ;加數1
MOV 21H, #33H
MOV 22H, #44H
MOV 23H, #0F3H
MOV 24H, #12H ;加數2
MOV 25H, #34H
MOV 26H, #56H
MOV 27H, #78H
MOV R0, #20H ;給定地址
MOV R1, #24H
LCALL _4_JIA_4 ;調用加法子程序
NOP
SJMP$
_4_JIA_4:
MOV RESULT + 4, R1 ;保存加數2地址
MOV B, #RESULT ;保存和的地址
CLR C
MOV R2, #4
LOOP:
MOV A, @R0
INC R0
MOV R1, RESULT + 4
ADDC A, @R1 ;加上加數2
INC R1
MOV RESULT + 4, R1
MOV R1, B
MOV @R1, A ;保存和數
INC R1
MOV B, R1
DJNZ R2, LOOP
CLR A
ADDC A, #0
MOV RESULT + 4, A ;保存第五位元組
RET
減法子程序,與上面的加法子程序雷同,只要把ADDC換成SUBB即可改為減法子程序。請樓主自行改寫。
E. 單片機運用循環和16位加法 計算數據塊(30H至37H)中,8個8位二進制數的和,最終結果放入R1
HE:
MOV R2, #0
MOV R1, #0
MOV R0, #30H
LOOP:
MOV A, R2
ADD A, @R0
MOV R2, A
JNC NEXT
INC R1
NEXT: INC R0
CJNE R0, #38H, LOOP
MOV A, R2
MOV R0, A
RET
END
F. 51單片機加法運算問題,資料如下圖所示!
他只是告訴你16位加法運行原理,並不是說8位單片機可以一次算16位加法,16位加法需要運算兩次的,第一次算低位,第二次算高位,沒有16位指令,16位加法要位元組寫程序,他告訴你寫運行原理。。。
G. 求一個大學51單片機加減法計數器設計實驗,高手進
這個不用高手吧,為什麼不用一個加一個減呢?這樣程序會更簡單
H. 51單片機能做兩個16位的加法運算嗎如1010h和1010h,求大蝦!!!!!
沒有問題的,可以的,如用匯編
MOV R5, #10H ; 第一數據高位元組
MOV R4,#10H ; 第一數據低位元組
MOV R3, #10H ; 第二數據高位元組
MOV R2,#10H ; 第二數據低位元組
MOV A, R4
ADD A, R2
MOV R4, A ; 和低位元組 在 R4 中
MOV A, R5
ADDC A, R3
MOV R5, A ; 和高位元組 在 R5 中
RET