跪求:基于RS485的PC机与多单片机通信,要求PC机使用串口调试助手发送*1#指令给单片机时,单片机的led点亮。

拜托拜托!!!... 拜托拜托!!! 展开
 我来答
嘲讽帅哥
2012-04-27 · TA获得超过1186个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:185万
展开全部
这个很简单,我来教你玩:
首先我们说下硬件接法,USB转485信号电路块(只要20元,贵了的都是坑你的),MAX485芯片,11.0592M晶振(这个频率的晶振产生的波特率误差低)
思路:利用串口中断方式对P0口的LED进行控制(我只是举例,程序你自己写)
程序如下:
#include <reg51.h> //选用晶振11.0592MHz
#define AddressID 0x31 //本机地址1
sbit RS485E=P3^7; //定义485的使能脚// RS5485E=0为接收状态 RS5485E=1为发送状态
sbit MAX485_DIR=P3^7;

main()
{

//****************通讯设置
SCON = 0xF0; //REN=1允许串行接受状态,串口工作模式3,SM2=1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80; //波特率提高一倍
IP=0x10; //串口优先级高
TH1 = 0xf4; //fa // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (11.0592M)
TL1 = 0xf4;
TR1 = 1; //开启定时器1
EA = 1; // 开总中断
ES = 1; //开串口中断
RS485E=0; // RS5485E=0为接收状态 RS5485E=1为发送状态
while(1);

}

void counter4(void) interrupt 4 using 2 //串口中断
{
while(RI==0);
RI=0;
if(SBUF==0x2a) //2a的ASCII码是*
{
while(RI==0);
RI=0;
if(SBUF==AddressID) //发送本地地址31的ASCII码是1
{
while(RI==0);
RI=0;
if(SBUF==0x23) //23的ASCII码是#
{
P0=254; //P0=1111 1110,这里写你要对LED控制的程序
}
}

}

}
就是这么简单,已经调试通过,注释也有
PS:回答问题五天后的补充:解决了问题不追问,不给分,这个楼主不厚道,鉴定完毕 !
来自:求助得到的回答
nuaabob
2012-04-24 · TA获得超过126个赞
知道小有建树答主
回答量:255
采纳率:50%
帮助的人:78.3万
展开全部
给PC机加个232转485的头,大概40多块钱,然后单片机串口用MAX483转485电平,因为485只有两根线,发的时候不能收,收的时候不能发,其他编程和232通信是一样的。建议用Proteus先做仿真,等心里有点底了,再做实物试验。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式