⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mul_sign.c

📁 P18F4610是8位单片机的乘法程序是无符号的16*16C嵌入汇编的.MCC18编译器.
💻 C
字号:
#include <p18f4610.h>
#include "mul.h"
                 
void main()
{
  int a;
  unsigned long temp_u;
  signed long temp_s;
  temp_s=mul_sign_16(-460,460);
}
//***********16位有符号乘法********************
//入口参数为signed int nmb1_s和signed int nmb2_s
//入口参数的取值范围[-32766,32767]
//带一个返回值(MUL_RESULT全局变量),值为乘法的积。
//积的取值范围[-1073643522,1073676289]
//*********************************************
signed long int mul_sign_16(signed int nmb1_s,signed int nmb2_s)
 {
  SULTOR.SULTOR_S=nmb1_s;
  SULND.SULND_S=nmb2_s;
  _asm
  MOVF  0x008,0,0
  MULWF 0x00a,0
  MOVFF PRODH,0X005
  MOVFF PRODL,0X004 

  MOVF  0x00b,0,0
  MULWF 0x009,0
  MOVFF PRODH,0X007
  MOVFF PRODL,0X006
 
  MOVF  0x008,0,0
  MULWF 0x00b,0
  MOVF  PRODL,0,0
  ADDWF 0X005,1,0
  MOVF  PRODH,0,0
  ADDWFC 0X006,1,0//06单元内容+乘积(008单元内容*00b单元内容)的高位+(005单元到006单元的)进位
  CLRF   0X0FE8,0  //清W寄存器
  ADDWFC 0X007,1,0 //(006单元到007单元的)进位
  

  MOVF  0x009,0,0
  MULWF 0x00a,0
  MOVF  PRODL,0,0
  ADDWF 0X005,1,0
  MOVF  PRODH,0,0
  ADDWFC 0X006,1,0//06单元内容+乘积(009单元内容*00a单元内容)的高位+(005单元到006单元的)进位
  CLRF   0X0FE8,0 //清W寄存器
  ADDWFC 0X007,1,0//(006单元到007单元的)进位
 
  BTFSS 0x009,7,0
  BRA 4  //判断nmb2符号,pc+1+4
  MOVF 0x00a,0,0
  SUBWF 0X006,1,0
  MOVF 0x00b,0,0
  SUBWFB 0X007,1,0

  BTFSS 0x00b,7,0
  BRA   4   //pc+1+4
  MOVF  0x008,0,0
  SUBWF 0X006,1,0
  MOVF  0x009,0,0
  SUBWFB 0X007,1,0
  _endasm
  return MUL_RESULT;
 
 }
//16位有符号乘法计算E

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -