![位工业级通用单片机-应用笔记库_第1页](http://file4.renrendoc.com/view/f8330dfb6f1db760d38bc66ea2e2e7a6/f8330dfb6f1db760d38bc66ea2e2e7a61.gif)
![位工业级通用单片机-应用笔记库_第2页](http://file4.renrendoc.com/view/f8330dfb6f1db760d38bc66ea2e2e7a6/f8330dfb6f1db760d38bc66ea2e2e7a62.gif)
![位工业级通用单片机-应用笔记库_第3页](http://file4.renrendoc.com/view/f8330dfb6f1db760d38bc66ea2e2e7a6/f8330dfb6f1db760d38bc66ea2e2e7a63.gif)
![位工业级通用单片机-应用笔记库_第4页](http://file4.renrendoc.com/view/f8330dfb6f1db760d38bc66ea2e2e7a6/f8330dfb6f1db760d38bc66ea2e2e7a64.gif)
![位工业级通用单片机-应用笔记库_第5页](http://file4.renrendoc.com/view/f8330dfb6f1db760d38bc66ea2e2e7a6/f8330dfb6f1db760d38bc66ea2e2e7a65.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基本功能函数库说明(Softwarebasicfunctionlibrary凌阳单片机技http://wS 出订单前,自行确定所使用之相关技术文件及规格为之版本。若因贵公司使用本公司之文件或产品,而涉及第三人之专利或著作权等智能权之应用及配合时,则应由贵公司负责取得同意及,本公司仅单纯贩售产品,上述关于同意及,非属本公司应为保证之责任。又凌阳科 1 E- 1SM 02修订记 库文件介 Lib文件介 LIB_Var.inc文件介 AN_O010inc/AN_O0101.inc/AN_O0102.inc文件介绍 SPMC65X单个库的使用方 SPMC65X多个库的使用方 库中RAM大小的修 使用库函数时应注意的问 在中断中使用库函数时可能出现的问 在RAM中可能出现的问 使用伪指令ORG的说 库中RAM分 库中数据的摆 使用范 二进制无符号数16位与16位的加法运 函数简 函数设计方 API列 函数资源列 二进制无符号数16位与16位的减法运 函数简 函数设计方 API列 函数资源列 二进制无符号数8位与8位的乘法运 函数简 ::E-22SMC6x基本功能函数库说明函数设计方 API列 函数资源列 二进制无符号数8位与8位的除法运 函数简 函数设计方 API列 函数资源列 二进制无符号数16位与8位的除法运 函数简 函数设计方 API列 函数资源列 二进制有符号数8位与8位的乘法运 函数简 函数设计方 API列 函数资源列 二进制有符号数8位与8位的除法运 函数简 函数设计方 API列 函数资源列 二进制有符号数16位与8位的除法运 函数简 函数设计方 API列 函数资源列 无符号数4位BCD与4位BCD的加 函数简 函数设计方 API列 函数资源列 ::E-33SMC5x基本功能函数库说明无符号数4位BCD与4位BCD的减 函数简 函数设计方 API列 函数资源列 无符号数2位BCD与2位BCD的乘 函数简 函数设计方 API列 函数资源列 无符号数2位BCD与2位BCD的除 函数简 函数设计方 API列 函数资源列 无符号数4位BCD与2位BCD的除 函数简 函数设计方 API列 函数资源列 有符号数2位BCD与2位BCD的乘 函数简 函数设计方 API列 函数资源列 有符号数2位BCD与2位BCD的除 函数简 函数设计方 API列 函数资源列 有符号数4位BCD与2位BCD的除 函数简 ::E-44S 函数设计方 API列 函数资源列 单字节二进制数转换为2位 函数简 函数设计方 API列 函数资源列 2位BCD转换为单字节二进制 函数简 函数设计方 API列 函数资源列 单字节二进制数转换为3位 函数简 函数设计方 API列 函数资源列 双字节二进制数转换为5位 函数简 函数设计方 API列 函数资源列 3位BCD转换为单字节二进制 函数简 函数设计方 API列 函数资源列 单字节ASCII转换为单字节二进制 函数简 函数设计方 API列 函数资源列 ::E-55SMC5x基本功能函数库说明单字节二进制数转换为单字节 函数简 函数设计方 API列 函数资源列 双字节ASCII转换为单字节二进制 函数简 函数设计方 API列 函数资源列 单字节二进制数转换为双字节 函数简 函数设计方 API列 函数资源列 半字节数转换为7段显示 函数简 函数设计方 API列 函数资源列 数据块的初始 函数简 函数设计方 API列 函数资源列 数据块间的数据传 函数简 函数设计方 API列 函数资源列 数据块间的数据比 函数简 ::E-66S 函数设计方 API列 函数资源列 字符串块间的字符串传 函数简 函数设计方 API列 函数资源列 字符串间的字符串比 函数简 函数设计方 API列 函数资源列 移位操 函数简 函数设计方 API列 函数资源列 数据查 简 设计说 使用范 程序跳 简 指令说 设计说 使用范 用途说 指令延 简 各条指令的占用周期 1MS延时函数说 1S延时函数说 ::E-77S 使用范 位操 简 设计方 中断嵌 简 设计说 堆 堆栈的工作情 使用范 堆栈指令简 “JMP*+AAAA”指 指令说明 寻址指 指令介 用途介 中 CPU对中断的响 CPU对IRQ与NMI响 CPU对IRQ的响 CPU对NMI的响 中断响应速 中断指令介 中断/提取缓存 使用范 宏的定 宏的调 使用范 ::E-88SM 修订本编写 订说04-12-::E-9 C5x基本功能函数库SPMC5x库的使用说分别包括一个lib文件和两个inc文件。在库AN_O0100中,lib文件为AN_O0100.lib,两个inc文件为LIB_ar.inc和A_O010.inc, Lib文件该文件对库中所有函数的源代码进行了编辑,在用库中的 LIB_Var.inc文件介库中3个库函数,它们占用的RAM大小分2、4、7个字节,则在LIB_Var.inc文件中定义的RAM大小77RAM2-1的红域所示,它是一个以变量GBLibBuf为起始地址数据块。每个库中LIB_Var.inc的作用都是相同的,的别是它所定义的数据块大小的不同。2-1LIB_ar.incRAM::E- AN_O010incAN_O0101.inAN_O0102.inc文件介绍该文件用于库中变量的定义和函数的。库中的函数被为外部函数,函数所使用的全局 法函数F_Bin16Add16的图2-2红域所它变量 图2-3红域所示2-2函数F_Bin16Ad16AN_O0100.inc中的::E-1 6x 图2- 函数F_Bin16Add1的变量在AN_O0100.inc中的定::E- SPMC65x单库的使用方法单个库的使分为两个步骤:WorspaceHeaderFilesinc文件,并在调用库函数的文件中将其包含进去。例如在库AN_O0100中,它的两个inc文件为LIB_VAR.in和AN_O0100.ic,添加后如下图2-4的红域所示。注意:使用“INCLUDE”添inc文件时顺序不能变,先添加LIB_VARn,后添AN_O0100.::E-1 C65x 在使用库函数时需要其lib文件过来。方法为:打开Project->Setting—>Link,便会出现Setting对框,然后将该库的lib文件加去。如下图2-5的红域所示,已 100lib文加入。图2-5 件::E- SPMC65xAN_O0100AN_O010AN_O0102三个库在同一个工程下使用,其具体步骤和单库的使用完全相同,只是应该注意以下三点:2LB_Var.inc就可了,因为每个库中LIB_Var.inc的作用是相同的,都RAMLIB_Var.incRAM大小需要修改,以满足每个库的需求,RAMAN_O0100、AN_O0101AN_O0102这三个RAM597RAM中定义93、建立时需要将A_O0100.lib、ANO0101.lib和A_O0102.lib全部到工程中。 点后就可以同时使用这个库了。库中RAM大小的定义使用“最大原则。例如,某库中有3个库函数,它们占用的RAM大小分则可以将库函数中定义的RAM大小改为4个字,这样就可以节约RAM。修改方法为:打开文件LIB_VAR.inc,修变量GB_LibBuf 大小即可。如下图2-6的红域所示。::E-1 6x 2-6RAM大的修改2 2.. 在中断中使用库函数时可能出现的RAM都两个库函数的RAM区就会互相覆盖,产生。以,应避免两个和个以上的库函数的交叉运。RAM中可能出现的问SPMC65x库在AGE0RAM,如图2-6所示。所以在调用库函数时应RAM,否则程序可能会错。如果调用库函数,则可以随便使用这段RAM E- 使用伪指令ORG的说 ORG来定义起始地址,请使用以下伪令:“PAE0”用于零页变量的定;“DATA”用于非零 “VECTR”用于中断入地址的定义。库中 RAM—RAMRAM,因而在调用下一子程序时会覆盖前一个子程序的RAM段。用RAM .DA;definedatastorage11;dfinea是用RAM程序 到的临时变量 是公RAMRAMdsRAM采用.EQU的方式,空间可以反供不同程序运算时利用,是不能存数据。队列子程序 源列表R占公用执行 F_Quue_in0x4F_Queue_sF_QueuexF_Queue该子程序用到的公用RAM为 字节,这 RAM还可在其函数中使用库中数据的摆库中数据块和多字节据,需要预定义数据的地址的增减形式。库函数采用地址量的形,即低节放低位,高字节放。::E- higGB_Queue_tess GB_Queue_test1是用户定义数据块GB_ueue_test1的地 $855存放形为:$ 以下范例程序为:调用库AN_O0100中的函数F_C2Bin5Bcd,将双字节二 数转换为第一步:PAGE0DODE、VECTOR的;LIB_AR.incAN_O0100.inc;第三步:将该库函数的lib文件过来。然F_C2Bin5Bcd;==============================================================;Thenformaiocotainedheeinistexlusiveroperty;SnplsTecnolgyCo.Andshalnotbedisrbued,reprouc;risclsed holen ithout pe(C)COPRIGHT ;Thentrenoticeabo ustbereproduedonalauthorized ======= Prgm main Desc Th pesentsnexamle rt;;C65P2 /2408ADta; ;Versi ::E- x Edition ;rocessstadard602 .LIN .SY ;geeratesymboicdebug ; SPMC5P2 ;Definealh egistersnd LIB_VA ;Lib ource ANO010 ;Libinc ; definvalesnheangefrom00hto ;definedatastorage ; ; ;Disable::E- #C_SACK_BTTOM ;als kp t$00ff stackpoint?L_:e \=tl use ; ; ** ;Non-mas up V_I IRQinterrupt ; Enof ::E- 6x基本功能函数库说明二进无符号数616位的加法运本库主要描二进 符号数16 算位,若 位,则置和的最为#$1,否则清零加数高加数高8被加数被加数高8被加数低8高8高83-11616::E- C65x基本功能函数库说明开开零送入和的低8位。NN是否进Y和的高8位中加,结送和的中8图3-加法子程 API【功能描述】二进制 号数16位 位的加法运算,和为24【参数】 被加数的地GB_BinAddend 16bit加数 24bit【出口参数】 24bit和的地【注意事项】当16位与 的 位 的高8位送 坏 B_BinAu ;16-bit E- C65x基本功能 B_BinAd GB_Bin ;24-bit .GBsGB_inAugendAd#.hh.G_ ;被加数 .GB GB_inAddendAd .GB GB_ ; 的地 lowGB_BinSum #ighGB_ F_函资列表六位 库函数占用资源列表3-R占公用执行 (ccF_6::E-3 6x基本功能函数库说明二进制符号数 位与16位的减法运本库主要描二进 符号数16 16位的减法运算若产生借位,则表明减数大于被减数,则置标志“Z1,表示相减的结果为负,否清4-14-1:被减数被减数高8被减数低 低8低84-11616::E- C65x基本功能函数库说明开开的低8位N结果为负数YZ置Z置返高8位带借位相,结果 4-116位与1位的减法子 API【功能描述】二进制 号数16位 位的减法运算,差为16【参数】GB_BinMinuendAddr 被减数的地 16bit减数的 16bit差的地【出口参数】 16bit差的地Z“Z”=“Z”=1,结果为负 坏
,差以补 形式表_BinMin2;16-减_nSubtra2GB_Bin2;16-bit E- .loGB_ nMinuendAd .hih.G_ _ Add # _Bi ubt #.h Bi .lo.GB_BinSub #ighGB_GB_ ;调用法程序函十六 法库函数占用资源列表4-R占公用执行 (ccF_6::E-2 6x基本功能函数库说明二制无符 8位与8位的乘法运本库主描述 制无符号数 与8位的乘法运算也左移一位(第一次除外,并且进行一次判断若乘数移出位“1”,进行一次加。例如#$95乘以#$CD,乘$71其程图-所。1010010101110101
第一次1001100101100110010101010001011第八5-188 E- 被乘被乘数左移移出位为Y被乘数与乘积相开 C65x基本功能函数库说明开设置循次为“设置循次为“8NN环次数循环次数Y返N8位与位的乘法子程NAPI【功能描述 二进 8位与8位的乘法运【参数 二进制被乘 E- C65x 【出口参数 二进制乘积的高8 二进制乘积8【 坏 项】无 ;⋯数源列表8位乘库函数占用资源列表:5-R占公用 周期cF_4::E- 法模拟手动除法,即:被除数从最开始不断的向余数(为,余数也不断的向左移动,每移一位,余数与除数比较一次,大于或等于除数时,余数减去81所示。例如()除以(,商为(,次循0110101101111 被1 11001011 ::E- 开开Y “0”吗NN余数大于等于除数YN左移次数等于Y商加余数=余数减去除置商左移一位,最低位补商和余数Z返8Z返【功 述】二进制无符号数8位与8位的除法运::E- C65x 【】X Z Z”值为 结果正 坏 项】无 子程 误?⋯?LErr 数源列表8位除库函数占用资源列表:6-R占公用 周期cF_3::E- 6x基本功能函数库说明本程序模拟手动除法运算的过程为被除数从最开始不断的向余(初始值为的最低位移入,余数同时也不断的向左移动,每移一位,该余数与除数比较一次,大于或等于除数时,余数减去除数并将差值存在余数中,同时存商的变量的值加一,然后该商向左移动一位,最 位补若小于除数则商直接左移动一位,最低位补此时一个循环结束,共有6个循环,最后一次循环商不左移一位。其流程如图1示。例如(#$7FED)除以(#$1A,商为 (#$F。计算方法如下式7-::E-第第第第第第 第第第第123456 9101次次次次次次 次次次次次00000100111010101000001001110101011110110110除10111 1101101101010011110107- E- 开开Y?NN余数大于等于除数YN左移次数等于Y商加余数=余数减去除被除数左移一位到余数商左移一位,最低位补和余数Z返Z返::E- 【功 述】二进制符号数16位除以8位的运【参数 被除数高8被除 【出口参 商的高8 Z Z,果出Z”值为 结果正 】
A
; 误?⋯ 二进制无 数16 8位的法库函数占用资源列表7-R占公用执 期(y 5::E- 6x基本功能函数库说明二制有符 8位与8位的乘法运或#$0(0)时乘积返回为#$0
Bit6~B 8位有Bit6~B数“1”图8- 8位有符号数的表示方程序设计方法:模拟手动乘法,先判断出乘积的符号,然后再进行无符号运算。其计7(第一次除外“1#$95#$4D#85。 8 00010乘去符位01001数掉号001
1100101
第三次00010001000010001000001011011相加后乘积为#$61100101式 二进制有符号数8位与8位的乘法运算 E- C65x基本功能函数库说明始始判断乘积符存放乘积的变无符号被乘数与无符号被乘数与乘积移出位Y无符号被乘数左移一循环次数Y返乘数右移一乘数 为NNNNN乘积添上符8位与位的乘法子 API E- C65x 【功能 】二进 号数8位与8位的乘法运【参数】 二进制被乘 【出口参数】 二进制乘积的高8 ---二进制乘的低8 坏 【注意事项】当乘数或被乘数为#$0( 0)或#$8(负 用例】
二进制 8位与位的乘库函数占用资源列表8-R占公用执 期(yF_S4::E- C5x基本功能函数库说明88当除数为#$0(0)或#$80(0)时,标志位“Z1“Z0,结果正确。当被除数为#$0(正0)或#$80(负0),余 商返回位除法运算的过程:被除数(除去符号位)从最开始不断的向存放余数的变量的最低比较一次,大于或等于除数时,余数减去除数(除去符号位)并存在余数中,同时存商0。若小于除数,则商直接左移动一08个循环,最后一次循环商不左移一位。其(#$69,(#$1,(#$16,第循循环
四五六七循循循循000011100001111101001011 余除4 E- 4开 C65x基本功能函数库说明开被除数和除数去掉符号YY除数为“0NY被除数为“0NN余数大于等于除数?YN左移次数等于8Y返Z0余数=数中Z1商左移一位,最低位商和余数清“0 E- C 8位与位的除法子程【功能 】二进制有号数8位与8位的除法运算【参 8位被
8 8位余数(符号与被除数相同Z 0,果正确【 坏 【 项】 F_SB ; 子程 误?⋯ rro 函数资源8 8位的法库函数占用资源列表9-R占公用执 期(yF_S4::E- C6x基本功能函数库说明168当除数为#$0(0)或#$80(0)时,标志位“Z1“Z0,结果正确。当被除数为#$0(正0)或#$8000(负 $0“二进 的表示方法如图101所示BBt6B高8 BBt6B值 “1”代表图 位有符号数的表示方位除法运算的过程:被除数(除去符号位)从最开始不断的向存放余数的变量的最低位移入,存放余数的变量也不断的向左移动,每移一位,该余数与除数(除去符号位)比较一次,大于或等于除数时,余数减去除数(除去符号位)并存在余数中,同时存商的6个循环,最后一次循环商不需向左移动一位。2所示。例如(F)除以(,先进行无符号位除法运算,商为(#$4EB#$F10-1: E- C 第第第第第第第 第第第第123456789101次次次次次次次 次次次次次00001110001110101100001110001110101111110110符无号被无号
10111110110110110001110111式 与8位的不带符号位除法运算4 E- 4开始 C65x基本功能函数库说明开始判断商的符号,然后被除数和除数去掉符号YY除数为“0NY被除数为“0NNYN左移次数等于16Y返0商和余数添上符号余数=余数减去除数商和数数中Z1商和余数清“010-2二制有符号数168 E- C65x基本 API【功能 】二进制有号数16位除以8位的运算 Z Z”值为 结果正【无 j8;误?⋯ 二进制有 数16位与位的除库函数占用资源列表10-R占公用执行 (cyl 6::E- 无符数4位 与4位BCD的加本库主要描述无符号数4 和为5位CD 用户调用时,只需将被加数、加数、的地址传给函数。其流程如 1-1所示,计算数低字加数高方法如数低字加数高被加数被加数高字被加数低字和的高和的高和和的低字式1-14BCD4BCD E- C65x基本功能函数库说明开开和的高字节清NN是否进位Y返和的高字节中送加,结送和的中 11-14BC4BCAPI【功描述】4位BCD与4位BCD的加 和为5位BCD。当加法向和的高字产 “#$1【参数】 被加数的地 4BCD加数的地GB_BcdSumAd 【出口参数】GB_BcdSumAd 和【注意 】 坏 E- .GBscdAugendAd.GB ;被加
.GBBcdAddendGB_cdAddendAdr .GBGB_ lowGB_BcdSum #ighGB_ ; ;调 法程4BD4BD的加库函数占用资源列表:11-R占公用 (cc 6::E- 无符数4位 D与4位BCD的减本库主要描述无符号数4位CD与 BCD的减法差为4位BCD程序设计思路是:在十进制模式下,先进行低字节相减,得到差的低字节,然后进行,表示相减的结果为负,否则清零。用户调用时,只需将被减数、减数、的地址传给函数。其流程如 12-1所示,计算方法如下式12-1:被减数高被减数高字被减数 节节差的高差的高差的低 -14位BCD与4位BCD的减法算 E- C65x基本功能函数库说明开开N结果为负数YZ置Z置返高字节带借位相,果 图12-14位 4位 减法子程序【功能描述】无符号数4位 与4位 【参数】GB_BcdMinuendAddr- 被减数的地GB_BcdSubtrahendA 4BCD减数的地【出口参数】 4位BCD差的地Z 【注意 】 坏 E- #btr#. B_B cd ;调 法程4BD4BD的减库函数占用资源列表:12-R占公用 周期c6::E- 无符数2位 D与2位BCD的乘 本库主要描述无符号数2位 2位 的乘法运算ab*cd可拆分为(ab*c*10)+(ab*d):第一步:ab*c=ab+b+⋯⋯+ab,可以通过循环相加来实现;第二步: 加的和左移4位,可实现 步:ab*d=ab+a+⋯⋯+ab,可以通过循环相加来实现,最 的结果相加即可。其流程如图13-1所示。开开被乘数与乘数的十位相相结果求和相结果求和图13-1无符号2位 2位 乘法子程序 API【功能描述 无符号数2 位BCD的乘法运【参数 被乘 ::E- C65x 【出口参数 乘积 ⋯ ; ⋯ 无符号数2位B 2位 的乘 函数占用资源列表13-R占公用 周期c 3::E- 无符数2位 D与2位BCD的除本库主要描述无符号数2BCD2BCD的除法运算,商和余数均为2BCD。0时,标志位“Z”返回值为,表示出,其余情况,Z”返回值为0。1 数小于除数为止,此时被除数即为余数。其流程如图14-1所示。商的低(个位)和余数。其流程图14-2所示。若采用第法,当计算99÷1时,需要循环99次,在默认时钟下,每次循环需要若采用第二种方法,当计算99÷1时,分别让十位的9和个位的91相除,这样就可以很快的得到结果。但是在一般情况(比如78÷23)其速度慢于第法。因此,本程序分别采用了两种方法的长处:当除数大于7时,采用第法,当除数小于7时采用第二种方法。其流程如图14-3所示。::E- C65x基本功能函数库说明开开将被除数的值送给余“Y余数小于除数N返商加余数= 除YY余小于除数?N除数的值 E- 法法开除数为NN除数大于“开除数为NN除数大于““Z”置和余数清YY采用第二种采用返返“Z”图14- 符号数 CD与2位CD“Z” API【功能描述 无符号 与2位BCD的除【参数 被除 【出口参数 0,结正确【 【注意事项 ::E- 65x 例 子程 误?⋯ 2BD2BD的除库函数占用资源列表:14-R占公用 周期c 2::E- 无符数4位 D与2位BCD的除的商为商的千位。如图15-1所示:临时变量高8 临时变量低8 被除数高8 被除数低80000位0000位15-变量除以除,所得的商为商的百位。如图15-2所示:000 00015-这两个临时变量除以除,所得的商为商的十位。如图15-3所示:8 临时变量低8 被除数高8 被除数低8余0余015-变量除以除数,所得的商为商的个位,得的余数为最终的余数。如图15-4所示:8 临时变量低8 被除数高8 被除数低80015- E- 在以上四步中,均需临时变量和除数相除,程序采用了循环相减的方法得到商和余数。程序流程如图15-5所示。始始YN“Z”置被除数千位除以除数,得到商的千00返图15- 符号数 BCD与 BCD的除API::E- C65x 【功能描述 无符号数4 2位BCD的除法运 Z 0,结正确【 注意项 范例 ; 子程 ⋯ 无符号数4位 2位 除法运库函数占用资源列表15-R占公用 周期(y 7::E- 有符数2位 D与2位BCD的乘 正0)或$80(负0 2位BCD有符号数的表示方法如图16-1 ,其中正数 为:0 数范围为~- Bit6~BBit6~B数 “1”代表6-12BCD程序设计思想是:先判断乘积的符号,然后再进行符号运算.例如ab*cd,去掉符号位后, 第一步:ab*c=ab+b+⋯⋯+ab,可以通过循环相加来实现;第步:将相加的和左移位,可以实现乘10; 步:ab*d=ab+a+⋯⋯+ab,可以通过循环相加来实现第四步:将第二步和第三步结果相加,相加之和即为带符号位的乘积; ::E-开开被乘数乘的符号被数或乘数为YN被乘数与乘数的十位相两次相乘结果求退被乘数与乘数的个位相乘积清图16-2有符号2位 2位 乘法子程序流【功能描述 有符号数2位BCD与2位BCD的乘法运算。当乘数或被乘数为#$00)或 (负0)时,乘积为#0 【出口参 【 项】 ; E- 有符号数2位 BCD的法运算函数占用资源列表16-R占公用执 期(y 3::E- 有符数2位 D与2位BCD的除 本库主要描述有符号数2位BCD与2位CD的除法运算,商和余数均为2位BCD。当除数为#$0(正0)或#$80(负0)时,标志位“Z”返回值为1, “Z”返回值为0,结果正确当被除数为#$0(0)或#$80(0,余数和返回#$0Z01 商的低(个位)和余数。其流程图17-2所示。若采用第法,当计算79÷1时,需要循环79次,在默认时钟下,每次循环需要7us,则总共需要0.56ms,速度太慢。但是在一般情况下(如78÷23)只需要3个循环,若采用第二种方法,当计算79÷1时,分别让十位的7和个位的91相除,这样就可以很快的得到结果。但是在一般情况(比如78÷23)其速度慢于第法。因此,本程序分别采用了两种方法的长处:当除数大于5时,采用第法,当除数小于5时采用第二种方法。其流程如图17-3所示。::E- C65x基本功能函数库说明始始去掉被除数和除数 Y余数小于除数N余数=余数-返商和余数添上符商加17-1有符号数除法第法流程 E- 然后将被除数的值送余 YNYN-2 E- C65x基本功能函数库说明开开除数为?YNN除数绝对值大于“Z”置Y采用法采用第二种判断商““Z”置返图17- 符号数 CD与2位CD的除法API2位CD2BCD【被除Y Z Z”值为 结果正【无 E- 65x本 l;数; 误?⋯ 有符号数2位 2位 除法运库函数占用资源列表17-R占公用执 期(cc 3::E- 有符数4位 D与2位BCD的除4BCD2BCD的除运算,商为4BCD位BCD当除数为#$0(0)或#$80(0)时,标志位“Z1“Z0,结果正确。当被除数为#$0(0)或#$8000(0,余数和返回#$0Z0有符号数4位BCD的表示方法如图18-1所示,其中正数范围为:~799,负数范 -7999=$F99)。BBt6B高8 BBt6B值 “1”代表图8- 有符号数4位BCD的表示方在十进制运算模式下,先判断出商的符号,然后模拟手除法,进行无符号数运算,其运算步骤下:的商为商的千位。如图18-2所示:临时变量高8 临时变量低8 被除数高8 被除数低80000位0000位18-变量除以除,所得的商为商的百位。如图18-3所示: E- C65x基本功能函数库说明000 00018-这两个临时变量除以除,所得的商为商的十位。如图18-4所示:8 临时变量低8 被除数高8 被除数低8余0余018- 的余数为最终的余数。如图18-5所示:8 临时变量低8 被除数高8 被除数低80018-得到商和余数。程序流程如图18-6所示。 E- C65x基本功能函数库说明开开Y除数为“0N被除数为“Z”置N“Z”置返被除数和除数的符然后去判断商图18- 符号数4位BCD与2位BCD的除法流程 E- C65x基本 API4BD2BCD【参数-被除数低8Y--商的高8 ZZ1Z 坏【 项无例⋯;= 7/;除数为 误? 有符号数4位 2位 除法运库函数占用资源列表18-R占公用执 期(cc 8::E- C6x基本功能函数库说明单字节二制数转换为2本函数主要描述单节二进 D(0~99函数BCD码cd=B/10+B%10,其中c为BCD码,d为低位BCD码,B为单字节二(10除数小于除数,此时计数中的数即为商。程序流程如图19-1所示。程序是将待转换的二进制数放于累加器A中,转换后的BCD码也放于累加器AAA中读出转换结果,若二进制数大于#$63hBCD0~9的范围,则视为溢出,错误标志Z置为1。4 E- 4 C65x基本功能函数库说明N判断累加器A中数是大于YBCD码写入获得低位BCDBCD码写入获得低位BCDX中数左4位得 API【单2【参 【 2-出错标志,Z=Z= E- C65x 注意 范例 #F_;cltheaGBTesave ?L_Ererror单字节 转换为 函数占用资源列表19-R占公用执 期(y 1::E- 本进制数,然后与BCD码的低4位相加,相加之和即为开开取出BCD码的高4查表得到与BCD查表得到与BCD码高4位对二进制数加上BCD码低返返和最终转换图20-1 为单字节二进制数的子程序流程::E- C65x基本 API 能描述】 BCD转换为单字节二进制【数】 2位【出口参 单字节二进 【使 2 位 换为单字 进制 库函数占用资源列表20-R占公用执 期(y1::E- 21单字制数转换为3本主要描 字节二进制4BCD码,即先将二进制数开开对应的3位返返相加之和为转换后BCD图21-1 制数转换为3位BCD的子程序流程::E- C65x基本 API【功描述】单字二进制数转换为3BCD【参数】 【出口参数】X (低4位有效 --BD 坏】A 单字节二制转换为 CD库数占用资源列表 1R占公用执行期(y 1::E- 双字节二制数转换为5本主要描述字节二进制数5BCD程序采用循环左移16次的方法,将二进制数从开始不断往存放BCD码的变量中其每左移一次,调整后的BCD值依次为0001248163,4,图2-1二进制数往变量BCD16次左移转换后的BCD码(edcba)分别应为65535。其流程如图22-2所示。左移次数等于左移次数等于Y对BCD进行十进制调22-2双节二进制数转换为5BCD::E- C65x基本 API【功能描 制数转换为5位BCD【参数 制数高8 8 4位有效 码低 进8 ;⋯双字节二制数转换为位 22-R占公用执行期(cc 3::E- 3位 转换为单字节二进制3位CD转换单字节二进制(0~255BCDcdf=100*c+10*d+f=10*(10c+d)+fcBCD码,d、f为低字节BCDBCDc100BCDd10,最后f相加,即得转换的二进制数。函数中的乘法(10)通过移位实,算法是:程序是将待转换的3位BCD中的高字节存放于累加器A中,低字节BCD码存放XA3BCDABCDX寄存器中,然后调用该函数实现转换,转ABCD255,溢出,错误标志Z置为1,否则Z=0。::E-高字节BCD码乘10结果值暂存于B高字节BCD码乘10结果值暂存于Buffer中取得低字节 位BCD码CC3Y高字节BCD码NN高字节BCD码Y低 BCD码YNY高字节BCD码NZ置为暂存高字节CD码计算(c*10+d)计算(c*10+d)结果值暂存于Buffer取得低字节低位BCD码AZ置为返回 E- C5x基 23-23-13BC转换为单字二进制数程序API【能描述】 【参数】GB_Addre 3位BCD的地【出口参数】 Z 出错标志 Z=0,果正确 sG t; ?Erro 位 转为单字节进制数函数占用资源列表23-R占公用执行期(y 2::E- 单 ASCI转换为单字节二进制本库主要描述单字节ASCII转换为单字节进制数。ASCII与二进制数的对照如下表24-1所示,当输入的ASCII超出范围时,标位“Z”返回值为1表示出错, “Z”返回值为0。表4- 3binarH9binaryAH相应的二进制数,若大于”#$9”,则差再减去”#$7”,便得到相应的二进制数。其流程如图::E-开NASCII值为30~39或4~开NASCII值为30~39或4~Y标 ”置差值NASCIIYY差值再减去标志“Z”置差值即为对应的二进制差值即为对应的二进制返APIACII 0A正无::E- 单字节ASII转换 制数的函数占用资源列表表4-R占公用AM执行周(ccF_0::E- 为单字节ACII。二进制ASCII25-1所示,当输入的二进制数值超出范围,标志位“Z”返回值为1 情况,“Z”返回值为0。表5- 3binarH9SCIIbinaryHE上“#$30”就是对应的ASCII码,反之,给定值 “#$37”。其流程如图25-1所示。::E-开NBIN值为开NBIN值为YNBIN值Y标和即为对应的BIN#$Z返25-1单节二进制转换为ASII的子程序程图API 单字节二进数转换为单字节【参数】 【出口参】A--单字节 0,结 【 E- 单字节二进数转换为A 25-R占公用AM执行周(cc 0 E- 双 ASCI转换为单字节二进制ASCIIASCII分别转换为两ASCII超出范围时,标志位“Z”返回值为表示出错其余情况,“”返回值为0。ASCII24章。由于转换后得到的二0~F,所以可以将这两个转换后的二进制数进行压缩,即:将其中一个二44二进制数。流程如图26-1。开开返返最终的转换,得两将其中一个二进制数的4位和低4位对26-1双字节ACII转为单字节二制数的子程序程图API【功能描】双字节ACII【参数】 ::E- 65x基本功能函数库说明 【出口参数】A单字节二进数,高 Z “Z” ; b 误? 制数的函数占用资源列表表6-R占公用AM执行周(ccF_1::E- 为双字节本库主要描述单字节二进制数转换为双字ASCII。该单字节二进制数是由两个二进制数(范围为0~F)压缩而成的,即:其4位和低4位分别 数的低4位成。进制数分别转换为ASCII,换方法见25章。其流程如图27-1所示。开开取出二进制数的低4将将其低4位转换为ASCII存在Y返返将其 转换为ASCII存在X27-1单字节二制数转换双字节ASII的子程序程图API 单字节二进数转换为单字节【参数】 ::E- C65x 【出口参数】 二进制数高4位转换的 进制4位转换 F_ 换“3”⋯单字节二进制数转为ASII27-R占公用AM执行周(cc 0::E- 8半节数转换为7段显示728-所示 9 721首址加偏移值得到目标地址,目标地址中的值即为结果值。程序流程如图28-2所示。ABCDA中,然后调用该函数实现转换,转换完后A7段显示码⋯g与bit0⋯⋯bit6对应。::E- C65x基本功能函数库说明C1Bin1SegC1Bin1Sega查表 图282半API【数】
A:字二进制数或1 7段显示码 】】 转换的数据半节转换为 显示码函数占用资源列表28-R占公用执行期(y 0::E- 数块的初始RAM区所义的一个据块里写入相开开里写指定的数据YYN -1数据初始化子流 API【功能描述】初始化数据块:往在 的、特定的数【参数】 GB_Ad ::E- C65x 【出口参数】GB_Adress数据起始地址 无a axr始化 函数源列表数块初始库函数占用资源列表:29-R占公用执行周(y 92::E- 5x基本功能函数 数据块间的数 数据块1(用户定义GB_Block2开开传递完结 301数据块数据传递子流API1 E- 1SPM65x本功能函数库说明【参数】 GB_ 【出口参数】GB_Addr GB_Blo hig GB_ ddr ;数据1 .lo B_ GB_Ta 给数函数资源数据块数据传库函数占用资源列表:30-R占公用cyl)4ze::E- 5x基本功能函数 数据块1(用户定义GB_Block2 义始始相等?Y数据比较标志Z置“”相等?Y数据比较标志Z置“”比较完毕?Y数据块1的第i个字节里的值与数据块2的第i个字节里的比NN数据比较标志数据比较标志Z置“31-1::E-SPM 【功能描述】RAM【参数】GB_SourceAdd进行比较的数块起始地GB_ Z块比较标志位:两个数据块间的数据完全时,标志位置“1”,否 GB_Blo .lo B_ higs GB_ GB_at F_BlockC+数2; 和数据块的数据比较R占公用 25e::E-SPM 符串块间的字符串传本库主要描述用户在RAM区所定义的两个字符串间的数据传递。字 规格和0x
GB_String_targer开始开始将字符串将字符串1的第i个字节里的值传入字符串2的第i个字节里[[NN结束结束结束标志递完毕?Y32-1递完毕?Y E- SPM API【入参数】 ource源字符串起地GB_String_arger---目标字符起地址【出口数】 项】 # ; # ; 串开传递32-R占公用执行周(cc4size::E-SPM GB_String_targerz置为“1”,则,置“0”。函数流程如图33-1所示。::E-SPM65x基本功能函数库说明比较标志位置“0i=[[i+1]等?Y完毕?NY字符串1的第i个字节里的值与字符串2的第i较标志位置“1相比较33- 符串间比较子相比较API 【入参数】GB_Stringsource源字符串始地址 er z : 【使用范例】 E- SPM l ;alB_String_;r omp;字符串始比较q?_ ?_R占公用 15size E- 5x基 移位操将nbytedata整个右移一个byte,移出的最端数据送A.将nbytedata整个右移1/2byte,出的最右 送入A,时可以移入n_bytedatabyteAA为输入参数,移新据。函数的能由下图341所示。111始地 址11131n_bytedata为输入参数,移新据。函数的能由下图3421低4高41低4高411图34 nbyteata右移功API 【功能描述】将n_bytedata整右移一个bye,移出的最右端 入【参数 GB_Adess――(数据首地址 GB_Addres――(数据 【注意事项】::E-1 l#.w.GB_mov_da#. ;sftinginjF_shftinGB;shit-byteat1bytto 【功能描述】将nbytedigitst12b【参数 GB_Adess――(数据首地址【出口参数】GB_Address――(数据首址A―(出数据 #. #. GBshift_a F_shftinGB ;hiftn-yte btettheri函数库函数各个函数占资源列34-134-R占公用FshiftinGB26_shiftin::E-SPM 数据查
移地址 (0~100℃到与其对应的华氏值(32~212℉。因而在程序中定义了一张温度转换表,代表了华氏32~2121010~100度,华氏(F)和氏℃)之间的换关系为:F=(9/5)*℃+32。表ldaTB_C2F,xTB_C2F为温度转换表的首地址;XTB_C2F的偏移量(当要查找转换表的第一个数据时,X的值为“0”,查找第二个时X的值为“1”,以此类推)X的取值范围是0~100,实际意义为摄氏~100℃。执行该指令后,A中的值为:以(TB_C2F+X)为地址所对应的数据。即:X为“0”时,A中的值为该表的第一个数据#032(320度X为“1”时,A中的值为该表的第二个数据#0334相当于摄x8;转换136 E- SPM 程序跳 (aaa)”调用任意一指说明 解释:跳转指令。双字节变量aaaa中存放跳转地址,存放格式:高字节高地址,低字节低地址。执行该指令后,程序跳转到以[aaaa1][aaa]为 在本程序中,参数为X,当输入的X值为“0”时,主程序会调用子程序F_0;当输入的X值为“1”时,主程序会调用子程序F_1,以次类推。程序的设计思路是:根据X的值先查表查出相应子程序的地址后跳到该地址去执行。具体解释如下: ;:FJ;能转;入;输n;1;========================================== SuAddr T_SubAdd 得子程序的地 ;跳转到以[G_::E-SPM6x基本功能函数库说明;为地址的子程序处去执行;***************************************************************
;ROM区将各子程
**0_01_12_23_34_4 E- ;子程序 3 ;调子程序F ::E- 指令延
。 占用周 2 2 2bne??2/3 跳转发生为 les,顺序执行为2 2 2 6 - ;\789 959cy 2/3 ; ;+ ;- 6 1 E- 1 yce。个cycle的时间为T1f(f为系统的时钟频率)若用钟8.0Mz,则最小延时为:t=975/8000000Hz E- SPM65x基本功能函数库说明开YXX赋值 减NX值YYY值减YA值减NA值 结37-1 E- SPM 37 L_ ++ + F_Del 6++ 1+ 7;2 + - ;6 yce。个cycle的时间为T=1/f(为系统的时钟频率)采时 8.00MH,最小延时为: 95090/8000000HZ≈的值为“#$FF”时,延时255s,注意,当A的值为 时,延时256s。其流程如图37-2::E- 5x基本功能函数库说明Y赋Y赋值开调用1ms延时子程序延25YY回N?图 延N? F_ F_Del ;延 0cyces,在时::E-SPM 位操
本例主要描SPMC5xSMC65x1、BIT B_Data的bit7的值赋给“N。将变GB_Data的bit6的值赋给“V。 果为0,则置标志“Z”为1,否则置02、 ,使用指令LI可以解除SEI的作用3、 4、 sd 5、 E- 5x本 6、CLRaa, a的bib置“0”说明:将变量aa的bb置0b的取范围是0 量aa的bit5被置07、 aa,a的bib置说明:将变量aa的bb置 b的取范围是 量aa的bit5被置18、 a,b-aa的itb取aa的bb取反b的取范围是 以上指令后变量aabit59、TSTaa,baabitb,影标志位“Z 则置0b的取范围是 是0,则置标志位“z”为1,否则置010、 11、 12、 ::E-SPM 中断嵌中在程序有两级中断嵌套:4ms中为外层,IRQ0中断为内层。先产生4ms中4msPAPB4口(PB4口已被设为下降沿触发)IRQ04msIR0中,处理完IRQ0中31中嵌套
;设置4下降沿触发jsr ;::E-SPM 4ms中断IR0中断(PB4#al counter= /12IeaP_IRQ_Op 4)faling#C;i ;清除所有的中标志位O口 : F P_IOAData ouuthigh 0P_IO_Datithull::E-
执行IRQ0中dp L_I;两个中断不是,退出 a ;a;/ ;硬件会自动关掉总的中断;由PA口产生下降沿,将P任端口接在PB4上, 产生I 0中 ;A口产生下降沿输入到PB4,产生 ::E- ;IR0中断服务程 a;a1::E-SPM 堆堆栈被用来程序的返回地址、临时数据或寄存器的值。它地址为$1E0~$1FF,共32个字节。在初始状态,指针指向$1FF1;当弹出一个1压入
压入40-1
弹出
40-2返回地址压入堆栈,然后再压入状态寄存器的值,如图40-5所示。同样,弹出时“后进先出”的原则,如图40-6所示。 E- SPM65x基本功能函数库说明地址低8地址地址低8地址高8S状地址低8地状地址低8地址高8(SP-(SP-
40-6RTSRTI有所不同,它们将返回地址传给程序计数器PC的方式不同。执行RTS时,将堆栈出的返回地址首先加1,然后送给程序计数器下一条指令的首地址。而CPU响应中断时压入堆栈的地址中断返回将要执行那一指将A 据压栈… 被 可以利用以上指令将重要的数据保存在堆栈里面,要时其弹出,这样可以节省RA 、P::E-SPM 值入堆 ;以便程 指时将当前地址压入堆栈,… ;弹出返回4、中断 变 ; ;其堆变化如图 将A::E- SPM ⋯ np 6bye ;1bytes+ b “jmp*+6”占用三个字节nop”占用一个字节,执行指令“jmp*+6”后,序跳转到标号“?L1”处。若将“jmp*+6”改为“jmp*+,则程到第一个“nop “jmp+aaa”是程序跳转指令另一种应用形式“aaaa”为立即数,它的取值是单字节或双字节。以标号”的地址为起点,跳转到”字节处,即跳转后的地址为 如在序段中 3;1by 1 ;1;1;1by 1 ; ?L1+4, L1“?L1”::E-1SPM 寻址指
接变址寻址 16位地址,然后该16位地址加上Y的值得到新的16 6位地址里的 其解释如图42-1所1Data1Data262-
间接变址寻址 16位地址,然后该16位地址加上Y的值得到新的16位,将A 送入新的16位 其解释如图42-2所示11Data11Data2642-
1 E- 1 SPM65x基 、变址接寻址 解释:地址aa+1加上X的值作为一个地址,取出该地址里的值pp;地址aa加上X的值作为一个地址,取出该地址里的值,然后组成新的16位地址ppq,将16位地址里的入A。例如:lda $80,x)其解释如图42-3所示。Data1142-
000+rr、变址接寻址 解释:地址aa+1加上X的值作为一个地址,取出该地址里的值pp;地址aa加上X ,然后组成新的16位地址pp A的值新的16位地址 其解释如图42-4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网店运营合同三篇
- 2025版物业财务管理合作协议范本3篇
- 二零二五年度个人货车租赁合同范本(含车辆租赁合同附件清单)2篇
- 实现目标的关键
- 部编版一年级语文下册第19课《咕咚》精美课件
- 二零二五年度公共机构行政车辆保养维修服务协议书2篇
- 二零二五年度某小区临街门面租赁合作协议书3篇
- 风险管理与企业战略目标的衔接培训
- 社区行业保安工作总结
- 二零二五年度创意市集摊位租赁运营合同12篇
- 分割不动产的协议书(2篇)
- 2025理论学习计划2025年理论中心组学习计划
- 2025年医美医院公司组织架构和业务流程
- 儿童流感诊疗及预防指南(2024医生版)
- 教代会提案征集培训
- 高考语文复习【知识精研】《千里江山图》高考真题说题课件
- 河北省承德市2023-2024学年高一上学期期末物理试卷(含答案)
- 山西省2024年中考物理试题(含答案)
- 春节节后收心安全培训
- 高中物理斜面模型大全(80个)
- 2025年高考物理复习压轴题:电磁感应综合问题(解析版)
评论
0/150
提交评论