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

[复制链接]
1731|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,你试试。
datouyuan 发表于 2015-8-17 11:15 | 显示全部楼层
程序没有错
刘东君 发表于 2015-8-17 15:46 | 显示全部楼层
你加上一句LED=0;在前面,应该可以了吧,你的LED是1S中闪烁一次,还是多少时间? 会不会时间太短了,看不出来
 楼主| piaoyiliu03 发表于 2015-8-17 21:51 | 显示全部楼层
oldzhang 发表于 2015-8-16 18:30
程序没有错,是1mS延时,是定时器查询方式的程序,没有任何问题,问题出在1mS灯亮,1mS灯灭,你用什么方法 ...

您好,非常感谢您的关注,但是我说了,我1S测试是没有问题的,就是1min的程序异常呀。
 楼主| piaoyiliu03 发表于 2015-8-17 21:51 | 显示全部楼层
刘东君 发表于 2015-8-17 15:46
你加上一句LED=0;在前面,应该可以了吧,你的LED是1S中闪烁一次,还是多少时间? 会不会时间太短了,看不出 ...

这样没有用的呀
 楼主| piaoyiliu03 发表于 2015-8-17 21:52 | 显示全部楼层
刘东君 发表于 2015-8-17 15:46
你加上一句LED=0;在前面,应该可以了吧,你的LED是1S中闪烁一次,还是多少时间? 会不会时间太短了,看不出 ...

我由1S设置1分钟了呀,时间肯定更长呀!
 楼主| piaoyiliu03 发表于 2015-8-17 22:06 | 显示全部楼层
我测试5S也没有问题呀
 楼主| piaoyiliu03 发表于 2015-8-17 22:15 | 显示全部楼层
这个程序是OK的,是我烧录程序烧错了呀,今天重新烧了下就OK ,呵呵,不好意思打扰了呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

455

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部