请选择 进入手机版 | 继续访问电脑版
查看: 648|回复: 17

51单片机用定时器实现小灯0.1s闪烁

[复制链接]

2

主题

32

帖子

100

积分

勇闯江湖

Rank: 2

积分
100
 楼主| 发表于 2019-3-2 17:47:26 | 显示全部楼层 |阅读模式
我的程序如下
  1. #include "stc12c5a60s2.h"
  2. void main()
  3. {
  4.         unsigned char cnt = 0;
  5.         P11=0;
  6.         P2=0x06;
  7.         P0=0x7F;
  8.         TMOD = 0x01;
  9.         TH0 = 0x8C;
  10.         TL0 = 0x8A;
  11.         TR0 = 1;
  12.         while(1)
  13.         {
  14.                 if(TF0 == 1)
  15.                 {
  16.                         TF0 = 0;
  17.                         TH0 = 0x8C;
  18.                         TL0 = 0x8A;
  19.                         cnt++;
  20.                         if(cnt>=50)
  21.                         {
  22.                                 cnt = 0;
  23.                                 P0=0xFF
  24.                         }
  25.                 }
  26.         }
  27. }
复制代码


但是这个程序下载进去后,小灯就实现了闪一下之后,就一直灭了
求大佬帮我看看,那个地方出错了

最佳答案

你在循环里面都没有IO口的反转,你只是做了一次赋值,间隔再次赋值的地方没有看到,肯定只是闪一下了!!!!
回复

使用道具 举报

0

主题

2

帖子

5

积分

一匹野马

Rank: 1

积分
5
发表于 2019-3-3 23:27:53 | 显示全部楼层
可能是cnt=0;P0=0xff这里的问题。

评分

参与人数 1UB +10 收起 理由
bing680610 + 10

查看全部评分

回复

使用道具 举报

0

主题

31

帖子

79

积分

勇闯江湖

Rank: 2

积分
79
发表于 2019-3-4 11:22:11 来自手机 | 显示全部楼层
cnt++上面的两行不要,cnt>=50改为cnt==50,

评分

参与人数 1UB +10 收起 理由
bing680610 + 10

查看全部评分

回复

使用道具 举报

0

主题

31

帖子

79

积分

勇闯江湖

Rank: 2

积分
79
发表于 2019-3-4 11:23:10 来自手机 | 显示全部楼层
0xff后面没有;号
回复

使用道具 举报

0

主题

279

帖子

670

积分

一马当先

Rank: 4

积分
670
发表于 2019-3-5 15:20:25 | 显示全部楼层
你在循环里面都没有IO口的反转,你只是做了一次赋值,间隔再次赋值的地方没有看到,肯定只是闪一下了!!!!

评分

参与人数 1UB +10 收起 理由
bing680610 + 10

查看全部评分

回复

使用道具 举报

5

主题

61

帖子

267

积分

勇闯江湖

Rank: 2

积分
267
发表于 2019-3-6 15:42:18 | 显示全部楼层
#include "stc12c5a60s2.h"
void main()
{
        unsigned char cnt = 0;
        P11=0;
        P2=0x06;
        P0=0x7F;
        TMOD = 0x01;
        TH0 = 0x8C;
        TL0 = 0x8A;
        TR0 = 1;
        while(1)
        {
                if(TF0 == 1)
                {
                        TF0 = 0;
                        TH0 = 0x8C;
                        TL0 = 0x8A;
                        cnt++;
                        if(cnt>=50)
                        {
                                cnt = 0;
                                P0^=0xFF
                        }
                }
        }
}

评分

参与人数 1UB +10 收起 理由
bing680610 + 10

查看全部评分

回复

使用道具 举报

1

主题

6

帖子

39

积分

一匹野马

Rank: 1

积分
39
发表于 2019-3-6 16:12:39 | 显示全部楼层
royal 发表于 2019-3-5 15:20
你在循环里面都没有IO口的反转,你只是做了一次赋值,间隔再次赋值的地方没有看到,肯定只是闪一下了!!! ...
  1. #include <reg51.h>
  2. sbit p0_0=P0^0;
  3. void delay (int time_ms);
  4. void main()
  5. {
  6.    p0_0=1;
  7.    while(1)
  8.    {
  9.       p0_0=0x01;
  10.       delay (100);
  11.       p0_0=0x00;
  12.       delay (100);
  13.    }
  14.      return;

  15. }
  16. void delay(int time_ms)
  17. {
  18.    int i;
  19.    unsigned char j;
  20.    for (i=0;i<time_ms;i++)
  21.    {
  22.      for (j=0;j<150;j++)
  23.          ;
  24.    }
  25. }
复制代码

         

评分

参与人数 1UB +10 收起 理由
bing680610 + 10

查看全部评分

回复

使用道具 举报

1

主题

6

帖子

39

积分

一匹野马

Rank: 1

积分
39
发表于 2019-3-6 16:13:46 | 显示全部楼层
18518185892 发表于 2019-3-6 16:12
#include
sbit p0_0=P0^0;
void delay (int time_ms);

这个是at89c51的你可以试试看哦
回复

使用道具 举报

0

主题

279

帖子

670

积分

一马当先

Rank: 4

积分
670
发表于 2019-3-7 10:06:22 | 显示全部楼层
18518185892 发表于 2019-3-6 16:12
#include
sbit p0_0=P0^0;
void delay (int time_ms);

这中方法是最简单直接的,延时反转IO口的电平。只是时间没有使用中断那么精确,初学的话这样子是完全可以了。
回复

使用道具 举报

0

主题

17

帖子

32

积分

一匹野马

Rank: 1

积分
32
发表于 2019-3-12 08:50:54 来自手机 | 显示全部楼层
你这个就控制一个小灯亮,可以把P0=0X7F

评分

参与人数 1UB +10 收起 理由
bing680610 + 10

查看全部评分

回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表
  • 站内导航
  • 用户指南
  • 王国概况
  • 科技资讯
  • 小程序
  • 公众号
客服电话 :   400-830-1818 公司地址 :   深圳市南山区英唐大厦六楼
粤Copyright2018-2020 / 闯客网 版权所有 粤ICP备17106242号-1