导航:首页 > 操作系统 > 单片机求和ppt

单片机求和ppt

发布时间:2023-02-03 05:18:43

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,你进步非常多了

阅读全文

与单片机求和ppt相关的资料

热点内容
海康摄像萤石云服务器 浏览:814
安卓手机怎么改安卓版名 浏览:147
雅思听力807词汇pdf 浏览:897
黄豆私人加密 浏览:192
java分钟转换小时 浏览:245
易语言服务器如何提高 浏览:591
网站主机服务器地址查看 浏览:859
算法学不会能当程序员吗 浏览:119
程序员技术交流研究 浏览:814
javaresponse文件 浏览:734
linuxrar压缩文件夹 浏览:218
魅蓝手机连接不上服务器怎么回事 浏览:379
工行app怎么改已绑定银行卡 浏览:533
oppo芯片程序员 浏览:602
oppok3应用怎么加密 浏览:327
电脑软盘怎么加密码 浏览:815
服务器光交换机有什么用 浏览:708
app上怎么拍蛙小侠 浏览:217
志高聊天app怎么下载 浏览:635
邮政app怎么不能扫付款码 浏览:559