单片机怎么用定时器替代延时函数?

单片机怎么用定时器替代延时函数?,第1张

1、首先分析您的程序,

void

delay()

{

int

i

if(1

==

tf0)//if(tf0==1),查询定时模哪族器溢出标志位

{

tf0=0

i=10000//定时溢出时给i赋值1000

th0=0xdctl0=0x00

i--//i=999,如果还没有减到0时定时器又溢出,则i永远不会减到0!!!!所旦弊以您的这段程序不应该行不通!!

}

while(1)

{

if(i==0)

break

}

}

2、建议做法

(1)定义一个全缓知局变量用于作定时计数如unsigned

char

n

(2)定时器采用以某一时间基准(10ms)中断方式,每中断一次中断处理程序里n++;

(3)在延时函数中对n进行 *** 作,如延时1s即1000ms则:

void

delay_1s()

{

while(n<100)//如果n<100,即还没有到1s就等待

n=0;如果1s时间到则清零n,退出子程序

}

当然这样定时精度可能需要调整,但思路可以试试。

//初始化函数:用于初始化各种参乱氏神数

void init() {

TMOD = 0x01//设置定时器0,GATE = 0, C/T = 0 , M1M0 = 01(方式1,16位定时器/计数器)

//赋初值

TH0 = THx

TL0 = TLx

EA = 1//中断总闸·开!

ET0 = 1//定时器0中核答断·开!

TR0 = 1//定时器0·运行!

}

//定时器0的中断函数:由定时器中断自动调用,你只需要写好中哗亏断后要怎么处理就好

void timeInt_T0 () interrupt 1 {

//每中断一次都要重新赋初值

TH0 = THx

TL0 = TLx

//记够20次中断后,刷新显示

if(++counter == 20)

refresh()

}

呵呵,还真是有点轿嫌颤麻烦.

偶给您一个办法可以快速的替换掉.因为双斜杠是注释的意思,不执行后面的命令.如下:

查找内容 Delay

替换为者圆 Delay ys //

选择全部替换即可.在脚本里用源文件方闭败式或者把脚本全弄到记事本里替换完了再弄回来.

加点分?嘿嘿.希望可以帮到您.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12346998.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存