如果延时程序这样写 对不对???

2019-07-16 00:50发布

void delay(uint z)
{
        uint x;
        TMOD=0x01;//T0选择工作方式一,16位定时器
        TR0=0;//T0关
        for(x=z;x>0;x--)
        {
           TH0=(65536-55536)/256;
           TL0=(65536-55536)%256;//定时10ms
           TR0=1;//T0开       
        }
}

我是这样考虑的,用定时器T0的工作方式一,定时10ms。

用for语句的循环功能,对其循环控制。

z等于几,就是循环几次,也就是说延时几个10ms。

如果不满足for中的表达式2,则进入语句,进行动作,然后再求解表达式3.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
liuyuankun
1楼-- · 2019-07-16 01:45
这种方式感觉不是很好
wyb0104
2楼-- · 2019-07-16 05:14
 精彩回答 2  元偷偷看……
爱﹏奔跑
3楼-- · 2019-07-16 08:15
wyb0104 发表于 2013-5-7 19:16
不对吧,你中断允许都没打开
而且单片机只识别中断号的
你这样写中断号在哪? ...

这个我就没有用中断,就是用定时器。

比较常见  用中断给定时器重新赋值  

这个程序我想的是  进入一次循环 重新赋值一次
爱﹏奔跑
4楼-- · 2019-07-16 09:32
liuyuankun 发表于 2013-5-7 18:49
这种方式感觉不是很好

能不能指点一下什么地方不好?
一头不醒的猪
5楼-- · 2019-07-16 15:31
定时器写错了,而且你是延时55536的时间。间的数才是延时的时间,比如这个就是延时50毫秒
        TMOD=0x11;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;

爱﹏奔跑
6楼-- · 2019-07-16 20:14
一头不醒的猪 发表于 2013-5-7 21:15
定时器写错了,而且你是延时55536的时间。间的数才是延时的时间,比如这个就是延时50毫秒
        TMOD=0x11;
        TH0 ...


void delay(uint z)
{
        uint x;
        TMOD=0x01;//T0选择工作方式一,16位定时器
        TR0=0;//T0关
        for(x=z;x>0;x--)
        {
           TH0=(65536-55536)/256;
           TL0=(65536-55536)%256;//定时10ms
           TR0=1;//T0开        
        }
}

这个程序里的定时器  我设定的时间是10毫秒

加上一个for循环

如果z=5,然后这个delay(5);就延时50毫秒。

这个跟中断开不开没关系吧, 不知道这样对不对???

用定时器了,中断必须开么?

一周热门 更多>