51单片机用软件定时来控制舵机,延时函数怎么写?求解

如题所述

第1个回答  2015-05-06
延时可以用定时器来实现,也可以自己写延时函数。
这是51单片机定时器初始化示例程序。
TMOD = 0x10f; //GATE=0 01010001
//C/T=0--定时/计数器1工作于定时方式
//M1=1;M0=0--选择工作模式1,构成最大定时器
//T0:在此程序不使用
TL1 = 0x13; TH1 = 0x2C; //指定定时时间为50ms 65536-50/(11.0592/12)=11283=2C13h
EA = 1; //开总中断
TF1 = 0;
ET1 = 1; //开定时器中断
TR1 = 1; //开始计时
如果用延时函数,要精确计算时间。
这是精确定时1ms的程序,你可以参考一下。
void delay1ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}追问

1个定时器能带几个设备啊?我想用定时器来做电机的,用延时函数来控制舵机,那个延时函数能延时更小码,求解,谢谢

追答

这个问题问得比较有意思。
理论上1个定时器可以做很多事情。
比如,你的定时器定时间为1ms,你电机PWM周期刚好为1ms的整数倍,那你就可以用这个定时器来驱动电机。同时,你的舵机延时是10ms,那么你也可以用这个定时器来做。
你需要控制几个电机?现在一般的单片机本身都有PWM控制。你可以直接用。
延时函数延时是任意的。只要是机器周期的整数倍都可以实现。比如你用12M的晶振,单片机也是12T的,那机器周期就是1us,那么就可以延时任意us.

追问

那1us延时怎么来啊?keil上运行我直接看不懂啊?1250853412,求教

追答

1us的延时,直接一个nop就可以了啊

本回答被提问者和网友采纳