专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
proteus
关于max487芯片使用的问题,,求助
2019-07-18 09:31
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
proteus
11276
12
1359
我需要做一个51和PC接口的串口
通信
,用了MAX487转RS485
电路
可是按图1的接法,数据传不过来,,(是不是我的接法有问题?)
新人不太会,麻烦大神们教教我。。
按这个接法的话,P1.6低电平应该是可以让51接收数据、P1.6高电平应该是可以让51发送数据,没错吧?
(程序是没问题的,因为按图二去掉MAX487后,运行无误)
图1
图2--去掉MAX487后可以运行
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
daimengda1
2019-07-19 00:05
武力戡乱 发表于 2016-5-3 22:24
半双工,你程序设计有问题。
版主我程序在下面,主要实现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;
}
加载中...
查看其它12个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
为什么Proteus 仿真点阵字体缺笔画 而且速度奇慢
7 个回答
2012~~单片机C语言程序设计实训100例-基于8051+Proteus仿真(第2版)
27 个回答
新手求帮忙解决proteus的问题
1 个回答
大家好,请问用三菱plc仿真软件跟mcgs组态软件怎么样连接?
1 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
proteus
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
版主我程序在下面,主要实现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;
}
一周热门 更多>