OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4494|回复: 8

关于51单片机串口问题

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-3-19
在线时间
7 小时
发表于 2015-5-12 09:33:48 | 显示全部楼层 |阅读模式
5金钱
麻烦大神看一下如下程序,是通过串口发送“ok”或“off”来控制led灯的亮灭,但是发送“OK”的时候能控制灯亮,发送“off”的时候无法控制灯灭,不知道哪个地方出错了(个人怀疑是在strcmp函数出错,但不知如何修改),麻烦大神指教,谢谢!!

[mw_shl_code=c,true]#include <reg51.h> #include <string.h> sbit led1 = P1^0; int i=0; char str[10]; char on[] = "on"; char off[] = "off"; void Bluetooth_init() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } void main() { Bluetooth_init(); while(1) { } } void ser() interrupt 4 { if(RI) { RI=0; if(SBUF!='\0') { str[i++]= SBUF; } else { str[i++]='\0'; i=0; } if(strcmp(str,on)==0)led1 = 0; if(strcmp(str,off)==0)led1 = 1; } }[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-5-12 09:58:11 | 显示全部楼层
你这样接收到的字符串是不是比原先的多了字符在发送时自动加入的结束符就是一个空格!把这个空格去掉试试看!
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-3-19
在线时间
7 小时
 楼主| 发表于 2015-5-12 17:43:30 | 显示全部楼层
回复【2楼】烟酒不沾:
---------------------------------
你是说把 "str[i++]='\0';" 一句去掉吗?
我刚刚试过,还是不行,只能开不能关。。
不知道为什么,感觉逻辑上应该没问题。。
回复

使用道具 举报

2

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
700
金钱
700
注册时间
2014-8-17
在线时间
164 小时
发表于 2015-5-12 19:30:18 | 显示全部楼层
把你接收的数据返回到串口看看,看看接收的是不是off
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-3-19
在线时间
7 小时
 楼主| 发表于 2015-5-12 23:32:14 | 显示全部楼层
回复【4楼】保夫鲁沙:
---------------------------------
接收到的是off,但是灯没灭。。
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-5-13 07:19:48 | 显示全部楼层
回复【5楼】炫:
---------------------------------
如果接收到的是OFF,没有理由灯不灭啊,我想也可能是你的硬件驱动有问题,再看一下硬件电路!
回复

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-2-12
在线时间
0 小时
发表于 2015-5-13 08:27:31 | 显示全部楼层
楼主可以试试放弃内带的字符串比较函数,自己用if逐个进行比较,进行相应的操作。比如:
if(str[0]=='o')
{
       if(str[1]=='n'&&str[2]=='\0')
       {
              led1=0;
        }
      else if(str[1]=='f'&&str[2]=='f'&&str[3]=='\0')
      {
              led1=1;
      }

}
不做浮躁的嵌入式攻城狮。。。。
回复

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-3-27
在线时间
1 小时
发表于 2015-5-13 21:37:53 | 显示全部楼层
接收到的不是"OFF"而是“ OFF”?
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2015-3-19
在线时间
7 小时
 楼主| 发表于 2015-5-13 22:14:23 | 显示全部楼层
回复【8楼】jshpy:
---------------------------------
不是。。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 10:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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