DHBT2023 发表于 2024-9-24 21:50:14

       if(weight < g_w)
                  {                      //if(B_2ms == 1)        { B_2ms = 0;        zt++;        }       
                                                       // if(zt==5)
                      delayms(10); P20=1;
                  }
这次P20=1;动作了。

DHBT2023 发表于 2024-9-24 21:51:33

是定时器没有打开?
void Timer0_Init(void)                                //2毫秒@24.000MHz
{
        AUXR |= 0x80;                                                                //定时器时钟1T模式
        TMOD &= 0xF0;                                                                //设置定时器模式
        TL0 = 0x80;                                                                        //设置定时初始值
        TH0 = 0x44;                                                                        //设置定时初始值
        TF0 = 0;                                                                                //清除TF0标志
        TR0 = 1;                                                                                //定时器0开始计数
        ET0 = 1;                                                                                //使能定时器0中断
        EA = 1;
//IP=0X02;
        //IPH=0X02;
}

DHBT2023 发表于 2024-9-24 21:52:22

还是这个写法不好用?
void Timer0_Isr(void) interrupt 1
{
        B_2ms = 1;                                                                       
}

DHBT2023 发表于 2024-9-24 21:53:00

我不想用 delayms(10);

DHBT2023 发表于 2024-9-24 21:53:59

delayms()超过20ms 595就会闪、

DHBT2023 发表于 2024-9-24 21:56:18

王昱顺 发表于 2024-9-24 21:42
编译正确≠逻辑正确
你的初始化看样子是每次都在执行,这样是无法做到定时功能的。
定时器初始化执行一次 ...

谢谢

DHBT2023 发表于 2024-9-24 21:57:28

王昱顺 发表于 2024-9-24 21:42
编译正确≠逻辑正确
你的初始化看样子是每次都在执行,这样是无法做到定时功能的。
定时器初始化执行一次 ...

定时器中断输出后,怎么关闭定时器?

soma 发表于 2024-9-24 21:58:29

Timer0_Init()在if后就一直开启没有停止,B_2ms一直为1.

DHBT2023 发表于 2024-9-24 21:58:36

我个人感觉就是定时器没有打开。或者还在上一次定时中,而无法正确定时

晓飛飛 发表于 2024-9-24 22:11:05

你可以否描述下期望实现的功能,这里有很多人可以给你更好的解决方案,停留在自己的思维世界里拔不出来不利于解决问题,或者看看书,适当的放松一下更好。
页: 1 [2] 3
查看完整版本: 定时器问题?