我现在也在做舵机控制,这是控制一个舵机的程序,可以参考!
改变单片机输出脉冲宽度1ms~2ms,使舵机在-90°~+90°间转动
单片机源程序如下:
- /*-----------------------------------------------
- 名称:舵机控制
- 编写:shifang
- 修改:无
- 内容:舵机进行循环左右摇臂动作 20ms周期,高电平时间从0.5ms~2.5ms,最大范围,根据不同舵机调整
- ------------------------------------------------*/
- #include<reg52.h>
- #include "delay.h"
- sbit OUT = P0^0;
- unsigned char TH_H,TL_H,TH_L,TL_L;//
- /*------------------------------------------------
- 定时器初始化子程序
- ------------------------------------------------*/
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 TOMD = TOMD | 0X01
- TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
- TL0=0x00;
- EA=1; //总中断打开
- ET0=1; //定时器中断打开
- TR0=1; //定时器开关打开
- }
- /*------------------------------------------------
- 数据处理
- ------------------------------------------------*/
- void DataPro(unsigned int temp)
- {
- TH_H=(65536-temp)/256;
- TL_H=(65536-temp)%256;
- TH_L=(46536+temp)/256;
- TL_L=(46536+temp)%256;
- }
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- unsigned int temp=1500;
- bit flag=0;
- Init_Timer0();
- DataPro(temp);
- while(1)
- {
- while(!flag){
- if(temp<2300)
- temp+=10;
- else
- flag=1;
- DelayMs(3);
- DataPro(temp);
- }
- while(flag)
- {
- if(temp>700)
- temp-=10;
- else
- flag=0;
- DelayMs(3);
- DataPro(temp);
- }
-
- }
- }
- /*------------------------------------------------
- 定时器中断子程序
- ------------------------------------------------*/
- void Timer0_isr(void) interrupt 1
- {
- if(OUT)
- {
- TH0=TH_L; //重新赋值
- TL0=TL_L;
- }
- else
- {
- TH0=TH_H; //重新赋值
- TL0=TL_H;
- }
- OUT=!OUT;
- }
复制代码
所有资料51hei提供下载:
127-舵机扇形摇摆.rar
(23.41 KB, 下载次数: 40)
|