欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 11.舵机控制

11.舵机控制

2024/11/30 20:30:57 来源:https://blog.csdn.net/CLO_se_/article/details/141689708  浏览:    关键词:11.舵机控制

jd就是cnt,分别对应着

        0.5ms-------------0度;   1 
        1.0ms------------45度;  2
        1.5ms------------90度;  3
        2.0ms-----------135度; 4
        2.5ms-----------180度; 5

并且软件PWM是不稳定的,所以前面要用软件延时稳定一下

#include "reg52.h"sbit sg90_con = P1^1;
int jd;
int cnt = 0;void Delay2000ms()		//@11.0592MHz
{unsigned char i, j, k;i = 15;j = 2;k = 235;do{do{while (--k);} while (--j);} while (--i);
}void Time0Init()
{//1. 配置定时器0工作模式位16位计时TMOD = 0x01;//2. 给初值,定一个0.5ms出来TL0=0x33;TH0=0xFE;//3. 开始计时TR0 = 1;TF0 = 0;//4. 打开定时器0中断ET0 = 1;//5. 打开总中断EAEA = 1;
}void Delay300ms()		//@11.0592MHz
{unsigned char i, j, k;i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i);
}void main()
{Delay300ms();//让硬件稳定一下Time0Init(); //初始化定时器jd = 1;      //初始角度是0度,0.5ms,溢出1就是0.5,高电平cnt = 0;sg90_con = 1;//一开始从高电平开始//每隔两秒切换一次角度while(1){jd = 3; //90度 1.5ms高电平cnt = 0;Delay2000ms();jd = 1; //0度cnt = 0;Delay2000ms();}
}void Time0Handler() interrupt 1
{cnt++;  //统计爆表的次数. cnt=1的时候,报表了1//重新给初值TL0=0x33;TH0=0xFE;//控制PWM波if(cnt < jd){sg90_con = 1;}else{sg90_con = 0;}if(cnt == 40){//爆表40次,经过了20mscnt = 0;  //当40次表示20ms,重新让cnt从0开始,计算下一次的20mssg90_con = 1;}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com