打印

用单片机写个程序出现异常,请帮忙查看出错原因,谢谢

[复制链接]
1415|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
piaoyiliu03|  楼主 | 2015-8-16 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我测试1S延时程序没有问题,但是我想做成1min延时程序确异常,请帮忙查看下我的程序哪里出错呢?谢谢!
现象就是灯一直不亮

#include<reg52.h>
sbit LED=P1^0;
void main()
{
  unsigned char i=0;// 一分钟程序我已经改成了unsigned int i=0;
  TMOD=0x01;
  TH0=0xB8;
  TL0=0x00;
  TR0=1;
  while(1)
  {
    if(TF0==1)
{
  TF0=0;
  TL0=0x00;
  TH0=0xb8;// 这样设置是0.02s
  i++;
  if(i>=50)  //一分钟就是if(i>=3000)
  {
   i=0;
   LED=~LED;
  }
}
  }
}

相关帖子

沙发
xuyaqi| | 2015-8-16 16:35 | 只看该作者
TF0==1处理要在中断里进行

使用特权

评论回复
板凳
105224647| | 2015-8-16 18:00 | 只看该作者
:(  定时器中断认识不够,好好看看。

使用特权

评论回复
地板
oldzhang| | 2015-8-16 18:30 | 只看该作者
本帖最后由 oldzhang 于 2015-8-17 09:10 编辑

程序没有错,是1mS延时,是定时器查询方式的程序,没有任何问题,问题出在1mS灯亮,1mS灯灭,你用什么方法检验灯亮了没有
,用眼睛吗,你能分清500khz的亮和灭吗?
实际上灯已经亮灭了,你检验不出来而已。
你用手捂住灯看,亮度小而已。你把i的值由3000逐渐改小,看灯的闪亮,i值小到一定时候,闪亮速度太快,人的眼睛就分不清亮灭了。
unsigned int i ;不用改类型,逐渐由3000,2000,1000,800,600,500,200,100,50,你试试。

使用特权

评论回复
5
datouyuan| | 2015-8-17 11:15 | 只看该作者
程序没有错

使用特权

评论回复
6
刘东君| | 2015-8-17 15:46 | 只看该作者
你加上一句LED=0;在前面,应该可以了吧,你的LED是1S中闪烁一次,还是多少时间? 会不会时间太短了,看不出来

使用特权

评论回复
7
piaoyiliu03|  楼主 | 2015-8-17 21:51 | 只看该作者
oldzhang 发表于 2015-8-16 18:30
程序没有错,是1mS延时,是定时器查询方式的程序,没有任何问题,问题出在1mS灯亮,1mS灯灭,你用什么方法 ...

您好,非常感谢您的关注,但是我说了,我1S测试是没有问题的,就是1min的程序异常呀。

使用特权

评论回复
8
piaoyiliu03|  楼主 | 2015-8-17 21:51 | 只看该作者
刘东君 发表于 2015-8-17 15:46
你加上一句LED=0;在前面,应该可以了吧,你的LED是1S中闪烁一次,还是多少时间? 会不会时间太短了,看不出 ...

这样没有用的呀

使用特权

评论回复
9
piaoyiliu03|  楼主 | 2015-8-17 21:52 | 只看该作者
刘东君 发表于 2015-8-17 15:46
你加上一句LED=0;在前面,应该可以了吧,你的LED是1S中闪烁一次,还是多少时间? 会不会时间太短了,看不出 ...

我由1S设置1分钟了呀,时间肯定更长呀!

使用特权

评论回复
10
piaoyiliu03|  楼主 | 2015-8-17 22:06 | 只看该作者
我测试5S也没有问题呀

使用特权

评论回复
11
piaoyiliu03|  楼主 | 2015-8-17 22:15 | 只看该作者
这个程序是OK的,是我烧录程序烧错了呀,今天重新烧了下就OK ,呵呵,不好意思打扰了呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

173

主题

452

帖子

4

粉丝