PIC单片机应用开发典型模块_第八章程序2878.docx
-
资源ID:68903013
资源大小:135.22KB
全文页数:72页
- 资源格式: DOCX
下载积分:30金币
快捷下载
![游客一键下载](/images/hot.gif)
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
PIC单片机应用开发典型模块_第八章程序2878.docx
(1)16×16位定点数加、减法程序LIST p=16f877 INCLUDE p16f877.inc ACCALO EQU 20 存放加数或减数低8位 ACCAHI EQU 21 ;存放加数或减数高8位 ACCBLO EQU 23 ;存放被加数或被减数低8位 ACCBHI EQU 24 ;存放被加数或被减数高8位 ORG 0X0000START GOTO MAIN;*双字节减法子程序,入口地址ACCB-ACCA,出口地址ACCB*D_sub CALL NEG_A ;求ACCA的补码;双字节加加法子程程序,入入口地址址ACCCB+AACCAA,出口口地址AACCBBD_addd MOVVF ACCCALOO,0 ;AACCBB和ACCCA低低半字节节相加 ADDDWF ACCCBLLO BBTFSSC STAATUSS, C ;有进进位否? INNCF ACCCBHHI ;有,ACCCB高字字节加11,再加AACCAAHI MOVVF ACCCAHII,0 ;ACCCA、AACCBB高半字字节相加加 ADDDWFF AACCBBHI RETTURNN ;子程序序返回;ACCAA取补子子程序NEG_AA COOMF ACCCALLO ACCCALOO取反加加1 IINCFF AACCAALO BTFFSC STTATUUS,ZZ 低8位位有进位位吗? DECCF ACCCAHII ;有,AACCAAHI减减1,再再取反 COMMF ACCCAHII ;否则AACCAAHI直直接取反反 REETURRN ;子程程序返回回(2)166×166位定点点数乘法法程序LIST p=116f8877 INCCLUDDE pp16ff8777.innc AACCAALO EQQU 20 存放乘乘数低88位 AACCAAHI EQQU 21 存放乘乘数高88位 AACCBBLO EQQU 23 ;存放被被乘数低低8位和和乘积第第1623位位 ACCCBHHI EQUU 224 ;存放被被乘数高高8位和和乘积第第2431位位 ACCCCLLO EQUU 226 存放乘乘积低88位 AACCCCHI EQQU 27 存放乘乘积高88位 AACCDDLO EQQU 28 临时寄寄存器 ACCCDHII EEQU 299 临时寄寄存器 TEMMP EQUU 22A 临时寄寄存器 SIGGN EQUU 22B 存放乘乘积的符符号 OORG 0X000000STAART GOTTO MAIIN OORG 0X001000D_mmpy CALLL S_SSIGNN ;求取乘乘积的符符号,并并对负数数取补 CAALL SEETUPP ;调用子子程序,将将ACCCB的值值送ACCCD INCCF TTEMPP CLLRF ACCCCHHI;清ACCCC CLRRF ACCCCLOOMLOOOP BCFF SSTATTUS,CC;清进位位位 RRRF ACCCDHHI ACCCD右移移 RRRF ACCCDLOO BTTFSCC SSTATTUS,CC 判断是是否需要要相加 CALLL D_aadd ;加乘数数至ACCCB,见见加法程程序 BBCF STTATUUS,CC 清进位位位 RRRF ACCCBHHI ;右移部部分乘积积 RRRF ACCCBLOO RRRF ACCCCHII RRRF ACCCCLOO DEECFSSZ TEMMP;乘法完完成否? GOOTO MLLOOPP 否,继继续求乘乘积 BBTFSSS SIGGN,77 ;是,确确定乘积积的符号号 GOOTO OVVER 为正,乘乘法结束束 COOMF ACCCCLLO 为负,乘乘积取补补 INNCF AACCCCLO BTFFSC STTATUUS,ZZ DEECF AACCCCHI COMMF ACCCCHHI BBTFSSC STTATUUS,ZZNEGG_B DECCF ACCCBLLO COOMF AACCBBLO BTFFSC SSTATTUS,ZZ DEECF AACCBBHI COMMF ACCCBHHIOVVER RETTURNN;子程序序返回SETUPP MOOVLWW 115;初始化化TEMMP寄存存器 MOOVWFF TTEMPP MOOVF ACCCBHHI,00 ;ACCCB送AACCDD MOOVWFF ACCCDHHI MMOVFF AACCBBLO,00 MOOVWFF AACCDDLO CLRRF ACCCBHII 清ACCCB CLRRF ACCCBLOO REETURRN 子程序序返回S_SIGGN MMOVFF AACCAAHI,00 ACCCAHII异或AACCBBHI,结结果送SSIGNN单元 XORRWF ACCCBHHI,00 MOOVWFF SSIGNN BTTFSSS AACCBBHI,77 ;ACCCB为负负吗? GOTTO CHEEK_AA ;否,检检查ACCCA CALLL NNEG_B ;是,求求取ACCCB绝绝对值CCHEKK_A BTFFSC ACCCAHHI,77 ACCCA为负负吗? CALLL NEGG_A ;ACCCA为负负,求取取ACCCA绝对对值, RRETUURN ;ACCCA和AACCBB均为正正,返回回(3)166×166位定点点数除法程序LIST p=116f8877IINCLLUDEE p116f8777.inncACCCALLO EEQU 200;存放除除数低88位ACCCAHHI EQUU 221 存放除除数高88位ACCCBLLO EQUU 222 ;存放被被除数和和商的低低8位AACCBBHI EQQU 23 ;存放被被除数和和商的高高8位AACCCCLO EQQU 24 存放余余数低88位ACCCCHHI EQUU 225 存放余余数高88位ACCCDLLO EQUU 226 ;临时寄寄存器AACCDDHI EQQU 27 ;临时寄寄存器TTEMPP EEQU 288 ;临时寄寄存器SSIGNN EEQU 299 存放商商的符号号ORGG 0XX00000STARTT GOOTO MAIINORG 00X01100DD_diiv CCALLL SS_SIIGN 确定商商的符号号,并将将负数取取补CAALL SETTUP ;初始化化TEMMP,将将被除数数移至AACCDD INNCF TEMMP CCLRFF ACCCCHHI 清余数数寄存器器 CLLRF ACCCCLOODLOOOP BCFF STTATUUS,CC ;清进位位位 RRLF ACCCDLOO ;被除数数、余数数左移11位 RRLF ACCCDHII RLLF AACCCCLO RLFF ACCCCHHI MMOVFF ACCCAHHI,00 ;ACCCCHII-ACCCAHHI SSUBWWF AACCCCHI,00 BTTFSSS STTATUUS,ZZ ACCCCHII=ACCCAHHI? GOTTO NNOCHHK MMOVFF ACCCALLO,00 是,AACCCCLO-ACCCALOO SUUBWFF ACCCCLLO,00NOCCHK BTFFSS STAATUSS,C ACCCC>AACCAA? GGOTOO NOOGO MOVVF AACCAALO,00 ;是,余余数减除除数 SSUBWWF AACCCCLO BTFFSS STAATUSS,C DECCF AACCCCHI MOVVF AACCAAHI,00 SUUBWFF ACCCCHHI BBSF STAATUSS,C ;置进位位位NOOGO RLFF ACCCBLLO ;商左移移1位 RLFF ACCCBHHI DDECFFSZ TEMMP ;循环完完毕? GOTTO DDLOOOP BBTFSSS SIGGN,77 ;是,确确定商的的符号 GOTTO DIVVOVEER ;为正,除除法结束束,跳转转到结束束行 CCOMFF AACCCCLO ;为负,商商和余数数分别取取补 IINCFF AACCCCLO BTFFSC STAATUSS,Z DECCF ACCCCHII COOMF ACCCCHHI CCALLL NEEG_BB 见乘法法程序中中间NEEG_BBDIVVOVEER RRETUURN ;子程序序返回S_SIGGN MMOVFF AACCAAHI,00 ACCCAHII异或AACCBBHI,结结果送SSIGNN单元 XORRWF ACCCBHHI,00 MOOVWFF SSIGNN BTTFSSS AACCBBHI,77 ;ACCCB为负负? GGOTOO CCHEKK_A ;否,检检查ACCCA COMMF ACCCBLOO ;是,AACCBB取补 INCCF ACCCBLOO BTTFSCC SSTATTUS,ZZ DEECF ACCCBHHI CCOMFF AACCBBHICCHEKK_A BTFFSC ACCCAHHI,77 ACCCA为负负? CCALLL NNEG_A ;ACCCA为负负,取补补(NEEG_AA子程序序请参见见 ;16××16位位定点数数乘法子子程序NNEG_A) RETTURNN ;ACCCA和AACCBB均为负负,返回回(4)浮点点数加减减法程序序LIST pp=166f8777 IINCLLUDEE p166f8777.iinc ACCCALOO EQUU 220 存放加加数或减减数的尾尾数 AACCAAHI EEQU 21 EXPPA EQUU 222 ;存放加加数或减减数阶码码 ACCCBLLO EQUU 223 ;存放被被加数或或被减数数尾数以以及和或或差 AACCBBHI EEQU 244 EXXPB EEQU 25 ;存放被被加数或或被减数数阶码 ACCCCLOO EEQU 266 临时寄寄存器 ACCCCHII EQUU 227 ;临时寄寄存器 ACCCDLOO EEQU 288 临时寄寄存器 ACCCDHII EQUU 229 ;临时寄寄存器 TEMMP EQQU 2A 临时寄寄存器 TEMMP1 EEQU 300 临时寄寄存器 TIMMES EEQU 311 临时寄寄存器 ORGG 0XX0000STAART GOTTO MAIIN OORG 00X01100F_subb CAALL NNEG_A;求ACCCA的的补码,将将减法转转换为补补码加法法F_aadd CALLL SUBBADJJ 调子程程序判断断EXPPB和EEXPAA的大小小 BTTFSCC STAATUSS,Z 参与运运算的两两个数阶阶码相等等? GGOTOO PADDD 是,求求尾数的的和 BBTFSSC STTATUUS,CC EXPPB>EEXPAA? CCALLL F_sswapp 是,AACCBB与ACCCA互互换 MMOVFF EXPPA,00 否,求求取两者者的差值值 SUUBWFF EXPPBSCCLOOOP CCALLL SHFFTSRR ACCCB右移移规格化化 INNCFSSZ EXXPB EXPPBEEXPAA? GOOTO SSCLOOOP 否,继继续右移移 MOOVF EEXPAA,0 是,存存和(差差)的阶阶码 MMOVWWF EXPPBPAADD MOVVF ACCCAHHI,00 ACCCAHII或ACCCBHHI IIORWWF ACCCBHHI,00 MOOVWFF SIGGN 存于SSIGNN寄存器器 MOOVF ACCCBHHI,00 暂存AACCBBHI MOOVWFF EEXPAA CAALL DD_addd 尾数相相加 BBTFSSS SIIGN,77 ACCCA和AACCBB有负数数? BTTFSCC ACCCBHII,7;否,把把和的最最高位和和次高位位同时进进位? GOTTO ADDD2 否,转转ADDD2 BBTFSSS ACCCAHII,7 ACCCA为负负吗? GOTTO ADDD3 ACCCA和AACCBB不同时时为负,转转ADDD3 BBTFSSS EXPPA,77 是,AACCBB为负吗吗? GGOTOO AADD33 BSFF STAATUSS,C ACCCA和AACCBB同为负负,带负负号右移移 RRRF ACCCBHHI RRRF AACCBBLO INCCF EXXPBAADD33 CLLRF AACCCCHI 和(差差)规格格化 CCLRFF ACCCCLOO CAALL FF_noorm RETTURNN 子程序序返回AADD22 BCCF SSTATTUS,CC 最高位位次高位位不同时时进位,AACCBB右移 INCCF EXXPB GOTTO SHHFTRRSHFFTSRR BBCF STAATUSS,C ACCCB带符符号右移移子程序序 BTTFSCC ACCCBHII,7 BSFF STTATUUS,CCSHFFTR RRRF ACCCBHII RRRF AACCBBLO RETTURNN 子程序序返回F_swaap MMOVFF ACCCAHII,0;ACCCAHII、ACCCBHHI互换换 MOOVWFF TEMMP MMOVFF ACCCBHII,0 MOVVWF AACCAAHI MOVVF TEEMP,00 MOOVWFF ACCCBHII MOOVF AACCAALO,00 ACCCALOO、ACCCBLLO互换换 MOOVWFF TEMMP MMOVFF ACCCBLOO,0 MOVVWF AACCAALO MOVVF TEEMP,00 MOOVWFF ACCCBLOO MOOVF EEXPAA,0 EXPPA、EEXPBB互换 MOVVWF TTEMPP MOOVF EEXPBB,0 MOVVWF EEXPAA MOOVF TTEMPP,0 MOVVWF EEXPBB RRETUURNSUBADDJ MOVVF EXPPA,00;EXPPA异或或EXPPB,结结果送CC_DIIV XXORWWF EXPPB,00 MOOVWFF CC_DIIV MMOVFF EEXPAA,0 EXPPB-EEXPAA SUUBWFF EEXPBB,0 BTFFSS C_DIVV,7 EXPPA和EEXPBB同号? REETURRN 是,进进位位的的值真确确反映两两者的大大小,返返回 BBTFSSS STAATUSS,C 否,进进位位的的值取反反 GOOTO CHHANGGEC BCFF STAATUSS,C RETTURNNCHAANGEEC BBSF SSTATTUS,CC REETURRNF_norrm MOVVF ACCCBHHI;ACCCB00? BBTFSSS STTATUUS,ZZ GOOTO CC_noorm MOVVF ACCCBLLO BBTFSSC STTATUUS,ZZ REETURRN 是,不不需规格格化,返返回C_norrm BBTFSSC ACCCBHII,7;否。AACCBB为负? GGOTOO CC_noorm22 C_norrm1 BTFFSC ACCCBHII,6;为正。规规格化完完毕? RETTURNN ACCCBHII.6=1,规规格化结结束 CCALLL SHFFTSLL 否。AACCBB左移 DECCF EXXPB EXPPB减11 GOOTO CC_noorm11 重新判判断规格格化完毕毕否?CC_noorm22 BTTFSSS AACCBBHI,66 ACCCB为负负。规格格化完毕毕否? RETTURNN ACCCBHII.6=0,规规格化结结束 BBCF SSTATTUS,CC CCALLL SSHFTTSL 否,AACCBB左移 BSFF ACCCBHII,7 加符号号 DEECF EXXPB EXPPB减11 GOOTO C_norrm2 重新判判断规格格化完毕毕否?SSHFTTSL BBCF STAATUSS ,CC ACCCB左移移子程序序 RRLF ACCCCLOO RLFF ACCCCHHI RRLF ACCCBLOO RLLF AACCBBHI RETTURNN(5)浮点点数乘法法程序LIST pp=166f8777 IINCLLUDEE pp16ff8777.innc AACCAALO EEQU 200;存放乘乘数尾数数 ACCCAHHI EQQU 21 EXPPA EQUU 222 存放乘乘数阶码码 ACCCBLLO EQQU 23 ;存放被被乘数尾尾数和乘乘积高116位 ACCCBHII EQUU 224 EEXPBB EQUU 225 存放被被乘数阶阶码 AACCCCLO EEQU 266 ;存放乘乘积低116位 ACCCCHII EQUU 227 ACCCDLLO EQQU 28 临时寄寄存器 ACCCDHII EQUU 229 临时寄寄存器 TEMMP EQQU 2A 临时寄寄存器 TEMMP1 EEQU 300 临时寄寄存器 TIMMES EEQU 311 临时寄寄存器 SIGGN EQQU 2B 存放乘乘积符号号 COOUNTT EQUU 22F 临时寄寄存器 ACCCEHII EEQU 30 临时寄寄存器 ACCCELOO EEQU 31 临时寄寄存器 ORGG 0X000000STAART GOTTO MAIIN OORG 00X01100F_mpyy CAALL SS_SIIGN 求取乘乘积的符符号,并并对负数数取补 CAALL SSETUUP ;调用子子程序将将ACCCB的值值送ACCCD CLRRF ACCCCHHI ;清ACCCC CLRRF ACCCCLLOMLLOOPP BCCF SSTATTUS,CC 清进位位位 RRRF ACCCDHII ACCCD右移移 RRRF AACCDDLO BTFFSC SSTATTUS,CC ;判断是是否需要要相加 CALLL D_addd ;加乘数数至ACCCB BCFF STTATUUS,CC 清进位位位 RRRF ACCCBHII 右移部部分乘积积 RRRF AACCBBLO RRFF ACCCCHHI RRRF ACCCCLOO DEECFSSZ TEEMP 乘法完完成否? GOOTO MMLOOOP 否,继继续循环环 MOOVF EEXPAA,0 ;是,乘乘数与被被乘数阶阶码相加加,得积积的阶码码 ADDDWFF EEXPBB MOOVF AACCBBHI ACCCBHII=0? BTTFSSS STAATUSS,Z GOTTO FIINUPP 否,转转FINNUP MOVVF ACCCBLLO ACCCB00? BBTFSSS STTATUUS ,ZZ GOOTO SSHFTT08 ;否,只只有ACCCBHHI=00,转SSHFTT08 MOVVF ACCCCHHI,00 ;ACCCB=00,将乘乘积左移移15位位 MOOVWFF ACCCBHII MOOVF AACCCCLO,00 MOOVWFF ACCCBLOO BCCF SSTATTUS,CC RRRF AACCBBHI RRFF