当前位置:首页 > 单片机 > 单片机
[导读] AVR单片机问世以来,获得广泛关注。它是一种采用精简指令集、以时钟周期为机器周期的高速单片机。它采用快速寄存器文件(共有32个寄存器 R0~R31,其中R16~R31具有较强通用功能)、快速单周期指令。另外

AVR单片机问世以来,获得广泛关注。它是一种采用精简指令集、以时钟周期为机器周期的高速单片机。它采用快速寄存器文件(共有32个寄存器 R0~R31,其中R16~R31具有较强通用功能)、快速单周期指令。另外在存储器技术(Flash存储器、EEPROM)、低功耗、系统可靠性、定时 /计数器功能多样化等方面也都具特色。但由于采用精简指令集,它没有一般8位机的DAA指令。因BCD码加减法运算及定点数制转换都要用到DAA功能,故给使用汇编语言研发带来不便。本文重点介绍用软件实现DAA的方法。


计算机采用的十进制操作数一般都为压缩型8421 BCD码,每个BCD码表示1位十进制数。每2位BCD码共存于同一字节单元中,故BCD运算涉及状态寄存器SREG的进位C(第0位)和半进位H(第5 位)。它们分别为高、低位BCD的进(借)位。在进行BCD码加减运算时,计算机是按二进制数对待的,因此会产生与十进制运算规则不相符合的情况:一是当产生进(借)位(C=1或H=1)时,该进(借)位等于16(对所涉及的1位BCD码而言),而在十进制运算中应等于10;二是可能产生非法BCD码(值大于9)。软件DAA即为纠正以上错误而设的。

1 软件DAA的实现方法

1.1 实现加法DAA功能子程序ADAA和ADAA1的设计方法

经实践考查,BCD码加法运算,可产生以下3种情况:

① 不须调整,特点是既不产生进位,也不产生非法BCD码。如$22+$11=$33。

② 产生非法BCD码,必须加6调整。特点是BCD码相加后不产生进位,但加6调整后产生进位。如
$36+$37=$6D(产生非法BCD),加6调整后变为$73(产生半进位H)。$68+$87=$EF,加$66调整后变为$155(产生进位C和半进位H)等。

③ 产生进位,必须加6调整。特点是BCD码相加只产生进位,不会同时产生非法BCD码;而加6调整后既不会再产生进位/半进位(而是清除了原来的进位/半进位),也不会产生非法BCD码。例:
$99+$88=$121,进位C和半进H位都置位,故加$66来调整:$21+$66=$87,并要恢复进位C。

综合以上3种情况,得出下面加法DAA之实现方法:首先保存BCD码相加后的状态寄存器SREG(保存其中的进位C和半进位H,称为Co和Ho)。再将 BCD码之和加上$66,产生出新的进位Cn及半进位Hn。若Co、Cn中有1个置位(只能有1个!),说明高位BCD满足调整条件并调整完毕,否则为不够调整条件,应减$60恢复;若Ho、Hn中有1个(只能有1个!)置位,说明低位BCD满足调整条件并调整完毕,否则为不够调整条件,应减6恢复。程序中是将新、旧进位和半进位对应"或"起来,只对"或"结果进行判断。注意,软件DAA功能既要保证本字节压缩BCD码相加值的正确性,又要保证对高位 BCD产生进位的正确性,故要将Co∨Cn的结果返还给SREG,以使下一步能正确实现高位BCD带进位加。

ADAA为BCD码相加调整子程序,使用寄存器R20作为工作单元(使用R22、R11、R10等3个寄存器作为辅助工作单元),所有调整工作都在此单元内进行。

ADAA1为数制转换程序中实现BCD码左移调整的子程序,为加法DAA之特例:它在R20工作单元内实施BCD码带进位位自加并完成对和的调整。

1.2 实现减法DAA功能子程序SDAA的设计方法

由实践可知,减法DAA要比加法来得简单:只须对产生借位的BCD码进行调整。BCD码减法运算,只有以下2种情况:

① 不产生借位,不须调整,如 $22-$11=$11。

② 产生借位,此时不论有否非法BCD码产生,一律对产生借位的BCD码加$A调整。但AVR单片机没有加字节型立即数指令,改为减6调整,要注意加原和减补对进位的影响是相反的。为保证多字节压缩BCD码运算的正确性,若调整后清除了借位C,必须将其恢复。例如$22-$54=$CE,因C、H皆置位,用减去$66来调整$CE-$66=$68,调整后清除了借位C,故子程序中还要加SEC 指令来恢复借位C。

注:MCS-51单片机减法DAA子程序很容易按此移植(半进位为AC)。

1.3 实现右移DAA功能子程序RDAA的设计方法

见"3 定点数制转换子程序"中对BCD码右移调整的说明。

2 定点运算子程序

(1)多字节压缩BCD码加法子程序ADBCD

加法在寄存器内直接完成,以R20为DAA工作单元。BCD码相加后,将和送到R20,调用ADAA子程序,实现对和的调整(返回主程序后再回送调整结果)。

(2)多字节压缩BCD码减法子程序SUBCD

减法在寄存器内直接完成,以R20为DAA工作单元。BCD码相减后,将差送至R20,调用SDAA子程序,实现对差的调整(返回主程序后再回送调整结果)。

(3)乘法子程序MUL16

操作:(R13,R12)×(R15,R14)→ R17,R16,R15,R14

采用字乘字无符号数运算。采取逐次右移部分积和乘数,当乘数移出位等于1时将被乘数加入部分积的方法完成计算。可视为16位整数×16位整数→32位整数,也可视为16位整数×16位小数→16位整数,或视为16位小数×16位小数→32位小数。可加上舍入处理。

(4)除法子程序DIV16

操作:(R17,R16,R15,R14)÷(R13,R2)→R15,R14

采用双字除以字无符号数运算。采取逐次左移被除数与除数相减、试商、记商的方法完成计算。可视为双字型整数÷字型整数→字型整数,也可视为小数÷小数→ 小数。要求 (R17,R16)<(R13,R12)。可加上舍入处理,但要注意可能产生舍入溢出(例如$7FFFC000÷$8000=$FFFF.8,舍入取整即产生溢出)。


(5)开平方子程序SQR

操作:(R17,R16,R15,R14)→R14,R13,R12

可视为双字型整数X(≤4294967295)开平方,因有舍入处理,方根最大可达$10000(如X=$FFFF0000开平方即属此),故用3字节存储平方根。也可视为定点小数开平方,将X自最高位起每2位进行分割,采用摸拟手算的方法(X每左移2位试出1位根)开平方。


3 定点数制转换子程序

该组子程序由定点整数二翻十、定点整数十翻二、定点小数二翻十和定点小数十翻二等4个子程序组成,分别称为CONV1、CONV2、CONV3和CONV4。由于AVRAT90系列单片机只有字节乘字节指令,计算功能不强,故采用移位调整法实现多字节数据的数制转换。其中,整数二翻十子程序CONV1和小数十翻二子程序CONV4采取左移调整的方法,而整数十翻二子程序CONV2和小数二翻十子程序CONV3采用右移调整的方法。不论左移还是右移,调整总是对十进制数进行,其目的是使十进制数的移位规则符合于二进制数移位规则:左移1位值增倍,右移1位值折半。当某位BCD中的最高位(8)左移移入高位BCD中时,按二进制数看待应为16,而按十进制数相邻位看待只能为10,故要做加6调整。另外,左移过程中若出现非法BCD码时也要对其调整。BCD码左移只不过是BCD码相加的特例,故调用 BCD码相加调整子程序ADAA1就可完全解决左移调整问题。当右移BCD码时,若某位BCD中的1移入低位BCD最高位,按二进制数看待,1折半应为 0.5,而低位BCD中最高位值为0.8,故要做减3(即0.3)调整。因8421BCD码其各位之权(某位上的1所代表的实际数值)分别为8、4、2和 1,若只在本码位内部移动,则符合左移1位值增倍、右移1位值折半的规则,故不须调整。

本组定点运算及数制转换子程序为适应大多数应用场合而设,具体使用时可加以修改。如整数二翻十时,二进制数不超过$FFFF,为提高运行速度,可将二进制数改为二字节,十进制数改为3字节,并将移位循环次数(R21)改为16。如数据精度不够,可把乘法子程序改为3字节乘3字节等等。

ADAA1为左移BCD码并对其进行调整的子程序。

RDAA为对右移后的BCD码进行测试、实施减3调整的子程序,以R20为工作单元。

注:开平方子程序SQR说明中,请将对开平方数R17、R16、R15、R14加上完整根号。

参考文献

1 宋建国,等. AVR单片机原理及其应用. 北京:北京航空航天大学出版社, 2000
2 张克彦. MCS-51/196单片机浮点程序和实用程序(2.2.7 2.4.1 3.1.2 3.1.3等小节). 北京:北京航空航天大学出版社, 2001


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

杭州2024年5月20日 /美通社/ -- 5月20日,百世供应链旗下百世云仓在2024年全国网络大会上,宣布了其全面出海战略。聚焦于东南亚市场的新机遇,并积极推动品牌走向国际市场。 百世供应链召开2024年百世云仓全...

关键字: 供应链 网络 触点 软件

引领供应链数字化转型新潮流 上海2024年5月16日 /美通社/ -- 5月14日,"第七届亚太智慧供应链与物流创新博览会"在上海顺利举办,作为中国和亚太区最大规模,最有影响力的顶流供应链物流盛会,...

关键字: 数字化 软件 供应链管理 控制

上海2024年5月13日 /美通社/ -- 在数字化时代,高效的税务管理和ERP系统成为企业发展的关键。为了满足这一需求商应信息科技与Exact Software 易科软件就金四全电票税系统与ERP系统集成及商务合作建立...

关键字: AC 软件 BSP 数字化

上海2024年5月13日 /美通社/ -- CONNECT 2 是更加用户友好的声卡,仅需轻点几下,它就能为人声和乐器的录制增添异彩。触控面板触感舒适、控制精准、一目了然。所有输入输出信号均可独立静音。自动设置功能通过内...

关键字: NEC 声卡 控制 软件

央视《今日说法》栏目近期报道了一名90后程序员通过开发非法视频搬运软件在不到一年的时间里获利超700万,最终获刑的案例。

关键字: 程序员 软件

上海2024年4月22日 /美通社/ -- 恶性的攻击和意外事件总是防不胜防,提前部署灾备方案可以在遭遇意外时尽可能减少企业损失。那么面对无处不在的勒索病毒和潜在风险,为什么依然有很多企业还会遭遇数据丢失?

关键字: 勒索病毒 软件 电脑 群晖数据

SAP(思爱普)近日发出的裁员计划,不仅涉及全球范围内约8000个职位,更是在中国区造成了近1500名正式员工和合同工不续的情况。

关键字: 软件 互联网

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP

自 ChatGPT 出现以来,生成式人工智能 (GenAI) 在亚洲和大洋洲的开发和部署势头强劲,Omdia 的最新《亚洲和大洋洲的生成式人工智能 - 2024 年:通过本地化实现民主化》报告表明,到 2024 年底,G...

关键字: 人工智能 软件 AI

德国埃朗根2024年4月16日 /美通社/ -- Elektrobit 今日宣布推出 EB zoneo GatewayCore——首款支持、配置和集成现代微控制器新一代硬件加速器的软件产品,可应用于先进的汽车电子/电气架...

关键字: 汽车 软件 硬件加速 通信网络
关闭
关闭