找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 20788|回复: 28
打印 上一主题 下一主题
收起左侧

请问下大家有关51单片机串口通信控制LED灯亮灭的问题

  [复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

void main()
{
    PCON = 0;
    SCON = 0x50;   //串口方式1, 8-n-1, 允许接收.
    TMOD = 0x20;
    TH1 = 0xfd;
    TL1 = 0xfd;
    TR1 = 1;
    ES = 1;
    EA = 1;
    while(1);
}

void servise() interrupt 4
{
    RI = 0;
    P1 = SBUF;
}


以上是烧录单片机里的源码,然后我用串口调试助手发送FE到单片机里,二进制是11111110。理论上来说会有一个灯亮的,可是单片机上都没反应是什么鬼啊= =

评分

参与人数 1黑币 +3 收起 理由
wangguanguaner + 3 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:111634 发表于 2017-6-17 08:19 | 只看该作者
本帖最后由 zl2168 于 2017-6-17 09:54 编辑

实例42  74HC164串入并出控制8/16循环灯
Proteus仿真一下,确认有效。
实例42 74HC164串行输出控制8-16循环灯.rar (53.19 KB, 下载次数: 141)


以上摘自张志良编著《80C51单片机实用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(双解c和汇编)语句条条有注解,便于阅读理解,便于自学。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

板凳
ID:164602 发表于 2017-6-17 15:57 | 只看该作者
串口通讯实验,最要紧的有三件事:
第一:串口通讯发送、接收的是什么样的数据类型。类型不匹配,接收到也不能有控制的效果。
第二:波特率。波特率不对,就会让发送、接收的数据发生偏差,从而不能达到控制效果。
第三:实验用的模拟软件。这个软件好,实验起来,事半功倍,不好,事倍功半。
分享我的例子程序——完整、详细说明。
第一:我用的单个字符控制——数据类型清楚。
第二:波特率:4800,加倍。不知道你的单片机开发板或最小系统晶振是多少,用资料中的那个软件《51波特率初值设定.exe》,查看误差,误差大了就不行。我的程序是针对我的板子的,晶振12M,要误差小,最大波特率只能是4800。若是11.0592M的,波特率可以很大,但不要加倍。
第三:我用的串口通讯模拟软件,是STC下载程序的串口通讯功能,设置有图为证。
我的板子及串口相关资料都在,你可以根据自己的硬件,做出修改。

串口控制LED灯.rar

3.82 MB, 下载次数: 528

评分

参与人数 1黑币 +5 收起 理由
lysd + 5 赞一个!

查看全部评分

回复

使用道具 举报

地板
ID:192523 发表于 2017-6-17 17:35 | 只看该作者
你这个程序本人看过了没有问题,本人刚刚也用自己的单片机实验了一下,也是可以亮的,所以你不行大概是波特率不对或者软件问题
回复

使用道具 举报

5#
ID:111634 发表于 2017-6-17 20:32 | 只看该作者
桂木桂马 发表于 2017-6-17 17:35
你这个程序本人看过了没有问题,本人刚刚也用自己的单片机实验了一下,也是可以亮的,所以你不行大概是波特 ...

什么没有问题?真是瞎指导!T1都未开中!程序怎么运行?
我给你介绍你一个正确的可演示观看的参考案例
实例77  双机串行通信方式1
Proteus仿真一下,确认有效。
实例77 双机通信方式1.rar (40.4 KB, 下载次数: 95)

以上摘自张志良编著80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。










回复

使用道具 举报

6#
ID:212122 发表于 2017-6-17 20:52 | 只看该作者
学习了这么久单片机还是不会
回复

使用道具 举报

7#
ID:279813 发表于 2018-1-25 23:11 | 只看该作者
HC6800-ES-V2.0 发表于 2017-6-17 15:57
串口通讯实验,最要紧的有三件事:
第一:串口通讯发送、接收的是什么样的数据类型。类型不匹配,接收到也 ...

我用你的程序出现闪灯的情况。就是说输入“12” led就闪一下。。我想让led稳定的亮着。然后给“13”或者别的什么LED在熄灭
回复

使用道具 举报

8#
ID:279813 发表于 2018-1-25 23:20 | 只看该作者
HC6800-ES-V2.0 发表于 2017-6-17 15:57
串口通讯实验,最要紧的有三件事:
第一:串口通讯发送、接收的是什么样的数据类型。类型不匹配,接收到也 ...

从新测试了程序!原来你用的unsigned char="12" 来关灯,其他数字一概来开灯!哈哈
还真是有你的
回复

使用道具 举报

9#
ID:279813 发表于 2018-1-26 00:15 | 只看该作者
HC6800-ES-V2.0 发表于 2017-6-17 15:57
串口通讯实验,最要紧的有三件事:
第一:串口通讯发送、接收的是什么样的数据类型。类型不匹配,接收到也 ...

不知道是程序的问题还是51的问题。连续发送12也会关灯或者开灯!
回复

使用道具 举报

10#
ID:279838 发表于 2018-1-26 08:35 | 只看该作者
给上位机发送个数据试试 看看 能接受到什么
回复

使用道具 举报

11#
ID:279847 发表于 2018-1-26 17:03 | 只看该作者
程序没有问题的,固计是你的波特率或者是硬件存在问题,你再查查看
回复

使用道具 举报

12#
ID:279813 发表于 2018-1-26 18:04 | 只看该作者
street 发表于 2018-1-26 08:35
给上位机发送个数据试试 看看 能接受到什么

返回的数据就是我发出的”12“
回复

使用道具 举报

13#
ID:279813 发表于 2018-1-27 12:36 | 只看该作者
HC6800-ES-V2.0 发表于 2017-6-17 15:57
串口通讯实验,最要紧的有三件事:
第一:串口通讯发送、接收的是什么样的数据类型。类型不匹配,接收到也 ...

#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit LED1=P2^0;

u8 receiveData;
u8 n[]="a";
u8 nn[]="b";
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//中断函数
{
        unsigned char m;
        m=SBUF;
        if(m==n[0])
        {
                LED1=0;                                 //开灯
        }         
        if (m==nn[0])
        {
                LED1=1;                                 //关灯
        }
        receiveData=SBUF;//出去接收到的数据
        RI = 0;//清除接收中断标志位
        SBUF=receiveData;//将接收到的数据放入到发送寄存器
        while(!TI);//等待发送数据完成
        TI=0;//清除发送完成标志位
}
按照程序的逻辑应该是发12开灯,发其他关灯才对。因为我在测试时发现发送11-19(数字12除外)给51都可以亮灯。发送12关灯。我很奇怪。为什么会这样。程序我改成这样了。问题解决了。发a开灯,发b关灯。发其他一概无反应!
回复

使用道具 举报

14#
ID:279813 发表于 2018-1-27 22:37 | 只看该作者
naij 发表于 2018-1-27 12:36
#include

typedef unsigned char u8;

又出现了问题
我将改成
u8 n[]="aa";
u8 nn[]="bb";
结果发af、ah、类似与a+任意字母
都会亮灯或关灯!
原来判断语句出现了问题。
if(m==n[0])
        {
                LED1=0;                                 //开灯
        }         
        if (m==nn[0])
        {
                LED1=1;                                 //关灯
        }

m=nn[0]是判断语句只提取了nn数组的第一位!真是晕倒了
回复

使用道具 举报

15#
ID:292316 发表于 2018-3-15 15:19 来自手机 | 只看该作者
请问楼主解决问题了么,如果解决了,能否给我看看
回复

使用道具 举报

16#
ID:292316 发表于 2018-3-15 15:21 来自手机 | 只看该作者
naij 发表于 2018-1-27 22:37
又出现了问题
我将改成
u8 n[]="aa";

请问最后成功了么,想看看你的程序
回复

使用道具 举报

17#
ID:292316 发表于 2018-3-15 15:31 | 只看该作者
请问一下51单片机串口通信控制LED灯亮灭。您这个还有程序和仿真图么,我想了解一下,但自己还不会
回复

使用道具 举报

18#
ID:337714 发表于 2018-5-24 23:58 | 只看该作者
naij 发表于 2018-1-27 12:36
#include

typedef unsigned char u8;

这个程序我烧录后,能够返回数值但是的灯没有反应
回复

使用道具 举报

19#
ID:450649 发表于 2019-1-17 14:04 | 只看该作者
naij 发表于 2018-1-26 00:15
不知道是程序的问题还是51的问题。连续发送12也会关灯或者开灯!

没有啊,只会闪一下
回复

使用道具 举报

20#
ID:450649 发表于 2019-1-17 14:05 | 只看该作者
naij 发表于 2018-1-25 23:20
从新测试了程序!原来你用的unsigned char="12" 来关灯,其他数字一概来开灯!哈哈
还真是有你的

别的数字都没有作用啊
回复

使用道具 举报

21#
ID:450649 发表于 2019-1-17 14:12 | 只看该作者
naij 发表于 2018-1-27 22:37
又出现了问题
我将改成
u8 n[]="aa";

你发送12,它是先执行1,再执行2,所以会闪一下再灭。其余都可以类推。
回复

使用道具 举报

22#
ID:408853 发表于 2019-1-17 15:19 | 只看该作者
程序没有问题,可能是单片机故障也有可能的,我的单片机有次就是,后来换一个就可以了
回复

使用道具 举报

23#
ID:188465 发表于 2019-1-17 15:45 | 只看该作者
中断函数需要申明
回复

使用道具 举报

24#
ID:729176 发表于 2020-5-22 16:56 | 只看该作者
HC6800-ES-V2.0 发表于 2017-6-17 15:57
串口通讯实验,最要紧的有三件事:
第一:串口通讯发送、接收的是什么样的数据类型。类型不匹配,接收到也 ...

赞赞赞
回复

使用道具 举报

25#
ID:810242 发表于 2020-8-1 10:14 | 只看该作者
HC6800-ES-V2.0 发表于 2017-6-17 15:57
串口通讯实验,最要紧的有三件事:
第一:串口通讯发送、接收的是什么样的数据类型。类型不匹配,接收到也 ...

谢谢
回复

使用道具 举报

26#
ID:880659 发表于 2021-1-26 15:55 | 只看该作者
naij 发表于 2018-1-27 12:36
#include

typedef unsigned char u8;

1,2才是正确的
回复

使用道具 举报

27#
ID:619259 发表于 2021-1-31 20:50 | 只看该作者
程序没问题,测试成功
回复

使用道具 举报

28#
ID:839835 发表于 2021-3-3 14:25 | 只看该作者
中断配置错了,应该是if(RI)等待接收完成,清零
回复

使用道具 举报

29#
ID:989663 发表于 2021-12-8 16:37 | 只看该作者
程序没问题,测试成功
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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