105 lines
2.6 KiB
C
105 lines
2.6 KiB
C
|
#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><>
|
|||
|
}
|
|||
|
|