- #include<reg52.h>
- //#include<intrins.h>
- #include<math.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define k 20
- sbit ena=P0^4;
- sbit enb=P0^5;
- sbit in1=P0^0;
- sbit in2=P0^1;
- sbit in3=P0^2;
- sbit in4=P0^3;
- uchar t=0;//中斷計數
- uchar m1=0;//電機1調速值
- uchar m2=0;//電機2調速值
- uchar tmp1,tmp2;
- //dianji(1-2).speed-電機調速(-100---+100)
- void motor(uchar dianji,char speed)
- {
- if(speed>=-100&&speed<=100)
- {
- if(dianji==1)//電機1的處理
- {
- m1=abs(speed);//取速度的絕對值
- if(speed<0)//速度值為負則反轉
- {
- in1=0;in2=1;
- }
- else//不為負就正轉
- {
- in1=1;in2=0;
- }
- }
- if(dianji==2)//對電機2的處理
- {
- m2=abs(speed);
- if(speed<0)
- {
- in3=0;in4=1;
- }
- else
- {
- in3=1;in4=0;
- }
-
- }
- }
- }
- void delay(uint j)
- {
- uint x,y;
- for(x=j;x>0;x--)
- for(y=120;y>0;y--);
- }
- void main()
- {
- uchar i;
- TMOD=0X02;
- TH0=0X9B;
- TL0=0X9B;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- for(i=0;i<=100;i++)//正轉加速
- {
- motor(1,i);
- motor(2,i);
- delay(500);
- }
- for(i=100;i>0;i--)//正轉減速
- {
- motor(1,i);
- motor(2,i);
- delay(500);
- }
- for(i=0;i<=100;i++)//反轉jia速
- {
- motor(1,-i);
- motor(2,-i);
- delay(500);
- }
- for(i=100;i>100;i--)//反轉減速
- {
- motor(1,-i);
- motor(2,-i);
- delay(500);
- }
- }
-
- }
- void time0() interrupt 1
- {
- if(t==0)
- {
- tmp1=m1;
- tmp2=m2;
- }
- if(t<tmp1) ena=1;else ena=0;//產生電機1的PWM信號
- if(t<tmp2) enb=1;else enb=0;//產生電機2的PWM信號
- t++;
- if(t>=100)//產生100次中斷
- t=0;//清零,成新開始中斷
- }
復制代碼 |