2714|5

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用T0定时器写来回流水灯,但为何只持续点亮一盏灯 [复制链接]

用T0定时器写来回流水灯,但却只亮了一盏灯,不会流水,不知道是什么问题,帮忙分析下,看看哪个地方出错了。

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
	uint x;
	char tmp;
void delayms();
void main()
{
	uint i;
	tmp=0x7f;
	P2=tmp;
	delayms();
	while(1)
	{
		for(i=0;i<7;i++)
		{
			tmp=_cror_(tmp,1);
			P2=tmp;
			delayms();
		}
		for(i=7;i>0;i--)
		{
			tmp=_crol_(tmp,1);
			P2=tmp;
			delayms();
		}
	}
}

void delayms()
{
	TMOD=0x01;
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	EA=1;
	ET0=1;
	TR0=1;
	while(1);
}

void time() interrupt 1
{
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;
	x++;
	if(x==20)
	{
		x=0;
	}
}

 

此帖出自51单片机论坛

最新回复

中不中断都跳不出去啊,当然后面不执行了。   详情 回复 发表于 2020-7-15 15:41
点赞 关注
 

回复
举报

785

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

delayms()  里面加whie(1); 还能干啥

此帖出自51单片机论坛
 
个人签名我从不担心我努力了不优秀,只担心优秀的人都比我更努力。如果你无法忍受孤独,就不要追逐梦想。每一个优秀的人,都有一段沉默的时光。在那一段时光,你付出了很多努力,忍受孤独和寂寞,不抱怨不诉苦,最后渡过了这
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
swustlx86 发表于 2020-4-11 12:14 delayms()  里面加whie(1); 还能干啥

delayms()里面加while(1),是等中断的。现在是中断好像并没有起到作用

此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

4
 

中断完了又如何啊,你这个程序还是在delayms()里面死循环啊。。。。而且中断函数里面啥也不干。。。

  • uint i;
  • tmp=0x7f;
  • P2=tmp;
  • delayms();
  • 执行了1个P2输出,后面就进入delayms的死循环了,好歹你在while里面整个条件判断,满足几时要求了就跳出循环
此帖出自51单片机论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

5
 

你这是把中断和延时写在一起混用了,而且。中断或者延时里面不能出现while(1),等于你程序走到卡死了。不要后边delayms和中断(事实上你的中断也没有运行起来,后边两个函数没用),直接写一个延时1S的delay()函数,

此帖出自51单片机论坛
 
 
 

回复

7504

帖子

2

TA的资源

五彩晶圆(高级)

6
 

中不中断都跳不出去啊,当然后面不执行了。

此帖出自51单片机论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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