2个回答
展开全部
这个很简单,我来教你玩:
首先我们说下硬件接法,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:回答问题五天后的补充:解决了问题不追问,不给分,这个楼主不厚道,鉴定完毕 !
首先我们说下硬件接法,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:回答问题五天后的补充:解决了问题不追问,不给分,这个楼主不厚道,鉴定完毕 !
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询