基于51单片机 的 舵机 转动
舵机各个时钟的计算值a、max、min:
舵机原理及驱动.pdf教程:
单片机源程序如下:
- #include <reg52.h> //头文件
- #define uchar unsigned char //宏定义无符号字符型
- #define uint unsigned int //宏定义无符号整型
- uint b; //中断值
- uint N=0; //占空比计数值
- uint X=15; //初始角度值 (取值范2~15)
- sbit PWM=P1^0;//PWM输出 (舵机控制端)
- /*************************************************************************/
- void timer0( ) interrupt 1 //定时器0工作方式1
- {
- TH0=0xff; //重装计数初值 (65535-500)/256; 0.25ms
- TL0=0x38; //重装计数初值 (65535-500)%256;
- b++; //中断值
- if(X!=8)//判断是否计数到9999 (舵机转的速度)
- {
- X=X+4;//加一 改变舵机转变的角度
- }
- if(X!=2)//判断是否计数到0 (舵机转的速度)
- {
- X=X-4;//减一 改变舵机转变的角度
- }
- }
- /*************************************************************************/
- void main()
- {
- TMOD=0X01;
- /***********************************************************
- 0000 0001 选择定时计数器T0 :因为T1是由高4位控制,T0是由低4位控制 而该数中仅有低4位有数据
- (TM0D.4/8) gate(门控位)=0时
- TR0=1(T0)或者TR1=1(T1) 确定T0定时/计数器 此次试验 用的是TR0=1
- ************************************************************/
- TH0=0xff; //重装计数初值 1111 1111
- TL0=0x38; //重装计数初值 0011 1000
- EA=1; //开CPU中断
- ET0=1; //计数器 开启
- /***********************************************************
- 开T/C0中断
- ET0=0时 计时器
- ET0=1时 计数器
- ************************************************************/
- TR0=1; //开启T0
- while(1) //无限循环
- {
- // PWM=1; //输出PWM正
- while(1)
- {
- b=0; //中断值
- while(!b);
- if (N==X) //初始度值
- PWM=0;
- if (N==100)
- break;
- N++; //占空比计数值
- }
- N=0; //占空比计数值
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
舵机自动转自动转.rar
(316.61 KB, 下载次数: 545)
|