请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 5806|回复: 8

串口控制LED灯?

 关闭 [复制链接]

2

主题

9

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2016-11-28 21:36:13 | 显示全部楼层 |阅读模式
串口控制LED灯怎么不能进行位操作?如果用P2=SBUF可以实现串口控制灯,但是如果用a=SBUF; if(a=0x01){led=0;}这样就没有办法实现串口控制led.为什么啊???
回复

使用道具 举报

42

主题

563

帖子

1907

积分

金牌会员

Rank: 6Rank: 6

积分
1907
发表于 2016-11-28 21:55:43 | 显示全部楼层
你的程序if(a=0x01)貌似写错了吧?还有你的led定义给P2了吗?怎么不给多一点的程序呢?好让大家给你分析
回复 支持 反对

使用道具 举报

2

主题

9

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2016-11-28 22:03:00 | 显示全部楼层
大瓶子凌凌漆 发表于 2016-11-28 21:55
你的程序if(a=0x01)貌似写错了吧?还有你的led定义给P2了吗?怎么不给多一点的程序呢?好让大家给你分析

#include<reg52.h>
   typedef unsigned char u8;
   typedef unsigned int u16;
   sbit LED1=P2^0;
      u8 receiveData;
  

void UsartInit()                 //串口初始化函数
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                        //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                //打开接收中断
        EA=1;                                //打开总中断
        TR1=1;                                //打开计数器
}


void main()
{
           UsartInit();          //串口初始化
    while(1);

}


void Usart() interrupt 4   //中断函数
{
    int m;
        m=SBUF;
        if(m==0x01)
        {
        LED1=0;
        }         
        receiveData=SBUF;      //出去接收到的数据
        RI = 0;                //清除接收中断标志位
        SBUF=receiveData;      //将接收到的数据放入到发送寄存器
        while(!TI);                           //等待发送数据完成
        TI=0;                                        //清除发送完成标志位
}
回复 支持 反对

使用道具 举报

2

主题

9

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2016-11-28 22:04:49 | 显示全部楼层
整个程序是这样的,主要就是if(m==0x01){LED1=0;}这个功能实现不了?
回复 支持 反对

使用道具 举报

20

主题

1343

帖子

8341

积分

论坛元老

Rank: 8Rank: 8

积分
8341
发表于 2016-11-29 19:27:34 | 显示全部楼层
兄弟,我不知道你用的什么样的串口调试程序,我用的是普中的下载器,第一功能是程序下载,第二功能(你自己仔细看看就可以找到)就是串口调试。我注意到你的程序设置的波特率是4800,所以我也设置好波特率,一试,就成了啊,可以控制的。只是你的程序不完整,所以只能输入一次,将LED灯打开,但关不了。我加了个else{LED0=1;},试的结果是,输入01,灯闪一下,第一说明控制起作用了的,第二这样简单的方法不行,因为SUBF的值变了,灯就要熄。希望对你有用。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2016-11-29 22:20:18 | 显示全部楼层
HC6800-ES-V2.0 发表于 2016-11-29 19:27
兄弟,我不知道你用的什么样的串口调试程序,我用的是普中的下载器,第一功能是程序下载,第二功能(你自己 ...

谢谢!的确是串口调试助手的原因,我用的那个是发送字符的,所以不能m==0x01,要改成m=='1'这样就可以了。另外,我想请教下,如果我想让第二次输入1时灯灭这种怎么处理啊?
回复 支持 反对

使用道具 举报

20

主题

1343

帖子

8341

积分

论坛元老

Rank: 8Rank: 8

积分
8341
发表于 2016-11-30 08:11:31 | 显示全部楼层
本帖最后由 HC6800-ES-V2.0 于 2016-11-30 12:24 编辑
Kinya 发表于 2016-11-29 22:20
谢谢!的确是串口调试助手的原因,我用的那个是发送字符的,所以不能m==0x01,要改成m=='1'这样就可以了。 ...

第一,串口调试软件都可以设置,是输入字符或是十六进制数据,就看自己的设置。第二,再来一个判断就行了,如:if (m==0x02)
{
    LED0=1;
}
这样,可以输入01让灯亮,输入02让灯灭。输入其它没动静。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2016-11-30 21:10:46 | 显示全部楼层
http://bbs.eetop.cn/thread-618257-1-1.html     我上传的串口程序
回复 支持 反对

使用道具 举报

20

主题

1343

帖子

8341

积分

论坛元老

Rank: 8Rank: 8

积分
8341
发表于 2016-12-5 17:23:29 | 显示全部楼层
STM32的我不会啊,你到ATM32那边去问问
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 14:20 , Processed in 0.087008 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表