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

  • 0
  • 0
  • 约4.16万字
  • 约 33页
  • 2018-04-09 发布于湖北
  • 举报

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

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

(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????0X0000 START????GOTO?????MAIN ;***双字节减法子程序,入口地址ACCB-ACCA,出口地址ACCB*** D_sub????CALL????NEG_A???? ;求ACCA的补码 ;双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCB D_add??????MOVF?????ACCALO,0 ;ACCB和ACCA低半字节相加 ????ADDWF?????ACCBLO ????BTFSC?????STATUS, C ;有进位否? ????INCF?????ACCBHI ;有,ACCB高字节加1,再加ACCAHI ????MOVF?????ACCAHI,0 ;ACCA、ACCB高半字节相加 ????ADDWF?????ACCBHI ????RETURN???? ;子程序返回 ;ACCA取补子程序 NEG_A????COMF?????ACCALO???? ;ACCALO取反加1 ????INCF?????ACCALO ????BTFSC?????STATUS,Z???? ;低8位有进位吗? ????DECF?????ACCAHI ;有,ACCAHI减1,再取反 ????COMF?????ACCAHI ;否则ACCAHI直接取反 ????RETURN ;子程序返回 (2)16×16位定点数乘法程序 LIST????p=16f877 ????INCLUDE????p16f877.inc ????ACCALO?????EQU?????20??? ;存放乘数低8位 ????ACCAHI?????EQU?????21??? ? ;存放乘数高8位 ????ACCBLO?????EQU?????23??? ;存放被乘数低8位和乘积第16~23位 ????ACCBHI?????EQU?????24??? ;存放被乘数高8位和乘积第24~31位 ????ACCCLO?????EQU?????26??? ? ;存放乘积低8位 ????ACCCHI?????EQU?????27??? ? ;存放乘积高8位 ????ACCDLO?????EQU?????28??? ? ;临时寄存器 ????ACCDHI?????EQU?????29??? ? ;临时寄存器 ????TEMP?????EQU?????2A??? ? ;临时寄存器 ????SIGN?????EQU?????2B??? ? ;存放乘积的符号 ????ORG????0X0000 START????GOTO?????MAIN ????ORG????0X0100 D_mpy????CALL?????S_SIGN???? ;求取乘积的符号,并对负数取补 ?????CALL?????SETUP???? ;调用子程序,将ACCB的值送ACCD ????INCF????TEMP ????CLRF?????ACCCHI ;清ACCC ????CLRF?????ACCCLO MLOOP????BCF?????STATUS,C ;清进位位 ????RRF?????ACCDHI? ;ACCD右移 ????RRF?????ACCDLO ????BTFSC?????STATUS,C? ;判断是否需要相加 ????CALL?????D_add??? ;加乘数至ACCB,见加法程序 ????BCF?????STATUS,C??? ;清进位位 ????RRF?????ACCBHI???? ;右移部分乘积 ????RRF?????ACCBLO ????RRF?????ACCCHI ????RRF?????ACCCLO ????DECFSZ?????TEMP ;乘法完成否? ????GOTO?????MLOOP? ;否,继续求乘积 ????BT

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档