标题:
51单片机双字节赋值问题
[打印本页]
作者:
xsyyhz
时间:
2018-6-9 14:04
标题:
51单片机双字节赋值问题
数据类型
typedef struct
{
void (*pTask)(void);
INT16U delay_tick;
INT16U period_tick;
INT8U RunMe;
}SCHTask_Typedef;
具体函数
void SCH_Update(void)
{
INT8U Index;
for (Index = 0; Index < SCH_MAX_TASKS; Index++)
{
if (SCH_tasks[Index].pTask)
{
if (SCH_tasks[Index].delay_tick == 0)
{
SCH_tasks[Index].RunMe += 1; // Inc. the 'Run Me' flag
if (SCH_tasks[Index].period_tick)
{
SCH_tasks[Index].delay_tick = SCH_tasks[Index].period_tick;
//问题:
period_tick = 0x03e8 但赋值后
delay_tick = 0x00e8
}
}
else
{
SCH_tasks[Index].delay_tick -= 1;
}
}
}
}
问题:
上面红色部分出现问题:
delay_tick 是led闪烁周期,赋值后led闪烁不是指定的1000ms 而是200ms左右,通过keil模拟仿真发现
delay_tick
赋值后实际是232ms与实际led闪烁周期相符。
实验1:
在SCH_Update函数里建立
局部变量
INT16U temp ,作为中间变量,赋值代码改为
temp = SCH_tasks[Index].period_tick;
SCH_tasks[Index].delay_tick = temp ;
结果:仿真结果delay_tick = 0x00e8,实际led闪烁也差不多
实验2:
在SCH_Update函数外建立
全局变量
INT16U temp ,作为中间变量,赋值代码改为
temp = SCH_tasks[Index].period_tick;
SCH_tasks[Index].delay_tick = temp ;
结果:仿真结果delay_tick = 0x03e8,实际led闪烁1s一次
实验3:
直接给delay_tick 赋值 1000
SCH_tasks[Index].delay_tick = 1000;
结果:仿真结果delay_tick = 0x03e8,实际led闪烁1s一次
请大神指点
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1