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<