找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何用单片机串口发送字符控制舵机

  [复制链接]
跳转到指定楼层
楼主
ID:213280 发表于 2018-10-29 22:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了个用51单片机串口发送字符控制舵机的程序,发送0左转动90°,发送1右转动90°。我想要改为发送0左转动90°,延时1s后归位,同理发送1也一样,请问怎么改?
下面的是两段主要程序:
void Com_Int(void) interrupt 4
{
        
        if(RI == 1)   //当硬件接收到一个数据时,RI会置位
        {
                cmd = SBUF; //这里接收到的是16进制
                RI = 0;  
                SBUF = cmd;               
        }
        
        switch(cmd)
                                {
                                case 0:
                                        SG1_count = 25;
                                        break;
                                
                                case 1:
                                        SG1_count = 5;                        
                                        break;
                                default: break;
        }

        if (TI) //字节发送完毕
        {
                TI = 0; //手动清零发送中断标志位
        }              //TI清零
}

/*********************************
函数:Time0Int()
参数:无
返回:无
说明:定时器0中断函数。用于处理PWM的信号。
**********************************/
void Time0Int(void) interrupt 1 using 1
{
        if(count <= SG1_count) //控制占空比左右
    {
        //如果count的计数小于(5-25)也就是0.5ms-2.5ms则这段小t周期持续高电平。产生方波
        SG1_PWM = 1;
    }
    else
    {
        SG1_PWM = 0;
    }
            count++;
    if (count >= 200) //T = 20ms则定时器计数变量清0
    {
        count = 0;
    }
}         



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

使用道具 举报

沙发
ID:94031 发表于 2018-10-30 08:39 | 只看该作者
发送 左90°后 延时1秒 再发 右90°归位,同理发送 右90°后 延时1秒 再发 左90°归位。
回复

使用道具 举报

板凳
ID:308437 发表于 2018-10-30 09:15 | 只看该作者
   switch(cmd)
                                {
                                case 0:
                                        SG1_count = 25;
                                       flag1=1;
                                        break;
                                
                                case 1:
                                        SG1_count = 5;     
                                       flag2=1;                  
                                        break;
                                default: break;
        }

加上一个标志位然后在主循环中扫描这个标志位,按照这个思路试试
回复

使用道具 举报

地板
ID:417937 发表于 2018-10-30 15:00 来自手机 | 只看该作者
可以试试
回复

使用道具 举报

5#
ID:417960 发表于 2018-10-30 15:24 | 只看该作者
左90°后 延时1秒 再发 右90°归位,同理发送 右90°后 延时1秒 再发 左90°归位。
回复

使用道具 举报

6#
ID:418016 发表于 2018-10-30 16:38 | 只看该作者
厉害厉害
回复

使用道具 举报

7#
ID:418098 发表于 2018-10-30 19:16 | 只看该作者
很好现在正急需
回复

使用道具 举报

8#
ID:418098 发表于 2018-10-30 19:16 | 只看该作者
现在正急需这个
回复

使用道具 举报

9#
ID:418129 发表于 2018-10-30 19:55 | 只看该作者
可以试试
回复

使用道具 举报

10#
ID:418138 发表于 2018-10-30 20:07 | 只看该作者
学习学习
回复

使用道具 举报

11#
ID:274129 发表于 2018-10-30 22:13 | 只看该作者
电脑上位机发送字符给单片机  单片机进行处理命令   然后在串口中断里面判断接受到的字符   接受到什么字符  单片机执行什么操作
回复

使用道具 举报

12#
ID:418247 发表于 2018-10-30 23:15 | 只看该作者
上位机
回复

使用道具 举报

13#
ID:213280 发表于 2018-11-1 16:42 | 只看该作者
yousunny 发表于 2018-10-30 09:15
switch(cmd)
                                {
                                case 0:

试了下,还是不行,但还是谢谢了,换了个思路做
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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