//用一个定时器定时100US产生PWM波
//周期200*100us=20ms
//改变b的值族郑谈可改兆碰变占空比 b=10对应高电平时间1ms
#include<STC12C5A.H>
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P2^0
uchar a=200,b=15//b=15对应舵机0度
void Delay1ms(uint i) //1ms延时程序
{
uint j
for(i>0i--)
{
for(j=0j<125j++)
{}
}
}
void main()
{
TMOD=0X01
TH0=(65536-100)/256
TL0=(65536-100)%256
ET0=1
EA=1
TR0=1
P1M0=0X0F//低4位推挽输出 控制两个电机正反转
P1M1=0X00
P2M0=0X01//最低位推挽输出 控制舵机
P2M1=0X00
while(1)
{
P1=0x0a
b=15Delay1ms(2000)//直行
b=10Delay1ms(1000)//左转
b=15Delay1ms(2000)//直行
b=20Delay1ms(1000)//丛喊右转
b=15Delay1ms(2000)//直行
P1=0x05
b=15Delay1ms(2000)//后退
b=10Delay1ms(1000)//后左转
b=15Delay1ms(2000)//后退
b=20Delay1ms(1000)//后右转
b=15Delay1ms(2000)//后退
}
}
void timer0()interrupt 1
{
TH0=(65536-100)/256
TL0=(65536-100)%256
a++
if(a<=b) PWM=1
else PWM=0
if(a==200){a=0PWM=1}
}
使用INT 15H。MOV AH,86H是延迟。蔽慎某资料上塌并颂写参数CX:DX=千分秒,团郑这十分令人费解,研究了一番,发现是是延时(CX*2^16+DX)个百万分之一秒,CXDX相当于作一个64位寄存器,CX高位,DX低位
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)