关于max487芯片使用的问题,,求助

2019-07-18 09:31发布

我需要做一个51和PC接口的串口通信,用了MAX487转RS485电路
可是按图1的接法,数据传不过来,,(是不是我的接法有问题?)
新人不太会,麻烦大神们教教我。。
按这个接法的话,P1.6低电平应该是可以让51接收数据、P1.6高电平应该是可以让51发送数据,没错吧?


(程序是没问题的,因为按图二去掉MAX487后,运行无误)
图1 图1
图2--去掉MAX487后可以运行 图2--去掉MAX487后可以运行
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
daimengda1
1楼-- · 2019-07-18 17:15
U5的1接COMPIM的3 U5的4悬空就好了
mybigtree
2楼-- · 2019-07-18 13:55
第一次发帖,,大神们罩我
武力戡乱
3楼-- · 2019-07-18 20:00
1、http://bbs.elecfans.com/jishu_508351_1_1.html
2、不是第一个额外难题,就应该是程序问题。通讯协议没设计好。
http://bbs.elecfans.com/forum.ph ... 6orderby%3Ddateline
这个通讯协议的设计参考。
daimengda1
4楼-- · 2019-07-18 21:15
武力戡乱 发表于 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

版主,51到PC 利用485的仿真电路图有没有。。我做了一个,但是只能单片机发送数据到PC,PC不能发送数据到单片机。。
武力戡乱
5楼-- · 2019-07-18 21:39
 精彩回答 2  元偷偷看……
daimengda1
6楼-- · 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;
}
QQ截图20160504165828.png

一周热门 更多>