#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
|