我串口接收来自PC的命令FF 01 00 02 1E 00 21 FF 01 00 00 00 00 01 |
单片机收到数据后,把这些数据保存在数组里。然后逐一对比收到数据的准确性,如果准确,让电机旋转。
问题:下载到单片机程序没有任何反应,请问各位大神,我的程序思路正确吗
- <P># include <reg52.h>
- typedef unsigned int uint16;
- typedef unsigned char uchar8;
- typedef unsigned long int uint32;
- uchar8 rec_dat[]={0};
- uchar8 i = 0;
- //uchar8 num;//接收字节个数计数器
- uint32 pulse;
- code uchar8 up_data[8] ={0xFe,0xFc,0xFd,0xF9,0xFb,0xF3,0xF7,0xF6};//反转数组
- code uchar8 down_data[8]={0XF6,0XF7,0XF3,0XFB,0XF9,0XFD,0XFC,0XFE};//正转数组
- /*延时函数*/
- void delay_ms(uchar8 z)
- {
- uchar8 x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- /*将旋转角度转换为脉冲数量,实参传递的是圈数*/
- void motor_pulse(uint32 angle)
- {
- EA = 0;//</P>
- <P>pulse = (angle*4096)/360;
- EA = 1;
- }
- /*串口配置函数: 串口工作方式设置 定时器T1设置波特率*/
- void config (uint16 BAUD)
- {
- SCON = 0X50;//SM0=0 SM1=1 SM2=0 REN=1串口工作在波特率可变模式 允许接收
- TMOD = 0X20;//TO工作在方式1,定时模式;T1工作在方式2,自动重装模式
- TH1 = 256 - (11059200/12/32)/BAUD;
- TL1 = TH1;//定时器T1工作在方式2自动重装模式:TL0计数器溢出后又TH0自动填数
- TR1 = 1;//启动定时器T1
- EA = 1;//启动总中断
- ES = 1;//启动串口中断
- }
- /*电机旋转函数:旋转实参传递的是电机旋转角度*/
- void motor_up()
- {
- static uchar8 index = 0;
- while (pulse!=0)
- {
- P1 = up_data[index];
- delay_ms(10);
- index++;
- index = index&0x07;//此句等效如果index>=8,index=0
- pulse--;
- }
- }
- /*主函数*/
- void main ()
- {
- config(2400);//配置波特率为9600
- while(1)
- {
- if ((rec_dat[0]==0xff) && (rec_dat[1]==0x01) && (rec_dat[2]==0x00) && (rec_dat[3]==0x02) && (rec_dat[4]==0x1e) && (rec_dat[5]==0x00) && (rec_dat[6]==0x21) && (rec_dat[7]==0xff) && (rec_dat[8]==0x01) && (rec_dat[9]==0x00) && (rec_dat[10]==0x00) && (rec_dat[11]==0x00) && (rec_dat[12]==0x00) && (rec_dat[13]==0x01) )
- //if (rec_dat[5] == 0x21)
- {
- motor_pulse(180);//如果收到的命令正确,给电机发送旋转圈数1
- motor_up();//电机正转
- }
- }
- }
- void InterruptUART() interrupt 4
- {
- static uchar8 num = 0;//接收字节个数计数器
- if(RI)
- {
- RI = 0;
- rec_dat[num] = SBUF;
- if((num==0) &&(rec_dat[num]==0XFF))
- {
- rec_dat[num] = SBUF;
- num = 1;
- }
- else if((num == 1) &&(rec_dat[num] = 0X01) )
- {
- rec_dat[num] = SBUF;
- num = 2;
- }
- else if((num == 2) &&(rec_dat[num] = 0X00) )
- {
- rec_dat[num] = SBUF;
- num = 3;
- }
- else if((num == 3) &&(rec_dat[num] = 0X02) )
- {
- rec_dat[num] = SBUF;
- num = 4;
- }
- else if((num == 4) &&(rec_dat[num] = 0X1e) )
- {
- rec_dat[num] = SBUF;
- num = 5;
- }
- else if((num==5) &&(rec_dat[num]==0X00))
- {
- rec_dat[num] = SBUF;
- num = 6;
- }
- else if((num == 6) &&(rec_dat[num] = 0X21) )
- {
- rec_dat[num] = SBUF;
- num = 7;
- }
- else if((num == 7) &&(rec_dat[num] = 0Xff) )
- {
- rec_dat[num] = SBUF;
- num = 8;
- }
- else if((num == 8) &&(rec_dat[num] = 0X01) )
- {
- rec_dat[num] = SBUF;
- num = 9;
- }
- else if((num == 9) &&(rec_dat[num] = 0X00) )
- {
- rec_dat[num] = SBUF;
- num = 10 ;
- }
- else if((num == 10) &&(rec_dat[num] = 0X00) )
- {
- rec_dat[num] = SBUF;
- num = 11 ;
- }
- else if((num == 11) &&(rec_dat[num] = 0X00) )
- {
- rec_dat[num] = SBUF;
- num = 12 ;
- }
- else if((num == 12) &&(rec_dat[num] = 0X00) )
- {
- rec_dat[num] = SBUF;
- num = 13;
- }
- else if((num == 13) &&(rec_dat[num] = 0X01) )
- {
- rec_dat[num] = SBUF;
- num = 0;
- }
- else
- num = 0;
- }
- if (TI)
- TI = 0;
- }</P>
|