导航:首页 > 操作系统 > 单片机多位数加法实验报告

单片机多位数加法实验报告

发布时间:2022-08-18 05:11:24

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

阅读全文

与单片机多位数加法实验报告相关的资料

热点内容
linux内核文件路径 浏览:305
csgo国际服云服务器 浏览:918
stata回归命令vce是啥 浏览:569
身高换算法 浏览:883
如何用自己的服务器搭梯子 浏览:145
天津深度学习算法管理软件 浏览:234
雷军柳传志程序员图片 浏览:737
电脑加密锁客户端怎么下载 浏览:819
微信源码和二开 浏览:677
程序员英文简历模板下载 浏览:654
厦门一键轮廓度测量仪编程 浏览:281
androidsocket循环接收数据 浏览:226
福特福克斯压缩机 浏览:718
怎么把app翻转 浏览:101
如何关闭安卓手机通话地区显示 浏览:330
测验你适不适合编程 浏览:479
编程实现当开关S0 浏览:790
如何降低pdf文件大小 浏览:638
应链帮app怎么用 浏览:536
安卓软件怎么设置打不开 浏览:719