我测试手册例程16位乘以16位取32位结果只需要3.75us@11.0592MHz,可以发下您的测试程序吗?
- #include <STC8H.H>
- #include <def.H>
- #include <stdio.H>
- void Delay10us(void) //@11.0592MHz
- {
- unsigned char data i;
-
- i = 35;
- while (--i);
- }
-
- void main()
- {
-
- ////////////////////////////////////////////////////////////////////////////////
- //16 位乘 16 位
- ////////////////////////////////////////////////////////////////////////////////
- unsigned long res;
- unsigned int dat1, dat2;
- P_SW2 |= 0x80;
-
- P2M1 = 0; P2M0 = 0; //设置为准双向口
- P20 = 1;
- Delay10us();
- P20 = 0;
- Delay10us();
- P20 = 1;
- //访问扩展寄存器 xsfr
- MD1 = dat1;
- //dat1 用户给定
- MD5 = dat2;
- //dat2 用户给定
- ARCON = 4 << 5;
- //16 位*16 位,乘法模式
- OPCON = 1;
- //启动计算
- while((OPCON & 1) != 0);
- //等待计算完成
- res = MD3;
- P20 = 0;
- //32 位结果
- //////////////////////////////////////////////////////////////////////////////////
- ////32 位除以 16 位
- //////////////////////////////////////////////////////////////////////////////////
- //unsigned long res;
- //unsigned long dat1;
- //unsigned int dat2;
-
- ////访问扩展寄存器 xsfr
- //MD3U32 = dat1;
- ////dat1 用户给定
- //MD5U16 = data2;
- ////dat2 用户给定
- //ARCON = 6 << 5;
- ////32 位/16 位,除法模式
- //OPCON = 1;
- ////启动计算
- //while((OPCON & 1) != 0);
- ////等待计算完成
- //res = MD3U32;
- ////32 位商,16 位余数在 MD5U16 中
- //////////////////////////////////////////////////////////////////////////////////
- ////左移或右移:
- //////////////////////////////////////////////////////////////////////////////////
- //unsigned long res;
- //unsigned long dat1;
- //unsigned char num;
- ////移位的位数, 用户给定
- //MD3U32 = dat1;
- ////dat1 用户给定
- //ARCON = (2 << 5) + num;
- ////32 位左移模式
- ////ARCON = (1 << 5) + num;
- ////32 位右移模式
- //OPCON = 1;
- ////启动计算
- //while((OPCON & 1) != 0);
- ////等待计算完成
- //res = MD3U32;
- ////32 位结果
- while(1);
-
- }
复制代码
|