爱吃西红柿 发表于 2024-3-29 10:35:02

关于同一个位无法同时操作的问题

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;只能写一次,有什么办法执行两次吗

21cnsound 发表于 2024-3-29 10:41:23

在定时中断中判断,只要条件成立就可以执行两次的
if(flag2 && ++count2 == 40)
if(flag172 && ++count172 == 40)

爱吃西红柿 发表于 2024-3-29 11:18:32

21cnsound 发表于 2024-3-29 10:41
在定时中断中判断,只要条件成立就可以执行两次的
if(flag2 && ++count2 == 40)
if(flag172 && ++count17 ...
谢谢您,问题是当第一次keyPadData = 0x08;的时候第二次keyPadData = 0x08;就不能执行了,也可能执行了但是没变化,我想让他们错开执行,或者排队等待忙,或者条件保存下来后一个一个执行那种

21cnsound 发表于 2024-3-29 11:22:45

爱吃西红柿 发表于 2024-3-29 11:18
谢谢您,问题是当第一次keyPadData = 0x08;的时候第二次keyPadData = 0x08;就不能执行了,也可能执 ...

keyPadData=0xXX#这是RAM变量操作,连续操作多少次都没问题,怎么可能第二次不能执行?

jwd 发表于 2024-3-29 11:26:19

感觉你的++count?有点乱呢

爱吃西红柿 发表于 2024-4-1 09:14:03

21cnsound 发表于 2024-3-29 11:22
keyPadData=0xXX#这是RAM变量操作,连续操作多少次都没问题,怎么可能第二次不能执行? ...

第一次第二次间隔很短 几乎同时写入,

Lkck8210 发表于 2024-4-2 17:57:48

如果keyPadData的其他位没有用就错开
一个用0x08,另一个用0x04或0x10
页: [1]
查看完整版本: 关于同一个位无法同时操作的问题