2019-07-18 09:31发布
武力戡乱 发表于 2016-5-3 20:59 1、http://bbs.elecfans.com/jishu_508351_1_1.html 2、不是第一个额外难题,就应该是程序问题。通讯协议没设计好。 http://bbs.elecfans.com/forum.php?mod=viewthread&tid=472128&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline
武力戡乱 发表于 2016-5-3 22:24 半双工,你程序设计有问题。
最多设置5个标签!
2、不是第一个额外难题,就应该是程序问题。通讯协议没设计好。
http://bbs.elecfans.com/forum.ph ... 6orderby%3Ddateline
这个通讯协议的设计参考。
版主,51到PC 利用485的仿真电路图有没有。。我做了一个,但是只能单片机发送数据到PC,PC不能发送数据到单片机。。
版主我程序在下面,主要实现PC发一个字符,然后单片机返回”I get 字符”
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;
sbit P17=P1^7;
sbit P16=P1^6;
uchar code table[]="I get ";
void init()
{
P17=0;
P16=1;
TMOD=0x20; //设置定时器1为模式2
TH1=0xfd; //装初值设定波特率
TL1=0xfd;
TR1=1; //启动定时器
SM0=0; //串口通信模式设置
SM1=1;
REN=1; //串口允许接收数据
EA=1; //开总中断
ES=1; //开串行中断
}
void main()
{
init();
while(1)
{
if(flag==1) //如果有数据则进入这个语句
{
P17=1;
P16=0;
ES=0; //进入发送数据时先关闭串行中断
for(i=0;i<6;i++)
{
SBUF=table;
while(!TI);
TI=0;
}
SBUF=a; //将数据原样发回
while(!TI); //等待数据发完
TI=0;
ES=1; //退出进再开串行中断
flag=0;
P17=0;
P16=1;
}
}
}
void ser() interrupt 4 //串行中断函数
{
RI=0;
a=SBUF;
flag=1;
}
一周热门 更多>