www.pudn.com > xunjijiqiren.rar > Motor._c


//***************************FileName:Motor.C************************ 
//***************************ICCAVR6.30编译************************** 
#include  
#include  
#include  
 
//***************************全局变量定义**************************// 
#define U1 5  
char Data[10];               //接受数据数组 
int adress;                  //数据地址 
int a;                       //采样时间次数 
float t;                     //采样时间.s 
int itime;                   //给定采样时间的次数 
int Ek=0;                     
int Ek_1=0;                    
int Ek_2=0;                   
char flage=0;                //监控标志 
union chang1                  
{ 
char c[4]; 
float x; 
}floatxin; 
union chang2                  
{ 
   char c[2]; 
   int x; 
}intxin;  
 
//**************************串口数据发送函数***********************// 
//说明:串口数据发送采用查询方式,每一帧发送10个字节 
void Putdata(char data[10]) 
{int i; 
 for(i=0;i<=9;i++) 
 {while(!(USR&(1<>8; 
   Data[7]=y; 
   Putdata(Data);}  
  temp1=temp1+z; 
  if(temp1<=0) 
   temp1 = 0x00; 
  if(temp1>=0xF0) 
   temp1 = 0xF0; 
  OCR2=temp1; 
  Ek_2 = Ek_1; 
  Ek_1 = Ek; 
  TCNT1 = 0x0000;                          //计数器清零 
} 
 
//***************************串口初始化函数************************//                    
void USARTInit(int baudrate)     
{UCR = (1<>8);//数据高八位 
} 
 Putdata(Data); 
} 
 
//***************************命令函数******************************// 
void order(void) 
{switch (Data[4]) 
 {case 0xC0:PORTB=PORTB|0x04;break;    //停止 
  case 0xC1:PORTB=PORTB&0xFB;break;    //启动 
  case 0xC2:                           //正转 
           {PORTB=PORTB&0xFC|0x02; 
		    PORTD=PORTD&0x3F|0x40; 
			break;} 
  case 0xC3:                           //反转 
           {PORTB=PORTB&0xFC|0x01; 
		    PORTD=PORTD&0x3F|0x80; 
			break;} 
  case 0xC4:Upspeed();break;           //加速 
  case 0xC5:Downspeed();break;         //减速 
  case 0xC6:                           //制动 
           {PORTB=PORTB|0x03; 
		    PORTD=PORTD&0x3F; 
			break;} 
  case 0xC8:flage=1;break;             //监控 
  case 0xC9:flage=0;break;             //退出监控 
  default :break; 
 } 
} 
 
 
//***************************数据处理函数**************************// 
void Datadisposal(void) 
{char operation; 
 int temp; 
 operation=Data[3]; 
 temp=Data[4]; 
 temp=temp<<8; 
 adress=temp+Data[5]; 
 switch(operation&0x0F) 
 {case 0:readdata(operation>>4);break; 
  case 1:EEPROMWriteBytes(adress,&Data[6],2);break; 
  case 2:order();break; 
  default :break; 
 } 
} 
 
//***************************主函数********************************// 
void main() 
{USARTInit(25);              //初始化串口              
 TCNT1=00;                   //定时器1初始化  
 TCCR1B=0x06; 
 DDRB=0x0F;                  //I/O口初始化 
 DDRD=0xC0;      
 TIMSK=0x40;                 //中断初始化  
 OCR2 = 0x0F;                //PWM初始化 
 TCCR2=0x72; 
 PORTB=PORTB&0xFC|0x01; 
 PORTD=PORTD&0x3F|0x80; 
 SEI(); 
 do{} while(1);              //等待中断 
} 
 
//***************************串行接收中断服务程序******************// 
#pragma interrupt_handler UART_RXC:12 
void UART_RXC(void) 
{char i=0; 
 CLI(); 
 Data[0]=UDR; 
 if(Data[0]==0x55) 
 {do 
  {while(!(USR&(1<