单片机串口控制LED亮灭:

我要实现在PC端输入0,LED0亮,输入1,LED0灭,输入其他不做任何动作,如下编程是否可以?怎么有时候收不到返回的数据?有类似命令行cmd的串口工具吗?#includ... 我要实现在PC端输入0,LED0亮,输入1,LED0灭,输入其他不做任何动作,如下编程是否可以?怎么有时候收不到返回的数据?有类似命令行cmd的串口工具吗?

#include <reg51.h>

#include <string.h>

sbit LED0=P2^0; //P2.0口接led0,开机常亮,发送任意指令后熄灭;

/*******串口通信初始设定*******/

void init_serialcom( void )

{

SCON = 0x50 ; //UART为模式1,8位数据,允许接收

TMOD = 0x20 ; //定时器设定,为模式2,8位,自动重装

TH1 = TL1= 0xFA ; //定时器设定,Baud:9600 fosc="11".0592MHz

PCON = 0x80 ; //SMOD=1;

EA=1; //中断设定,因为总中断开关是控制所有中断的,所以要把它打开

ES=1; //中断设定,允许串口收到数据后产生中断通知我们

TR1 = 1 ; //定时器设定,启动定时器,串口开始工作

}

/*******MCU发送一个字符给PC*******/

void send_char( unsigned char ch)

{

SBUF=ch;

while (TI==0);

TI=0;

}

/*******MCU发送一个字符串给PC*******/

void send_string(unsigned char *cp)

{

ES=0;

while(*cp)

{

send_char(*cp);

cp++;

}

ES=1;

}

/*******PC向MCU发送中断指令,MCU处理指令*******/

void serial () interrupt 4 using 3

{ ES=0;

if (RI)

{

RI=0 ;

if(SBUF==0)

{LED0=0;

send_string("LED on...\r\n"); //串口向终端发送字符串,结尾处回车换行

}

if(SBUF==1)

{LED0=1;

send_string("LED off...\r\n"); //串口向终端发送字符串,结尾处回车换行

}

ES=1;

}

}

/*******主程序*******/

void main()

{

init_serialcom(); //初始化串口

while ( 1 ) //空循环,什么都不做,等待串口中断

{

}

}
展开
 我来答
lycdl
高粉答主

2016-08-16 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4892万
展开全部
电脑上,你是用什么软件发送数据的?用串口调试助手就行,网上到处可以下载。也好用。关键问题是在电脑上发送的0,1,是以什么数据格式发送的,通常以字符格式发送的,即是ASCII码。所以,单片机接收时,也要按字符格式发才行。而你的程序是按十六进制数的格式判断的,也就是二进制数,所以,发送和接收格式不统一,单片机就不能正常接收控制LED0,也就不能正常返回数据。
if(SBUF==0) //这是按二进制数接收的
if(SBUF==1) //这也是按二进制数接收的
这样写程序,要求电脑上,要按二进制数即十六进制数发送才行。
还是按字符格式收发比较好。
这样,程序改一下就行了。
if(SBUF==‘0’) //这就是按字符接收的
if(SBUF==‘1’) //这也是按字符接收的
其它行不用动。
这样,收发比较可靠。
更多追问追答
追问
感谢,我改成如下是否也可以:
if(SBUF==0x30) //这就是按字符接收的
if(SBUF==0x31) //这也是按字符接收的
追答
这样改当然也行了,其实0x30就是字符0的ASCII码,0x31是字符1的ASCII码.
但是这样写程序不好懂,写成'0' , '1' ,程序更容易懂。
cjj796
2016-08-16 · TA获得超过8708个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3444万
展开全部
你好!如果实现这个功能,你的程序有点复杂化了
追问
有更简单的方法吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
deli333
2016-08-16 · TA获得超过139个赞
知道小有建树答主
回答量:486
采纳率:0%
帮助的人:68.8万
展开全部
很简单
追答
如果需要可以教你!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伏霞经翊君
2019-11-06 · TA获得超过3886个赞
知道大有可为答主
回答量:3246
采纳率:30%
帮助的人:200万
展开全部
同学,你好,你先要跟我说下你那些k是低电平有效还是高电平效。还有led是底电平亮还是高电平亮。k与led是通过那些i/o口与单片机连在一起的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式