关于同一个位无法同时操作的问题
void timer0_isr() interrupt 1{
if(flagt && ++ countt == 20)
{
countt = 0;
flagt = 0;
keyPadData &=~ 0x08;
flag2 = 1;
}
if(flag2 && ++count2 == 40)
{
count2 = 0;
flag2 = 0;
keyPadData |= 0x08;
}
if(flag17t && ++ count17t == 20)
{
count17t = 0;
flag17t = 0;
keyPadData &=~ 0x08;
flag172 = 1;
}
if(flag172 && ++count172 == 40)
{
count172 = 0;
flag172 = 0;
keyPadData |= 0x08;
}
}
如果flag2flag172 几乎同时成立,keyPadData;只能写一次,有什么办法执行两次吗
在定时中断中判断,只要条件成立就可以执行两次的
if(flag2 && ++count2 == 40)
if(flag172 && ++count172 == 40) 21cnsound 发表于 2024-3-29 10:41
在定时中断中判断,只要条件成立就可以执行两次的
if(flag2 && ++count2 == 40)
if(flag172 && ++count17 ...
谢谢您,问题是当第一次keyPadData = 0x08;的时候第二次keyPadData = 0x08;就不能执行了,也可能执行了但是没变化,我想让他们错开执行,或者排队等待忙,或者条件保存下来后一个一个执行那种
爱吃西红柿 发表于 2024-3-29 11:18
谢谢您,问题是当第一次keyPadData = 0x08;的时候第二次keyPadData = 0x08;就不能执行了,也可能执 ...
keyPadData=0xXX#这是RAM变量操作,连续操作多少次都没问题,怎么可能第二次不能执行? 感觉你的++count?有点乱呢 21cnsound 发表于 2024-3-29 11:22
keyPadData=0xXX#这是RAM变量操作,连续操作多少次都没问题,怎么可能第二次不能执行? ...
第一次第二次间隔很短 几乎同时写入, 如果keyPadData的其他位没有用就错开
一个用0x08,另一个用0x04或0x10
页:
[1]