下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 PIC单片机应用开发典型模块各章程序第八章程序

PIC单片机应用开发典型模块各章程序第八章程序.doc

PIC单片机应用开发典型模块各章程序第八章程序

WindomZhong
2018-09-08 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《PIC单片机应用开发典型模块各章程序第八章程序doc》,可适用于IT/计算机领域

()×位定点数加、减法程序LIST            p=f    INCLUDE        pfinc    ACCALO     EQU      存放加数或减数低位    ACCAHI     EQU         存放加数或减数高位    ACCBLO     EQU         存放被加数或被减数低位    ACCBHI     EQU      存放被加数或被减数高位    ORG    XSTART    GOTO     MAIN***双字节减法子程序入口地址ACCBACCA出口地址ACCB***Dsub    CALL    NEGA    求ACCA的补码双字节加法子程序入口地址ACCBACCA出口地址ACCBDadd      MOVF     ACCALOACCB和ACCA低半字节相加    ADDWF     ACCBLO    BTFSC     STATUS,C有进位否?    INCF     ACCBHI有,ACCB高字节加,再加ACCAHI    MOVF     ACCAHIACCA、ACCB高半字节相加    ADDWF     ACCBHI    RETURN    子程序返回ACCA取补子程序NEGA    COMF     ACCALO    ACCALO取反加    INCF     ACCALO    BTFSC     STATUSZ    低位有进位吗?    DECF     ACCAHI有ACCAHI减再取反    COMF     ACCAHI否则ACCAHI直接取反    RETURN子程序返回()×位定点数乘法程序LIST    p=f    INCLUDE    pfinc    ACCALO     EQU        存放乘数低位    ACCAHI     EQU         存放乘数高位    ACCBLO     EQU        存放被乘数低位和乘积第~位    ACCBHI     EQU        存放被乘数高位和乘积第~位    ACCCLO     EQU         存放乘积低位    ACCCHI     EQU         存放乘积高位    ACCDLO     EQU         临时寄存器    ACCDHI     EQU  CHI是将商送ACCB    MOVWF         ACCBHI    MOVF         ACCCLO    MOVWF         ACCBLO    RETLW             Dadd    MOVF         ACCALO加数、被加数低半字节相加    ADDWF         ACCBLO    BTFSC         STATUSC  有进位?    INCF         ACCDLO    ACCD低半字节加    MOVF         ACCAHI   ACCAHIACCDLO    ADDWF         ACCDLO    RETLW                  子程序返回SETUP    MOVLW             MOVWF         TEMP    MOVF         ACCBHI    MOVWF         ACCDHI    MOVF         ACCBLO    MOVWF         ACCDLO    CLRF         ACCBHI    CLRF         ACCBLO    RETLW         NEGA    COMF         ACCALO  ACCALO取反加    INCF         ACCALO    BTFSC         STATUSZ  低位有进位吗?    DECF         ACCAHI       有ACCAHI减再取反    COMF         ACCAHI     否ACCAHI直接取反    RETLW         NEGB    DECF         ACCBLO  ACCBLO取反加    COMF         ACCBLO    BTFSC         STATUSZ低位有进位吗?    DECF         ACCBHI  有ACCBHI减再取反    COMF         ACCBHI     否ACCBHI直接取反    RETLW                 SSIGN    MOVF        ACCAHIACCAHI异或ACCBHI结果送SIGN单元    XORWF         ACCBHI    MOVWF         SIGN                BTFSS         ACCBHIACCB为负?    GOTO         CHEKA否检查ACCA    COMF         ACCBLO是ACCB取补    INCF         ACCBLO    BTFSC         STATUSZ    DECF         ACCBHI    COMF         ACCBHICHEKA        BTFSC         ACCAHI ACCA为负?    CALL         NEGA   ACCA为负取补    RETLW                 ACCA和ACCB均为负返回Fnorm      MOVF         ACCBHI ACCB=?    BTFSS         STATUSZ    GOTO         Cnorm    MOVF         ACCBLO    BTFSC         STATUSZ    RETLW         是不需规格化返回Cnorm    BTFSC        ACCBHI否。ACCB为负?     GOTO        CnormCnorm    BTFSC         ACCBHI 为正。规格化完毕?    RETLW                  ACCBHI=规格化结束    CALL         SHFTSL否。ACCB左移    DECF         EXPBEXPB减    GOTO         Cnorm   重新判断规格化完毕否?Cnorm    BTFSS        ACCBHI ACCB为负。规格化完毕否?    RETLW                    ACCBHI=规格化结束    BCF            STATUSC        CALL        SHFTSL        否ACCB左移    BSF            ACCBHI   加符号    DECF        EXPB        EXPB减    GOTO        Cnorm        重新判断规格化完毕否?SHFTSL    BCF             STATUS C  ACCB左移子程序        RLF             ACCCLO            RLF             ACCCHI    RLF             ACCBLO    RLF             ACCBHI    RETLW         ()定点数转化为浮点数程序LIST            p=f    INCLUDE        pfinc    ACCBLO         EQU     存放定点整数和转换后浮点数的尾数    ACCBHI         EQU         EXPB         EQU     存放转换后浮点数的阶码    ACCCLO         EQU             临时寄存器    ACCCHI         EQU            临时寄存器    ACCDLO         EQU            临时寄存器    ACCDHI         EQU             临时寄存器    SIGN         EQU     B        存放被转换数的符号    ORG            XSTART    GOTO        MAIN    ORG            XDtoF    CLRF         SIGN        根据被转换数确定结果的符号对负数取补    BTFSS         ACCBHI    GOTO         INTF    BSF             SIGN    CALL         NEGBINTF    MOVLW         初始化EXPB    MOVWF         EXPB    CLRF         ACCCHI    CLRF         ACCCLO    CALL         Fnorm       对ACCB进行规格化    BTFSS         SIGN        结果为负?    GOTO         DtoF    CALL         NEGB      是求补DtoF    RETURN    Fnorm     MOVF         ACCBHIACCB=?    BTFSS         STATUSZ    GOTO         Cnorm    MOVF         ACCBLO    BTFSC         STATUSZ    RETLW                     是不需规格化返回Cnorm    BTFSC        ACCBHI    否。ACCB为负?     GOTO        Cnorm    Cnorm    BTFSC         ACCBHI   为正。规格化完毕?    RETLW                 ACCBHI=规格化结束    CALL         SHFTSL       否。ACCB左移    DECF         EXPB        EXPB减    GOTO         Cnorm        重新判断规格化完毕否?Cnorm    BTFSS        ACCBHI    ACCB为负。规格化完毕否?    RETLW                    ACCBHI=规格化结束    BCF            STATUSC        CALL        SHFTSL        否ACCB左移    BSF            ACCBHI   加符号    DECF        EXPB        EXPB减    GOTO        Cnorm       重新判断规格化完毕否?SHFTSL      BCF             STATUS C  ACCB左移子程序        RLF             ACCCLO            RLF             ACCCHI    RLF             ACCBLO    RLF             ACCBHI    RETLW         ()字节浮点数转换为定点整数程序FtoD    CLRF         SIGN    清结果符号寄存器    MOVF         ACCBHI    BTFSS         ACCBHI   被转换数是否为负?    GOTO         D    BSF             SIGN     是SIGN置    CALL         NEGB      被转换数取补D    BTFSS         EXPB      被转换数为正再判阶码为负否?    GOTO         D    CLRF         ACCBHI        为负被转换数小于无法用定点数表示    CLRF         ACCBLO    RETLW         D    MOVLW                    被转换数阶码减(十进制数)    SUBWF         EXPB    BTFSS         STATUSC    阶码小于?    GOTO         D        MOVLW         XFF          阶码大于等于置ACCB为最大返回    MOVWF         ACCBHI    MOVWF         ACCBLO    RETLW         D    CALL         FTOW    调用子程序将浮点数转换为定点数    BTFSC         SIGN      定点数为负?    CALL         NEGB      是取补    RETLW                    否返回FTOW    MOVLW                  EXPB=(十进制数)?    SUBWF         EXPB    BTFSC         STATUSZ    RETLW                   是返回    BCF             STATUSC    否ACCB继续右移EXPB加    RRF             ACCBHI    RRF             ACCBLO    INCF         EXPB    GOTO         FTOW       重新判断EXPB=?()双字节定点数至位BCD码转换程序    LIST            p=f    INCLUDE        pfinc    ACCBLO         EQU         存放被转换的双字节整数低位    ACCBHI         EQU            存放被转换的双字节整数高位    ACCCLO         EQU        存放位BCD码    ACCCHI         EQU         ACCDLO         EQU         ACCDHI         EQU         TEMP         EQU     A       临时寄存器    SIGN         EQU     B 被转换数符号寄存器    ORG            XSTART    GOTO        MAIN    ORG            XBtoBCD    CLRF        SIGN           初始化符号寄存器    BTFSS        ACCBHI 被转换数为负?    GOTO        LOOP否转BtoBCD    BSF            SIGN        是存符号    CALL        NEGB      ACCB取补LOOP    BCF        STATUSC清进位位    MOVLW                    移位计数器赋初值    MOVWF         COUNT    CLRF         ACCCHI      初始化出口寄存器    CLRF         ACCCLO    CLRF         ACCDHILOOP    RLF             ACCBLOACCB左移一位至出口寄存器    RLF             ACCBHI    RLF             ACCDHI    RLF             ACCCLO    RLF             ACCCHI    DECFSZ         COUNT         移位计数器=?    GOTO         ADJDEC        否转ADJDEC    RETLW                  是返回ADJDEC    MOVLW    ACCDHI 指针指向ACCDHI    MOVWF         FSR    CALL         ADJBCD        调用BCD码校正子程序    MOVLW         ACCCLO     指针指向ACCCLO    MOVWF         FSR    CALL         ADJBCD     调用BCD码校正子程序        MOVLW         ACCCHI        指针指向ACCCHI    MOVWF         FSR    CALL         ADJBCD       调用BCD码校正子程序    GOTO         LOOP       ACCB重新左移ADJBCD     MOVLW         X  LSD+>?    ADDWF         INDF    MOVWF         TEMP    BTFSC         TEMP    MOVWF         INDF        是LSD=LSD+    MOVLW         X        否MSD+>?    ADDWF         INDF    MOVWF         TEMP    BTFSC         TEMP    MOVWF         INDF          是MSD=MSD+    RETLW                    返回()浮点数至位压缩BCD码转换程序LIST            p=f    INCLUDE        pfinc    ACCALO        EQU     临时寄存器    ACCAHI         EQU         EXPA        EQU        临时寄存器    ACCBLO         EQU            存放被转换浮点数尾数    ACCBHI         EQU         EXPB         EQU            存放被转换浮点数阶码    ACCCLO         EQU          临时寄存器    ACCCHI         EQU          临时寄存器    ACCDLO         EQU           临时寄存器    ACCDHI         EQU        临时寄存器    TEMP         EQU     A    临时寄存器    TEMP         EQU         临时寄存器    TIMES         EQU        临时寄存器    SIGN         EQU     B  临时寄存器    COUNT         EQU     F    临时寄存器    CMUL         EQU     C   存放小数点位置    CDIV         EQU     D       存放小数点位置    FPOL         EQU     E      存放被转换数的符号    ORG            XSTART    GOTO        MAIN    ORG            XFtoBCD    CLRF         CMUL 清小数点位置数寄存器    CLRF         CDIV    CLRF         ACCAHI求取结果符号存于FPOL    CALL         SSIGN    MOVF         SIGN     MOVWF        FPOL    MOVLW                     ACCA赋初值ACCA=(十进制)    MOVWF         ACCAHI    CLRF         ACCALO    MOVLW             MOVWF         EXPAMUl    BTFSS        EXPB 阶码EXPB<?    GOTO        MUl 否转MUMUl    CALL         Fmpy 是ACCA×    INCF         CMUL小数点左移寄存器加    GOTO         MUl重新判断阶码是否小于零MUl    MOVLW         阶码EXPB<?    SUBWF         EXPB    BTFSC         STATUSC    GOTO         MUl  否转MUMUl    CALL         Fmpy  是ACCA×    INCF         CMUL小数点左移寄存器加    GOTO         MUL 重判阶码值MUl    MOVLW                 阶码EXPB>?    SUBWF         EXPB    BTFSS        STATUSC    GOTO         NEXT  否表示阶码≤EXPB<求取BCD码值DIV    CALL         FDIV 是EXPB÷    INCF         CDIV      小数点右移寄存器加    GOTO         MUl    重新判断阶码值NEXT    CALL         FTOW  调子程序将浮点数转换为定点数    CALL         BtoBCD    调双字节数到BCD码子程序求BCD码    MOVF         ACCCHI   ACCCHI=?    BTFSS         STATUSZ    RETLW             否返回    MOVLW           是结果左移次保证ACCCHI不为    MOVWF         TIMES    BCF             STATUSCMUl    RLF             ACCDHI    RLF            ACCCLO    RLF             ACCCHI    DECFSZ         TIMES    GOTO         MUl    MOVF         CDIV  CDIV=?    BTFSC         STATUSZ    GOTO         TEMUL   是转判断CMUL    DECF         CDIV        否小数点右移寄存器减    RETLW         TEMUL    INCF         CMUL   小数点左移寄存器加    RETLW             ()进制码和BCD码转换程序LISTP=FINCLUDE“PFINC”#DEFINEBiTOBCD’Y'REQUxREQUxlREQUxBinHEQUxBinLEQUxCNTEQUxTMPEQUxBinBHEQUxBinBLEQUxORGxGOTOMAINORGxBiBCDMOVLWxMOVWFCNT移位次数BCFSTATUS,CCLRFRCLRFRCLRFRLOOPRLFBinLRLFBinHRLFRRLFRRLFRDECFSZCNTGOTOADJDECRETURNADJDECMOVLWR调整RMOVWFFSRCALLADJBCDMOVLWR调整RlMOVWFFSRCALLADJBCDMOVLWR调整RMOVWFFSRCALLADJBCDGOTOLOOPADJBCDMOVLWxADDWFINDF,WMOVWFTMPMOVWFINDFLSD=LSDMOVLWxADDWFINDF,WMOVWFTMPMOVWFINDFMSD=MSDRETURNBCDBiCLRFBinHMOVFR,WANDLWxFMOVWFBinL(BinL)=R<:>CALLMPYA(Bin)=(Bin×SWAPFRI,WCALLMPYB(Bin)=(Bin)R<:>×MOVFR,WCALLMPYB(Bin)=(Bin)R<:>*SWAPFR,WCALLMPYB(Bin)=(Bin)R<:>*MOVFR,W(Bin)=(Bin)R<:>ANDLWxFADDWFBinLBTFSCSTATUS,CINCFBinHRETURNMPYBANDLWxFADDWFBinLBTFSCSTATUS,CINCFBinHMPYlABCFSTATUS,CRLFBinL,WMOVWFBinBLRLFBinH,WMOVWFBinBH(Bin)×(BinB)BCFSTATUS,CRLFBinLRLFBinHBCFSTATUS,CBCFSTATUS,CRLFBinLRLFBinH(Bin)*(Bin)MOVFBinBL,WADDWFBinLBTFSCSTATUS,CINCFBinHMOVFBinBH,WADDWFBinHRETURNMAINORGx主程序IFBiTOBCD=='Y’二进制转换为BCD码MOVLWxFMOVWFBinHMOVLWxFFMOVWFBinLCALLBiBCD结果在RRR中ENDIFIFBITOBCD=='N'BCD码转换为二进制数MOVLWxMOVWFRMOVLWxMOVWFRMOVLWxMOVWFRCALLBCDBi结果在BinH、BinL中ENDIFGOTO$END()定点数开方程序 LIST            p=f    INCLUDE        pfinc    ACCALO        EQU        X    ACCAHI        EQU        ACCALO    EXPA        EQU        ACCALO    ACCBLO        EQU        ACCALO    ACCBHI        EQU        ACCALO    EXPB        EQU        ACCALO        ACCCLO        EQU        ACCALO    ACCCHI        EQU        ACCALO    ACCDLO        EQU        ACCALO    ACCDHI        EQU        ACCALO    TEMP        EQU        ACCDHI    SIGN            EQU        ACCDHI    SQRTLO        EQU        ACCALO    SQRTHI        EQU        ACCAHI    NUMLO        EQU        ACCDHI    NUMHI        EQU        ACCDHI    COUNT    EQU    ACCDHI此方法定义的数据块为连续层断只要             将第一行改变就可以将数据整块搬动到                新的地方为调试带来方便是比较推            崇的一种寄存器定义方法    LUPCNT    EQU        ****************************************        ORG            X        GOTO        MAIN        ORG            X****************************************INIT        MOVLW        LUPCNT    MOVWF        COUNT    MOVF        NUMHI    MOVWF         SQRTHI    MOVF        NUMLO    MOVWF        SQRTLO    BCF            STATUSC    RRF            SQRTHI    RRF            SQRTLO    RETLW        DIV        BCF            STATUSC    RRF            ACCBHI    MOVWF        SQRTHI    RRF            ACCBLO    MOVWF        SQRTLO    RETLW        SQRT    CALL        INITSLOOP    MOVF        NUMLO    MOVWF        ACCBLO    MOVF        NUMHI    MOVWF        ACCBHI    CALL        DDIVS    CALL        DADD    CALL        DIV    DECFSZ        COUNT    GOTO        SLOOP    RETURNDDIVS    CALL        SETUP        CLRF        ACCCHI        CLRF        ACCCLODLOOP    BCF            STATUSC    RLF            ACCDLO    RLF            ACCDHI    RLF            ACCCLO    RLF            ACCCHI    MOVF        ACCAHI    SUBWF        ACCCHI    BTFSS        STATUSZ    GOTO        NOCHK    MOVF        ACCALO    SUBWF        ACCCLONOCHK    BTFSS        STATUSC        GOTO         NOGO    MOVF        ACCALO    SUBWF        ACCCLO    BTFSS        STATUSC    DECF        ACCCHI    MOVF        ACCAHI    SUBWF        ACCCHI    BSF            STATUSCNOGO    RLF            ACCBLO    RLF            ACCBHI    DECFSZ        TEMP    GOTO        DLOOP    RETLW        ****************************************SETUP   MOVLW        MOVWF        TEMP    MOVF        ACCBHI    MOVWF        ACCDHI    MOVF        ACCBLO    MOVWF        ACCDLO    CLRF        ACCBHI    CLRF        ACCBLO    RETLW        NEGA    COMF        ACCALO    INCF            ACCALO    BTFSC        STATUSZ    DECF        ACCAHI    COMF        ACCAHI    RETLW        DADD    MOVF        ACCALO    ADDWF        ACCBLO    BTFSC        STATUSC    INCF            ACCBHI    MOVF        ACCAHI    ADDWF        ACCBHI    RETLW        ()浮点数开方程序LIST            P=f        INCLUDE        pfinc        ACCALO         EQU         H        ACCAHI         EQU         ACCALO        EXPA         EQU         ACCALO        ACCBLO         EQU         ACCALO        ACCBHI        EQU         ACCALO        EXPB         EQU         ACCALO        ACCCLO         EQU         ACCALO        ACCCHI         EQU         ACCALO        ACCDLO         EQU         ACCALO        ACCDHI         EQU         ACCALO        TEMP         EQU         ACCALOA        TEMP         EQU         ACCALOB        TIMES         EQU         ACCALOC        SIGN         EQU         ACCALOD        COUNT         EQU         ACCALOE        CMUL         EQU         ACCALOF    CDIV         EQU         ACCALO        FPOL         EQU         ACCALO    符号放置位        NUMLO        EQU        FPOL        NUMHI        EQU        FPOL        NUMM        EQU        FPOL         LUPCNT        EQU                CONSTANT     C=        CONSTANT     Z=        CONSTANT     MODEL=        CONSTANT     FALSE=****************************************        ORG            X        NOP        GOTO        MAIN        ORG            X****************************************INIT    DECF        EXPB     假设迭代根的初始值为其原值的一半    MOVF        ACCBHIW    MOVWF        ACCAHI    MOVF        ACCBLOW    MOVWF        ACCALO    MOVF        EXPBW    MOVWF        EXPA    RETLW        SQRTF    MOVLW        LUPCNT    MOVWF        COUNT    MOVF        ACCBHIW    MOVWF        NUMHI    MOVF        ACCBLOW    MOVWF        NUMLO    MOVF        EXPBW    MOVWF        NUMM     存储被开方的数    BTFSC        ACCBHI    GOTO        TIQIAN         如果被开方数是个负数则返回小数    CALL        INITSLOOP    MOVF        NUMLO        MOVWF        ACCBLO        MOVF        NUMHI    MOVWF        ACCBHI    MOVF        NUMM    MOVWF        EXPB    CALL        FDIV    CALL        Fadd    CALL        INIT    DECFSZ        COUNT    GOTO        SLOOP    RETURNTIQIAN    MOVLW        X    MOVWF        ACCBHI    CLRF        ACCBLO    MOVLW        X    MOVWF        EXPB     如果被开方数是一个负数返回一个极小的浮点数    RETURN        ()均值滤波程序INDFEQUH定义INDF寄存器STATUSEQUH定义状态寄存器FSREQUH定义FSR寄存器TRISAEQUH定义TRISA寄存器RPEQUH定义状态寄存器中的页选位RPRPEQUH定义状态寄存器中的页选位RPINTCONEQUBH定义中断寄存器PIREQUCH定义PIR中断寄存器ADRESHEQUEH定义ADRESH寄存器ADCONEQUFH定义ADCON寄存器ADRESLEQUEH定义ADRESL寄存器PIEEQUCH定义PIE寄存器ADCONEQUFH定义ADCON寄存器GIEEQUH定义中断寄存器中断使能位CEQUH定义状态寄存器中的进借位标志位CZEQUH定义状态寄存器中的零标志位ZHHEQUH定义位输入高位LLEQUH定义位输入低位AAEQUH定义BCD码最高位BBEQUH定义BCD码位CCEQUH定义BCD码位TEMPHEQUH定义临时变量TEMPHTEMPLEQUH定义临时变量TEMPLCOUNTEQUH定义计数器变量COUNTADHEQUH定义临时变量ADHADLEQUH定义临时变量ADLSTTEMPEQUAH定义临时变量STTEMPWTEMPEQUBH定义临时变量WTEMPDATAEQUCH定义外循环变量DATAEQUDH定义存储外循环次数的变量COUNTEQUH定义存储内循环次数的变量ADIEEQUH定义ADIEPEIEEQUH定义PDIEORGHGOTOMAINORGHGOTOINTERRETFIEMOVLWH初始化ADCONMOVWFADCONBCFSTATUS,RP选择体BSFSTATUS,RPMOVLWXFF将RA口设置为输入MOVWFTRISAMOVLWFFH初始化ADCONMOVWFADCONBSFPIE,ADIE开AD中断BCFSTATUS,RP选择体BCFSTATUS,RPCLRFPIR清AD中断标志BSFINTCON,GIE开中断BSFINTCON,PEIE开外围中断MOVLWH初始化COUNT寄存器MOVWFCOUNTBSFADCON,开ADLOOPBTFSSCOUNT,是否已经采样次了GOTONEXT否等待BCFINTCON,GIE关中断BCFADCON,关ADBCFSTATUS,C清除进位位RRFADHADHL除以RRFADLRRFADHADHL除以RRFADLRRFADHADHL除以RRFADLMOVFADH存储滤波量ADHMOVWFTEMPHMOVFADL存储滤波量ADLMOVWFTEMPLCLRFADH清ADH寄存器为下一次作准备CLRFADL清ADL寄存器MOVLWH初始化COUNT寄存器MOVWFCOUNTBSFINTCON,GIE开中断NEXTCALLDELAYGOTOLOOP等待INTERMOVWFWTEMP暂存W寄存器MOVFSTATUS,暂存STATUS寄存器MOVWFSTTEMPBCFSTATUS,RP选择体BCFSTATUS,RPBCFPIR,清AD中标志位BTFSSCOUNT,计数达到?GOTONEXT否采样周期没完求和CLRFADH是新的采样周期开始清ADH寄存器CLRFADL清ADL寄存器GOTORETURN是则恢复现场返回NEXTBSFSTATUS,RP选择体BCFSTATUS,RPMOVFADRESL,AD采样结果低位送W寄存器BCFSTATUS,RP选择体BCFSTATUS,RPADDWFADL加至ADL寄存器BTFSCSTATUS,C有进位?INCFADH有加进位位MOVFADRESH,加AD结果高半字节ADDWFADHINCFCOUNT计数器自加MOVFSTTEMP,恢复STATUS寄存器值MOVWFSTATUSMOVFWTEMP,恢复W寄存器值RETFIE中断返回DELAYMOVLWCOUNT设置外部循环的次数MOVWFDATALOOPMOVLWCOUNT设置内部循环的次数MOVWFDATALOOPDECFSZDATA,内部循环变量自减为则跳转GOTOLOOPDECFSZDATA,外部循环变量自减为则跳转GOTOLOOPRETURN延时子程序返回END源程序结束()中值滤波程序INDFEQUH定义INDF寄存器STATUSEQUH定义状态寄存器FSREQUH定义FSR寄存器TRISAEQUH定义TRISA寄存器RPEQUH定义状态寄存器中的页选位RPRPEQUH定义状态寄存器中的页选位RPINTCONEQUBH定义中断寄存器PIREQUCH定义PIR中断寄存器ADRESHEQUEH定义ADRESH寄存器ADCONEQUFH定义ADCON寄存器ADRESLEQUEH定义ADRESL寄存器PIEEQUCH定义PIE寄存器ADCONEQUFH定义ADCON寄存器GIEEQUH定义中断寄存器中断使能位CEQUH定义状态寄存器中的进借位标志位CZEQUH定义状态寄存器中的零标志位ZHHEQUH定义位输入高位LLEQUH定义位输入低位AAEQUH定义BCD码最高位BBEQUH定义BCD码位CCEQUH定义BCD码位TEMPHEQUH定义临时变量TEMPHTEMPLEQUH定义临时变量TEMPLCOUNTEQUH定义计数器变量COUNTADHEQUH定义临时变量ADHADLEQUH定义临时变量ADLADHEQUAH定义临时变量ADHADLEQUBH定义临时变量ADLADHEQUCH定义临时变量ADHADLEQUDH定义临时变量ADLSTTEMPEQUEH定义临时变量STTEMPWTEMPEQUFH定义临时变量WTEMPDATAEQUH定义外循环变量DATAEQUH定义内循环变量OUTHEQUH定义输出高位OUTLEQUH定义输出低位COUNTEQUH定义存储外循环次数的变量COUNTEQUH定义存储内循环次数的变量ADIEEQUH定义ADIEPEIEEQUH定义PDIEORGHGOTOMAINORGHGOTOINTERRETFIEMOVLWH初始化ADCONMOVWFADCONBCFSTATUS,RP选择体BSFSTATUS,RPMOVLWXFF将RA口设置为输入MOVWFTRISAMOVLWFFH初始化ADCONMOVWFADCONBSFPIE,ADIE开AD中断BCFSTATUS,RP选择体BCFSTATUS,RPCLRFPIR清AD中断标志BSFINTCON,GIE开中断BSFINTCON,PEIE开外围中断MOVLWH初始化COUNT寄存器MOVWFCOUNTBSFADCON,开ADLOOPBTFSSCOUNT,是否已经采样次了GOTONEXT否等待BCFINTCON,GIE关中断BCFADCON,关ADCALLPAIXU调用排序函数MOVFADH存储滤波量ADHMOVWFOUTHMOVFADL存储滤波量ADLMOVWFOUTLBSFINTCON,GIE开中断NEXTCALLDELAYGOTOLOOP等待INTERMOVWFWTEMP暂存W寄存器MOVFSTATUS,暂存STATUS寄存器MOVWFSTTEMPBCFSTATUS,RP选择体BCFSTATUS,RPBCFPIR,清AD中标志位BTFSSCOUNT,计数达到?GOTONEXT否是第次BTFSSCOUNT,是是第次或者第次GOTONEXT否是第次GOTONEXTNEXTBSFSTATUS,RP选择体BCFSTATUS,RPMOVFADRESL,AD采样结果低位送W寄存器BCFSTATUS,RP选择体BCFSTATUS,RPMOVWFADL存储低位到ADL寄存器MOVFADRESH,存储高位到ADH寄存器MOVWFADHGOTONEXTNEXTBSFSTATUS,RP选择体BCFSTATUS,RPMOVFADRESL,AD采样结果低位送W寄存器BCFSTATUS,RP选择体BCFSTATUS,RPMOVWFADL存储低位到ADL寄存器MOVFADRESH,存储高位到ADH寄存器MOVWFADHGOTONEXTNEXTBSFSTATUS,RP选择体BCFSTATUS,RPMOVFADRESL,AD采样结果低位送W寄存器BCFSTATUS,RP选择体BCFSTATUS,RPMOVWFADL存储低位到ADL寄存器MOVFADRESH,存储高位到ADH寄存器MOVWFADHNEXTINCFCOUNT计数器自加MOVFSTTEMP,恢复STATUS寄存器值MOVWFSTATUSMOVFWTEMP,恢复W寄存器值RETFIE中断返回PAIXUMOVFADL,SUBWFADL,ADLADLBTFSCSTATUS,CADLADL有借位?DECFADHMOVFADH,SUBWFADH,ADHADHBTFSSSTATUS,CADAD有借位?GOTOBIGGOTOSMALLSMALLMOVFADL将AD存储到TEMPMOVWFTEMPLMOVFADHMOVWFTEMPHMOVFADL将AD存储到ADMOVWFADLMOVFADHMOVWFADHMOVFTEMPL将TEMP存储到ADMOVWFADLMOVFTEMPHMOVWFADHBIGMOVFADL,SUBWFADL,ADLADLBTFSCSTATUS,CADLADL有借位?DECFADHMOVFADH,SUBWFADH,ADHADHBTFSSSTATUS,CADAD有借位?GOTOBIGGOTOSMALLSMALLMOVFADL将ADL存储到TEMPLMOVWFTEMPLMOVFADH将ADH存储到TEMPHMOVWFTEMPHMOVFADL将AD存储到ADMOVWFADLMOVFADHMOVWFADHMOVFTEMPL将TEMP存储到ADMOVWFADLMOVFTEMPHMOVWFADHBIGMOVFADL,SUBWFADL,ADLADLBTFSCSTATUS,CADLADL有借位?DECFADHMOVFADH,SUBWFADH,ADHADHBTFSSSTATUS,CADAD有借位?GOTOBIGGOTOSMALLSMALLMOVFADL将ADL存储到TEMPLMOVWFTEMPLMOVFADH将ADH存储到TEMPHMOVWFTEMPHMOVFADL将AD存储到ADMOVWFADLMOVFADHMOVWFADHMOVFTEMPL将TEMP存储到ADMOVWFADLMOVFTEMPHMOVWFADHBIGRETURN返回DELAYMOVLWCOUNT设置外部循环的次数MOVWFDATALOOPMOVLWCOUNT设置内部循环的次数MOVWFDATALOOPDECFSZDATA,内部循环变量自减为则跳转GOTOLOOPDECFSZDATA,外部循环变量自减为则跳转GOTOLOOPRETURN延时子程序返回END源程序结

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/33

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利