找回密码
 立即注册

QQ登录

只需一步,快速开始

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

串口通信 PC机向单片机发送命令打开或关闭指定LED灯

[复制链接]
跳转到指定楼层
楼主
ID:396671 发表于 2018-11-5 17:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
输入输出一样,但是if判段数据怎么不对,灯亮不了


#include<reg52.h>
#include<string.h>


void main (void)
{ char a,b=0;
  SCON=0x50;//串行口方式1
  PCON=0x00;//T1初始化,
  TMOD=0x20;//T1设为方式2
  TH1=0xFD;//选9600波特,fosc=11.0592MHz
  TR1=1;//启动T1  
  while(1)
    {
      if(RI)//如果接收到数据,就把接收到的数回发给PC
         { RI=0;//清接收标志
           a=SBUF ;//读串行口数据
           SBUF=a;//把从PC机发送过来的数据返回给PC机
           while(!TI);//没有发送完等待
           TI=0;//清发送完中断标志
                   if(a==1){
                                P0 = 0x00;
                   }
                   if(a==0){
                                P0 = 0xff;
                   }
       }
  }  
}


新建文件夹 (2).zip

41.46 KB, 下载次数: 10

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

使用道具 举报

沙发
ID:100391 发表于 2018-11-5 19:23 | 只看该作者
你是不是忘记给TL1赋值了?
回复

使用道具 举报

板凳
ID:277550 发表于 2018-11-5 19:46 | 只看该作者
PC 串口要按十六进制发1,即ASCII 是1 ,而不是字符'1'。。。。。。。。。。

否则,程序要修改成

                   if(a==’1‘){
                                P0 = 0x00;
                   }
                   if(a==‘0’){
                                P0 = 0xff;
                   }

评分

参与人数 1黑币 +2 收起 理由
yin... + 2 赞一个!

查看全部评分

回复

使用道具 举报

地板
ID:280876 发表于 2018-11-5 20:41 | 只看该作者
#include<reg52.h>
#include<string.h>

void main (void)
{     char a,b=0;
  SCON=0x50;//串行口方式1
  PCON=0x00;//T1初始化,
  TMOD=0x20;//T1设为方式2
  TH1=0xFD;//选9600波特,fosc=11.0592MHz
  TR1=1;//启动T1  
  while(1)
    {
      if(RI)//如果接收到数据,就把接收到的数回发给PC
      {                      RI=0;//清接收标志
           a=SBUF ;//读串行口数据
           SBUF=a;//把从PC机发送过来的数据返回给PC机
           while(!TI);//没有发送完等待
           TI=0;//清发送完中断标志
            switch(a)
             {
               case 0x00 : P0=0x00; break;   
               case 0x01 : P0=0xAA; break;
               case 0x02 : P0=0xFF; break;
             }   
       }
   }  
}
有强迫症,帮你整理一下。。

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:213173 发表于 2018-11-5 21:01 | 只看该作者
void main (void)
{ char a,b=0;
  SCON=0x50;//串行口方式1
  PCON=0x00;//T1初始化,
  TMOD=0x20;//T1设为方式2
  TH1=0xFD;//选9600波特,fosc=11.0592MHz
  TL1=0xFD;//漏写
  TR1=1;//启动T1  
  while(1)
回复

使用道具 举报

6#
ID:421437 发表于 2018-11-5 23:17 | 只看该作者
pc给它发的是不是ascii码?
串口设置为二进制

评分

参与人数 1黑币 +2 收起 理由
yin... + 2 赞一个!

查看全部评分

回复

使用道具 举报

7#
ID:421482 发表于 2018-11-6 08:17 | 只看该作者
串口的发送设置

评分

参与人数 1黑币 +2 收起 理由
yin... + 2 赞一个!

查看全部评分

回复

使用道具 举报

8#
ID:396671 发表于 2018-11-6 21:02 | 只看该作者
懂了,还是我自己没学好,谢谢大佬们的回答
回复

使用道具 举报

9#
ID:396671 发表于 2018-11-6 21:09 | 只看该作者
devcang 发表于 2018-11-5 19:46
PC 串口要按十六进制发1,即ASCII 是1 ,而不是字符'1'。。。。。。。。。。

否则,程序要修改成

明白了,谢谢大佬。
还有一个问题
PC机向单片机发送命令启动或停止蜂鸣器播放音乐,
当播放音乐时该怎么停止,这时是播放函数运行中,pc输入数据要等到放完才接受,也就是停不下来
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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