📄 rs485.c
字号:
#include "configLPC.h"
//#include "rs485.h"
//10987654321098765432109876543210
//00000000000000000000000100000000 0X00000100 P0.8
//00000000000000000000001000000000 0X00000200 P0.9
//00000000000000000000010000000000 0X00000400 P0.10
#define TX_485 0X00000100 //P0.8
#define RX_485 0X00000200 //P0.9
#define EN_485 0X00000400 //P0.10
unsigned char g_bUse485 = FALSE;
//***********************************************/
//延时
//***********************************************/
void rs485_delay(unsigned long delay_value)
{
for(;delay_value>0;delay_value--);
}
//*******************************************************/
//引脚初始化
//*******************************************************/
void rs485_init(void)
{
//10987654321098765432109876543210
//11111111110011111111111111111111 0XFFCFFFFF
PINSEL0 &= 0XFFCFFFFF; //P0.10,设置为GPIO
IO0DIR |= EN_485; //设置为输出
IO0CLR = EN_485; //设置为485接收
g_bUse485 = TRUE;
}
//*******************************************************/
//发送
//*******************************************************/
void rs485_tx(INT8U byComPort)
{
//if(g_bUse485 == TRUE)
//{
//10987654321098765432109876543210
//11111111111100111111111111111111 0XFF3FFFFF
//11111111111111111111110111111111 0XFFFFFDFF
//PINSEL0 &= 0XFFF3FFFF; //关闭485输入引脚P0.9,设置为GPIO
//IO0DIR &= 0XFFFFFDFF; //设置为GPIO输入
switch(byComPort)
{
case COM1:
IO0SET = EN_485_0; //切换为485发送
//1480B典型使能时间是35uS,ARM指令时间在44MHZ时为22nS,2000应该够
//rs485_delay(2000);
OSTimeDly(1);
case COM2:
IO0SET = EN_485_1; //切换为485发送
//1480B典型使能时间是35uS,ARM指令时间在44MHZ时为22nS,2000应该够
//rs485_delay(2000);
OSTimeDly(1);
}
//}
}
//////////////////////////////////////////////////////////
//接收
//////////////////////////////////////////////////////////
void rs485_rx(INT8U byComPort)
{
ULONG dwStartTime;
//if(g_bUse485 == TRUE)
//{
dwStartTime = OSTime;
switch(byComPort)
{
case COM1:
while(OSTime < dwStartTime+100)
{
if(SerPort_BuffedLen(COM1, enTxBuf) == 0 && SerPort_IsTxIdle(COM1))
{
OSTimeDly(5);//115200:1ms,9600:5ms 4800:15
break;
}
OSTimeDly(5);//延时
}
//在4800bps时,下面的语句会出错
//rs485_delay(50000); //经过实际测试,在波特率为9600时
//不延时,肯定丢最后字节
//延时参数为10,20,30,40有时候丢最后字节
//延时50,100,不丢最后字节
//10987654321098765432109876543210
//11111111111101111111111111111111 0XFF3FFFFF
//00000000000001000000000000000000 0X00040000
//PINSEL0 |= 0X00040000; //打开485(Uart1)输入引脚P0.9
IO0CLR = EN_485_0; //切换为输入
case COM2:
while(OSTime < dwStartTime+100)
{
if(SerPort_BuffedLen(COM2, enTxBuf) == 0 && SerPort_IsTxIdle(COM2))
{
OSTimeDly(5);//115200:1ms,9600:5ms 4800:15
break;
}
OSTimeDly(5);//延时
}
//在4800bps时,下面的语句会出错
//rs485_delay(50000); //经过实际测试,在波特率为9600时
//不延时,肯定丢最后字节
//延时参数为10,20,30,40有时候丢最后字节
//延时50,100,不丢最后字节
//10987654321098765432109876543210
//11111111111101111111111111111111 0XFF3FFFFF
//00000000000001000000000000000000 0X00040000
//PINSEL0 |= 0X00040000; //打开485(Uart1)输入引脚P0.9
IO0CLR = EN_485_1; //切换为输入
}
//}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -