求助:當串口接收到‘1’時 電機正轉,接收到‘2’時,電機反轉,再接收到‘1’時 步進電機會卡住不動,再發一次‘1’,步進電機才會轉動,是什么原因?有什么解決方法嗎?
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- //------8拍-----
- uchar code fz[8]={0x10,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //
- uchar code zz[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x10}; //
- uchar state=0;
- uchar both=0;
- unsigned char receiveData='0';
- void UsartConfiguration(); //初始化串口
- void delay(void)
- {
- unsigned char a,b;
- for(a=15;a>0;a--)
- for(b=152;b>0;b--);
- }
- void motor1_zz() //正轉函數
- {
- uint j;
- for(j=0;j<8;j++)
- {
- P1=zz[j];
- delay();
- }
- }
- void motor1_fz() //反轉函數
- {
- uint j;
- for(j=0;j<8;j++)
- {
- P1=fz[j];
- delay();
- }
- }
- void main()
- {
- UsartConfiguration();
- while(1)
- {
- while(both==0)
- {
- if(receiveData=='1')
- {
- state=1;
- receiveData='0';
- break;
- }
- if(receiveData=='2')
- {
- state=2;
- receiveData='0';
- break;
- }
- P1=0x0f;
-
- }
- while(state==1)
- {
- if(receiveData=='2')
- {
- state=2;
- receiveData='0';
- break;
- }
- if(receiveData=='1')
- {
- state=1;
- receiveData='0';
- break;
- }
- motor1_zz();
-
- }
- while(state==2)
- {
- if(receiveData=='1')
- {
- state=1;
- receiveData='0';
- break;
- }
- if(receiveData=='2')
- {
- state=2;
- receiveData='0';
- break;
- }
- motor1_fz();
-
-
- }
-
- }
- }
- /************************************************************************
- * 函數名 :UsartConfiguration()
- * 函數功能 :設置串口
- * 輸入 : 無
- * 輸出 : 無
- *************************************************************************/
- void UsartConfiguration()
- {
- SCON=0X50; //設置為工作方式1
- TMOD=0X21; //設置計數器工作方式2 和定時器0
- PCON=0X80; //波特率加倍
- TH1=0XFA; //計數器初始值設置,注意波特率是9600的
- TL1=0XFA;
- ES=1; //打開接收中斷
- EA=1; //打開總中斷
- TR1=1; //打開計數器
- }
- void Usart() interrupt 4
- {
- receiveData=SBUF;//fa出去接收到的數據
- while(!RI);
- RI = 0;//清除接收中斷標志位
- }
復制代碼
|