Weight_Bed/Multiplication_Division.c

105 lines
2.6 KiB
C
Raw Permalink Normal View History

2024-05-17 15:11:04 +08:00
#include "H/Function_Init.H"
unsigned long product = 0;//<2F>˻<EFBFBD>
unsigned long quotient = 0;//<2F><>
unsigned int remainder = 0;//<2F><><EFBFBD><EFBFBD>
typedef struct
{
unsigned char MDU_EXA3Reg; //EXA3<41>Ĵ<EFBFBD><C4B4><EFBFBD>
unsigned char MDU_EXA2Reg; //EXA2<41>Ĵ<EFBFBD><C4B4><EFBFBD>
unsigned char MDU_EXA1Reg; //EXA1<41>Ĵ<EFBFBD><C4B4><EFBFBD>
unsigned char MDU_EXA0Reg; //EXA0<41>Ĵ<EFBFBD><C4B4><EFBFBD>
} MDU_EXAxReg_Typedef;
typedef union
{
MDU_EXAxReg_Typedef MDU_EXAxReg;
unsigned long MDU_Temp;
} MDU_Temp_Union;
//Result_union result;
void Multiplication(unsigned int faciend, unsigned int Multiplier);
void Division(unsigned long dividend,unsigned int divisor);
void Multiplier_Divider_Test()
{
while(1)
{
Multiplication(15,16);
if(product == 240)
{
P03 = ~P03;
}
Division(16,5);
if((quotient == 3) && (remainder == 1))
{
P04 = ~P04;
}
}
}
/****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>Multiplication(unsigned int faciend, unsigned int Multiplier)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>faciend<EFBFBD><EFBFBD>Multiplier
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
****************************************************/
void Multiplication(unsigned int faciend, unsigned int Multiplier)
{
MDU_Temp_Union MDU_ProductTemp;
OPERCON &= ~0x40; //ѡ<><D1A1><EFBFBD>˷<EFBFBD>
EXA0 = faciend;
EXA1 = faciend>>8;
EXBL = Multiplier;
EXBH = Multiplier>>8;
OPERCON |= 0x80; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
while(OPERCON & 0x80); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA0Reg = EXA0;
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA1Reg = EXA1;
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA2Reg = EXA2;
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA3Reg = EXA3;
product = MDU_ProductTemp.MDU_Temp; //<2F><>ȡ<EFBFBD>˻<EFBFBD>
}
/****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>Division(unsigned long dividend,unsigned int divisor)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dividend<EFBFBD><EFBFBD>divisor
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
****************************************************/
void Division(unsigned long dividend,unsigned int divisor)
{
MDU_Temp_Union MDU_ProductTemp;
MDU_ProductTemp.MDU_Temp = dividend;
OPERCON &= ~0x40;
OPERCON |= 0x40; //ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EXA0 = MDU_ProductTemp.MDU_EXAxReg.MDU_EXA0Reg; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EXA1 = MDU_ProductTemp.MDU_EXAxReg.MDU_EXA1Reg;
EXA2 = MDU_ProductTemp.MDU_EXAxReg.MDU_EXA2Reg;
EXA3 = MDU_ProductTemp.MDU_EXAxReg.MDU_EXA3Reg;
EXBL = divisor; //<2F><><EFBFBD><EFBFBD><EBB1BB><EFBFBD><EFBFBD>
EXBH = divisor>>8;
OPERCON |= 0xC0; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
while(OPERCON & 0x80); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA0Reg = EXA0;
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA1Reg = EXA1;
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA2Reg = EXA2;
MDU_ProductTemp.MDU_EXAxReg.MDU_EXA3Reg = EXA3;
remainder = EXBH*256+ EXBL; //<2F><><EFBFBD><EFBFBD>
quotient = MDU_ProductTemp.MDU_Temp; //<2F><>
}