单片机问题:编程实现对 (20H)(21H)(22H) 中三字节数据的求补运算。不要用c语言

单片机问题:编程实现对 (20H)(21H)(22H) 中三字节数据的求补运算。不要用c语言,第1张

是的,但你疑问的问题也是存在的。

针对不同的单片机,有不同的编译器,每种单片机的c语言编译器都对c语言做了适用于单片机的扩展。

编译器在编译单片机c语言的代码时要有一些设置选项或者makefile之类的设置,这些设置对了,程序才能适应选定的单片机。

有很多编译器为了让单片机程序更适合用c语言,还将一些固定的程序(比如中断入口、主程序入口、时钟设置等)用汇编写好后,嵌入到c语言程序的工程中,使C语言更适合单片机编程。

做了这么多工作后,用这种编译器编译的程序就可以下载到单片机中执行了。

当然会了,只是有一些具体的值编译器帮你完成了,指针就是地址。

修改如下:

MOV R3, #04H //被除数R3R4R5 = 287654

MOV R4, #63H

MOV R5, #0A6H

……

DIVISION100: //计算百位//

MOV R6, #0

MOV R0, #01H //除数R0R1R=100000

MOV R1, #86H

MOV R2, #0A0H

……

--原程序中,缺少了不少井号#

嘿嘿

1 设计一个双字节无符号数加法子程序,首先要设计一个子程序入口:

即 (R2)(R3)=装双字节无符号数的被加数

(R4)(R5)=装双字节无符号数的加数

2 设计一个双字节无符号数加法子程序出口:

( 32H )( 31H )( 30H)=装和

3 利用加法指令 求双字节无符号数的和。

4 起一个子程序名:

ADD16: MOV A,R3 ;取低字节被加数

ADD A,R5 ;与低字节加数相加

MOV 30H,A ;低字节和送30H 单元

MOV A,R2 ;取高字节被加数

ADDC A,R4 ;与高字节加数相加

MOV 31H,A ;高字节和送31H单元

CLR A ;清零

ADDC A,#0 ;加上进位

MOV 32H,A ;有进位则送32H单元保存

RET ;子程序返回

满意 就给俺加分喽

你的问题应该出现在键盘处理不完善造成的,稍微修改了一下你试试。

#include <reg52h>

#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;

}

}

以上就是关于单片机问题:编程实现对 (20H)(21H)(22H) 中三字节数据的求补运算。不要用c语言全部的内容,包括:单片机问题:编程实现对 (20H)(21H)(22H) 中三字节数据的求补运算。不要用c语言、单片机三字节除法程序,错在哪里、求单片机编写双字节无符号数加法子程序。来个高手吧!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9334987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存