vb2002 发表于 2024-12-14 21:09:35

VCC 发表于 2024-11-29 17:41
根据你的思路,这样可以做到让你的灯每50ms切换一次。




void qufj(void)
{
u8 count12;       
bit ser;       
if(TF0==1)
{
count12++;
//TF0=0;       

if(count12>=7)
        {
        ser=!ser;
        led=ser;
        count12=0;
        }
    }
}


void Timer0_Isr(void) interrupt 1
{

TF0=1;
TF0=0;
}

vb2002 发表于 2024-12-14 21:26:04

VCC 发表于 2024-11-29 17:41
根据你的思路,这样可以做到让你的灯每50ms切换一次。




<p>想到个我个人认为更好的办法了</p>
<p>直接在中断里面加一个nop就可以了.定时器自动TF0置1,然后自动清零</p>
<p>void qufj(void)<br />
{<br />
u8 count12;<br />
bit ser;<br />
if(TF0==1)<br />
{<br />
count12++;</p>
<p>if(count12&gt;=7)<br />
{<br />
ser=!ser;<br />
led=ser;<br />
count12=0;<br />
}<br />
}<br />
}</p>
<p>void Timer0_Isr(void) interrupt 1<br />
{</p>
<p><em><em>nop</em>();</em><br />
}</p>

VCC 发表于 2024-12-14 21:38:41

vb2002 发表于 2024-12-14 21:26
想到个我个人认为更好的办法了
直接在中断里面加一个nop就可以了.定时器自动TF0置1,然后自动清零
void...

那为什么不直接加一个return

vb2002 发表于 2024-12-14 22:09:52

VCC 发表于 2024-12-14 21:38
那为什么不直接加一个return

怎么说?
还有更好的办法?
在哪里加return

vb2002 发表于 2024-12-14 22:10:10

VCC 发表于 2024-12-14 21:38
那为什么不直接加一个return

我试了.加nop时间不准

VCC 发表于 2024-12-14 22:21:26

vb2002 发表于 2024-12-14 22:09
怎么说?
还有更好的办法?
在哪里加return
这个NOP替换成return{:4_183:}

感觉应该是等效的

vb2002 发表于 2024-12-14 22:25:11

VCC 发表于 2024-12-14 22:21
这个NOP替换成return

感觉应该是等效的

不准时.还是这样比较准时, 有啥副作用吗? 和flag标志位相比
void qufj(void)
{
u8 count;       
bit ser;       

        if(TF0)
        {
        count++;       
        TF0=0;

       
        }
        if(count>=20)
                {       
        UartSend(count);
        ser=!ser;
        led=ser;
        count=0;
                }

}
void Timer0_Isr(void) interrupt 1
{
//        _nop_();
TF0=1;
}
页: 1 [2]
查看完整版本: 定时器