51单片机多字节的除法

发布者:GoldenEclipse最新更新时间:2012-08-24 来源: 51hei关键字:51单片机  除法  多字节 手机看文章 扫描二维码
随时随地手机看文章
;(四字节除四字节,被除数或者除数小于四字节,则前面填0即可)

; 后面还有一个双字节除双字节的程序,如果除数是单字节,则字高位填为00即可)

;51单片机多字节的除法

;R4R5R6R7放被除数  R0R1R2R3放除数
;当除数的长度为4字节时 R3R4R5R6是余数 R7是商
;当除数的长度为3字节时 R3R4R5是余数 R6R7是商
;当除数的长度为2字节时 R3R4是余数 R5R6R7是商
;当除数的长度为1字节时 R3是余数 R4R5R6R7是商

;被除数是双字时,将R4R5置为0即可,这个程序包打天下
;用一个单元来放中间值 单元名为danyuan
danyuan  equ  3BH
MOV R7,#0ffh
MOV R6,#0ffh
MOV R5,#0ffh
MOV R4,#0ffh
MOV R3,#100
MOV R2,#0H
MOV R1,#0H
MOV R0,#0H


MOV B,#08H
CJNE R0,#00H,DVDL
MOV B,#10H
CLR A
XCH A,R3
XCH A,R2
XCH A,R1
XCH A,R0
CJNE R0,#00H,DVDL
CLR A
XCH A,R2
XCH A,R1
XCH A,R0
MOV B,#18H
CJNE R0,#00H,DVDL
CLR A
XCH A,R1
XCH A,R0
MOV B,#20H
CJNE R0,#00H,DVDL
SETB OV
JMP END_DIV
DVDL: MOV danyuan,#00H
DVDL2: CLR C
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
XCH A,R5
RLC A
XCH A,R5
XCH A,R4
RLC A
XCH A,R4
XCH A,danyuan
RLC A
XCH A,danyuan
JC DVDL1
DVDL4: SUBB A,R3
MOV A,R5
SUBB A,R2
MOV A,R4
SUBB A,R1
MOV A,danyuan
SUBB A,R0
JC DVDL3
DVDL1: CLR C
MOV A,R6
SUBB A,R3
MOV R6,A
MOV A,R5
SUBB A,R2
MOV R5,A
MOV A,R4
SUBB A,R1
MOV R4,A
MOV A,danyuan
SUBB A,R0
MOV danyuan,A
INC R7
DVDL3: DJNZ B,DVDL2
END_DIV:
MOV R3,danyuan
NOP   ;停在这里看结果
END[page]

;双字节除双字节的程序如下:

;51单片机双字节的除法
;51单片机只是8位的,但有时候需要实现双字节除法,里面的指令只支持8位。
;想来想去,只好用减法来实现了。下面这个子程序是双字节除以双字节,商、余数结果都是双字节保存,可能有点消耗资源,但这样可以整合在一块。
;****************************************
;函数名称:Div2Byte
;功能描述:无符号数双字节除法
;传入参数:R0R1被除数 R2R3除数
;返回数据:R4R5商 R6R7余数
;其他说明:比如双字节数R0R1,R0高字节 R1低字节
;****************************************
Div2Byte:
mov r0,#0ffh
mov r1,#0ffh
mov r2,#0
mov r3,#254

mov R4,#0
mov R5,#0 ;商赋初值零
mov A,R0
mov R6,A
mov A,R1
mov R7,A ;余数赋初值,保证商为零时余数正常
Div2Byte_1:
mov A,R1
clr c
subb A,R3 ;低字节相减
mov R1,A
mov A,R0
subb A,R2 ;高位相减
mov R0,A
jc Div2Byte_3 ;如果高字节都需要借位则退出循环
clr c
mov A,R5
add A,#1      ;之后JNC判断,故不用INC     
mov R5,A
jnc Div2Byte_2
inc R4 ;商加1
Div2Byte_2:
mov A,R1
mov R7,A
mov A,R0
mov R6,A ;更新余数
LJMP Div2Byte_1
Div2Byte_3:
nop

END


;两个程序均验证无误!我也是在网上抄来,然后调试的。在这里特别感谢提供这个程序并发到网上的同行们!

;我觉得我们搞单片机这一块的人都非常非常的友好,不象有的行当,学会了一点点就开始保密保守,那样事

;业怎么可能发展?我的口号是: 不保密,不保守,共同提高。要想比别人更强更高,那就付出更多
关键字:51单片机  除法  多字节 引用地址:51单片机多字节的除法

上一篇:单片机·延时程序小结
下一篇:STC12C2052AD做的手机电池充电器

推荐阅读最新更新时间:2024-03-16 13:06

【单片机】51单片机入门教程中(LED流水灯)
前言 提示:以下是本篇文章前言内容 在大家学习用点亮LED之前希望大家去复习一下51单片机的最小系统! 大家需要了解一下进制转换,如下图: 1.十进制: 都是以0-9这九个数字组成,不能以0开头。 2.二进制: 由0和1两个数字组成。 3.八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。 4.十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x开始。 正文 提示:以下是本篇文章正文内容 一、了解LED的工作原理 简单的理解一下:发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在P
[单片机]
【单片机】<font color='red'>51单片机</font>入门教程中(LED流水灯)
51单片机8255之PC口控制
程序编写步骤: 1.设置8255工作方式(PB工作在模式0且为输出,PC上半位在工作模式0且为输入) 2.编码PA,PB口地址(PB为#0FF7DH,PC口为#FF7EH,控制端口为#0FF7FH)​ 3.布置电路图(见图一) 4.设计程序(见源程序注释) 5.调试仿真(见视频文件) 电路原理图(图一): 元器件(51芯片;74ls373锁存器;led灯若干;按钮若干;导线若干;5v电源)​​ 图一 汇编源程序: ORG 0000H; LJMP MAIN; ORG 0030H;头文件 MAIN:MOV DPTR,#0FF7FH;工作方式设置 MOV A,#81H; MOVX @DPTR,A;
[单片机]
图形点阵式液晶显示模块与51单片机的接口设计
引 言 液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。以往的测控仪器的显示部分大都采用LED式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。本文在介绍以ST7920为驱动器的WGM-12832液晶显示模块的引脚、结构、功能的基础上,详述了与AT
[应用]
基于51单片机的光功率计的设计
1 背景概述 1.1 光功率定义 光功率是光在单位时间内所做的功。光功率常用单位是毫瓦(mW)和分贝(dB),其中两者关系为1mW=0dB,而小于1mW的分贝为负值。例如,在光纤收发器或交换机说明书中,有其产品的发光和接收光功率,通常发光小于0dB。 接收端所能够接收的最小光功率称为灵敏度,能接收的最大光功率减去灵敏度的值称为动态范围,发光功率减去接收灵敏度是允许光纤损耗值。 1.2 使用分贝做单位主要有两个好处 (1)数值较小,便于记录。电路放大倍数通常数量级较大,有些大型电路甚至达到万级以上。用分贝表示时,先转化为对数,数值较小,便于记录。(2)运算方便。放大器级联时,总的放大倍数是各级相乘。用分贝做单位时,总增益就
[单片机]
基于<font color='red'>51单片机</font>的光功率计的设计
基于51单片机和 ADC0808 ADC0809的自动数字电压表
前言: 之前讲过基于数码管显示的自动数字电压表,接下来讲一下基于LCD1602显示的相关设计,分别利用的是TI公司的ADC0808和ADC0809。 硬件和软件设计 基于51单片机+ADC0808+LCD1602 测试电压范围为2.1~25V(超出这个范围,程序会卡死),精度<0.05 仿真图如下: 部分代码如下: #include AT89X52.H #define LEDDATA P0 #define v20_on {s3=0;s2=0;s1=1;} //宏定义不同量程,不同的开关状态 #define v2_on {s3=0;s2=1;s1=0;} #define v02_on {s3=1;s2=0;s
[单片机]
基于<font color='red'>51单片机</font>和 ADC0808 ADC0809的自动数字电压表
Atmel单片机并口下载线制作
很多单片机初学者都是选择STC单片机来学习51单片机,原因是STC单片机的程序下载是通过串口下载的,下载电路简单,只需一根DB9针串口线、一片MAX232芯片和四个1uf的电容即可。但是高等院校的教材几乎都是以AT89C51/52单片机(已经停产)或者AT89S51/52单片机(AT89C51/52的替代品)和其DATASHEET作为教学内容。以前,笔者为了学习AT89S8253单片机曾购买了一个昂贵的通用编程器,回想起来很不划算。为了让您理论联系实际学习单片机,降低学习成本,笔者在此与大家交流Atmel单片机下载线的制作。 图1是Atmel官方并口下载线电路原理图的改进版(简化了官方下载线的电压检测电路,增加了电源滤波和电源指
[单片机]
Atmel单片机并口下载线制作
8051单片机的5个中断源
当几个中断源同时向CPU请求中断时,按所发生的实时事件的轻重缓急排队,优先处理最紧急事件的中断请求,于是单片机规定每个中断源的优先级别。 当CPU正在处理一个中断请求,又发生另一个优先级比它高的中断请求,CPU暂时中止对前一中断处理,转而去处理优先级更高的中断请求,待处理完后,再继续执行原来的中断处理程序,这样的过程称为中断嵌套,这样的中断系统称为多级中断系统。 由于外界异步事件中断CPU正在执行的程序时随机的,CPU转向去执行中断服务程序时,除了硬件会自动把断电地址,即16位PC程序计数器的值压入堆栈之外,用户还得注意保护有关工作寄存器,累加器,标志位等信息,这个过程通常称为保护现场。以便在完成中断服务程序后,恢复原工作寄存器,
[单片机]
80<font color='red'>51单片机</font>的5个中断源
一文详解80C51单片机的中断系统
中断系统是计算机或者单片机的主要功能部件。 有了中断系统,便可以使微处理器具备对外部的异步事件进行处理的能力。 当微处理器的CPU正在执行程序的过程中,如果外部硬件或者内部组件有紧急的请求(如通信,断点,发生重大故障等),中断系统就可以将当前的程序暂停,优先处理这些中断请求。 这种处理方式,对整个系统的稳定性,健壮性至关重要,同时也能大大提高处理器的效率,使得系统的应用更加灵活多变。 中断的概念 中断是指单片机在执行程序的过程中,当出现异常情况或特殊请求时,单片机停止当前程序的运行,转向对这些异常情况或特殊请求进行处理,当处理结束后再返回原程序的间断处,继续执行原程序,这一现象称为中断。 中断是单片机实时处理内部或外部事件的一
[单片机]
一文详解80C<font color='red'>51单片机</font>的中断系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved