❶ 51單片機計算完16個單位元組無符號數的累加和,其結果保存在RAMd的31H,30H單元,寫代碼
QH:
MOV30H,#0
MOV31H,#0
MOVR2,#16
LOOP:
MOVA,@R0
ADDA,30H
MOV30H,A
CLRA
ADDCA,31H
MOV31H,A
DJNZR2,LOOP
MOVR2,#4
LOOP1:
CLRC
MOVA,31H
RRCA
MOVA,30H
RRCA
DJNZR2,LOOP1
MOV32H,A
RET
❷ 51單片機編程:片內30H開始20個數據求和,結果放到20個數據後面的兩個存儲單元里,高位在前,低位在後。
org 0000h
ljmp main
org 0030h
main: mov r4,#20h
mov dptr,#00h
mov r0,30h
loop: add dptr,@r0
inc r0
djnz r4,loop
❸ 51單片機匯編程序,將程序存儲器1000H~100FH單元的內容累加求和,結果保存在7FH,不考慮溢出
ORG 0000H ;不考慮加法溢出
MOV 7FH,#00H
MOV DPTR, #1000H
MOV R2, #10H
LOOP:
MOV A,#00H
MOVC A,@A+DPTR
ADD A ,7FH
MOV 7FH,A
INC DPTR
DJNZ R2, LOOP
SJMP $
END
❹ 單片機匯編 求N個數的和 程序
;啟動入口
ORG 0000H ;復位啟動
LJMP START ;
ORG 0100H ;
;
;主程序
START: MOV DPTR,#NUM ;數據區首地址
MOV B,#32 ;32位元組求和
CLR A ;
MOV X,A ;清零和存儲單元
MOV Y,A
MOV Z,A
LOOP: CLR A ;
MOVC A,@A+DPTR ;取當前位元組數據
ADD A,X ;累加和
MOV X,A
MOV A,Y
ADDC A,#0
MOV Y,A
INC DPTR ;指向下一單元數據
DJNZ B,LOOP ;加完32位元組
JMP $ ;死循環
;
ORG 0200H ;開辟數據區
NUM DB 32,2,5,4,9,220,234,7 ;
DB 11,22,51,42,93,220,234,17 ;
DB 31,32,35,43,39,220,234,37 ;
DB 91,82,45,74,89,220,234,97 ;
X EQU 70H ;和存儲單元
Y EQU 71H ;
END ;
❺ 51單片機C語言編程如何實現長按按鍵實現數值的累加
這個可以用定時器來做,比如檢查某鍵,按鍵時間超過2秒後一個變數開始累加知道鍵釋放為止。實現方法如下:
#include<reg51.h>
#define
uint
unsigned
int
#define
uchar
unsigned
char
uint
v=0,time=0;
sbit
key=P1^0;
void
t0isr()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if((key==0)&&(time>40)v++;
//如果按鍵時間超過2秒且鍵未釋放,變數+1
if(key==1)time=0;
//如果鍵釋放,時間復位
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
❻ MCS-51單片機求和 11H+22H+33H+44H+55H+66H+77H+88H+99H 編輯程序
是用匯編還是用C51呢?
匯編:
ORG 0000H
AJMP MAIN
MAIN:
MOV A,11H
MOV R0,11H
MOV R1,09H
LOOP1:CLEAR C
RET
LOOP2:ADD R0,11H
AJMP LOOP1
ADDC A,R0
DJNZ R1,LOOP1
END
這個我沒有在keil內運行,你可以自己再做一下啊
主要是用到一個循環,這樣會簡單一些
❼ 51單片機,1到100的累加和,keil軟體
;下列程序,經過模擬調試,結果是:(30H)=BAH, (31H)=13H
;程序如下:
MOV 30H, #0
MOV 31H, #0
MOV DPTR, #1
MOV R2, #10
LOOP1:
MOV R3, #10
LOOP2:
MOV A, 30H
ADD A, DPL
MOV 30H, A
MOV A, 31H
ADDC A, DPH
MOV 31H, A
INC DPTR
DJNZ R3, LOOP2
DJNZ R2, LOOP1
RET
;完