“余数拆分”算法在简易数字电压表中的应用
   来源:现代电子技术     2021年01月20日 10:43

李丽+郭建勤

摘 要: 为了使单片机在采用汇编语言设计简易数字电压表的小数部分处理过程中减少利用的寄存器数量及编程复杂度,采用“余数拆分”算法。方法不需要做16位的除法运算,仍采用8位的寄存器即可以获得所要求精度的小数位数。对该算法在简易数字电压表中的应用进行了原理分析,同时进行了软件设计,并通过Proteus仿真来验证该处理方法的可行性。该算法使得所需要的硬件资源减少、编程简单,值得应用与推广。

关键词: “余数拆分”算法; 数字电压表; AT89C51; ADC0809

中图分类号: TN911?34; TP336 文献标识码: A 文章编号: 1004?373X(2014)18?0030?02

Application of remainder split algorithm in simple digital voltmeter

LI Li1, GUO Jian?qin2

(1. Shandong Labor Vocational and Technical College, Jinan 250022, China; 2. Shandong College of Electronic Technology, Jinan 250014, China)

Abstract: In order to reduce the number of registers used by MCU and programming complexity in the decimal part processing in the simple digital voltmeter designed with assembly language, the remainder split algorithm was adopted, which does not need to do 16?place division operation, but still uses the 8?bit register to obtain the decimal digits of the required accuracy. The principle analysis of algorithm application in simple digital voltage meter is conducted. The software design was made. The feasibility of the processing method was verified by Proteus simulation. The algorithm makes the required hardware resources reduced and the programming simple. It is worth of application and promotion.

Keywords: remainder split algorithm; digital voltmeter; AT89C51; ADC0809

在电子测量中,数字电压表中小数位的处理直接影响数据的精确度[1],电子工程师们常采用ADC0809及C语言实现数字电压表的显示[2],常用的处理A/D转换后的数显电压值的方法是通过[U=UrefN255]计算得出[3]。其中:U为实际转换出来的电压值;[Uref]为ADC0809的基准电压,通常取5 V;N为A/D转换的数字值。利用该公式来获取数值的优点是思路简单,非常适合采用C语言来实现[4?5]。但是当采用执行速度快的汇编语言设计和AT89C51单片机时,由于[Uref]N的值可能会大于8位寄存器的最大值255,这时要完成上述的除法运算的话,则需要多个8位的寄存器来实现,使所利用的硬件资源增多、编程复杂化。本文主要是针对简易数字电压表中小数部分的处理方法作一研究,采用AT89C51单片机及ADC0809实现,测量范围在0~5 V之间,采用汇编语言设计,并通过Proteus仿真来验证该处理方法的可行性。本文提出一种算法,在此称为“余数拆分”法,此方法不需要做16位的除法运算,仍采用8位的寄存器即可以获得所要求精度的小数位数。

1 “余数拆分”算法

设电压测量范围为0~5 V,某一电压经ADC0809实现A/D转换后的数字值为data,则要重显该电压值(包括整数位n和小数位)时,所采用的处理方法如下:

(1) 先进行如下运算:

[data51=商(即为整数位n)…… 余数a(以此获取第一位小数)]

式中:除数51=8位寄存器的最大[值最]大电压值=[2555。]

(2) 小数位的获取。小数点后第1位小数要由 [10a5]取商而得到。当a≤25时,由于10a≤250﹤255,即可直接用8位的寄存器来完成该除法运算。而当26≤a﹤51时,则10a≥260,要完成[10a5],被除数需要2个8位的寄存器,使得程序的编写复杂。此时可对余数a作如下拆分:

[a=25+b] (1)

式中:26≤a﹤51,b﹤26。

则:

[10a51=1025+b51=250+10b51 =255+10b-551=5+10b-551] (2)

在式中由于b﹤26,则(10b-5)﹤255,即可以直接用8位的寄存器来完成“[10b-551]”的运算。利用[10b-551]的商再加上5就可得到第1位小数。要想得到第2位小数,则再对[10b-551]运算后的余数按式(1)做拆分,按式(2)来获取第2位小数。依次类推,不管获得小数点后多少位的精度,8位的寄存器都可以完成。

2 “余数拆分”算法在简易数字电压表中的应用

采用AT89C51单片机、ADC0809模/数转换器,根据“余数拆分”算法,精度保留小数点后3位、采用能够直接控制硬件且实时性强[6?7]的汇编语言进行软件设计。流程图如图1所示。

图1 软件流程图

3 Proteus仿真

作为当今世界最受欢迎的EDA仿真软件,Proteus仿真是一种嵌入式系统仿真与开发平台,由英国Labcenter公司研发[8?9]。它支持单片机系统的硬件电路仿真并提供软件调试功能[10],仿真形象生动,接近现实环境,省去了现场安装调试硬件的环节,省时、有效[11?12] 。

Proteus仿真电路图设计与显示如图2所示。在该仿真电路中,当电位器的触头处于图中所示位置时,经过ADC0809转换后得到的数字值为11111110B,则利用上述公式得到的保留3位小数的电压值应是2.490 V,而仿真显示的数值即为2.490 V,如图2所示,说明该算法准确度高。

图2 Protues仿真验证图

4 结 重

在测量范围为0~5 V、采用汇编语言设计及ADC0809的简易数字电压表中,应用“余数拆分”算法可以有效地避免16位的除法运算,减少利用的寄存器数量及编程的复杂度,只利用8位的寄存器就可以得到小数点后所要求的精度的位数。编程简单,值得应用与推广。

参考文献

[1] 宋凤娟,孙君,李国忠.基于89C51单片机的数字电压表设计[J].制造业自动化,2007(2):25?27.

[2] 杨建成.基于单片机的数字电压表的设计与仿真[J].现代电子技术,2012,35(21):170?172.

[3] 杨志忠.数字电子技术[M].4版.北京:高等教育出版社,2013.

[4] 金春林.AVR系列单片机C语言编程与应用实例[M].北京:清华大学出版社,2003.

[5] 胡辉,李叶紫,胡力平.单片机原理与应用[M].北京:中国水利水电出版社,2007.

[6] 郭晓伟.汇编语言的优越性及实用性[J].中国科技信息,2006(3):65?66.

[7] 黎远松.汇编语言程序设计技术研究[J].成都大学学报:自然科学版,2006(1):66?69.

[8] 周润景.基于Protes的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.

[9] 王瑾.基于Protes的数字电压表仿真设计[J].电子设计工程,2013,21(1):122?124.

[10] 王瑞萍.基于Protes的单片机虚拟开发环境[J].现代电子技术,2009,32(8):155?157.

[11] 陈少航,李山,苗亮亮,等.基于Protes的单片机应用系统的设计与仿真[J].现代电子技术,2007,30(6):43?45.

[12] 邓鹏.Protes虚拟仿真在单片机实验教学中的应用研究[J].现代电子技术,2012,35(16):27?29.

2 “余数拆分”算法在简易数字电压表中的应用

采用AT89C51单片机、ADC0809模/数转换器,根据“余数拆分”算法,精度保留小数点后3位、采用能够直接控制硬件且实时性强[6?7]的汇编语言进行软件设计。流程图如图1所示。

图1 软件流程图

3 Proteus仿真

作为当今世界最受欢迎的EDA仿真软件,Proteus仿真是一种嵌入式系统仿真与开发平台,由英国Labcenter公司研发[8?9]。它支持单片机系统的硬件电路仿真并提供软件调试功能[10],仿真形象生动,接近现实环境,省去了现场安装调试硬件的环节,省时、有效[11?12] 。

Proteus仿真电路图设计与显示如图2所示。在该仿真电路中,当电位器的触头处于图中所示位置时,经过ADC0809转换后得到的数字值为11111110B,则利用上述公式得到的保留3位小数的电压值应是2.490 V,而仿真显示的数值即为2.490 V,如图2所示,说明该算法准确度高。

图2 Protues仿真验证图

4 结 重

在测量范围为0~5 V、采用汇编语言设计及ADC0809的简易数字电压表中,应用“余数拆分”算法可以有效地避免16位的除法运算,减少利用的寄存器数量及编程的复杂度,只利用8位的寄存器就可以得到小数点后所要求的精度的位数。编程简单,值得应用与推广。

参考文献

[1] 宋凤娟,孙君,李国忠.基于89C51单片机的数字电压表设计[J].制造业自动化,2007(2):25?27.

[2] 杨建成.基于单片机的数字电压表的设计与仿真[J].现代电子技术,2012,35(21):170?172.

[3] 杨志忠.数字电子技术[M].4版.北京:高等教育出版社,2013.

[4] 金春林.AVR系列单片机C语言编程与应用实例[M].北京:清华大学出版社,2003.

[5] 胡辉,李叶紫,胡力平.单片机原理与应用[M].北京:中国水利水电出版社,2007.

[6] 郭晓伟.汇编语言的优越性及实用性[J].中国科技信息,2006(3):65?66.

[7] 黎远松.汇编语言程序设计技术研究[J].成都大学学报:自然科学版,2006(1):66?69.

[8] 周润景.基于Protes的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.

[9] 王瑾.基于Protes的数字电压表仿真设计[J].电子设计工程,2013,21(1):122?124.

[10] 王瑞萍.基于Protes的单片机虚拟开发环境[J].现代电子技术,2009,32(8):155?157.

[11] 陈少航,李山,苗亮亮,等.基于Protes的单片机应用系统的设计与仿真[J].现代电子技术,2007,30(6):43?45.

[12] 邓鹏.Protes虚拟仿真在单片机实验教学中的应用研究[J].现代电子技术,2012,35(16):27?29.

2 “余数拆分”算法在简易数字电压表中的应用

采用AT89C51单片机、ADC0809模/数转换器,根据“余数拆分”算法,精度保留小数点后3位、采用能够直接控制硬件且实时性强[6?7]的汇编语言进行软件设计。流程图如图1所示。

图1 软件流程图

3 Proteus仿真

作为当今世界最受欢迎的EDA仿真软件,Proteus仿真是一种嵌入式系统仿真与开发平台,由英国Labcenter公司研发[8?9]。它支持单片机系统的硬件电路仿真并提供软件调试功能[10],仿真形象生动,接近现实环境,省去了现场安装调试硬件的环节,省时、有效[11?12] 。

Proteus仿真电路图设计与显示如图2所示。在该仿真电路中,当电位器的触头处于图中所示位置时,经过ADC0809转换后得到的数字值为11111110B,则利用上述公式得到的保留3位小数的电压值应是2.490 V,而仿真显示的数值即为2.490 V,如图2所示,说明该算法准确度高。

图2 Protues仿真验证图

4 结 重

在测量范围为0~5 V、采用汇编语言设计及ADC0809的简易数字电压表中,应用“余数拆分”算法可以有效地避免16位的除法运算,减少利用的寄存器数量及编程的复杂度,只利用8位的寄存器就可以得到小数点后所要求的精度的位数。编程简单,值得应用与推广。

参考文献

[1] 宋凤娟,孙君,李国忠.基于89C51单片机的数字电压表设计[J].制造业自动化,2007(2):25?27.

[2] 杨建成.基于单片机的数字电压表的设计与仿真[J].现代电子技术,2012,35(21):170?172.

[3] 杨志忠.数字电子技术[M].4版.北京:高等教育出版社,2013.

[4] 金春林.AVR系列单片机C语言编程与应用实例[M].北京:清华大学出版社,2003.

[5] 胡辉,李叶紫,胡力平.单片机原理与应用[M].北京:中国水利水电出版社,2007.

[6] 郭晓伟.汇编语言的优越性及实用性[J].中国科技信息,2006(3):65?66.

[7] 黎远松.汇编语言程序设计技术研究[J].成都大学学报:自然科学版,2006(1):66?69.

[8] 周润景.基于Protes的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.

[9] 王瑾.基于Protes的数字电压表仿真设计[J].电子设计工程,2013,21(1):122?124.

[10] 王瑞萍.基于Protes的单片机虚拟开发环境[J].现代电子技术,2009,32(8):155?157.

[11] 陈少航,李山,苗亮亮,等.基于Protes的单片机应用系统的设计与仿真[J].现代电子技术,2007,30(6):43?45.

[12] 邓鹏.Protes虚拟仿真在单片机实验教学中的应用研究[J].现代电子技术,2012,35(16):27?29.

单片机 文章 电压表