烽火社区

标题: C51中断里unsigned int不能用? [打印本页]

作者: sjh.123    时间: 2015-1-26 04:04 AM
同意楼上的观点,你看一下程序的逻辑是否正确,是否死锁,还有要定义成全局变量……                                                                                                                                                                       
作者: vincentve    时间: 2015-3-18 12:52 PM
你的数组是存RAM里还是存ROM里啊?                                                                                                                                                                       
作者: 梦红尘    时间: 2015-8-29 02:02 AM
在哪声明的,是否内存溢出了?或者是在8位区内存申请了16位的RAM,建议在XDATA中申请                                                                                                                                                                       
作者: cccmc小可哥    时间: 2015-8-29 03:05 AM
你试试把你的累加的数据NUM放到ROM里面,也就是 unsigned int code num=0;                                                                                                                                                                       
作者: leftenvoy    时间: 2015-10-27 11:13 AM
这种问题我也遇到过,51用unsigned char是正确的,因为就是8位的处理器。如果换成unsigned int,编译器不会报错,但是运行到那一步就会重启,这是编译器的问题。你要是非得用大于255的Num。建议你定义两个unsigned char,然后手动去定义他们之间的高低关系。不要信任编译器。                                                                                                                                                                       
作者: betbet    时间: 2015-10-27 01:05 PM
同意楼上的                                                                                                                                                                       
作者: xzz88    时间: 2015-10-27 03:54 PM
和中断无关,你内存太小了
51也敢开这么大的数组
作者: leftenvoy    时间: 2015-10-27 04:14 PM
你怎么知道死机了?                                                                                                                                                                       
作者: 梦红尘    时间: 2015-10-27 04:48 PM
对楼主的风格表示眼睛花

中断里干的活要越少越好
作者: betbet    时间: 2015-10-27 05:35 PM
中断里面处理的事情太多很容易造成中断的嵌套,结果导致堆栈溢出,程序跑飞。                                                                                                                                                                       
作者: leftenvoy    时间: 2015-10-27 07:20 PM
我认为应该是堆栈溢出的问题吧,前些天做的一个项目就是这个样子的,51的RAM有限呀,一定要注意喽                                                                                                                                                                       
作者: chenghuitong    时间: 2015-12-1 11:54 AM
标题: C51中断里unsigned int不能用?
用了一款STC的单片机,在定时器中断0里面有个数组的下标要累加,一开我定义为unsigned char Num;能够正常运转,现在由于数组变大,下标超过了255,我就定义为unsigned int Num;但是程序一运算Num++; 就死机了...

void timer0() interrupt 1
{
if(m_flag)
{
TH0 = Timer_speed[1]/256;
TL0 = Timer_speed[1]%256;
CK = 1;
m_flag = 0;
}
else
{
TH0 = Timer_speed[1]/256;
TL0 = Timer_speed[1]%256;
CK = 0;
m_flag = 1;

//----------------------------------------------------------------------
if(UP_flag) //加速部分
{
if(Speed_Count==0)
{
Speed_Count = Speed_Step; //每个定时器速度运算Speed_Step次
Timer_speed[1] = T1_time[T1_Num];//赋值定时器值
T1_Num++;
if(T1_Num>=500) //到达预定速度
{
UP_flag = False; //加速标志去除,进入匀速
UP_Count = 0;
T1_Num--;
}
UP_Count++;
if(UP_Count>=UP_Rate) //速度等级判断,当要求较慢速度时的调节
{
UP_flag = False;
UP_Count = 0;
T1_Num--;
}
}
}
Speed_Count--;
}
if(Down_flag&&(UP_flag==0)) //减速部分
{
if(Speed_Count==0)
{
Speed_Count = Speed_Step;
Timer_speed[1] = T1_time[T1_Num];
T1_Num--;
if((T1_Num<=1)||(Timer_speed[1]<=Timer_speed[0]))
{
Timer_speed[1] = Timer_speed[0]; //[0]是串口数据发来的速度的最低限制
Down_flag = False;
}
}
Speed_Count--;

}
if(Motor_Count {
Down_flag = True;
UP_flag = False;
}
Motor_Count--;
Motor_Count0--;
if(Motor_Count0==0)Motor_Stop();//电机停止初始值复位
}
程序有点长:具体意思就是一个步进电机的加速,匀速,减速,到停止
作者: wyf100    时间: 2015-12-27 11:19 AM
不是吧
跟中断,INT类型 没关系吧
重建个工程看看




欢迎光临 烽火社区 (http://bbs.cnecport.com/) Powered by Discuz! X3.2