小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 7982|回复: 9

51舵机程序

[复制链接]
发表于 2012-10-13 14:53:23 | 显示全部楼层 |阅读模式
程序来自网友。。谢谢。。
//制作:猴子
//制作思路:舵机周期为20ms,控制范围在0.5-2.5ms内,一路输出高电平时段,其它所有输出低电平,一路一路轮流切换,最多控制8路,可以随意调节。
                    
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ZQ 20000
uint PWM_S[3];
uint PWM_DD;
uchar BC,RXS; //         路标,第几路PWM、接收数据存储器
sbit PWM_0=P1^0;
sbit PWM_1=P1^1;
sbit PWM_2=P1^2;

void  tt0()
{TMOD=0x01;

        TH0=(65536-PWM_S[2])/256;
        TL0=(65536-PWM_S[2])%256;

        EA = 1;//打开总中断
       ET0 = 1;//打开定时器0中断
       TR0 = 1;//启动定时器0
        EX0= 1;
         PT0=1;  //定时器0 设置为最高优先中断
         PX0=0; // 外部中断0 设置最低中断


}

void timer0(void) interrupt 1
{         
        switch(BC)
        {
                case 1WM_0=0;
                                           PWM_2=1;
                                                   PWM_DD=PWM_DD+PWM_S[0] ;
                           TH0=-(65536-PWM_S[0])/256;   //第一路 输出低电平时长
                           TL0=-(65536-PWM_S[0])%256;
                           break;
                case 2WM_2=0;
                                       PWM_1=1;
                                           PWM_DD=PWM_DD+PWM_S[1] ;
                           TH0=-(65536-PWM_S[1])/256;   //第二路 输出低电平时长
                           TL0=-(65536-PWM_S[1])%256;
                           break;
                case 3WM_1=0;
                                       PWM_0=1;
                                                   PWM_DD=PWM_DD+PWM_S[2] ;
                           TH0=-(65536-PWM_S[2])/256;   //第三路 输出低电平时长
                           TL0=-(65536-PWM_S[2])%256;
                           break;
                case 4:           PWM_2=0;
                                           PWM_1=0;
                                                   PWM_0=0;
                           TH0=-(65536-ZQ+PWM_DD)/256;
                           TL0=-(65536-ZQ+PWM_DD)%256;
                                                   PWM_DD=0;
                                                   BC=0;
                           break;
               
                }
                BC++;
}
void WBZD0(void) interrupt        0           //有接收信号中断
{
   
    RXS=P2 ;

}

void KEY()           //处理控制信号
{  
    switch(RXS)
        {
                case 1:
                                    PWM_S[0] ++;
                                         break;
                                case 2:
                                          PWM_S[0] --;
                                         break;
}
         }
void main(void)
{
  PWM_S[0]=100;
  PWM_S[1]=100;
  PWM_S[2]=1500;

      tt0();
  while(1)
   {
   if(RXS!=0)          //        判断有无接收
   {
       KEY();
         
          }
   }

}

评分

参与人数 1金钱 +2 收起 理由
liuviking + 2

查看全部评分

回复

使用道具 举报

发表于 2012-10-13 17:38:11 | 显示全部楼层
不错不错学习学习
回复 支持 反对

使用道具 举报

发表于 2012-10-13 18:56:42 | 显示全部楼层
谢谢分享,我正准备写这块的程序呢。。。
回复 支持 反对

使用道具 举报

发表于 2012-10-14 20:49:18 | 显示全部楼层
楼主,我研究了一下您写的程序,没咋看懂啊??TH0=-(65536-ZQ+PWM_DD)/256; TL0=-(65536-ZQ+PWM_DD)%256;重装初值时前面是加个“-”是什么意思??还有PWM_DD这个变量是什么意思?
回复 支持 反对

使用道具 举报

发表于 2012-10-14 23:45:46 | 显示全部楼层
谢谢LZ分享
回复 支持 反对

使用道具 举报

发表于 2013-3-12 12:14:30 | 显示全部楼层
谢谢LZ分享
回复 支持 反对

使用道具 举报

发表于 2013-3-12 19:24:17 | 显示全部楼层
谢谢LZ分享
回复 支持 反对

使用道具 举报

发表于 2013-4-30 13:27:45 | 显示全部楼层
看看先!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2013-5-6 00:04:23 | 显示全部楼层
马克标记~~~~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2013-5-11 19:39:03 | 显示全部楼层
想问问楼主是怎么接线的?我用的舵机是9g的那个,红色接5V,棕色接地,橙色接单片机的P0口,编程的方法也类似,也是20ms内控制一段时间高电平,但是舵机就是不动。。P0口是不是还要接电阻什么的呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 04:10 , Processed in 1.087987 second(s), 20 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表