烽火社区
标题:
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