|
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define T 200 //PWM周期 每次中断为0.1ms 200次中断就20ms
sbit DJ=P0^0; //舵机信号输出引脚
sbit key=P2^0;
uchar H_PWM=25; //PWM高电平为 2.5ms 理论转角为180度
uchar tt=0; //中断计算 变量
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void T0_init()
{
TMOD = 0x02; //定时器0 方式2 8自动重装
TH0 = 0x9c; //定时100us 0.1ms
TL0 = 0x9c;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
T0_init();
while(1)
{
}
}
// 0.5ms--------------0度; tt==5
// 1.0ms------------45度; tt==10
// 1.5ms------------90度; tt==15
// 2.0ms-----------135度; tt==20
// 2.5ms-----------180度 tt==25
void timer_T0() interrupt 1
{
tt++;
if(tt<=H_PWM) //H_PWM=25 即高电平时间为 2.5ms
{
DJ=1;
}
else
{
DJ=0;
}
if(tt==T) //周期 200 即20ms
{
tt = 0;
DJ=1;
}
}
|
|