打印
[学习资料]

PIC单片机RS485通讯程序

[复制链接]
43|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
观海|  楼主 | 2025-1-16 22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "XUART_2.h"
#include "XModbus.h"

unsigned int ReadUART2(void)
{
return (U2RXREG&0xFF);
}
void CLOSEUart2(void)
{
    U2MODEbits.UARTEN=0;
    IEC1bits.U2RXIE=0;
    IEC1bits.U2TXIE=0;
    IFS1bits.U2RXIF=0;
    IFS1bits.U2TXIF=0;
    IPC7bits.U2RXIP=0;
    IPC7bits.U2TXIP=0;
}
/******************************************/
/*
!!RP18管脚配置为U2RX
!!RP2管脚配置为U2TX=5
RB3为数字(0)模拟(1)控制
RB3为收(0)发(1)控制
!!FCY=14745600;9600bps
*/   

void OpenUART2(void)
{  

    _U2RXR=18;        
    _RP2R=5;   
    _TRISB3=0;   
   _LATB3=0;

    U2BRG=95;


    IEC1bits.U2RXIE=1;     
    IPC7bits.U2RXIP=4;   

    U2MODEbits.UARTEN=1;
    U2STA=0x0400;
}

/*void ISR _U2TXInterrupt(void)
{
    IFS1bits.U2TXIF = 0;
}*/


void ISR _U2RXInterrupt(void)
{
  unsigned char Accept_temp;

   while(U2STAbits.URXDA)Accept_temp=ReadUART2();

   Modbus(Accept_temp);

   IFS1bits.U2RXIF = 0;      
   U2STA&=~BIT2;      

}


void WriteUART2(unsigned int data)
{

    if(U2MODEbits.PDSEL == 3)
        U2TXREG = data;
    else
    {
      while(U2STAbits.UTXBF);  /* wait if the buffer is full */
      U2TXREG = data;             /* transfer data byte to TX reg */
    }
ClrWdt();
}

/*************************************************
数据发送函数
时间短,RS485通讯时,发送数据不完整,切记!
************************************************/

void char_sendUART2(unsigned char *p,char length)
{
_LATB3=1;
asm("nop");
  while(length--)
   {
    __delay_ms(1);   
    WriteUART2(*p++);
    }
__delay_ms(1);
__delay_ms(1);
_LATB3=0;
}
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/2401_87750974/article/details/143454516

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

4157

帖子

1

粉丝