7081|16

72

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

我用定时器做的流水灯为什么起不到延时效果 [复制链接]

 
      各位大师好,本人刚学单片机,本想用定时器做个流水灯,但却没有流水效果,程序烧进去后,灯是全亮的。不知道定时延时有问题还是自减循环有问题,请各位大师指点迷津,感谢!!
      以下是我写程序
#include
void TO_chushihua()
{
TMOD=0x01;  
TH0=0;
TL0=0;

ET0=1;
TR0=1;
EA=1;
}
void main()
{
unsigned char i=255;
while(1)
{
   P1=i;
  TO_chushihua();
  i--;
}
}
此帖出自51单片机论坛

最新回复

比我第一个程序还糟糕  详情 回复 发表于 2016-2-13 22:52
点赞 关注
 

回复
举报

168

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
请仔细看定时器的说明,看人家的程序结构和思路。
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 
这个程序你没有仔细看吧,while中不停初始化,也没有控制LED的代码,这样什么功能也实现不了。
此帖出自51单片机论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

4
 
硕果累累 发表于 2015-12-3 21:45
请仔细看定时器的说明,看人家的程序结构和思路。

是一定要加interrupt 1说明吗?
此帖出自51单片机论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

5
 
dcexpert 发表于 2015-12-3 22:11
这个程序你没有仔细看吧,while中不停初始化,也没有控制LED的代码,这样什么功能也实现不了。

可我后面紧跟了一个i--啊,应该是while中三句不停循环啊
此帖出自51单片机论坛

点评

1.TO_chushihua()函数没有延时左右。 2.P1=1--的确可以改变输出,但是速度太快,就看不到效果,需要加一个延时函数。  详情 回复 发表于 2015-12-4 09:22
 
 
 

回复

366

帖子

1

TA的资源

一粒金砂(高级)

6
 
初始化一次就够了,初始化的函数放到while前面,另外你的程序没提到LED啊
此帖出自51单片机论坛
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

7
 
看楼主的意思,P1口输出连接的是几个led,想让产生流水效果,应该是在中断处理函数中改变P1的输出,控制i自减1。初始化定时器在main中执行一次即可,后面的无限循环可以什么都不干。你的程序中,定时器的延时作用没有起,在主函数中一直被初始化,顺序执行的那几条指令的延时太短,led也在流水点亮,只是人眼反应不过来。
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

25

TA的资源

版主

8
 
16816 发表于 2015-12-3 22:23
可我后面紧跟了一个i--啊,应该是while中三句不停循环啊

1.TO_chushihua()函数没有延时左右。
2.P1=1--的确可以改变输出,但是速度太快,就看不到效果,需要加一个延时函数。
此帖出自51单片机论坛
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

9
 
看来什么程序都会有啊,一点都不严谨的思路,就一个流水灯,又是定时器又想延时,基础不好啊,首先,初始化的部分不能让CPU一直干,如果一直都在弄初始化,程序就像是没有启动过。既然用定时器,就别用延时了,中断时间到了改变下P1的输出状态不就行了,
此帖出自51单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

10
 
建议楼主仔细看下51的定时器是这么用的吗?如果不知道的话,看看郭天祥的那本书中怎么用
此帖出自51单片机论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

11
 
dcexpert 发表于 2015-12-4 09:22
1.TO_chushihua()函数没有延时左右。
2.P1=1--的确可以改变输出,但是速度太快,就看不到效果,需要加一 ...

懂了,谢谢!!
此帖出自51单片机论坛
 
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

12
 
TO_chushihua();很明显是初始化,既然是初始化只要执行一次就够了,就不要放while(1)里了,而且你配了定时器,又不写中断入口,就是你说的interrupt 1,你这个东西不写,你配定时器配了干嘛呢,你这个程序只会一直在while(1)里跑,你的本意应该是想定时去减i,减i的工作应该在中断里做,很明显你没有写中断。
你应该还没有弄清延时和定时器的区别,可能你延时也没理解的很明白,定时器需要花点时间去理解的,好好看看书。定时器是非常重要的,和你认为的延时完全是两码事
此帖出自51单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

13
 
前面的坛友,说得差不多了。初始化,和延时的使用。另外,即使加了延时,也不是流水灯吧。IO直接连的led的话。不是依次变亮或熄灭。
此帖出自51单片机论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(中级)

14
 
TO_chushihua()不是软延时函数,在这里起到的延时作用有限,相当与几个nop()而已,肉眼是看不到延时效果的;把它放到while循环外面去,i--放到中断函数中去。或者把TO_chushihua()写成软延时函数不使用定时器中断,i--位置不变。
此帖出自51单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

15
 
我给你写了个:
#include
unsigned char i=255;
void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x0D8;
    TL0 = 0x0F0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void main(void)
{
    InitTimer0();
   while(1)
    P1=i;
}

void Timer0Interrupt(void) interrupt 1
{
    i--;
    TH0 = 0x0D8;
    TL0 = 0x0F0;
   
}
此帖出自51单片机论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

16
 
霹雳十 发表于 2016-2-10 22:01
我给你写了个:
#include
unsigned char i=255;
void InitTimer0(void)
{
    TMOD = 0x01;
    T ...

这个问题我后来研究了很久,已经解决了,非常感谢!!
此帖出自51单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

17
 
比我第一个程序还糟糕
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表