大星派 2018-07-10 02:42 采纳率: 0%
浏览 2071
已结题

RS485通信不成功,求解答,十分感谢!

使用PIC18F452连接MAX485芯片进行485通信,然后通过485转USB接口连接到电脑,使用串口助手收发,但是通信不成功,没有收到数据,也无法发送数据。
485是用的自动收发电路,如下图
图片说明

程序如下:
#include
#include

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

unsigned char FIFO;
char flag=0;

void delayms(uint z)
{
uint a,b;
for(a=z;a>0;a--)
for(b=120;b>0;b--);
}

void init_uart()
{
TRISC=0x80;
TXSTA=0X24; //使能串口发送8位数据
RCSTA=0X90; //使能串口工作,连续接收
SPBRG=25; //设置波特率为9600BPS 4000000/9600/16-1=25
RCIE=1; //接收中断
GIE=1; //全局中断
PEIE=1; //外部中断

}

void IO_INIT(void)
{
ADCON1=0xFF; //禁止的AD转换功能(第二功能)
TRISE = 0;
TRISC = 0X00;
TRISD = 0;
PORTD = 0;
TRISA = 0;
TRISB =0X00;
PORTB =0;
//PORTE = 0XFF;
RE0=0;
RE1=0;
RE2=0;
RBPU=0;
}

void Send_Date(unsigned char date)
{
TXREG=date;
delayms(2);
while(TXIF==0);
TXIF=0;

}

//--------------------------------------------------------------------------------------------------
// 函数名称: serial()串口接收中断处理函数
// 函数功能: 接收数据到数据缓冲区
//--------------------------------------------------------------------------------------------------

void interrupt usart()
{
if(RCIF) //判断是否为串口接收中断
{
RCIF=0;
FIFO=RCREG; // 接收数据并存储
flag=1;
}
}
void main()
{
uint x;
IO_INIT();// IO初始化
init_uart();
while(1)
{
///* 2018.7.2 发送程序
if(flag)//收到数据 发出
{
flag=0;
Send_Date(FIFO);
delayms(5);
RCIF=0;
}

delayms(100);

if(x++>15)//一段时间发送一次数据
{
x=0;

Send_Date('T');
Send_Date('e');
Send_Date('s');
Send_Date('t');
Send_Date('o');
Send_Date('k');
Send_Date(0x0d);
Send_Date(0x0a);

delayms(5);
RCIF=0;

}
}

}

  • 写回答

5条回答

  • jintiann 2018-07-10 06:19
    关注

    代码应该没问题,毕竟网上好多参考的,量下硬件电平。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog