A. 單片機程序設計 數據塊求和,如果和大於255,那麼程序怎樣編寫!!!急急急,最好這兩天 還有麻煩把程序寫清楚
如果和大於255,不大於0xffff的話
用雙位元組加法。
C語言就是定義為整型數據就好了。
匯編的話
CLR A
MOV SUML,A
MOV SIMH,A
MOV R0,#20H
LOOP:
MOV A,@R0
ADD A,SUML
MOV SUML,A
CLR A
ADDC A,SUMH ;用帶進位加法
MOV SUMH,A
INC R0
CJNE R0,#30H,LOOP
也可以
MOV A,@R0
ADD A,SUML
MOV SUML,A
JNC N_INC ;用判斷進位標志,來把高位元組加1
INC SUMH
N_INC:
B. 單片機中把兩個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相加
即可。
C. 單片機匯編 求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 ;
D. 單片機 內存中兩數求和,結果仍放在內存某單元中 求代碼過程
MOV A, 30H
ADD A, 31H
MOV 32H, A
END
E. 單片機匯編 多項式求和怎麼搞
#include<stdio.h>#include<stdlib.h>#include<conio.h>//定義項的結構struct INode{ float num; //系數 int power; //指數(簡單的定義為int) struct INode *prior; struct INode *next;};//創建一個降次排序的n項多項式struct INode *creat(){ struct INode *head,*p1,*p2; int i,n; head=(struct INode*)malloc(sizeof(struct INode)); head->prior=head->next=NULL; p1=head; if(!head) { printf("內存分配失敗"); exit(0); } printf("\n輸入多項式項數:"); scanf("%d",&n); //沒有檢測輸入的項數合法性 for(i=0;i<n;i++) { p2=(struct INode*)malloc(sizeof(struct INode)); if(!p1) { printf("內存分配失敗"); exit(1); } printf("輸入第%d項系數和指數(以空格分開):",i+1); scanf("%f%d",&p2->num,&p2->power); p1->next=p2; p2->prior=p1; p1=p2; } p2->next=NULL; printf("已創建該多項式\n"); return head;}//輸出多項式void output(struct INode *head){ struct INode *p; p=head->next; printf("\n"); if(p==NULL){ printf("多項式為空\n"); return; } while(p!=NULL) { if(p->num!=0)//系數不為零則輸出 { if(p->power!=0) { if(p->num!=1) { if(p->num==-1) printf("-"); else printf("%g",p->num); //系數不為1則輸出系數 } if(p->power!=0)//指數不為零則輸出變數 { printf("X"); if(p->power!=1) printf("^%d",p->power); //指數不為1則輸出指數 } } else printf("%g",p->num); } p=p->next; if(p!=NULL && p->num>0) //中間項且系數為正則輸出"+"號 printf("+"); } printf("\n");}//查找某一項,按指數查找void findItem(struct INode *head){ int pow; struct INode *p=head->next; if(p==NULL){ printf("\n多項式為空\n"); return; } printf("\n輸出要查找項的指數:"); scanf("%d",&pow); while(p!=NULL) { if(p->power==pow) { if(p->power!=0) { if(p->num!=1) { if(p->num==-1) printf("-"); else printf("%g",p->num); //系數不為1則輸出系數 } if(p->power!=0)//指數不為零則輸出變數 { printf("X"); if(p->power!=1) printf("^%d",p->power); //指數不為1則輸出指數 } } else printf("%g",p->num); printf("\n"); return; } p=p->next; } printf("\n無該指數的項\n");}//刪除某一項,按指數刪除void delItem(struct INode *head){ int pow; struct INode *p=head->next; if(p==NULL){ printf("\n多項式為空\n"); return; } printf("\n輸出要刪除項的指數:"); scanf("%d",&pow); while(p!=NULL) { if(p->power==pow) { p->prior->next=p->next; if(p->next!=NULL) //不是最後一項則將其後繼結點的前驅指其前驅 p->next->prior=p->prior; printf("刪除成功\n"); return; } p=p->next; } printf("\n無該指數的項\n");}//插入某一項void insertItem(struct INode *head){ char ch=getch(); struct INode *newItem,*temp,*p; temp=head; p=head->next; newItem=(struct INode*)malloc(sizeof(struct INode)); if(!newItem) { printf("內存分配失敗"); exit(2); } printf("\n請輸入插入項系數和指數(以空格分開):"); scanf("%f%d",&newItem->num,&newItem->power); while(p!=NULL && p->power>newItem->power)//找到插入位置 { temp=p; p=p->next; } if(p==NULL)//插入到末尾 { temp->next=newItem; newItem->prior=temp; newItem->next=NULL; printf("插入成功\n"); } else { if(p->power==newItem->power) { printf("已存在該指數的項,是否替換?(Y/N):"); fflush(stdin); //清除緩沖區 if(ch=='Y'||ch=='y') { p->num=newItem->num; printf("替換成功\n"); } else printf("取消插入\n"); } else { temp->next=newItem; newItem->prior=temp; newItem->next=p; p->prior=newItem; printf("插入成功\n"); } }}//多項式求和void addPolyItem(){ struct INode *head1,*head2,*headSum,*p1,*p2,*p; float addResult; printf("\n輸入第一個多項式:\n"); head1=creat(); printf("輸入第二個多項式:\n"); head2=creat(); p1=head1->next; p2=head2->next; headSum=p=(struct INode*)malloc(sizeof(struct INode)); headSum->next=NULL; //開始求和 while(p1!=NULL && p2!=NULL) { if(p1->power>p2->power) { p->next=p1; p1=p1->next; } else if(p1->power<p2->power) { p->next=p2; p2=p2->next; } else { addResult=p1->num+p2->num; p->next=p1; p->next->num=addResult; p1=p1->next; p2=p2->next; } p=p->next; } if(p1==NULL) p->next=p2; if(p2==NULL) p->next=p1; printf("求和結果:"); output(headSum);}void main(){ char choice; struct INode *head=(struct INode*)malloc(sizeof(struct INode)); head->next=NULL;//創建一個空鏈表 printf("\n\n*******************************\n"); printf("1,輸入一個多項式\n"); printf("2,插入某一項\n"); printf("3,刪除某一項\n"); printf("4,查找某一項\n"); printf("5,輸出多項式\n"); printf("6,多項是求和\n"); printf("7,退出\n"); printf("*******************************\n"); while(1) { printf("請按鍵選擇操作:"); fflush(stdin); //清除緩沖區 choice=getch(); switch(choice) { case '1': head=creat(); break; case '2': insertItem(head); break; case '3': delItem(head); break; case '4': findItem(head); break; case '5': output(head); break; case '6': addPolyItem(); break; case '7': exit(4); default: printf("輸入錯誤\n"); break; } } }
F. 用單片機匯編語言編寫1+2+3 +‥‥‥+99+100的求和運算程序, 結果用十進制顯示在單片機實驗系統數碼管上。
用C語言可以實現的代碼如下:
#include
typedef unsigned int uint;
typedef unsigned char uchar;
uchar smgcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff};//共陽數碼管
uchar smgbit[]={0xfe,0xfd,0xfb,0xf7};
uchar value[]={0,0,0,0};
void delay(uint x)//延時函數
{
uchar i;
while(x--)for(i=0;i<120;i++);
}
void main(void)
{
uchar i,j;
uint s=0;
for(i=1;i<=100;i++)
s+=i; value[0]=s;
value[1]=s0/10;
value[2]=s00/100;
value[3]=s000/1000;
while(1)
{
for(j=0;j<4;j++)
{
P1=smgbit[j];
P2=smgcode[value[j]];
delay(10);
}
}
}
G. 單片機c語言編程計算N個數據之和,求和的結果Y放在片內RAM區03H(高),04H(低位)單元
如果是在keil裡面:
#define N 100 //定義N個數據,N為100
unsigned char SumL _at_ 0x04;
unsigned char SumH _at_ 0x03; //SumL為結果低位。SumH為結果高位
unsigned char Num[N];
unsigned char i;
unsigned int Sum;
for(i=0;i<N;i++)
{
Sum += Num[i];
}
SumL=Sum%256; //得出低位
SumH=Sum/256; //得出高位
此上為Keil中可用。如果是在其他編譯環境下,用指針的方式:
#define N 100
unsigned char *p=0x03;
unsigned char Num[N];
unsigned char i;
unsigned int Sum;
for(i=0;i<N;i++)
{
Sum += Num[i];
}
*(p+1)=Sum%256; //得出低位
*p=Sum/256; //得出高位
這個在任何環境中可用,是指針的基礎。
希望我的回答對你有幫助,謝謝。
H. 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
;完
I. 單片機編程題 求和
正常來說16位數應該是40H~4FH,你到55H了,到底是佔用那幾個寄存器地址?
J. 單片機程序 兩個數的相加
這是個比你要求還復雜的東東,計算器。
聲明,此貨不是我寫的,是模擬軟體proteus自帶的。
附件發一個,圖片抓一個,程序也貼出來
其他就看你自己了哈
首先,用吃奶的力氣去看懂它,一點點的摸索,一點點的掌握
然後,理解整體方法
再然後,自己從頭寫起
再然後,反復調試到成功為止
OK,你進步非常多了