為啥定時器1中,pwm=0呢。
- #include<reg52.h>
- typedef unsigned int uint;
- typedef unsigned char uchar;
- sbit pwm=P0^0;//輸出PWM信號
- uint pwm_value=1500;
- //初值為1.5ms
- uint value[]={1500,500,1500,1000,1500,2000,1500,2300,1500};//
- void delay_ms(uint x)
- {
- uint i;
- while(x--)for(i=0;i<125;i++);
- }
- void InitTimer(void)
- {
- TMOD=0x11;//開定時器0,1
- TH0=-20000/256;//定時20MS,20MS為一個周期
- TL0=-20000%256;
- TH1=-1500/256;//定時1.5MS,這時舵機處于0度
- TL1=-1500%256;
- EA=1;//開總斷
- TR0=1;//開定時器0
- ET0=1;
- TR1=1;//開定時器1
- ET1=1;
- }
- void timer0(void) interrupt 1//定時器0中斷函數
- {
- pwm=1;
- TH0=-20000/256;
- TL0=-20000%256;
- TR1=1;
- }
- void timer1(void) interrupt 3//定時器1中斷函數
- {
- pwm=0;
- TH1=-pwm_value/256;
- TL1=-pwm_value%256;
- TR1=0;
- }
- void main(void)//主函數
- {
- uchar i;
- InitTimer();
- pwm_value=1500;
- while(1)
- {
- for(i=0;i<9;i++)
- {
- pwm_value=value[i];//通過數組就可以改變舵機的轉角度
- delay_ms(1000);
- }
- }
- }
復制代碼
|