在单片机应用过程中,特别是对实时性要求高的应用,需要知道函数,查表,算法等运算所消耗的时间.现针对应广单片机,以乘法为例,现做了一个程序,用于测量乘法所消耗的时间.不多说,上代码.
/****************系统时钟*********************/
//byte count;
word usTmrCnt;
//bit FLAG_NMS;
/**************T16*************************/
WORD usDat;
BYTE mul_y1, mul_x1;
WORD mul_t2;
/*8bit 乘法*/
void Byte_Mul_Byte (void)
{ // mul_t2[W] = mul_x1[B] * mul_y1[B]
mul_t2$1 = 0;
BYTE cnt;
cnt = 8;
do
{
mul_x1 >>= 1;
if (CF)
{
mul_t2 += (mul_y1 << 8);
}
mul_t2 >>>= 1;
} while (--cnt);
}
void TIME16_Init(void)
{
/* 使用IHRC,1分频,最大计数值是32768*/
$ T16M IHRC,/1,BIT15;
}
/*启动定时器*/
void ResetTmr16(void)
{
usTmrCnt=0;
/*设置初始值*/
STT16 usTmrCnt;
}
/*取得定时器值*/
void GetTmr16Dat(void)
{
/*取得计数值*/
LDT16 usTmrCnt;
}
/*相应于main函数*/
void FPPA0 (void)
{
/*系统时钟为 IHRC默认为16M,因此,IHRC/2=8M*/
.ADJUST_IC SYSCLK=IHRC/2
/*初始*/
TIME16_Init();
usTmrCnt=0;
while (1)
{
/*启动定时器*/
ResetTmr16();
/*标准测试*/
.delay 1000;
GetTmr16Dat();
/*设置断点,查看周期数,标准应该是2000 IHRC时钟周期*/
.delay 1;
/*启动定时器*/
ResetTmr16();
mul_y1=10;
mul_x1=78;
Byte_Mul_Byte();
/*查看结果*/
usDat=mul_t2;
GetTmr16Dat();
/*设置断点,查看周期数,大概190 IHRC时钟周期*/
.delay 1;
}
}