|
| 技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
[请教]PIC频率计程序 |
|
| 作者:renhai 栏目:单片机 | |
请教大家 我用PIC16C54制作频率计,其中要用到16位除法子程序,如下,但余数始终不对,为什么啊? 16×16位无符号除法子程序 子程序采用反复的减法算法,除数和被除数分别为16位二进制有符号数(均采用补码表示,第16位为符号位),商为16位二进制有符号数,第16位为符号位。子程序的入口条件和出口条件如下: 入口条件:被除数存放在ACCBHI、ACCBLO单元中; 除数存放在ACCAHI、ACCALO单元中。 出口条件:商存放在ACCBHI、ACCBLO单元中; 余数存放在ACCCHI、ACCCLO单元中。 LIST p=16F877 INCLUDE p16F877.inc ACCALO EQU 20 ;存放除数低8位 ACCAHI EQU 21 ;存放除数高8位 ACCBLO EQU 22 ;存放被除数和商的低8位 ACCBHI EQU 23 ;存放被除数和商的高8位 ACCCLO EQU 24 ;存放余数低8位 ACCCHI EQU 25 ;存放余数高8位 ACCDLO EQU 26 ;临时寄存器 ACCDHI EQU 27 ;临时寄存器 TEMP EQU 28 ;临时寄存器 SIGN EQU 29 ;存放商的符号 ORG 0X0000 START GOTO MAIN ;***16×16位数除法子程序,入口地址ACCB /ACCA,出口地址ACCB *** ORG 0X0100 D_div CALL S_SIGN ;确定商的符号,并将负数取补 CALL SETUP ;初始化TEMP,将被除数移至ACCD, CLRF ACCCHI ;清余数寄存器 CLRF ACCCLO DLOOP BCF STATUS,C ;清进位位 RLF ACCDLO ;被除数、余数左移1位 RLF ACCDHI RLF ACCCLO RLF ACCCHI MOVF ACCAHI,0 ;ACCCHI-ACCAHI SUBWF ACCCHI,0 BTFSS STATUS,Z ;ACCCHI=ACCAHI? GOTO NOCHK MOVF ACCALO,0 ;是,ACCCLO-ACCALO SUBWF ACCCLO,0 NOCHK BTFSS STATUS,C ;ACCC>ACCA? GOTO NOGO MOVF ACCALO,0 ;是,余数减除数 SUBWF ACCCLO BTFSS STATUS,C DECF ACCCHI MOVF ACCAHI,0 SUBWF ACCCHI BSF STATUS,C ;置进位位 NOGO RLF ACCBLO ;商左移1位 RLF ACCBHI DECFSZ TEMP ;循环完毕? GOTO DLOOP RETLW 0 SETUP MOVLW .16 ;初始化TEMP寄存器 MOVWF TEMP MOVF ACCBHI,0 ;ACCB送ACCD MOVWF ACCDHI MOVF ACCBLO,0 MOVWF ACCDLO CLRF ACCBHI ;清ACCB CLRF ACCBLO RETLW 0 ;子程序返回 |
| 2楼: | >>参与讨论 |
| 作者: lwq 于 2004-9-23 8:49:00 发布:
这种程序看书后自己体会了。 |
|
|
|
| 免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |