位工業(yè)級通用單片機-應(yīng)用筆記庫_第1頁
位工業(yè)級通用單片機-應(yīng)用筆記庫_第2頁
位工業(yè)級通用單片機-應(yīng)用筆記庫_第3頁
位工業(yè)級通用單片機-應(yīng)用筆記庫_第4頁
位工業(yè)級通用單片機-應(yīng)用筆記庫_第5頁
已閱讀5頁,還剩256頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

基本功能函數(shù)庫說明(Softwarebasicfunctionlibrary凌陽單片機技http://wS 出訂單前,自行確定所使用之相關(guān)技術(shù)文件及規(guī)格為之版本。若因貴公司使用本公司之文件或產(chǎn)品,而涉及第三人之專利或著作權(quán)等智能權(quán)之應(yīng)用及配合時,則應(yīng)由貴公司負(fù)責(zé)取得同意及,本公司僅單純販?zhǔn)郛a(chǎn)品,上述關(guān)于同意及,非屬本公司應(yīng)為保證之責(zé)任。又凌陽科 1 E- 1SM 02修訂記 庫文件介 Lib文件介 LIB_Var.inc文件介 AN_O010inc/AN_O0101.inc/AN_O0102.inc文件介紹 SPMC65X單個庫的使用方 SPMC65X多個庫的使用方 庫中RAM大小的修 使用庫函數(shù)時應(yīng)注意的問 在中斷中使用庫函數(shù)時可能出現(xiàn)的問 在RAM中可能出現(xiàn)的問 使用偽指令ORG的說 庫中RAM分 庫中數(shù)據(jù)的擺 使用范 二進制無符號數(shù)16位與16位的加法運 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 二進制無符號數(shù)16位與16位的減法運 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 二進制無符號數(shù)8位與8位的乘法運 函數(shù)簡 ::E-22SMC6x基本功能函數(shù)庫說明函數(shù)設(shè)計方 API列 函數(shù)資源列 二進制無符號數(shù)8位與8位的除法運 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 二進制無符號數(shù)16位與8位的除法運 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 二進制有符號數(shù)8位與8位的乘法運 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 二進制有符號數(shù)8位與8位的除法運 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 二進制有符號數(shù)16位與8位的除法運 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 無符號數(shù)4位BCD與4位BCD的加 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 ::E-33SMC5x基本功能函數(shù)庫說明無符號數(shù)4位BCD與4位BCD的減 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 無符號數(shù)2位BCD與2位BCD的乘 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 無符號數(shù)2位BCD與2位BCD的除 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 無符號數(shù)4位BCD與2位BCD的除 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 有符號數(shù)2位BCD與2位BCD的乘 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 有符號數(shù)2位BCD與2位BCD的除 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 有符號數(shù)4位BCD與2位BCD的除 函數(shù)簡 ::E-44S 函數(shù)設(shè)計方 API列 函數(shù)資源列 單字節(jié)二進制數(shù)轉(zhuǎn)換為2位 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 2位BCD轉(zhuǎn)換為單字節(jié)二進制 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 單字節(jié)二進制數(shù)轉(zhuǎn)換為3位 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 雙字節(jié)二進制數(shù)轉(zhuǎn)換為5位 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 3位BCD轉(zhuǎn)換為單字節(jié)二進制 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 單字節(jié)ASCII轉(zhuǎn)換為單字節(jié)二進制 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 ::E-55SMC5x基本功能函數(shù)庫說明單字節(jié)二進制數(shù)轉(zhuǎn)換為單字節(jié) 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 雙字節(jié)ASCII轉(zhuǎn)換為單字節(jié)二進制 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 單字節(jié)二進制數(shù)轉(zhuǎn)換為雙字節(jié) 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 半字節(jié)數(shù)轉(zhuǎn)換為7段顯示 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 數(shù)據(jù)塊的初始 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 數(shù)據(jù)塊間的數(shù)據(jù)傳 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 數(shù)據(jù)塊間的數(shù)據(jù)比 函數(shù)簡 ::E-66S 函數(shù)設(shè)計方 API列 函數(shù)資源列 字符串塊間的字符串傳 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 字符串間的字符串比 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 移位操 函數(shù)簡 函數(shù)設(shè)計方 API列 函數(shù)資源列 數(shù)據(jù)查 簡 設(shè)計說 使用范 程序跳 簡 指令說 設(shè)計說 使用范 用途說 指令延 簡 各條指令的占用周期 1MS延時函數(shù)說 1S延時函數(shù)說 ::E-77S 使用范 位操 簡 設(shè)計方 中斷嵌 簡 設(shè)計說 堆 堆棧的工作情 使用范 堆棧指令簡 “JMP*+AAAA”指 指令說明 尋址指 指令介 用途介 中 CPU對中斷的響 CPU對IRQ與NMI響 CPU對IRQ的響 CPU對NMI的響 中斷響應(yīng)速 中斷指令介 中斷/提取緩存 使用范 宏的定 宏的調(diào) 使用范 ::E-88SM 修訂本編寫 訂說04-12-::E-9 C5x基本功能函數(shù)庫SPMC5x庫的使用說分別包括一個lib文件和兩個inc文件。在庫AN_O0100中,lib文件為AN_O0100.lib,兩個inc文件為LIB_ar.inc和A_O010.inc, Lib文件該文件對庫中所有函數(shù)的源代碼進行了編輯,在用庫中的 LIB_Var.inc文件介庫中3個庫函數(shù),它們占用的RAM大小分2、4、7個字節(jié),則在LIB_Var.inc文件中定義的RAM大小77RAM2-1的紅域所示,它是一個以變量GBLibBuf為起始地址數(shù)據(jù)塊。每個庫中LIB_Var.inc的作用都是相同的,的別是它所定義的數(shù)據(jù)塊大小的不同。2-1LIB_ar.incRAM::E- AN_O010incAN_O0101.inAN_O0102.inc文件介紹該文件用于庫中變量的定義和函數(shù)的。庫中的函數(shù)被為外部函數(shù),函數(shù)所使用的全局 法函數(shù)F_Bin16Add16的圖2-2紅域所它變量 圖2-3紅域所示2-2函數(shù)F_Bin16Ad16AN_O0100.inc中的::E-1 6x 圖2- 函數(shù)F_Bin16Add1的變量在AN_O0100.inc中的定::E- SPMC65x單庫的使用方法單個庫的使分為兩個步驟:WorspaceHeaderFilesinc文件,并在調(diào)用庫函數(shù)的文件中將其包含進去。例如在庫AN_O0100中,它的兩個inc文件為LIB_VAR.in和AN_O0100.ic,添加后如下圖2-4的紅域所示。注意:使用“INCLUDE”添inc文件時順序不能變,先添加LIB_VARn,后添AN_O0100.::E-1 C65x 在使用庫函數(shù)時需要其lib文件過來。方法為:打開Project->Setting—>Link,便會出現(xiàn)Setting對框,然后將該庫的lib文件加去。如下圖2-5的紅域所示,已 100lib文加入。圖2-5 件::E- SPMC65xAN_O0100AN_O010AN_O0102三個庫在同一個工程下使用,其具體步驟和單庫的使用完全相同,只是應(yīng)該注意以下三點: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個庫函數(shù),它們占用的RAM大小分則可以將庫函數(shù)中定義的RAM大小改為4個字,這樣就可以節(jié)約RAM。修改方法為:打開文件LIB_VAR.inc,修變量GB_LibBuf 大小即可。如下圖2-6的紅域所示。::E-1 6x 2-6RAM大的修改2 2.. 在中斷中使用庫函數(shù)時可能出現(xiàn)的RAM都兩個庫函數(shù)的RAM區(qū)就會互相覆蓋,產(chǎn)生。以,應(yīng)避免兩個和個以上的庫函數(shù)的交叉運。RAM中可能出現(xiàn)的問SPMC65x庫在AGE0RAM,如圖2-6所示。所以在調(diào)用庫函數(shù)時應(yīng)RAM,否則程序可能會錯。如果調(diào)用庫函數(shù),則可以隨便使用這段RAM E- 使用偽指令ORG的說 ORG來定義起始地址,請使用以下偽令:“PAE0”用于零頁變量的定;“DATA”用于非零 “VECTR”用于中斷入地址的定義。庫中 RAM—RAMRAM,因而在調(diào)用下一子程序時會覆蓋前一個子程序的RAM段。用RAM .DA;definedatastorage11;dfinea是用RAM程序 到的臨時變量 是公RAMRAMdsRAM采用.EQU的方式,空間可以反供不同程序運算時利用,是不能存數(shù)據(jù)。隊列子程序 源列表R占公用執(zhí)行 F_Quue_in0x4F_Queue_sF_QueuexF_Queue該子程序用到的公用RAM為 字節(jié),這 RAM還可在其函數(shù)中使用庫中數(shù)據(jù)的擺庫中數(shù)據(jù)塊和多字節(jié)據(jù),需要預(yù)定義數(shù)據(jù)的地址的增減形式。庫函數(shù)采用地址量的形,即低節(jié)放低位,高字節(jié)放。::E- higGB_Queue_tess GB_Queue_test1是用戶定義數(shù)據(jù)塊GB_ueue_test1的地 $855存放形為:$ 以下范例程序為:調(diào)用庫AN_O0100中的函數(shù)F_C2Bin5Bcd,將雙字節(jié)二 數(shù)轉(zhuǎn)換為第一步:PAGE0DODE、VECTOR的;LIB_AR.incAN_O0100.inc;第三步:將該庫函數(shù)的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基本功能函數(shù)庫說明二進無符號數(shù)616位的加法運本庫主要描二進 符號數(shù)16 算位,若 位,則置和的最為#$1,否則清零加數(shù)高加數(shù)高8被加數(shù)被加數(shù)高8被加數(shù)低8高8高83-11616::E- C65x基本功能函數(shù)庫說明開開零送入和的低8位。NN是否進Y和的高8位中加,結(jié)送和的中8圖3-加法子程 API【功能描述】二進制 號數(shù)16位 位的加法運算,和為24【參數(shù)】 被加數(shù)的地GB_BinAddend 16bit加數(shù) 24bit【出口參數(shù)】 24bit和的地【注意事項】當(dāng)16位與 的 位 的高8位送 壞 B_BinAu ;16-bit E- C65x基本功能 B_BinAd GB_Bin ;24-bit .GBsGB_inAugendAd#.hh.G_ ;被加數(shù) .GB GB_inAddendAd .GB GB_ ; 的地 lowGB_BinSum #ighGB_ F_函資列表六位 庫函數(shù)占用資源列表3-R占公用執(zhí)行 (ccF_6::E-3 6x基本功能函數(shù)庫說明二進制符號數(shù) 位與16位的減法運本庫主要描二進 符號數(shù)16 16位的減法運算若產(chǎn)生借位,則表明減數(shù)大于被減數(shù),則置標(biāo)志“Z1,表示相減的結(jié)果為負(fù),否清4-14-1:被減數(shù)被減數(shù)高8被減數(shù)低 低8低84-11616::E- C65x基本功能函數(shù)庫說明開開的低8位N結(jié)果為負(fù)數(shù)YZ置Z置返高8位帶借位相,結(jié)果 4-116位與1位的減法子 API【功能描述】二進制 號數(shù)16位 位的減法運算,差為16【參數(shù)】GB_BinMinuendAddr 被減數(shù)的地 16bit減數(shù)的 16bit差的地【出口參數(shù)】 16bit差的地Z“Z”=“Z”=1,結(jié)果為負(fù) 壞

,差以補 形式表_BinMin2;16-減_nSubtra2GB_Bin2;16-bit E- .loGB_ nMinuendAd .hih.G_ _ Add # _Bi ubt #.h Bi .lo.GB_BinSub #ighGB_GB_ ;調(diào)用法程序函十六 法庫函數(shù)占用資源列表4-R占公用執(zhí)行 (ccF_6::E-2 6x基本功能函數(shù)庫說明二制無符 8位與8位的乘法運本庫主描述 制無符號數(shù) 與8位的乘法運算也左移一位(第一次除外,并且進行一次判斷若乘數(shù)移出位“1”,進行一次加。例如#$95乘以#$CD,乘$71其程圖-所。1010010101110101

第一次1001100101100110010101010001011第八5-188 E- 被乘被乘數(shù)左移移出位為Y被乘數(shù)與乘積相開 C65x基本功能函數(shù)庫說明開設(shè)置循次為“設(shè)置循次為“8NN環(huán)次數(shù)循環(huán)次數(shù)Y返N8位與位的乘法子程NAPI【功能描述 二進 8位與8位的乘法運【參數(shù) 二進制被乘 E- C65x 【出口參數(shù) 二進制乘積的高8 二進制乘積8【 壞 項】無 ;?數(shù)源列表8位乘庫函數(shù)占用資源列表:5-R占公用 周期cF_4::E- 法模擬手動除法,即:被除數(shù)從最開始不斷的向余數(shù)(為,余數(shù)也不斷的向左移動,每移一位,余數(shù)與除數(shù)比較一次,大于或等于除數(shù)時,余數(shù)減去81所示。例如()除以(,商為(,次循0110101101111 被1 11001011 ::E- 開開Y “0”嗎NN余數(shù)大于等于除數(shù)YN左移次數(shù)等于Y商加余數(shù)=余數(shù)減去除置商左移一位,最低位補商和余數(shù)Z返8Z返【功 述】二進制無符號數(shù)8位與8位的除法運::E- C65x 【】X Z Z”值為 結(jié)果正 壞 項】無 子程 誤???LErr 數(shù)源列表8位除庫函數(shù)占用資源列表:6-R占公用 周期cF_3::E- 6x基本功能函數(shù)庫說明本程序模擬手動除法運算的過程為被除數(shù)從最開始不斷的向余(初始值為的最低位移入,余數(shù)同時也不斷的向左移動,每移一位,該余數(shù)與除數(shù)比較一次,大于或等于除數(shù)時,余數(shù)減去除數(shù)并將差值存在余數(shù)中,同時存商的變量的值加一,然后該商向左移動一位,最 位補若小于除數(shù)則商直接左移動一位,最低位補此時一個循環(huán)結(jié)束,共有6個循環(huán),最后一次循環(huán)商不左移一位。其流程如圖1示。例如(#$7FED)除以(#$1A,商為 (#$F。計算方法如下式7-::E-第第第第第第 第第第第123456 9101次次次次次次 次次次次次00000100111010101000001001110101011110110110除10111 1101101101010011110107- E- 開開Y?NN余數(shù)大于等于除數(shù)YN左移次數(shù)等于Y商加余數(shù)=余數(shù)減去除被除數(shù)左移一位到余數(shù)商左移一位,最低位補和余數(shù)Z返Z返::E- 【功 述】二進制符號數(shù)16位除以8位的運【參數(shù) 被除數(shù)高8被除 【出口參 商的高8 Z Z,果出Z”值為 結(jié)果正 】

A

; 誤?? 二進制無 數(shù)16 8位的法庫函數(shù)占用資源列表7-R占公用執(zhí) 期(y 5::E- 6x基本功能函數(shù)庫說明二制有符 8位與8位的乘法運或#$0(0)時乘積返回為#$0

Bit6~B 8位有Bit6~B數(shù)“1”圖8- 8位有符號數(shù)的表示方程序設(shè)計方法:模擬手動乘法,先判斷出乘積的符號,然后再進行無符號運算。其計7(第一次除外“1#$95#$4D#85。 8 00010乘去符位01001數(shù)掉號001

1100101

第三次00010001000010001000001011011相加后乘積為#$61100101式 二進制有符號數(shù)8位與8位的乘法運算 E- C65x基本功能函數(shù)庫說明始始判斷乘積符存放乘積的變無符號被乘數(shù)與無符號被乘數(shù)與乘積移出位Y無符號被乘數(shù)左移一循環(huán)次數(shù)Y返乘數(shù)右移一乘數(shù) 為NNNNN乘積添上符8位與位的乘法子 API E- C65x 【功能 】二進 號數(shù)8位與8位的乘法運【參數(shù)】 二進制被乘 【出口參數(shù)】 二進制乘積的高8 ---二進制乘的低8 壞 【注意事項】當(dāng)乘數(shù)或被乘數(shù)為#$0( 0)或#$8(負(fù) 用例】

二進制 8位與位的乘庫函數(shù)占用資源列表8-R占公用執(zhí) 期(yF_S4::E- C5x基本功能函數(shù)庫說明88當(dāng)除數(shù)為#$0(0)或#$80(0)時,標(biāo)志位“Z1“Z0,結(jié)果正確。當(dāng)被除數(shù)為#$0(正0)或#$80(負(fù)0),余 商返回位除法運算的過程:被除數(shù)(除去符號位)從最開始不斷的向存放余數(shù)的變量的最低比較一次,大于或等于除數(shù)時,余數(shù)減去除數(shù)(除去符號位)并存在余數(shù)中,同時存商0。若小于除數(shù),則商直接左移動一08個循環(huán),最后一次循環(huán)商不左移一位。其(#$69,(#$1,(#$16,第循循環(huán)

四五六七循循循循000011100001111101001011 余除4 E- 4開 C65x基本功能函數(shù)庫說明開被除數(shù)和除數(shù)去掉符號YY除數(shù)為“0NY被除數(shù)為“0NN余數(shù)大于等于除數(shù)?YN左移次數(shù)等于8Y返Z0余數(shù)=數(shù)中Z1商左移一位,最低位商和余數(shù)清“0 E- C 8位與位的除法子程【功能 】二進制有號數(shù)8位與8位的除法運算【參 8位被

8 8位余數(shù)(符號與被除數(shù)相同Z 0,果正確【 壞 【 項】 F_SB ; 子程 誤?? rro 函數(shù)資源8 8位的法庫函數(shù)占用資源列表9-R占公用執(zhí) 期(yF_S4::E- C6x基本功能函數(shù)庫說明168當(dāng)除數(shù)為#$0(0)或#$80(0)時,標(biāo)志位“Z1“Z0,結(jié)果正確。當(dāng)被除數(shù)為#$0(正0)或#$8000(負(fù) $0“二進 的表示方法如圖101所示BBt6B高8 BBt6B值 “1”代表圖 位有符號數(shù)的表示方位除法運算的過程:被除數(shù)(除去符號位)從最開始不斷的向存放余數(shù)的變量的最低位移入,存放余數(shù)的變量也不斷的向左移動,每移一位,該余數(shù)與除數(shù)(除去符號位)比較一次,大于或等于除數(shù)時,余數(shù)減去除數(shù)(除去符號位)并存在余數(shù)中,同時存商的6個循環(huán),最后一次循環(huán)商不需向左移動一位。2所示。例如(F)除以(,先進行無符號位除法運算,商為(#$4EB#$F10-1: E- C 第第第第第第第 第第第第123456789101次次次次次次次 次次次次次00001110001110101100001110001110101111110110符無號被無號

10111110110110110001110111式 與8位的不帶符號位除法運算4 E- 4開始 C65x基本功能函數(shù)庫說明開始判斷商的符號,然后被除數(shù)和除數(shù)去掉符號YY除數(shù)為“0NY被除數(shù)為“0NNYN左移次數(shù)等于16Y返0商和余數(shù)添上符號余數(shù)=余數(shù)減去除數(shù)商和數(shù)數(shù)中Z1商和余數(shù)清“010-2二制有符號數(shù)168 E- C65x基本 API【功能 】二進制有號數(shù)16位除以8位的運算 Z Z”值為 結(jié)果正【無 j8;誤?? 二進制有 數(shù)16位與位的除庫函數(shù)占用資源列表10-R占公用執(zhí)行 (cyl 6::E- 無符數(shù)4位 與4位BCD的加本庫主要描述無符號數(shù)4 和為5位CD 用戶調(diào)用時,只需將被加數(shù)、加數(shù)、的地址傳給函數(shù)。其流程如 1-1所示,計算數(shù)低字加數(shù)高方法如數(shù)低字加數(shù)高被加數(shù)被加數(shù)高字被加數(shù)低字和的高和的高和和的低字式1-14BCD4BCD E- C65x基本功能函數(shù)庫說明開開和的高字節(jié)清NN是否進位Y返和的高字節(jié)中送加,結(jié)送和的中 11-14BC4BCAPI【功描述】4位BCD與4位BCD的加 和為5位BCD。當(dāng)加法向和的高字產(chǎn) “#$1【參數(shù)】 被加數(shù)的地 4BCD加數(shù)的地GB_BcdSumAd 【出口參數(shù)】GB_BcdSumAd 和【注意 】 壞 E- .GBscdAugendAd.GB ;被加

.GBBcdAddendGB_cdAddendAdr .GBGB_ lowGB_BcdSum #ighGB_ ; ;調(diào) 法程4BD4BD的加庫函數(shù)占用資源列表:11-R占公用 (cc 6::E- 無符數(shù)4位 D與4位BCD的減本庫主要描述無符號數(shù)4位CD與 BCD的減法差為4位BCD程序設(shè)計思路是:在十進制模式下,先進行低字節(jié)相減,得到差的低字節(jié),然后進行,表示相減的結(jié)果為負(fù),否則清零。用戶調(diào)用時,只需將被減數(shù)、減數(shù)、的地址傳給函數(shù)。其流程如 12-1所示,計算方法如下式12-1:被減數(shù)高被減數(shù)高字被減數(shù) 節(jié)節(jié)差的高差的高差的低 -14位BCD與4位BCD的減法算 E- C65x基本功能函數(shù)庫說明開開N結(jié)果為負(fù)數(shù)YZ置Z置返高字節(jié)帶借位相,果 圖12-14位 4位 減法子程序【功能描述】無符號數(shù)4位 與4位 【參數(shù)】GB_BcdMinuendAddr- 被減數(shù)的地GB_BcdSubtrahendA 4BCD減數(shù)的地【出口參數(shù)】 4位BCD差的地Z 【注意 】 壞 E- #btr#. B_B cd ;調(diào) 法程4BD4BD的減庫函數(shù)占用資源列表:12-R占公用 周期c6::E- 無符數(shù)2位 D與2位BCD的乘 本庫主要描述無符號數(shù)2位 2位 的乘法運算ab*cd可拆分為(ab*c*10)+(ab*d):第一步:ab*c=ab+b+??+ab,可以通過循環(huán)相加來實現(xiàn);第二步: 加的和左移4位,可實現(xiàn) 步:ab*d=ab+a+??+ab,可以通過循環(huán)相加來實現(xiàn),最 的結(jié)果相加即可。其流程如圖13-1所示。開開被乘數(shù)與乘數(shù)的十位相相結(jié)果求和相結(jié)果求和圖13-1無符號2位 2位 乘法子程序 API【功能描述 無符號數(shù)2 位BCD的乘法運【參數(shù) 被乘 ::E- C65x 【出口參數(shù) 乘積 ? ; ? 無符號數(shù)2位B 2位 的乘 函數(shù)占用資源列表13-R占公用 周期c 3::E- 無符數(shù)2位 D與2位BCD的除本庫主要描述無符號數(shù)2BCD2BCD的除法運算,商和余數(shù)均為2BCD。0時,標(biāo)志位“Z”返回值為,表示出,其余情況,Z”返回值為0。1 數(shù)小于除數(shù)為止,此時被除數(shù)即為余數(shù)。其流程如圖14-1所示。商的低(個位)和余數(shù)。其流程圖14-2所示。若采用第法,當(dāng)計算99÷1時,需要循環(huán)99次,在默認(rèn)時鐘下,每次循環(huán)需要若采用第二種方法,當(dāng)計算99÷1時,分別讓十位的9和個位的91相除,這樣就可以很快的得到結(jié)果。但是在一般情況(比如78÷23)其速度慢于第法。因此,本程序分別采用了兩種方法的長處:當(dāng)除數(shù)大于7時,采用第法,當(dāng)除數(shù)小于7時采用第二種方法。其流程如圖14-3所示。::E- C65x基本功能函數(shù)庫說明開開將被除數(shù)的值送給余“Y余數(shù)小于除數(shù)N返商加余數(shù)= 除YY余小于除數(shù)?N除數(shù)的值 E- 法法開除數(shù)為NN除數(shù)大于“開除數(shù)為NN除數(shù)大于““Z”置和余數(shù)清YY采用第二種采用返返“Z”圖14- 符號數(shù) CD與2位CD“Z” API【功能描述 無符號 與2位BCD的除【參數(shù) 被除 【出口參數(shù) 0,結(jié)正確【 【注意事項 ::E- 65x 例 子程 誤?? 2BD2BD的除庫函數(shù)占用資源列表:14-R占公用 周期c 2::E- 無符數(shù)4位 D與2位BCD的除的商為商的千位。如圖15-1所示:臨時變量高8 臨時變量低8 被除數(shù)高8 被除數(shù)低80000位0000位15-變量除以除,所得的商為商的百位。如圖15-2所示:000 00015-這兩個臨時變量除以除,所得的商為商的十位。如圖15-3所示:8 臨時變量低8 被除數(shù)高8 被除數(shù)低8余0余015-變量除以除數(shù),所得的商為商的個位,得的余數(shù)為最終的余數(shù)。如圖15-4所示:8 臨時變量低8 被除數(shù)高8 被除數(shù)低80015- E- 在以上四步中,均需臨時變量和除數(shù)相除,程序采用了循環(huán)相減的方法得到商和余數(shù)。程序流程如圖15-5所示。始始YN“Z”置被除數(shù)千位除以除數(shù),得到商的千00返圖15- 符號數(shù) BCD與 BCD的除API::E- C65x 【功能描述 無符號數(shù)4 2位BCD的除法運 Z 0,結(jié)正確【 注意項 范例 ; 子程 ? 無符號數(shù)4位 2位 除法運庫函數(shù)占用資源列表15-R占公用 周期(y 7::E- 有符數(shù)2位 D與2位BCD的乘 正0)或$80(負(fù)0 2位BCD有符號數(shù)的表示方法如圖16-1 ,其中正數(shù) 為:0 數(shù)范圍為~- Bit6~BBit6~B數(shù) “1”代表6-12BCD程序設(shè)計思想是:先判斷乘積的符號,然后再進行符號運算.例如ab*cd,去掉符號位后, 第一步:ab*c=ab+b+??+ab,可以通過循環(huán)相加來實現(xiàn);第步:將相加的和左移位,可以實現(xiàn)乘10; 步:ab*d=ab+a+??+ab,可以通過循環(huán)相加來實現(xiàn)第四步:將第二步和第三步結(jié)果相加,相加之和即為帶符號位的乘積; ::E-開開被乘數(shù)乘的符號被數(shù)或乘數(shù)為YN被乘數(shù)與乘數(shù)的十位相兩次相乘結(jié)果求退被乘數(shù)與乘數(shù)的個位相乘積清圖16-2有符號2位 2位 乘法子程序流【功能描述 有符號數(shù)2位BCD與2位BCD的乘法運算。當(dāng)乘數(shù)或被乘數(shù)為#$00)或 (負(fù)0)時,乘積為#0 【出口參 【 項】 ; E- 有符號數(shù)2位 BCD的法運算函數(shù)占用資源列表16-R占公用執(zhí) 期(y 3::E- 有符數(shù)2位 D與2位BCD的除 本庫主要描述有符號數(shù)2位BCD與2位CD的除法運算,商和余數(shù)均為2位BCD。當(dāng)除數(shù)為#$0(正0)或#$80(負(fù)0)時,標(biāo)志位“Z”返回值為1, “Z”返回值為0,結(jié)果正確當(dāng)被除數(shù)為#$0(0)或#$80(0,余數(shù)和返回#$0Z01 商的低(個位)和余數(shù)。其流程圖17-2所示。若采用第法,當(dāng)計算79÷1時,需要循環(huán)79次,在默認(rèn)時鐘下,每次循環(huán)需要7us,則總共需要0.56ms,速度太慢。但是在一般情況下(如78÷23)只需要3個循環(huán),若采用第二種方法,當(dāng)計算79÷1時,分別讓十位的7和個位的91相除,這樣就可以很快的得到結(jié)果。但是在一般情況(比如78÷23)其速度慢于第法。因此,本程序分別采用了兩種方法的長處:當(dāng)除數(shù)大于5時,采用第法,當(dāng)除數(shù)小于5時采用第二種方法。其流程如圖17-3所示。::E- C65x基本功能函數(shù)庫說明始始去掉被除數(shù)和除數(shù) Y余數(shù)小于除數(shù)N余數(shù)=余數(shù)-返商和余數(shù)添上符商加17-1有符號數(shù)除法第法流程 E- 然后將被除數(shù)的值送余 YNYN-2 E- C65x基本功能函數(shù)庫說明開開除數(shù)為?YNN除數(shù)絕對值大于“Z”置Y采用法采用第二種判斷商““Z”置返圖17- 符號數(shù) CD與2位CD的除法API2位CD2BCD【被除Y Z Z”值為 結(jié)果正【無 E- 65x本 l;數(shù); 誤?? 有符號數(shù)2位 2位 除法運庫函數(shù)占用資源列表17-R占公用執(zhí) 期(cc 3::E- 有符數(shù)4位 D與2位BCD的除4BCD2BCD的除運算,商為4BCD位BCD當(dāng)除數(shù)為#$0(0)或#$80(0)時,標(biāo)志位“Z1“Z0,結(jié)果正確。當(dāng)被除數(shù)為#$0(0)或#$8000(0,余數(shù)和返回#$0Z0有符號數(shù)4位BCD的表示方法如圖18-1所示,其中正數(shù)范圍為:~799,負(fù)數(shù)范 -7999=$F99)。BBt6B高8 BBt6B值 “1”代表圖8- 有符號數(shù)4位BCD的表示方在十進制運算模式下,先判斷出商的符號,然后模擬手除法,進行無符號數(shù)運算,其運算步驟下:的商為商的千位。如圖18-2所示:臨時變量高8 臨時變量低8 被除數(shù)高8 被除數(shù)低80000位0000位18-變量除以除,所得的商為商的百位。如圖18-3所示: E- C65x基本功能函數(shù)庫說明000 00018-這兩個臨時變量除以除,所得的商為商的十位。如圖18-4所示:8 臨時變量低8 被除數(shù)高8 被除數(shù)低8余0余018- 的余數(shù)為最終的余數(shù)。如圖18-5所示:8 臨時變量低8 被除數(shù)高8 被除數(shù)低80018-得到商和余數(shù)。程序流程如圖18-6所示。 E- C65x基本功能函數(shù)庫說明開開Y除數(shù)為“0N被除數(shù)為“Z”置N“Z”置返被除數(shù)和除數(shù)的符然后去判斷商圖18- 符號數(shù)4位BCD與2位BCD的除法流程 E- C65x基本 API4BD2BCD【參數(shù)-被除數(shù)低8Y--商的高8 ZZ1Z 壞【 項無例?;= 7/;除數(shù)為 誤? 有符號數(shù)4位 2位 除法運庫函數(shù)占用資源列表18-R占公用執(zhí) 期(cc 8::E- C6x基本功能函數(shù)庫說明單字節(jié)二制數(shù)轉(zhuǎn)換為2本函數(shù)主要描述單節(jié)二進 D(0~99函數(shù)BCD碼cd=B/10+B%10,其中c為BCD碼,d為低位BCD碼,B為單字節(jié)二(10除數(shù)小于除數(shù),此時計數(shù)中的數(shù)即為商。程序流程如圖19-1所示。程序是將待轉(zhuǎn)換的二進制數(shù)放于累加器A中,轉(zhuǎn)換后的BCD碼也放于累加器AAA中讀出轉(zhuǎn)換結(jié)果,若二進制數(shù)大于#$63hBCD0~9的范圍,則視為溢出,錯誤標(biāo)志Z置為1。4 E- 4 C65x基本功能函數(shù)庫說明N判斷累加器A中數(shù)是大于YBCD碼寫入獲得低位BCDBCD碼寫入獲得低位BCDX中數(shù)左4位得 API【單2【參 【 2-出錯標(biāo)志,Z=Z= E- C65x 注意 范例 #F_;cltheaGBTesave ?L_Ererror單字節(jié) 轉(zhuǎn)換為 函數(shù)占用資源列表19-R占公用執(zhí) 期(y 1::E- 本進制數(shù),然后與BCD碼的低4位相加,相加之和即為開開取出BCD碼的高4查表得到與BCD查表得到與BCD碼高4位對二進制數(shù)加上BCD碼低返返和最終轉(zhuǎn)換圖20-1 為單字節(jié)二進制數(shù)的子程序流程::E- C65x基本 API 能描述】 BCD轉(zhuǎn)換為單字節(jié)二進制【數(shù)】 2位【出口參 單字節(jié)二進 【使 2 位 換為單字 進制 庫函數(shù)占用資源列表20-R占公用執(zhí) 期(y1::E- 21單字制數(shù)轉(zhuǎn)換為3本主要描 字節(jié)二進制4BCD碼,即先將二進制數(shù)開開對應(yīng)的3位返返相加之和為轉(zhuǎn)換后BCD圖21-1 制數(shù)轉(zhuǎn)換為3位BCD的子程序流程::E- C65x基本 API【功描述】單字二進制數(shù)轉(zhuǎn)換為3BCD【參數(shù)】 【出口參數(shù)】X (低4位有效 --BD 壞】A 單字節(jié)二制轉(zhuǎn)換為 CD庫數(shù)占用資源列表 1R占公用執(zhí)行期(y 1::E- 雙字節(jié)二制數(shù)轉(zhuǎn)換為5本主要描述字節(jié)二進制數(shù)5BCD程序采用循環(huán)左移16次的方法,將二進制數(shù)從開始不斷往存放BCD碼的變量中其每左移一次,調(diào)整后的BCD值依次為0001248163,4,圖2-1二進制數(shù)往變量BCD16次左移轉(zhuǎn)換后的BCD碼(edcba)分別應(yīng)為65535。其流程如圖22-2所示。左移次數(shù)等于左移次數(shù)等于Y對BCD進行十進制調(diào)22-2雙節(jié)二進制數(shù)轉(zhuǎn)換為5BCD::E- C65x基本 API【功能描 制數(shù)轉(zhuǎn)換為5位BCD【參數(shù) 制數(shù)高8 8 4位有效 碼低 進8 ;?雙字節(jié)二制數(shù)轉(zhuǎn)換為位 22-R占公用執(zhí)行期(cc 3::E- 3位 轉(zhuǎn)換為單字節(jié)二進制3位CD轉(zhuǎn)換單字節(jié)二進制(0~255BCDcdf=100*c+10*d+f=10*(10c+d)+fcBCD碼,d、f為低字節(jié)BCDBCDc100BCDd10,最后f相加,即得轉(zhuǎn)換的二進制數(shù)。函數(shù)中的乘法(10)通過移位實,算法是:程序是將待轉(zhuǎn)換的3位BCD中的高字節(jié)存放于累加器A中,低字節(jié)BCD碼存放XA3BCDABCDX寄存器中,然后調(diào)用該函數(shù)實現(xiàn)轉(zhuǎn)換,轉(zhuǎn)ABCD255,溢出,錯誤標(biāo)志Z置為1,否則Z=0。::E-高字節(jié)BCD碼乘10結(jié)果值暫存于B高字節(jié)BCD碼乘10結(jié)果值暫存于Buffer中取得低字節(jié) 位BCD碼CC3Y高字節(jié)BCD碼NN高字節(jié)BCD碼Y低 BCD碼YNY高字節(jié)BCD碼NZ置為暫存高字節(jié)CD碼計算(c*10+d)計算(c*10+d)結(jié)果值暫存于Buffer取得低字節(jié)低位BCD碼AZ置為返回 E- C5x基 23-23-13BC轉(zhuǎn)換為單字二進制數(shù)程序API【能描述】 【參數(shù)】GB_Addre 3位BCD的地【出口參數(shù)】 Z 出錯標(biāo)志 Z=0,果正確 sG t; ?Erro 位 轉(zhuǎn)為單字節(jié)進制數(shù)函數(shù)占用資源列表23-R占公用執(zhí)行期(y 2::E- 單 ASCI轉(zhuǎn)換為單字節(jié)二進制本庫主要描述單字節(jié)ASCII轉(zhuǎn)換為單字節(jié)進制數(shù)。ASCII與二進制數(shù)的對照如下表24-1所示,當(dāng)輸入的ASCII超出范圍時,標(biāo)位“Z”返回值為1表示出錯, “Z”返回值為0。表4- 3binarH9binaryAH相應(yīng)的二進制數(shù),若大于”#$9”,則差再減去”#$7”,便得到相應(yīng)的二進制數(shù)。其流程如圖::E-開NASCII值為30~39或4~開NASCII值為30~39或4~Y標(biāo) ”置差值NASCIIYY差值再減去標(biāo)志“Z”置差值即為對應(yīng)的二進制差值即為對應(yīng)的二進制返A(chǔ)PIACII 0A正無::E- 單字節(jié)ASII轉(zhuǎn)換 制數(shù)的函數(shù)占用資源列表表4-R占公用AM執(zhí)行周(ccF_0::E- 為單字節(jié)ACII。二進制ASCII25-1所示,當(dāng)輸入的二進制數(shù)值超出范圍,標(biāo)志位“Z”返回值為1 情況,“Z”返回值為0。表5- 3binarH9SCIIbinaryHE上“#$30”就是對應(yīng)的ASCII碼,反之,給定值 “#$37”。其流程如圖25-1所示。::E-開NBIN值為開NBIN值為YNBIN值Y標(biāo)和即為對應(yīng)的BIN#$Z返25-1單節(jié)二進制轉(zhuǎn)換為ASII的子程序程圖API 單字節(jié)二進數(shù)轉(zhuǎn)換為單字節(jié)【參數(shù)】 【出口參】A--單字節(jié) 0,結(jié) 【 E- 單字節(jié)二進數(shù)轉(zhuǎn)換為A 25-R占公用AM執(zhí)行周(cc 0 E- 雙 ASCI轉(zhuǎn)換為單字節(jié)二進制ASCIIASCII分別轉(zhuǎn)換為兩ASCII超出范圍時,標(biāo)志位“Z”返回值為表示出錯其余情況,“”返回值為0。ASCII24章。由于轉(zhuǎn)換后得到的二0~F,所以可以將這兩個轉(zhuǎn)換后的二進制數(shù)進行壓縮,即:將其中一個二44二進制數(shù)。流程如圖26-1。開開返返最終的轉(zhuǎn)換,得兩將其中一個二進制數(shù)的4位和低4位對26-1雙字節(jié)ACII轉(zhuǎn)為單字節(jié)二制數(shù)的子程序程圖API【功能描】雙字節(jié)ACII【參數(shù)】 ::E- 65x基本功能函數(shù)庫說明 【出口參數(shù)】A單字節(jié)二進數(shù),高 Z “Z” ; b 誤? 制數(shù)的函數(shù)占用資源列表表6-R占公用AM執(zhí)行周(ccF_1::E- 為雙字節(jié)本庫主要描述單字節(jié)二進制數(shù)轉(zhuǎn)換為雙字ASCII。該單字節(jié)二進制數(shù)是由兩個二進制數(shù)(范圍為0~F)壓縮而成的,即:其4位和低4位分別 數(shù)的低4位成。進制數(shù)分別轉(zhuǎn)換為ASCII,換方法見25章。其流程如圖27-1所示。開開取出二進制數(shù)的低4將將其低4位轉(zhuǎn)換為ASCII存在Y返返將其 轉(zhuǎn)換為ASCII存在X27-1單字節(jié)二制數(shù)轉(zhuǎn)換雙字節(jié)ASII的子程序程圖API 單字節(jié)二進數(shù)轉(zhuǎn)換為單字節(jié)【參數(shù)】 ::E- C65x 【出口參數(shù)】 二進制數(shù)高4位轉(zhuǎn)換的 進制4位轉(zhuǎn)換 F_ 換“3”?單字節(jié)二進制數(shù)轉(zhuǎn)為ASII27-R占公用AM執(zhí)行周(cc 0::E- 8半節(jié)數(shù)轉(zhuǎn)換為7段顯示728-所示 9 721首址加偏移值得到目標(biāo)地址,目標(biāo)地址中的值即為結(jié)果值。程序流程如圖28-2所示。ABCDA中,然后調(diào)用該函數(shù)實現(xiàn)轉(zhuǎn)換,轉(zhuǎn)換完后A7段顯示碼?g與bit0??bit6對應(yīng)。::E- C65x基本功能函數(shù)庫說明C1Bin1SegC1Bin1Sega查表 圖282半API【數(shù)】

A:字二進制數(shù)或1 7段顯示碼 】】 轉(zhuǎn)換的數(shù)據(jù)半節(jié)轉(zhuǎn)換為 顯示碼函數(shù)占用資源列表28-R占公用執(zhí)行期(y 0::E- 數(shù)塊的初始RAM區(qū)所義的一個據(jù)塊里寫入相開開里寫指定的數(shù)據(jù)YYN -1數(shù)據(jù)初始化子流 API【功能描述】初始化數(shù)據(jù)塊:往在 的、特定的數(shù)【參數(shù)】 GB_Ad ::E- C65x 【出口參數(shù)】GB_Adress數(shù)據(jù)起始地址 無a axr始化 函數(shù)源列表數(shù)塊初始庫函數(shù)占用資源列表:29-R占公用執(zhí)行周(y 92::E- 5x基本功能函數(shù) 數(shù)據(jù)塊間的數(shù) 數(shù)據(jù)塊1(用戶定義GB_Block2開開傳遞完結(jié) 301數(shù)據(jù)塊數(shù)據(jù)傳遞子流API1 E- 1SPM65x本功能函數(shù)庫說明【參數(shù)】 GB_ 【出口參數(shù)】GB_Addr GB_Blo hig GB_ ddr ;數(shù)據(jù)1 .lo B_ GB_Ta 給數(shù)函數(shù)資源數(shù)據(jù)塊數(shù)據(jù)傳庫函數(shù)占用資源列表:30-R占公用cyl)4ze::E- 5x基本功能函數(shù) 數(shù)據(jù)塊1(用戶定義GB_Block2 義始始相等?Y數(shù)據(jù)比較標(biāo)志Z置“”相等?Y數(shù)據(jù)比較標(biāo)志Z置“”比較完畢?Y數(shù)據(jù)塊1的第i個字節(jié)里的值與數(shù)據(jù)塊2的第i個字節(jié)里的比NN數(shù)據(jù)比較標(biāo)志數(shù)據(jù)比較標(biāo)志Z置“31-1::E-SPM 【功能描述】RAM【參數(shù)】GB_SourceAdd進行比較的數(shù)塊起始地GB_ Z塊比較標(biāo)志位:兩個數(shù)據(jù)塊間的數(shù)據(jù)完全時,標(biāo)志位置“1”,否 GB_Blo .lo B_ higs GB_ GB_at F_BlockC+數(shù)2; 和數(shù)據(jù)塊的數(shù)據(jù)比較R占公用 25e::E-SPM 符串塊間的字符串傳本庫主要描述用戶在RAM區(qū)所定義的兩個字符串間的數(shù)據(jù)傳遞。字 規(guī)格和0x

GB_String_targer開始開始將字符串將字符串1的第i個字節(jié)里的值傳入字符串2的第i個字節(jié)里[[NN結(jié)束結(jié)束結(jié)束標(biāo)志遞完畢?Y32-1遞完畢?Y E- SPM API【入?yún)?shù)】 ource源字符串起地GB_String_arger---目標(biāo)字符起地址【出口數(shù)】 項】 # ; # ; 串開傳遞32-R占公用執(zhí)行周(cc4size::E-SPM GB_String_targerz置為“1”,則,置“0”。函數(shù)流程如圖33-1所示。::E-SPM65x基本功能函數(shù)庫說明比較標(biāo)志位置“0i=[[i+1]等?Y完畢?NY字符串1的第i個字節(jié)里的值與字符串2的第i較標(biāo)志位置“1相比較33- 符串間比較子相比較API 【入?yún)?shù)】GB_Stringsource源字符串始地址 er z : 【使用范例】 E- SPM l ;alB_String_;r omp;字符串始比較q?_ ?_R占公用 15size E- 5x基 移位操將nbytedata整個右移一個byte,移出的最端數(shù)據(jù)送A.將nbytedata整個右移1/2byte,出的最右 送入A,時可以移入n_bytedatabyteAA為輸入?yún)?shù),移新?lián):瘮?shù)的能由下圖341所示。111始地 址11131n_bytedata為輸入?yún)?shù),移新?lián)?。函?shù)的能由下圖3421低4高41低4高411圖34 nbyteata右移功API 【功能描述】將n_bytedata整右移一個bye,移出的最右端 入【參數(shù) GB_Adess――(數(shù)據(jù)首地址 GB_Addres――(數(shù)據(jù) 【注意事項】::E-1 l#.w.GB_mov_da#. ;sftinginjF_shftinGB;shit-byteat1bytto 【功能描述】將nbytedigitst12b【參數(shù) GB_Adess――(數(shù)據(jù)首地址【出口參數(shù)】GB_Address――(數(shù)據(jù)首址A―(出數(shù)據(jù) #. #. GBshift_a F_shftinGB ;hiftn-yte btettheri函數(shù)庫函數(shù)各個函數(shù)占資源列34-134-R占公用FshiftinGB26_shiftin::E-SPM 數(shù)據(jù)查

移地址 (0~100℃到與其對應(yīng)的華氏值(32~212℉。因而在程序中定義了一張溫度轉(zhuǎn)換表,代表了華氏32~2121010~100度,華氏(F)和氏℃)之間的換關(guān)系為:F=(9/5)*℃+32。表ldaTB_C2F,xTB_C2F為溫度轉(zhuǎn)換表的首地址;XTB_C2F的偏移量(當(dāng)要查找轉(zhuǎn)換表的第一個數(shù)據(jù)時,X的值為“0”,查找第二個時X的值為“1”,以此類推)X的取值范圍是0~100,實際意義為攝氏~100℃。執(zhí)行該指令后,A中的值為:以(TB_C2F+X)為地址所對應(yīng)的數(shù)據(jù)。即:X為“0”時,A中的值為該表的第一個數(shù)據(jù)#032(320度X為“1”時,A中的值為該表的第二個數(shù)據(jù)#0334相當(dāng)于攝x8;轉(zhuǎn)換136 E- SPM 程序跳 (aaa)”調(diào)用任意一指說明 解釋:跳轉(zhuǎn)指令。雙字節(jié)變量aaaa中存放跳轉(zhuǎn)地址,存放格式:高字節(jié)高地址,低字節(jié)低地址。執(zhí)行該指令后,程序跳轉(zhuǎn)到以[aaaa1][aaa]為 在本程序中,參數(shù)為X,當(dāng)輸入的X值為“0”時,主程序會調(diào)用子程序F_0;當(dāng)輸入的X值為“1”時,主程序會調(diào)用子程序F_1,以次類推。程序的設(shè)計思路是:根據(jù)X的值先查表查出相應(yīng)子程序的地址后跳到該地址去執(zhí)行。具體解釋如下: ;:FJ;能轉(zhuǎn);入;輸n;1;========================================== SuAddr T_SubAdd 得子程序的地 ;跳轉(zhuǎn)到以[G_::E-SPM6x基本功能函數(shù)庫說明;為地址的子程序處去執(zhí)行;***************************************************************

;ROM區(qū)將各子程

**0_01_12_23_34_4 E- ;子程序 3 ;調(diào)子程序F ::E- 指令延

。 占用周 2 2 2bne??2/3 跳轉(zhuǎn)發(fā)生為 les,順序執(zhí)行為2 2 2 6 - ;\789 959cy 2/3 ; ;+ ;- 6 1 E- 1 yce。個cycle的時間為T1f(f為系統(tǒng)的時鐘頻率)若用鐘8.0Mz,則最小延時為:t=975/8000000Hz E- SPM65x基本功能函數(shù)庫說明開YXX賦值 減NX值YYY值減YA值減NA值 結(jié)37-1 E- SPM 37 L_ ++ + F_Del 6++ 1+ 7;2 + - ;6 yce。個cycle的時間為T=1/f(為系統(tǒng)的時鐘頻率)采時 8.00MH,最小延時為: 95090/8000000HZ≈的值為“#$FF”時,延時255s,注意,當(dāng)A的值為 時,延時256s。其流程如圖37-2::E- 5x基本功能函數(shù)庫說明Y賦Y賦值開調(diào)用1ms延時子程序延25YY回N?圖 延N? F_ F_Del ;延 0cyces,在時::E-SPM 位操

本例主要描SPMC5xSMC65x1、BIT B_Data的bit7的值賦給“N。將變GB_Data的bit6的值賦給“V。 果為0,則置標(biāo)志“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,影標(biāo)志位“Z 則置0b的取范圍是 是0,則置標(biāo)志位“z”為1,否則置010、 11、 12、 ::E-SPM 中斷嵌中在程序有兩級中斷嵌套:4ms中為外層,IRQ0中斷為內(nèi)層。先產(chǎn)生4ms中4msPAPB4口(PB4口已被設(shè)為下降沿觸發(fā))IRQ04msIR0中,處理完IRQ0中31中嵌套

;設(shè)置4下降沿觸發(fā)jsr ;::E-SPM 4ms中斷IR0中斷(PB4#al counter= /12IeaP_IRQ_Op 4)faling#C;i ;清除所有的中標(biāo)志位O口 : F P_IOAData ouuthigh 0P_IO_Datithull::E-

執(zhí)行IRQ0中dp L_I;兩個中斷不是,退出 a ;a;/ ;硬件會自動關(guān)掉總的中斷;由PA口產(chǎn)生下降沿,將P任端口接在PB4上, 產(chǎn)生I 0中 ;A口產(chǎn)生下降沿輸入到PB4,產(chǎn)生 ::E- ;IR0中斷服務(wù)程 a;a1::E-SPM 堆堆棧被用來程序的返回地址、臨時數(shù)據(jù)或寄存器的值。它地址為$1E0~$1FF,共32個字節(jié)。在初始狀態(tài),指針指向$1FF1;當(dāng)彈出一個1壓入

壓入40-1

彈出

40-2返回地址壓入堆棧,然后再壓入狀態(tài)寄存器的值,如圖40-5所示。同樣,彈出時“后進先出”的原則,如圖40-6所示。 E- SPM65x基本功能函數(shù)庫說明地址低8地址地址低8地址高8S狀地址低8地狀地址低8地址高8(SP-(SP-

40-6RTSRTI有所不同,它們將返回地址傳給程序計數(shù)器PC的方式不同。執(zhí)行RTS時,將堆棧出的返回地址首先加1,然后送給程序計數(shù)器下一條指令的首地址。而CPU響應(yīng)中斷時壓入堆棧的地址中斷返回將要執(zhí)行那一指將A 據(jù)壓棧… 被 可以利用以上指令將重要的數(shù)據(jù)保存在堆棧里面,要時其彈出,這樣可以節(jié)省RA 、P::E-SPM 值入堆 ;以便程 指時將當(dāng)前地址壓入堆棧,… ;彈出返回4、中斷 變 ; ;其堆變化如圖 將A::E- SPM ? np 6bye ;1bytes+ b “jmp*+6”占用三個字節(jié)nop”占用一個字節(jié),執(zhí)行指令“jmp*+6”后,序跳轉(zhuǎn)到標(biāo)號“?L1”處。若將“jmp*+6”改為“jmp*+,則程到第一個“nop “jmp+aaa”是程序跳轉(zhuǎn)指令另一種應(yīng)用形式“aaaa”為立即數(shù),它的取值是單字節(jié)或雙字節(jié)。以標(biāo)號”的地址為起點,跳轉(zhuǎn)到”字節(jié)處,即跳轉(zhuǎn)后的地址為 如在序段中 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論