- #include "reg52.h"
- void delay(unsigned int t);
- //Motor
- sbit F1 = P1^0;
- sbit F2 = P1^1;
- sbit F3 = P1^2;
- sbit F4 = P1^3;
- sbit k1 =P3^0;
- sbit k2=P3^1;
- sbit RX=P0^6; //
- sbit TX=P0^7;
- sbit shuidi=P0^3;
- sbit hongyai=P0^0;
- sbit yali=P0^2;
- bit flag1=0;
- bit flag2=0;
- signed int time=0;
- unsigned int timer=0;
- unsigned long S=0;
- unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉
- unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正轉
- void Conut(void)
- {
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
-
- S= (long)(time*0.17); //算出來是CM
- if((S>=4000)||flag1==1) //
- {
- flag1=0;
- }
- }
- void zd0() interrupt 1 //T0中斷用來計數器溢出,超過測距范圍
- {
- flag1=1; //中斷溢出標志
- }
- void panduan()
- {
- TMOD=0x11; //設T0為方式1,GATE=1;
- TH0=0;
- TL0=0;
- TH1=0xf8; //2MS定時
- TL1=0x30;
- ET0=1; //允許T0中斷
- ET1=1; //允許T1中斷
- TR1=1; //開啟定時器
- EA=1; //總中斷
- {
- while(!RX); //當RX為零時等待
- TR0=1; //開啟計數
- while(RX); //當RX為1計數并等待
- TR0=0; //關閉計數
- Conut(); //計算
- if(S<80)
- flag2=0;
- else
- flag2=0;
- }
- //調節轉速
- }
- void motor_FFW()
- {
- unsigned char i;
- {
- for (i=0; i<8; i++)
- {
- if(hongyai==0) P1 = FFW[i]&0x1f; //調取數據
- if(k2==0) P1 = FFW[i]&0x1f;
- if(yali==0) P1 = FFW[i]&0x1f;
- if(flag2==0)P1 = FFW[i]&0x1f;
-
- delay(1);
- }
- }
- }
- void motor_FFZ()
- {
- unsigned char i;
- {
- for (i=0; i<8; i++)
- {
- if(k1==0) P1 = FFZ[i]&0x1f;
- if(shuidi==0) P1 = FFZ[i]&0x1f;
-
-
- delay(1); //調節轉速
- }
- }
- }
- void main()
- {
- while(1)
- {
- if(flag2==0)
- motor_FFW();
-
- if(shuidi==0)
- motor_FFZ();
- if(hongyai==0)
- motor_FFW();
- if(yali==0)
- motor_FFW();
- }
- }
復制代碼
編譯沒有問題,程序燒錄后控制不了五線四相步進電機
求大神解決!
|