⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs485.c

📁 基于philips的lpc2148开发源代码
💻 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 + -