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

📄 computer2.c

📁 AT89S52串口多字节接收,可以接收任意字节.
💻 C
📖 第 1 页 / 共 2 页
字号:
									        Rs232_Rece_Error = True;
											g_cReceNum = 0;
								   }
								   Start_Rxd = False;
						 }
						   else 
						 {
                                if ((Rs_buf[1]>Rs232_Input_LEN)||(g_cReceNum>Rs232_Input_LEN-1)) 
								{
								     g_cReceNum = 0;
									 Rs232_Rece_Error = True;
									 Start_Rxd = False;
								}  						          
								  
						 }

			  } 
				 else
              {        
			       if (Rece_data == Rx_start_data)
                   {    
                   		 Start_Rxd = True;
                         g_cReceNum = 0;
                         Rs_buf[0]  = Rece_data;
                   }          

                }
	   MCU_LED2  = True;
       ES = True;
	   EA = True;
	  
}
/*************接收固定长度****************/
/*void RS232(void) interrupt 4
{     
   unsigned char Rece_data = SBUF;
   uchar i;
   uchar verify = 0;
	  
	   EA         = False;
	   ES         = False;  
	   MCU_LED2  = False;
       count      = 0;
              RI = 0;
	  		  if (Start_Rxd) 
			  {
			             g_cReceNum ++;
			             if ((g_cReceNum<Rs232_Input_LEN) && (g_cReceNum>1)) {
						         Rs_buf[g_cReceNum-1] = Rece_data;
								 
						 }
						   else 
						 {
						          if (g_cReceNum == Rs232_Input_LEN) 
								  {
								           Rs_buf[g_cReceNum-1]= Rece_data;
										   for (i=0;i<Rs232_Input_LEN-1;i++)
										   {
										       verify^=Rs_buf[i];
										   }
										   if (verify == Rs_buf[g_cReceNum-1])
										   {
								                   Rs232_Flag = True;
								                   g_cReceNum = 0;
										   }
										          else 
										   {
											        Rs232_Rece_Error = True;
													g_cReceNum = 0;
										   }
								  }
								     else   g_cReceNum = 0;
								  Start_Rxd = False;
						 }

			  } 
				 else
              {        
			       if (Rece_data == Rx_start_data)
                   {    
                   		 Start_Rxd = True;
                         g_cReceNum = 1;
                         Rs_buf[0]  = Rece_data;
                   }          

                }



      
    
	   MCU_LED2  = True;
       ES = True;
	   EA = True;
	  
}
/********************************************/
/****接收以一定的数据为结束标志的不定接收****/
/********************************************/
void RS232(void) interrupt 4
{     
   unsigned char Rece_data = SBUF;
   
   uchar verify = 0;
	  
	   EA         = False;
	   ES         = False;  
	   MCU_LED2  = False;
       count      = 0;
              RI = 0;
	  		  if (Start_Rxd) 
			  {
			             g_cReceNum ++;
						 if ((g_cReceNum < Rs232_Input_LEN) && (Rece_data == 0xff)) {
						             Rs_buf[g_cReceNum-1] = Rece_data;
						   			 Start_Rxd = False;
									 Rs232_Flag = True;
								     g_cReceNum = 0;
									 goto Rs232_end ;

						 }
			             if (g_cReceNum<Rs232_Input_LEN) {
						         Rs_buf[g_cReceNum-1] = Rece_data;
								 
						 }
						   else 
						 {
						         
								  g_cReceNum = 0;
								  Rs232_Rece_Error = True;
								  Start_Rxd = False;
						 }

			  } 
				 else
              {        
			       if (Rece_data == Rx_start_data)
                   {    
                   		 Start_Rxd = True;
                         g_cReceNum = 1;
                         Rs_buf[0]  = Rece_data;
                   }          

                }



 Rs232_end:     
    
	   MCU_LED2  = True;
       ES = True;
	   EA = True;
	  
}
/****************************************/
/*************向计算机发数据*************/
/****************************************/
uchar TXD_pc(uchar icode)
{ 
       //uchar count1;   /* 接收等待时间 */
       //uchar i;
	   //RS485 = False;
	   EA = 0;
       ES = 0;
      
                SBUF = icode;       
				while (!TI); 
				TI = 0;   /* 发数据请求 */
	   //RS485 = True;			
                EA = True;
                ES = True;
       return(0);
}
/****************************DS1302***********************************/
void Close_write_bit(void)
{
   char i;
   EA = False;
   Ds1302_clock = False;
   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = True;
   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   AD = 0x8e;             //write control redister    
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_(); _nop_();_nop_();_nop_();Ds1302_clock = True;
                           AD = AD >> 1;_nop_();_nop_();_nop_();
						 }
   AD = 0x80;             //close write protect bit
   Ds1302_data = False;
   for (i=1; i<=8; i++) {
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); Ds1302_clock = True;
                           AD = AD >> 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
   Ds1302_rst = False;
   EA = True;
}
void Open_write_bit(void)
{
    char i;
	EA = False;
   Ds1302_clock = False;
   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = True;
   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   AD = 0x8e;             //write control redister    
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_(); _nop_();_nop_();_nop_();Ds1302_clock = True;
                           AD = AD >> 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
   AD = 0x00;             //close write protect bit
   Ds1302_data = False;
   for (i=1; i<=8; i++) {
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_(); Ds1302_clock = True;
                           AD = AD >> 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
	EA = True;
}
void Init_ds1302(void)
{
   char i;
   EA = False;
   Ds1302_clock = False;
   _nop_();_nop_();_nop_();	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = True;
   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();	_nop_();_nop_();_nop_();
   AD = 0x8e;             //write control redister    
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_(); Ds1302_clock = True;
                           AD = AD >> 1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
   AD = 0x00;             //OPEN control redister
   Ds1302_data = False;
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_(); Ds1302_clock = True;
                           AD = AD >> 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
   Ds1302_rst = False; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_clock = False;
   Ds1302_clock = False; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = True;
   _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   AD = 0x90;             //recharge register
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();Ds1302_clock = True;
                           AD = AD >> 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
   AD = 0xa5;
   AD = 0xa5;
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();Ds1302_clock = True;
                           AD = AD >> 1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
   Ds1302_rst = False; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_clock = False;
   Ds1302_clock = False; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = True; _nop_(); _nop_();
   AD = 0x80;                //Start Work count
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_(); Ds1302_clock = True;
                           AD = AD >> 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
   AD = 0x00;
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_(); Ds1302_clock = True;
                           AD = AD >> 1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						 }
    Ds1302_rst = False;_nop_();_nop_();
    Ds1302_clock = False;_nop_();
   	EA = True;
}
void Read_ds1302()
{
   uchar i,j;
   EA = False;
   Ds1302_rst = False;	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_clock = False;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = False;	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = True;	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   AD = 0xbf;
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); Ds1302_clock = True;
                           AD = AD >> 1;_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();
						}
   for (j=0; j<7; j++) {
                           for (i=1; i<=8; i++) { 
                                                   AD = AD >> 1;
						                           Ds1302_clock = False; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
						                           AD_7 = Ds1302_data; Ds1302_clock = True; 
												   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                                                 }
                           //i = AD/16;
						   //k = i * 6;
                           //AD = AD - k;
                           M_D[j] = AD;
                        }
   Ds1302_rst = False;   delay_2();
   Ds1302_clock = False; delay_2();
   EA = True;
}

void Write_ds1302(uchar address,uchar numb)
{
   uchar i;
   EA = False;
   Ds1302_rst = False;	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_clock = False;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = False;	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   Ds1302_rst = True;	_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
   AD = 0x80 | (address<<1);
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   delay_2(); Ds1302_clock = True;
                           AD = AD >> 1;delay_2(); 
						 }
   AD = numb;
   for (i=1; i<=8; i++) { 
                           Ds1302_clock = False; Ds1302_data = AD_0;
						   delay_2();  Ds1302_clock = True;
                           AD = AD >> 1;delay_2(); 
						 }
   Ds1302_rst = False;
   Ds1302_clock = True;
   EA = True;
   delay(1);
}
/*******************************************************/
void delay(uint count0)
{
    uchar i;
	while ( (count0--)  ) 
	{
	        for (i=0;i<125;i++) {};
	}
}
void delay_2()
{ 
      uint i;
      for (i=0; i<128; i++)
      {
         _nop_();
      }
}
void delay_3(uchar count0)
{
    uchar i;
	while ( count0-- ) 
	{
	        for (i=0;i<125;i++) {};
	}
}






⌨️ 快捷键说明

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