跪求一个单片机的程序求大神帮助

一个能加能减的单片机程序,会单片机编程的人可以联系我、。

LIST p=16f877 INCLUDE p16f877.inc ACCALO EQU 20 ;存放加数或减数的尾数 ACCAHI EQU 21 EXPA EQU 22 ;存放加数或减数阶码 ACCBLO EQU 23 ;存放被加数或被减数尾数以及和或差 ACCBHI EQU 24 EXPB EQU 25 ;存放被加数或被减数阶码 ACCCLO EQU 26 ;临时寄存器 ACCCHI EQU 27 ;临时寄存器 ACCDLO EQU 28 ;临时寄存器 ACCDHI EQU 29 ;临时寄存器 TEMP EQU 2A ;临时寄存器 TEMP1 EQU 30 ;临时寄存器 TIMES EQU 31 ;临时寄存器 ORG 0X000 START GOTO MAIN ORG 0X0100 ;**************浮点减法子程序**************** F_sub CALL NEG_A ;求ACCA的补码,将减法转换为补码加法 ;***********浮点加法子程序************** F_add CALL SUBADJ ;调子程序判断EXPB和EXPA的大小 BTFSC STATUS,Z ;参与运算的两个数阶码相等? GOTO PADD ;是,求尾数的和 BTFSC STATUS,C ;EXPB>EXPA? CALL F_swap ;是,ACCB与ACCA互换 MOVF EXPA,0 ;否,求取两者的差值 SUBWF EXPB SCLOOP CALL SHFTSR ;ACCB右移规格化 INCFSZ EXPB ;EXPB=EXPA? GOTO SCLOOP ;否,继续右移 MOVF EXPA,0 ;是,存和(差)的阶码 MOVWF EXPB PADD MOVF ACCAHI,0 ;ACCAHI或ACCBHI IORWF ACCBHI,0 MOVWF SIGN ;存于SIGN寄存器 MOVF ACCBHI,0 ;暂存ACCBHI MOVWF EXPA CALL D_add ;尾数相加 BTFSS SIGN,7 ;ACCA和ACCB有负数? BTFSC ACCBHI,7 ;否,把和的最高位和次高位同时进位? GOTO ADD2 ;否,转ADD2 BTFSS ACCAHI,7 ;ACCA为负吗? GOTO ADD3 ;ACCA和ACCB不同时为负,转ADD3 BTFSS EXPA,7 ;是,ACCB为负吗? GOTO ADD3 BSF STATUS,C ;ACCA和ACCB同为负,带负号右移 RRF ACCBHI RRF ACCBLO INCF EXPB ADD3 CLRF ACCCHI ;和(差)规格化 CLRF ACCCLO CALL F_norm RETURN ;子程序返回 ADD2 BCF STATUS,C ;最高位次高位不同时进位,ACCB右移 INCF EXPB GOTO SHFTR SHFTSR BCF STATUS,C ;ACCB带符号右移子程序 BTFSC ACCBHI,7 BSF STATUS,C SHFTR RRF ACCBHI RRF ACCBLO RETURN ;子程序返回 ;********* ACCB、ACCA互换子程序************ F_swap MOVF ACCAHI,0 ;ACCAHI、ACCBHI互换 MOVWF TEMP MOVF ACCBHI,0 MOVWF ACCAHI MOVF TEMP,0 MOVWF ACCBHI MOVF ACCALO,0 ;ACCALO、ACCBLO互换 MOVWF TEMP MOVF ACCBLO,0 MOVWF ACCALO MOVF TEMP,0 MOVWF ACCBLO MOVF EXPA,0 ;EXPA、EXPB互换 MOVWF TEMP MOVF EXPB,0 MOVWF EXPA MOVF TEMP,0 MOVWF EXPB RETURN ;*************比较EXPB、EXPA大小子程序************* SUBADJ MOVF EXPA,0 ;EXPA异或EXPB,结果送C_DIV XORWF EXPB,0 MOVWF C_DIV MOVF EXPA,0 ;EXPB-EXPA SUBWF EXPB,0 BTFSS C_DIV,7 ;EXPA和EXPB同号? RETURN ;是,进位位的值真确反映两者的大小,返回 BTFSS STATUS,C ;否,进位位的值取反 GOTO CHANGEC BCF STATUS,C RETURN CHANGEC BSF STATUS,C RETURN ;***********浮点数规格化子程序**************** F_norm MOVF ACCBHI ;ACCB=0? BTFSS STATUS,Z GOTO C_norm MOVF ACCBLO BTFSC STATUS,Z RETURN ;是,不需规格化,返回 C_norm BTFSC ACCBHI,7 ;否。ACCB为负? GOTO C_norm2 C_norm1 BTFSC ACCBHI,6 ;为正。规格化完毕? RETURN ;ACCBHI.6=1,规格化结束 CALL SHFTSL ;否。ACCB左移 DECF EXPB ;EXPB减1 GOTO C_norm1 ;重新判断规格化完毕否? C_norm2 BTFSS ACCBHI,6 ;ACCB为负。规格化完毕否? RETURN ;ACCBHI.6=0,规格化结束 BCF STATUS,C CALL SHFTSL ;否,ACCB左移 BSF ACCBHI,7 ;加符号 DECF EXPB ;EXPB减1 GOTO C_norm2 ;重新判断规格化完毕否? SHFTSL BCF STATUS ,C ;ACCB左移子程序 RLF ACCCLO RLF ACCCHI RLF ACCBLO RLF ACCBHI RETURN 【校验举例1】 0.0019531+(-0.00016594)=0.00178716 化为十六进制数:4000F8+A900F4 结果:7520F7 校验举例2】 0.26222+3.5025=3.76478 化为十六进制数: 4321FF+701502 结果:787902 【例程】 MAIN MOVLW 0X21 ;被加数的尾数4321H送ACCB MOVWF ACCBLO MOVLW 0X43 MOVWF ACCBHI MOVLW 0XFF ;被加数的阶码FFH送EXPB MOVWF EXPB MOVLW 0X15 ;加数尾数7015H送ACCA MOVWF ACCALO MOVLW 0X70 MOVWF ACCAHI MOVLW 0X02 ;加数阶码送EXPA MOVWF EXPA CALL F_add ;调用浮点数加法子程序,求和 END
温馨提示:内容为网友见解,仅供参考
无其他回答

利用汇编语言编单片机程序,求大神帮助。。。
MAIN: MOV A,#0FEH ;是开始键按下 则跑马灯开始运行 LL: MOV P1,A LCALL YS ;显示延时 RL A ;循环右移一位 CJNE A,#0FEH,LL ;不是最后一个,则转到LL继续显示下一个LED发光二极管亮 MOV A,#0FFH ; 全灭 MOV P1, A SJMP $ ;...

求大神编写51单片机程序 内容如下 如果采取可再加悬赏
define BASETIME (unsigned int)(65536-(0.01\/(12.0\/OSC)))\/\/10mS定时常数 define ISRTIMES (YANSHI*100)include <reg51.h> sbit ZZ=P0^1; \/\/正转启动,1表示正转 sbit FZ=P0^2;sbit ZXW=P0^3; \/\/正转到位开关,1表示到位。sbit FXW=P0^4; \/\/反转到位开关,1表示到位。unsigned ...

求大神解释单片机程序。不会啊
keyport = 0x0f;\/\/怎么又看低4位?delay(1);\/\/休息1ms,土豪啊。。。时间都是这么浪费的。(跑去循环就是啊浪费时间。)Tmp = keyport^0x0f;\/\/取出低四位按键状态。。给路人Tmp。。又大写。。还以为是宏。switch(Tmp)\/\/根据这键值跳转。。话说我按两个键呢?下面的case明显不够。于是两个...

51单片机的程序,求大神给解释下,具体些
void main(){ q=0;\/\/分清0 p=0;\/\/小时清0 TMOD=0x01; \/\/定时器0工作方式1 TH0=(65536-46080)\/256;\/\/50ms初值 TL0=(65536-46080)%256;ET0=1;\/\/定时器0中断打开 EA=1;\/\/总中断打开 while(1){ if(K1==0)\/\/启动 TR0=1;if(K2==0)\/\/暂停 TR0=0;if(K3==0) 秒清0 {...

单片机的程序怎么写啊?
1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,输入保存的路径,输入名字。4、右键单击将这个文件添加到到工程文件夹中。5、...

求一个51单片机C语言程序编程
实验内容:单片机甲、乙进行双机串行通信,甲机通过串口控制乙机LED闪烁(如下图所示,要求利用芯片MAX232),双方的晶振频率均为11.0592MHz(波特率为9600kb\/s)要求:甲机按开关K1一次,发送字符“A”给乙机,点亮灯D1与D2;按开关K1两次,发送字符“B”给乙机,点亮灯D3与D4;按开关K1三次,...

关于单片机数码管显示的程序。看不太懂,求大神帮忙分析一下每一步在
程序:void main() \/\/主函数 这一讲的主要内容: 按键检测主函数 功能描述: 按键检测主函数 输 入:输 出:全局变量:调用模块:作 者: 吴鉴鹰 日 期: 14.04.12 备注:有什么错误的地方,欢迎各大烧友指正,感谢电子发烧友提供这个平台能跟各大烧友一同分享,一同进步 O(∩_∩)O~...

求单片机大神写下程序,我做了个4*4*4的光立方,刚刚学单片机只会写点亮的...
你没有说明具体实现什么功能,我就帮你设定一层一层的点亮,然后循环。include <reg51.h> sbit ADDR0 = P2^0;sbit ADDR1 = P2^1;sbit ADDR2 = P2^2;sbit ADDR3 = P2^3;unsigned int i = 0;unsigned int j = 0;void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i-...

51单片机中的程序,求大神解释!
是两个不完整的函数,一个用于显示,一个用于键扫描(有软件去抖动功能)。

求单片机大神讲解一下程序啊 ,组合按键值为什么要取反
case 0x11. (由于按键检测是低电平,所以需要取反)实际上应该是这些 初始P2=0xf0, 按下以后P2=0xe0 交换行列:P2=0x0f, 此时被按键强制拉为 P2=0x0e,行列组合;0xe0 | 0x0e = 0xee, 取反0x11--》至于KEY-PORT=1 这个完全是人为设定,你可以认为这个按键是任何值,软件定义即可 ...

相似回答