找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4668|回复: 3
打印 上一主题 下一主题
收起左侧

单片机MG90S舵机控制程序 发送信号宽度>20ms,高电平0.5ms:0度,1ms:45,1.5ms:90

[复制链接]
跳转到指定楼层
楼主
ID:500181 发表于 2019-3-28 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//MADE BY TANG BIN.2019
//MG90S舵机,发送信号宽度>20ms,高电平0.5ms:0度,1ms:45,1.5ms:90。。。
//备注:模拟舵机,需要不断发送信号驱动!
#include<reg52.h>
#include <intrins.h>
#define    TIME_WAVE    20000    //20ms
#define JUMP        70    //1s跳动晶振11059200,100us计算跳动1106,1106/12=92,可实际舵机有偏差        
#define TIME        100    //100us
#define DOWN        0
#define TRUE        1
#define FALSE        0
#define uchar unsigned char
#define uint unsigned int
sbit pwm=P1^0;
sbit key0=P3^4;
sbit key45=P3^5;
sbit key90=P3^6;
sbit key180=P3^7;

void delay(uint);

void delay500(uint n);
void send(uint);
//void set_time(uint);
void wait_time(uint);

uchar finish=FALSE;
uchar count=0;

sbit led=P1^7;
//主程序
void main(){
    //中断-------------------------
    TMOD=0x01;    //设置为T0中断模式
    //set_time(500);//初始时间
    //50us的定时
    TH0=(65536-JUMP)/256;
    TL0=(65536-JUMP)%256;
    EA=1;        //开总中断
    ET0=1;        //开TO中断
    TR0=1;        //启动T0
    pwm=0;
    led=1;

   
    //-----------------------------
    while(1)
    {
        uint i=0;
        uchar down=FALSE;
        //有键按下
        if(key0==DOWN)
        {
            down=TRUE;
            for(i=0;i<50;i++)//50*20ms=1,000ms=1s
            send(500);
        }
        if(key45==DOWN)
        {
            down=TRUE;
            for(i=0;i<50;i++)
            send(1000);
        }
        if(key90==DOWN)
        {
            down=TRUE;
            for(i=0;i<50;i++)
            send(2000);
        }
        if(key180==DOWN)
        {
            down=TRUE;
            for(i=0;i<50;i++)
            send(2500);
        }
        led=down?0:1;
        delay(50+down*500);
        led=1;
    }
}
//
/*
void set_time(uint n){
    TH0=(65536-n)/256;
    TL0=(65536-n)%256;
}*/
//
void send(uint us){
    pwm=1;
    wait_time(us);
    pwm=0;
    wait_time(TIME_WAVE-us);
}

void wait_time(uint us){
    //uint jump=(us/25)*23;///500;
    //TH0=(65536-jump)/256;
    //TL0=(65536-jump)%256;
    //nish=FALSE;
    //TR0=1;
    //while(finish==FALSE);
    //delay500(2);
    count=us/TIME;
    while(count>0);
    //TR0=0;
    //_nop_();
}
//
void delay(uint xms){
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}

void delay500(uint n){
    uint i,j;
    for(i=n;i>0;i--)
        for(j=11;j>0;j--);
}

//中断不应占用过多CPU时间
//在这做需要稳定时间处理的操作,不受主程序影响的操作
void T0_time() interrupt 1
{
    TH0=(65536-JUMP)/256;
    TL0=(65536-JUMP)%256;
    //finish=TRUE;
    if(count>0)count--;
}

舵机.rar

1.12 KB, 下载次数: 52, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:508616 发表于 2019-4-10 11:43 | 只看该作者
请问mg90s舵机可以直接接单片机控制不要驱动板的吗?
回复

使用道具 举报

板凳
ID:567962 发表于 2019-9-8 10:50 | 只看该作者
大灰狼吃小红帽 发表于 2019-4-10 11:43
请问mg90s舵机可以直接接单片机控制不要驱动板的吗?

可以的
回复

使用道具 举报

地板
ID:377872 发表于 2019-10-21 14:43 | 只看该作者
为什么不转啊?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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