关于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
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

一周热门 更多>