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

📄 2.c

📁 一个关于51单片机的双串口转换程序
💻 C
字号:
#include "STC12C5410AD.H"
#define		uint		unsigned int
#define		uchar		unsigned char
sfr AURX1=0xA2;

sbit N485=P3^2;
sbit N4852=P3^5;
sbit led1=P1^3;
sbit led2=P1^4;
uchar bdata DATA;
sbit BIT0=DATA^0;
sbit BIT7=DATA^7;

uchar		idata RX[10],TX[28];
uchar		Rx_Num;
uchar       FASONG;

void IN1_init()	  //外中断1初始化
 {
	PX1=1;   //中断最高级
	EX1=1;	 //中断允许
	IT1=1;	 //下降沿触发
  }


void ser_int1 (void) interrupt 2 using 3
    {
			EX1=0;
		    AURX1=0x80;
			FASONG=1;
     }
void InitialUart()
 {
	SCON = 0x50;
	TMOD |= 0x20;
	TH1 = 0xFa;
	TL1 = 0xFa;
	TR1 = 1;
	ES  = 1;
 }
//-----------------------------------------------------------------------------
//串口发送一个字节
//功能:发送一个字节数据
//入口参数:发送数据
//出口参数:无
//-----------------------------------------------------------------------------
void Send_Data(uchar Serial_data)
{
    TI = 0;
    SBUF = Serial_data;
    while(!TI);
    TI = 0;
}
//-----------------------------------------------------------------------------
//发送一帧数据函数
//原型:void TXD_Int(uchar *TX);
//功能:发送一帧数据
//入口参数:发送数据帧地址指针,Send_Num:发送数据的个数
//出口参数:无
//-----------------------------------------------------------------------------
void TXD_Int(uchar *TX,uchar Send_Num)
{
    uchar i;
    for(i = 0; i < Send_Num; i ++)  	Send_Data(*(TX+i));
	RI = 0;
}

//-----------------------------------------------------------------------------
//UART0_interrupt
//-----------------------------------------------------------------------------
void UART0_ISR (void) interrupt 4
 {	
		if(RI == 1)
	{
		RI = 0;
		RX[Rx_Num] = SBUF;
		Rx_Num ++;
		if((Rx_Num >= 5)&&(FASONG==1))
		{	
		    N4852=0;
			Rx_Num = 0;
			TXD_Int(RX,5);  
    		N4852=1;
			AURX1=0x00;
			FASONG=0;
			EX1=1;
		  }
	}  
}
	

void T0_init(void)             //定时器0初始化  
{
	TR0=0; 
    TMOD = 0X01;
	TL0 =0X66;
	TH0 =0XFC;
	TR0=1;
    ET0 = 1;                        //置中断优先级为高  
    PT0 = 1;                        //允许定时器中断    
}
void timer0 (void) interrupt 1 using 3
{
	uchar i;
	int j;
	TR0=0;
	TL0 =0X66;
	TH0 =0XFC;
	j++;
	if ((j>=2000)&&(FASONG==1))
      {	   	
	        j=0;
            AURX1=0x00;
	        EX1=0;
		    N485=0;
	    	for (i=0;i<24;i++) 	TX[i]=i+16;
		    TXD_Int(TX,24);
			N485=1;
		    EX1=1;
	   }
 	TR0=1; 	
}  
void main(void)
{
	unsigned int  ShowNum;  
    for(ShowNum = 0; ShowNum < 0xffff; ShowNum ++);           
	T0_init();
	InitialUart();
	IN1_init();
	EA=1;
	ES = 1;
	N485=1;
	Rx_Num = 0;
    while (1)
	    {
		
        }  
  }

⌨️ 快捷键说明

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