在线时间2 小时
UID30805
注册时间2008-1-29
NXP金币0
该用户从未签到
注册会员

- 积分
- 59
- 最后登录
- 2023-9-18
|

楼主 |
发表于 2010-11-26 18:19:59
|
显示全部楼层
回复:用MC9RS08KA8,我一共才40个变量,怎么不让再加了呢?
这个单片机没有中断,所以PRM文件中
STACKSIZE 0x00 /* no stack for RS08 */
剩下的是不是就是我的函数里面的长整形算法。下面是其中一个函数的例子(为方便看,我删了部分与运算无用的程序),我用的局部变量并不多呀,难道一个长整形运算占将近200个变量吧。
void getPotAD(void){
byte tempData,tempByte,tempMinV;
word tempWord;
dword tempDword;
byte PWMAD;
ADCSC1_ADCH = POT_ADCHANNEL; //打开通道并开始转换
while(ADCSC1_COCO==0){;} //等待(加快采样速度,牺牲其它程序时间)9.6uS(转换时间)
PotCurrAD = ADCRL; //电位器当前位置AD值
//计算出POT当前角度和行程输出PWMAD
//计算POT当前角度PotCurrAngle和当前行程--start--
tempData = tempData-EE_POTMinAD;
tempByte = EE_POTMaxAD-EE_POTMinAD;
tempDword = (dword)tempData*EE_POTMaxAngle/tempByte;
PotCurrAngle = (word)tempDword; //得出POT转过的角度
CurrTravelx10 = LinTanPotDegreeToTravelx10[PotCurrAngle]; //查Tan表,得到当前行程
//--over--以上耗时CPU-Cycles: 约14512 cycles
if(EquPercent_F){ //----------等百设置----------
//计算行程mm的百分比--start--
tempDword = (dword)CurrTravelx10*5000;
tempDword /= EE_MaxTravelx10;
EquPerTravelRatex500 = (word)tempDword;
EquPerTravelRatex500 = (EquPerTravelRatex500+5)/10; //四舍五入
//从Per_EquPertoPer_VinAD表查出线性电压开度%x255
EPtoLinVinADRatex255 = Per_EquPertoPer_VinAD[EquPerTravelRatex500];
//计算出POT当前行程时PWM-AD值
tempData = PWM_MAXAD-tempMinV;
tempWord = (word)EPtoLinVinADRatex255*tempData;
tempWord /= 255;
PWMAD = (byte)tempWord;
PWMAD += tempMinV;
//--over--以上耗时CPU-Cycles: 约16799 cycles
}
//PWM脉冲输出
TPMC0V = PWMAD ;
} |
|