- // _nop_()延时一个机器周期
[color=rgb(119, 120, 136) !important]
#include <reg52.h>
[color=rgb(119, 120, 136) !important]
#include <intrins.h>
[color=rgb(119, 120, 136) !important]
sbit PWM = P3^0; //设定PWM输出的I/O端口
[color=rgb(119, 120, 136) !important]
unsigned char count = 0;
[color=rgb(119, 120, 136) !important]
unsigned char timer1 ;
[color=rgb(119, 120, 136) !important]
/*
[color=rgb(119, 120, 136) !important]
对于180°舵机
[color=rgb(119, 120, 136) !important]
t = 0.5ms——————-舵机会转动 0 °
[color=rgb(119, 120, 136) !important]
t = 1.0ms——————-舵机会转动 45°
[color=rgb(119, 120, 136) !important]
t = 1.5ms——————-舵机会转动 90°
[color=rgb(119, 120, 136) !important]
t = 2.0ms——————-舵机会转动 135°
[color=rgb(119, 120, 136) !important]
t = 2.5ms——————-舵机会转动180
[color=rgb(119, 120, 136) !important]
*/
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
/*延时程序*/
[color=rgb(119, 120, 136) !important]
void delay1s(void) //误差 0us
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
unsigned char a,b,c;
[color=rgb(119, 120, 136) !important]
for(c=167;c>0;c--)
[color=rgb(119, 120, 136) !important]
for(b=171;b>0;b--)
[color=rgb(119, 120, 136) !important]
for(a=16;a>0;a--);
[color=rgb(119, 120, 136) !important]
_nop_(); //if Keil,require use intrins.h
[color=rgb(119, 120, 136) !important]
}
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
/*定时器T0初始化*/
[color=rgb(119, 120, 136) !important]
void Timer0_Init()
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
TMOD &= 0x00;
[color=rgb(119, 120, 136) !important]
TMOD |= 0x01; //定时器T0设置成方式1
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
TH0 = 0xff; //定时常数 0.1ms 晶振为11.0592MHz
[color=rgb(119, 120, 136) !important]
TL0 = 0xa4;
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
ET0 = 1;
[color=rgb(119, 120, 136) !important]
TR0 = 1;
[color=rgb(119, 120, 136) !important]
EA=1;
[color=rgb(119, 120, 136) !important]
}
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
/*T0中断初始化*/
[color=rgb(119, 120, 136) !important]
void Time0_Init() interrupt 1
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
TR0 = 0;
[color=rgb(119, 120, 136) !important]
TH0 = 0xff; // 0.1ms
[color=rgb(119, 120, 136) !important]
TL0 = 0xa4;
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
if(count <= timer1) //5==0° 15==90°
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
PWM = 1;
[color=rgb(119, 120, 136) !important]
}
[color=rgb(119, 120, 136) !important]
else
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
PWM = 0;
[color=rgb(119, 120, 136) !important]
}
[color=rgb(119, 120, 136) !important]
count++;
[color=rgb(119, 120, 136) !important]
if (count >= 200) //T = 20ms清零
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
count = 0;
[color=rgb(119, 120, 136) !important]
}
[color=rgb(119, 120, 136) !important]
TR0 = 1; //开启T0
[color=rgb(119, 120, 136) !important]
}
[color=rgb(119, 120, 136) !important]
void main()
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
Timer0_Init();
[color=rgb(119, 120, 136) !important]
while(1)
[color=rgb(119, 120, 136) !important]
{
[color=rgb(119, 120, 136) !important]
[color=rgb(119, 120, 136) !important]
timer1 =5;//舵机恢复到0°的位置
[color=rgb(119, 120, 136) !important]
count=0;//让定时器重新计数
[color=rgb(119, 120, 136) !important]
delay1s();
[color=rgb(119, 120, 136) !important]
timer1 =10;
[color=rgb(119, 120, 136) !important]
count=0;
[color=rgb(119, 120, 136) !important]
delay1s();
[color=rgb(119, 120, 136) !important]
}
[color=rgb(119, 120, 136) !important]
}