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

📄 main.c

📁 rs485的通信程序的主程序。采用at91sam7a3芯片编写的。
💻 C
字号:
#include "at91sam7a3.h"

extern	unsigned long	Abus_flag;
extern	unsigned long	Bbus_flag;
extern	unsigned long	UART0_TX_flag;
extern	unsigned long	UART0_RE_Flag;
extern	unsigned int	UART0_T_Count ;
extern	unsigned char	UART0_RData[522] ;
extern	unsigned long	TX_BUS_flag;
		unsigned int	IM_Data_Length;
		unsigned char	IM_Data[522];
		unsigned char	Z_Data[20];
		unsigned char	K_Data[20];
		unsigned char	ASK[522];
extern 	unsigned char	UART1_RE[522];
extern 	unsigned char	UART2_RE[522];


extern	void	power_on_initialization(void);
extern	void	control(void) ;
		void	Abus_dataframe(void);
		void	Bbus_dataframe(void);
		void	ABbus_dataframe(void);
		void	Abus_zl(void);
		void	Bbus_zl(void);
		void	ABbus_zl(void);

		unsigned char	ASCiitoHEX(unsigned char);
		unsigned char	HEXtoASCii(unsigned char);


//***************************************************************************
//* 名称:main()																		*
//* 功能:This edition add psk InData function.									*
//***************************************************************************
int  main(void)
{
	int i,j;
	AT91S_USART *pUS0;

	power_on_initialization();

 	pUS0 = AT91C_BASE_US0;

	while (1)
	{
		if(UART0_RE_Flag == 0x55555555)
		{
			UART0_T_Count = 0x0001;
			if (UART0_RData[1]==0x44)    //char_D   In_Data
			{
				j=0;
				for(i=2;i<=137;i=i+2)
				{  
					IM_Data[j]=0x10*ASCiitoHEX(UART0_RData[i]);
					IM_Data[j]=IM_Data[j]+ASCiitoHEX(UART0_RData[i+1]);
					j++;
				}

				UART0_RE_Flag = 0xaaaaaaaa;
				
				if (Abus_flag == 0x55555555)
					Abus_dataframe();
				if (Bbus_flag == 0x55555555)
					Bbus_dataframe();
			}

			if (UART0_RData[1]==0x47)    //char_G  In_Data
			{
				j=0;
				for(i=2;i<=137;i=i+2)
				{  
					IM_Data[j]=0x10*ASCiitoHEX(UART0_RData[i]);
					IM_Data[j]=IM_Data[j]+ASCiitoHEX(UART0_RData[i+1]);
					j++;
				}

				UART0_RE_Flag = 0xaaaaaaaa;
				
				ABbus_dataframe();
			}

			if (UART0_RData[1]==0x48)  //char_H	 ZL1_ZL33
			{
				
				j=0;
				for(i=2;i<=9;i=i+2)
				{  
					Z_Data[j]=0x10*ASCiitoHEX(UART0_RData[i]);
					Z_Data[j]=Z_Data[j]+ASCiitoHEX(UART0_RData[i+1]);
					j++;
				}

				UART0_RE_Flag = 0xaaaaaaaa;
				ABbus_zl();
	
			}


			if (UART0_RData[1]==0x4B)  //char_K	 ZL1_ZL33
			{
				
				j=0;
				for(i=2;i<=9;i=i+2)
				{  
					Z_Data[j]=0x10*ASCiitoHEX(UART0_RData[i]);
					Z_Data[j]=Z_Data[j]+ASCiitoHEX(UART0_RData[i+1]);
					j++;
				}

				UART0_RE_Flag = 0xaaaaaaaa;
				if (Abus_flag == 0x55555555)
					Abus_zl();
				if (Bbus_flag == 0x55555555)
					Bbus_zl();
				
			}


			if (UART0_RData[1]==0x43)  //char_C	ctrl ABUS or BBUS
			{
				j=0;
				for(i=2;i<=2;i=i+2)
				{  
					K_Data[j]=0x10*ASCiitoHEX(UART0_RData[i]);
					K_Data[j]=K_Data[j]+ASCiitoHEX(UART0_RData[i+1]);
					j++;
				}

				UART0_RE_Flag = 0xaaaaaaaa;
				control();
			}

		}
		if(UART0_TX_flag == 0x55555555)
		{
			ASK[0] = 0x53;
			if (TX_BUS_flag == 0x55555555)
			{	ASK[1] = 0x41;
				for (i=0;i<68;i++)
				{
					ASK[2*i+2] = UART1_RE[i] & 0xF0;
					ASK[2*i+2] = ASK[2*i+2]>>4;
					ASK[2*i+2] = HEXtoASCii(ASK[2*i+2]);
					ASK[2*i+3] = UART1_RE[i] & 0x0F;
					ASK[2*i+3] = HEXtoASCii(ASK[2*i+3]);
				}
			}
			else if (TX_BUS_flag == 0xaaaaaaaa)
			{
				ASK[1] = 0x42;
				for (i=0;i<68;i++)
				{
					ASK[2*i+2] = UART2_RE[i] & 0xF0;
					ASK[2*i+2] = ASK[2*i+2]>>4;
					ASK[2*i+2] = HEXtoASCii(ASK[2*i+2]);
					ASK[2*i+3] = UART2_RE[i] & 0x0F;
					ASK[2*i+3] = HEXtoASCii(ASK[2*i+3]);
				}
			}
			ASK[138] = 0x51;

			for (i=0;i<139;i++)		//139;i++)
			{
				pUS0->US_THR = ASK[i];
				while ((pUS0->US_CSR & 0x00000200) != 0x00000200)
				{
				}
			}
			UART0_TX_flag = 0xaaaaaaaa;

		}

	}

}


void Abus_zl(void)
{
	AT91S_USART *pUS1;

	int j,temp;
 	
	pUS1 = AT91C_BASE_US1;

	pUS1->US_CR = 0x00001000;
	pUS1->US_IDR = 0x00000001;
	for (j=0;j<4;j++)
	{
		pUS1->US_THR = Z_Data[j];	//Z_Data[j];
		while ((pUS1->US_CSR & 0x00000200) != 0x00000200);
		temp = pUS1->US_RHR;
	}
	pUS1->US_IER = 0x00000001;
}

void Bbus_zl(void)
{
	AT91S_USART *pUS2;
	int j,temp;

	pUS2 = AT91C_BASE_US2;
	pUS2->US_CR = 0x00001000;
	pUS2->US_IDR = 0x00000001;
	for (j=0;j<4;j++)
	{
		pUS2->US_THR = Z_Data[j];	//Z_Data[j];
		while ((pUS2->US_CSR & 0x00000200) != 0x00000200);
		temp = pUS2->US_RHR;
	}
	pUS2->US_IER = 0x00000001;
}

void ABbus_zl(void)
{
	AT91S_USART *pUS1;
	AT91S_USART *pUS2;

	int j,temp;
 	
	pUS1 = AT91C_BASE_US1;
	pUS2 = AT91C_BASE_US2;

	pUS1->US_CR = 0x00001000;
	pUS1->US_IDR = 0x00000001;
	pUS2->US_CR = 0x00001000;
	pUS2->US_IDR = 0x00000001;
	for (j=0;j<4;j++)
	{
		pUS1->US_THR = Z_Data[j];	//Z_Data[j];
		pUS2->US_THR = Z_Data[j];	//Z_Data[j];
		while (((pUS1->US_CSR & 0x00000200) != 0x00000200)&&((pUS2->US_CSR & 0x00000200) != 0x00000200));
		temp = pUS1->US_RHR;
		//while ((pUS2->US_CSR & 0x00000200) != 0x00000200);
		temp = pUS2->US_RHR;
	}
	pUS1->US_IER = 0x00000001;
	pUS2->US_IER = 0x00000001;
}



void Abus_dataframe(void)
{
	AT91S_USART *pUS1;
	int j,temp;
 	
	pUS1 = AT91C_BASE_US1;

	pUS1->US_CR = 0x00001000;
	pUS1->US_IDR = 0x00000001;

	for (j=0;j<68;j++)
	{
		pUS1->US_THR = IM_Data[j];	//Z_Data[j];
		while ((pUS1->US_CSR & 0x00000200) != 0x00000200);
		temp = pUS1->US_RHR;
	}
	pUS1->US_IER = 0x00000001;
}


void Bbus_dataframe(void)
{
	AT91S_USART *pUS2;
	int j,temp;

	pUS2 = AT91C_BASE_US2;
	pUS2->US_CR = 0x00001000;
	pUS2->US_IDR = 0x00000001;
	for (j=0;j<68;j++)
	{
		pUS2->US_THR = IM_Data[j];	//Z_Data[j];
		while ((pUS2->US_CSR & 0x00000200) != 0x00000200);
		temp = pUS2->US_RHR;
	}
	pUS2->US_IER = 0x00000001;
}


void ABbus_dataframe(void)
{
	AT91S_USART *pUS1;
	AT91S_USART *pUS2;
	int j,temp;
 	
	pUS1 = AT91C_BASE_US1;
	pUS2 = AT91C_BASE_US2;

	pUS1->US_CR = 0x00001000;
	pUS1->US_IDR = 0x00000001;
	pUS2->US_CR = 0x00001000;
	pUS2->US_IDR = 0x00000001;

	for (j=0;j<68;j++)
	{
		pUS1->US_THR = IM_Data[j];	//Z_Data[j];
		pUS2->US_THR = IM_Data[j];	//Z_Data[j];
		while (((pUS1->US_CSR & 0x00000200) != 0x00000200)&&((pUS2->US_CSR & 0x00000200) != 0x00000200));
		temp = pUS1->US_RHR;
		//while ((pUS2->US_CSR & 0x00000200) != 0x00000200);
		temp = pUS2->US_RHR;
	}
	pUS1->US_IER = 0x00000001;
}



unsigned char ASCiitoHEX(unsigned char str1)
{
	if  ((str1>=0x30)&&(str1<=0x39))
	{
		return(str1-0x30);
	}
	if  ((str1>=0x41)&&(str1<=0x46))
	{
		return(str1-0x37);
	}

	return 1;
}


unsigned char HEXtoASCii(unsigned char str1)
{
	if (str1<=0x09)							//if ((str1>=0x00)&&(str1<=0x09))
	{
		return(str1+0x30);
	}
	if  ((str1>=0x0A)&&(str1<=0x0F))
	{
		return(str1+0x37);
	}

	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -