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

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 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果