找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3723|回复: 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;
    }
}         



回复

使用道具 举报

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 来自手机 | 显示全部楼层
可以试试
回复

使用道具 举报

ID:417960 发表于 2018-10-30 15:24 | 显示全部楼层
左90°后 延时1秒 再发 右90°归位,同理发送 右90°后 延时1秒 再发 左90°归位。
回复

使用道具 举报

ID:418016 发表于 2018-10-30 16:38 | 显示全部楼层
厉害厉害
回复

使用道具 举报

ID:418098 发表于 2018-10-30 19:16 | 显示全部楼层
很好现在正急需
回复

使用道具 举报

ID:418098 发表于 2018-10-30 19:16 | 显示全部楼层
现在正急需这个
回复

使用道具 举报

ID:418129 发表于 2018-10-30 19:55 | 显示全部楼层
可以试试
回复

使用道具 举报

ID:418138 发表于 2018-10-30 20:07 | 显示全部楼层
学习学习
回复

使用道具 举报

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

使用道具 举报

ID:418247 发表于 2018-10-30 23:15 | 显示全部楼层
上位机
回复

使用道具 举报

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 单片机教程网

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