科技人员在开发51单片机应用系统过程中,往往遇到多字节除法及倒数问题。但目前一些资料中所介绍的有关程序,复杂且功能单一、精度低。本人在研制((GZ93多功能程控测试仪》过程中,自行设计的4字节除4字节程序具有功能多、精度高、简短、运行速度快等特点,可用于求4字节倒数,求商的整数(结果为4字节),求商的小数部分(结果为4字节),调用两次即可求8字节商。
一、使用方法
1.求商的整数
(1)16进制被除数送51内部RAM中20(低位)至23(高位)单元,除数送50(低位)至53(高位)单元,扩充单元24至27清零。 ’
(2)调子程序DIV。
(3)20(低位)至23(商位)单元为所求商,24至27单元为余数。
2.求八字节商
(1)先求商的整数部分
方法同上,然后将20至23单元的整数商送其它单元保存。
(2)求商的小数部分
20至23单元清零;其余单元内容不变;调DIV子程序;小数商在23至20单元中,小数点位于23单元
前。
3.求倒数
(1)20至23单元及25至27单元清零,01H送24单元,除数送50(低位)至53(高位)单元。
(2)调子程序DIV。
(3)倒数在23至20单元,小数点位于23单元前。
二、程序清单
ORG 0500H
DIV: CLR 7EH
MOV R0,#50H
MOV R7,#03H
DV0: MOV A,@R0
INC R0
ORL A,@R0
JNZ DV1
DJNZ R7,DV0
SETB 7EH
SJMP DV8
DV1: MOV R6,#20H
CLRC
DV2: MOV R0,#20H
MOV R7,#08H
DV3: MOV A,@R0
RLC A
MOV @R0,A
INC R0
DJNZ R7,DV3
MOV 0F0H,C
CLR C
MOV R0,#24H
MOV R1,#50H
MOV R7,#04H
DV4: MOV A,@R0
SUB A,@R1
MOV @R0,A
INC R0
INC Rl
DJNZ R7,DV4
JNB 0F0H,DV5
CLR C
SJMP DV6
DV5: JNC DV6
MOV A,24H
ADD A,50H
MOV 24H,A
MOV A,25H
ADDC A,51H
MOV 25H,A
MOV A,26H
ADDC A,52H
MOV 26H,A
MOV A,27H
ADDC A,53H
MOV 27H,A
DV6: CPL C
DJNZ R6,DV2
MOV R0,#20H
MOV R7,#04H
DV7: MOV A,@R0
RLC A
MOV @R0,A
INC R0
DJNZ R7,DV7
DV8: RET
END
关键字:51单片机 高精度除法 倒数问题
引用地址:
51单片机高精度除法程序及使用
推荐阅读最新更新时间:2024-03-16 13:12
51单片机实验6:独立按键
开发板独立按键模块电路图如下: 目的:通过控制独立按键K1,使第一盏led发光/关闭 P3口位准双向io口,当K1按下时,P3^1口接地,电平为0。 当K1按下时,由于独立键盘的物理特性以及按下过程等因素的干扰,P3^1口电平变化与理想情况并不相符,出现“抖动”现象,如下图所示: 为消除按下抖动造成的影响,在led状态改变之前,加入延时函数,判断独立按键K1是否真正被按下。 难点:等待按键释放语句:while(!k1)的作用。 释放抖动造成的影响,在下一个keypros()函数周期中可以被解决。 #include reg52.h #define uc unsigned char sbit led=P2
[单片机]
51单片机自学笔记(二)——C语言基础知识
进制转换(二进制、十进制、十六进制) 二进制:二进制是计算机/单片机中常用的一种数制,二进制用0和1两个数码来表示数,进位规则是逢二进一,借一当二。 十进制:我们生活中常用的就是十进制,十进制用0~9十个数码来表示数,进位规则是逢十进一,借一当十。 十六进制:十六进制也是计算机/单片机中常用的一种数制,它由0~9和A—F组成,字母不区分大小写。与十进制对应的关系是:0—9对应0—9;A—F对应10—15;进位规则是逢十六进一,借一当十六。 C语言的特点 (1)语言简洁、紧凑、使用灵活; (2)运算符丰富; (3)具有数据类型构造能力; (4)具有很强的流程控制结构; (5)语言生成的代码质量高; (6)可移植性较好;
[单片机]
51单片机9600波特率改115200波特率
前几天写一个程序,碰到一个问题,51单片机常用到的波特率是9600的,但是使用到的模块的波特率是115200的,程序写好了但是功能不能正常实现,所以想到了修改波特率,但是在网上查了好多关于修改波特率的文章,但是都没有直接可以解决问题的,希望写这篇文章可以对遇到相同问题的同学起到帮助。 void Uart1Init(void) //串口初始化 { SCON=0x50; //串口工作方式1,8位UART TH2=0xFF; TL2=0xFD; //波特率:115200 晶振:11.0592MHZ RCAP2H=0xFF; RCAP2L=0xFD; //16位自动再装入
[单片机]
51单片机—IIC—EEPROM(CAT24WCXX)—03
今天没事做,突然想起来了IIC,所以决定回顾一下下,呵呵,忘记了不少,所以打算写出来,便于以后记忆。。。 ,这里的例子就拿CAT24WCXX的EEPROM来解释吧~~(我也是边写文章,边写代码~~~累啊) 一、IIC总线简介 1.IIC总线的主要特点 IIC总线是一种简单、双向二线制同步串行总线。 (1)总线只有两根线,既串行时钟线(SCL)和串行数据线(SDA),这在设计中大大减少了硬件接口 (2)每个连接到总线上的器件都有一个用于识别的器件地址,(注意,器件地址由芯片内部硬件电路和外部地址引脚同时决定,这样就避免了~~你懂得)从而建立了简单的主从关系,从而每个器件都可以作为发送器,也可以作为接收器。 (3)同步时钟允许
[单片机]
51单片机最小系统设计
简介:AT89S51单片机最小系统,就是使单片机正常运行的最低配置:它有一系列模块组成。 1)复位系统: 当引脚9出现2个机器周期以上高电平时,单片机复位,程序从头开始运行. 2)时钟系统:有振荡器电路产生频率等于晶振频率,这时用的是外界晶振。 也可以又外部单独输入,此时XTAL2脚接地,时钟信号由XTAL1输入. 3)电源系统:VCC,和 GND引脚,供电电压4--5.5V. 程序的烧入引脚: flash存储器由串行ISP接口编程,计算机和单片机烧写由专用的烧入软件完成如AVR_fighter for usb asp.
[单片机]
51单片机-电脑密码锁与系统监控
由于最近比较闲,所以没有什么事情好做,于是想起了去年台风的一晚上和博记约定要搞个输入密码才可以启动电脑的硬件,不过后来因许多原因而不了了之,今忆起往事,所以才把它做好,到时候回去和同学们在大排档里吹水也有东西来吹.鉴于这个系统的代码量较大,在此只给出代码的下载地址和片上系统(RIOS )的系统架构图,如果你还有什么好的想法的话可以在此基础上加已改进.现在,监控系统不单止是可以支持输入密码启动电脑,还支持接收上位机(RTU )的监控系统性能的数据,当然,也可以在线修改RIOS 启动密码.. 图一 运行效果图(本来是想弄成动图的,但是缺少这方面的软件) 图二 RIOS 系统架构图 在系统的底部,有六个驱动程序用来
[单片机]
基于51单片机设计N字节十六进制除法——以6字节除以3字节为例
1、思路 借用十进制除法竖式计算的思路,作十六进制的除法竖式计算。 将除数3字节与被除数高3字节对齐,除完后保存当前字节的商和余数,将被除数往低顺延一个字节,再执行新一轮的除法。被除数有6字节,除数有3字节,故除法需执行4轮。这是最外层的循环。 每一轮的除法可转换为多次减法,需要注意的是,对被除数来说减法需要一直执行到最高字节,以保证借位执行无误。这是中间层的循环。 每一轮的减法由单个字节的减法循环组成,减的过程中考虑借位。由于除数只有3个字节,执行完此3次减法后,除数再往上的字节内容为00H,减法就变成了XXH-CY-00H,即纯粹的借位。 为了判断中间层循环什么时候结束,需要额外写一个子程序来比较减数与被减数的
[单片机]
一文详解80C51单片机的指令系统
指令是指示计算机执行某种操作的命令,计算机能识别执行的只能是二进制代码,以二进制代码来描述指令功能的语言,称为机器语言。 由于机器语言不便于人们识别,记忆,理解和使用,因此便对每条机器语言指令用助记符号来形象表示,这就便形成了汇编语言。 一条指令是机器语言的一个语句,包括操作码字段和操作数字段。一台计算机所具有的全部指令的集合,称为这台计算机的指令系统。 不同的微处理器,其指令系统一般是不同的。 80C51单片机指令系统共有111条指令,具体特点如下: 1)执行时间短,单机器周期指令(64条),双机器周期指令(45条),而四机器周期指令只有2条; 2)指令编码字节少,单字节指令(49条),双字节指令(45条)和最长的三字节
[单片机]