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

📄 comm.c

📁 PWM输出控制三路步进电机
💻 C
字号:


#include "comm.h"
#include <avr/eeprom.h>
#include <avr/wdt.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

//uint8_t Right_Door(void);
void COM0_RX_process(void);
void COM0_TX_process(void);
void COM1_RX_process(void);
void COM1_TX_process(void);

uint32_t fourx(uint8_t *pppp, uint8_t p);
uint8_t test;
void COMM(void)
{	
	asm("nop");
	COM0_RX_process();
	asm("nop");
	COM0_TX_process();
	asm("nop");
    COM1_TX_process();
	asm("nop");
	COM1_RX_process();
	asm("nop");
}





void COM0_RX_process(void)
{
	uchar i,j,k,mm;
	asm("nop");	
  	if((Recv_buff[2]==0x01) && (Recv_number ==6))
  	{
		asm("nop");	
		mm=0;
		for(i=0; i<6;i++)
		{
			asm("nop");	
			mm ^=Recv_buff[i];
		}
		asm("nop");	
		if(mm)
		{	asm("nop");	
		   return;
		}
		asm("nop");	
		IO_data[0] = Recv_buff[3];
		IO_data[1] = Recv_buff[4];
		Recv_number=0;

		Rs232_LED=1;
  	}
  	else if((Recv_buff[2]==0x02) && (Recv_number ==10))
  	{
		asm("nop");	
		k=0;
		Recv_number=0;
		mm=0;
		for(i=0; i<10;i++)
		{
			asm("nop");	
			mm ^=Recv_buff[i];
		}
		if(mm)
		{	asm("nop");	
		   return;
		}
	
		Rs232_LED=1;
		for(i=3; i<9; i++)
		{
			asm("nop");	
			if(Recv_buff_B[i] != Recv_buff[i])
			{
				asm("nop");	
				k=1;
				Recv_buff_B[i]= Recv_buff[i];        
			}
		}
		if(!k)
		{
			asm("nop");	
           return;
		}
	    for(i=0; i<3; i++)
		{
			asm("nop");	
			if(Recv_buff[i*2+3] >0xF8)
			{
				asm("nop");	
				Recv_buff[i*2+3] =0xF8;			
			}
		  	M_0_position[i] = Recv_buff[i*2+3]; 
			M_0_speed[i]  = Recv_buff[i*2+4];        
   		}
		//for(i=3; i<9; i++)
		//{
		//	Recv_buff_B[i]= Recv_buff[i];        
		//}		
  	}
  	else if((Recv_buff[2]==0x03) && (Recv_number ==5))
  	{
  		//Reset_sys=1; 
		asm("nop");	
		Recv_number=0;
		mm=0;
		for(i=0; i<5;i++)
		{
			asm("nop");	
			mm ^=Recv_buff[i];
		}
		if(mm)
		{
			asm("nop");	
		   return;
		}
		asm("nop");	
	
		Rs232_LED=1;
		if(!(Reset_data &0x01))
		{
				asm("nop");	
				M_c_direct[0]=0;
				Start_data[0] =63000;  
				TCCR3A  = 0x40;
				TCCR3B	 =0x0B;
				OCR3A = 60; 
				Const_T[0]=0x20;
		}  
		if(!(Reset_data &0x02))
		{
				asm("nop");	
				M_c_direct[1]=0;
				Start_data[1] =63000;  
				TCCR2  = 0x1B;				
				OCR2 = 60; 
				Const_T[1]=0x20;

		}  
		if(!(Reset_data &0x04))
		{
				asm("nop");	
				M_c_direct[2]=0;
				Start_data[2] =63000;  
				TCCR1A  = 0x40;
				TCCR1B	 =0x0B;
				OCR1A = 60; 
				Const_T[2]=0x20;
		}  
	//	power0=1; power1=1;power2=1;power3=1;
   	//	power_count1=0;
   	//	power_count2=0;
   	//	power_count3=0;
	}
	else
		asm("nop");
}
void COM0_TX_process(void)
{
	uchar i,mm;
	asm("nop");	
	if(System_ON_Start)
	{
		asm("nop");	
		return;
	}
	if(!data_change)
	{
		asm("nop");		
		Trans_buff_C[2]=PC_off_data;
		Trans_buff_C[3]=Input_driver;	
		Trans_buff_C[4]=Input_speeder;
		Trans_buff_C[5]=Coin_data;
		Trans_buff_C[6]=AD1_driver;
		Trans_buff_C[7]=AD2_driver;
		Trans_buff_C[8]=AD1_speeder;
		Trans_buff_C[9]=AD2_speeder;
		Trans_buff_C[10]=Reset_data;
		Trans_buff_C[11]=Comm_status;
		for(i=2; i<12; i++)
		{
			asm("nop");	
			if(Trans_buff_B[i] != Trans_buff_C[i])
			{
				asm("nop");	
				data_change=1;
			}
		}	
		asm("nop");	
		if(Coin_data)
		{
			asm("nop");	
			data_change=1;
		}
	}
	if(data_change)
	{
		asm("nop");	
	    //PORTD |=0x20;	// led1 off 	
		data_change=0;
		if((RS485_timer < 60) || TX0_flag)		
		{
			asm("nop");	
			return;
		}
		TX0_flag=1;
		Trans_buff[0]=0x55;
		Trans_buff[1]=03;
		Trans_buff[2]=PC_off_data;
		Trans_buff[3]=Input_driver;
		Trans_buff[4]=Input_speeder;
		Trans_buff[5]=Coin_data;
		Trans_buff[6]=AD1_driver;
		Trans_buff[7]=AD2_driver;
		Trans_buff[8]=AD1_speeder;
		Trans_buff[9]=AD2_speeder;
		Trans_buff[10]=Reset_data;
		Trans_buff[11]=Comm_status;
		mm=0xaa;
		for(i=0; i<12; i++)
		{
			asm("nop");	
			mm ^= Trans_buff[i];
		}
		Trans_buff[12]=mm;
		UDR0 =0xAA;
		Trans_number=0;
		for(i=2; i<12; i++)
		{
			asm("nop");	
			Trans_buff_B[i]=Trans_buff[i];
		}
	}
	else
	{
		asm("nop");	
		//PORTD |=0x20;
		if((idle_count < 10) || TX0_flag)
		{
			asm("nop");	
			return;
		}
		TX0_flag=1;
		idle_count=0;
		Trans_buff[0]=0x55;
		Trans_buff[1]=03;
		Trans_buff[2]=PC_off_data;		
		Trans_buff[3]=Input_driver;
		Trans_buff[4]=Input_speeder;
		Trans_buff[5]=Coin_data;
		Trans_buff[6]=AD1_driver;
		Trans_buff[7]=AD2_driver;
		Trans_buff[8]=AD1_speeder;
		Trans_buff[9]=AD2_speeder;
		Trans_buff[10]=Reset_data;
		Trans_buff[11]=Comm_status;
		mm=0xaa;
		for(i=0; i<12; i++)
		{
			asm("nop");	
			mm ^= Trans_buff[i];
		}
		Trans_buff[12]=mm;
		UDR0 =0xAA;
		Trans_number=0;
		for(i=2; i<12; i++)
		{
			asm("nop");	
			Trans_buff_B[i]=Trans_buff[i];
		}
	}
}


void COM1_TX_process(void)
{
	uchar i=0;
	asm("nop");	
	if(RS485_timer <100)
	{
		asm("nop");	
		return;
	}
	if(!colin)
	{	
		asm("nop");
	   return;
	}
	RS485_timer=0;
	RS485_RCV_OK=0;
	RS485_RCV_number=0;
	TX0_flag=0;
	send485;
	if(RS485_alt) 
	{
		asm("nop");	
	 	RS485_alt=0;  
		RS485_send[0]= 0x02;
		RS485_send[1]= output[0];
        i = RS485_send[0];
		i ^= RS485_send[1];
		RS485_send[2]=i;
		RS485_send[3]=0x0d;
		RS485_count=4;
        RS485_number =0;  
		UDR1=0x01;	
	}
	else
	{
		asm("nop");	
		RS485_alt=1;
		RS485_send[0]= 0x03;
		RS485_send[1]= 0;
        i = RS485_send[0];
		i ^= RS485_send[1];
		RS485_send[2]=i;
		RS485_send[3]=0x0d;
		RS485_count=4;
        RS485_number =0;  
		UDR1=0x01;	
	}
}
void COM1_RX_process(void)
{
	uchar i,j;
	asm("nop");	
	if(Comm_DRV_count > 3)
	{
		asm("nop");	
		Comm_status &= 0x02;
	}
	if(Comm_SPD_count > 3)
	{
		asm("nop");	
		Comm_status &= 0x01;
	}
	if(!RS485_RCV_OK)
	{
		asm("nop");	
		return;
	}
    RS485_RCV_OK=0;
	j=0;
	for(i=1; i<5; i++)
	{
		asm("nop");	
	  	j ^= RS485_RCV_buff[i];
	}
	if(j != RS485_RCV_buff[5])
	{
		asm("nop");	
	 	return;	
	}
    if(RS485_RCV_buff[1] ==2)
	{
		asm("nop");	
		Input_driver = RS485_RCV_buff[2];
		Input_driver &=0xdf;		//avoid 0x20
		AD1_driver = RS485_RCV_buff[3];
		AD2_driver = RS485_RCV_buff[4];
		Comm_status |= 0x01;
		Comm_DRV_count=0;
	}
	else
	{
		asm("nop");	
		AD1_speeder = RS485_RCV_buff[3];
		Comm_status |= 0x02;
		Comm_SPD_count=0;
	}
}

//uint8_t Right_Door(void)

//void PC_Rd_Data(void)

⌨️ 快捷键说明

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