找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新人求助:如何将单片机两个功能整合到一起

  [复制链接]
跳转到指定楼层
楼主
一个程序是直流电机,另一个是串行通讯。两个程序都没问题,合在一起不能运行,有大佬来看看嘛~

6ZNYN03HBK01WLB4}_[2EX7.png (58.82 KB, 下载次数: 12)

6ZNYN03HBK01WLB4}_[2EX7.png

[3YN4R0~`R`OM_)DBC}{0YH.png (55.95 KB, 下载次数: 8)

[3YN4R0~`R`OM_)DBC}{0YH.png

B)$KIXYZI{@%6N8QGZFTCF4.png (31.62 KB, 下载次数: 10)

B)$KIXYZI{@%6N8QGZFTCF4.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:453974 发表于 2019-1-8 22:35 | 只看该作者
可以有其他的方式进行通信,比如利用他的三态性质

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:464992 发表于 2019-1-9 00:10 | 只看该作者
是把两个main()合在一起不行吗?怎么合的?不会是放了两个while()吧?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:77479 发表于 2019-1-9 00:54 | 只看该作者
串口一般是发送字符的,例如,发送字符 A,B,73,这4个字符,单片机接受了4个字符,A代表加速,B代表减速;7字符转换成数字7,3字符转换成数字3,那73的两个字符转换成数字为7*10+3=73. 字符与数字的转换要查ASCII表。'A'=65,  '1'=49;

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:164602 发表于 2019-1-9 08:04 | 只看该作者
两个程序想通过复制粘贴进行组合是不可能的!
其实应该是一个新的程序,包含了另外两个程序的功能。
既然是新程序,那么就应该有与其它两个程序完全相同的结构,如只有一个main()、一个while(1)等等,只不过它有那两个程序的端口申明、函数申明。同时要加上新的东西,如你的串口试验程序不能发送命令,只是一个泛泛的试验,你的步进电机程序也没有接收命令部分,要新程序中,就要加上发命令、接收命令并产生相应动作的部分。
回复

使用道具 举报

6#
ID:195028 发表于 2019-1-9 08:09 | 只看该作者
中断接受数据还是在循环里面执行的,所以你可以在串口接收中断设置标志位,这样就可以在循环里面同时执行两个电机程序
回复

使用道具 举报

7#
ID:123289 发表于 2019-1-9 08:44 | 只看该作者
1、改进两个程序中,所有用硬件延时以及等待的地方。
2、轮流运行两个程序。
回复

使用道具 举报

8#
ID:158375 发表于 2019-1-9 08:45 | 只看该作者
关键的是筹划程序结构。
你打算怎样整合两个功能呢?
是电机要外部控制?还是电机工作状态需要通知外部呢?
回复

使用道具 举报

9#
ID:415064 发表于 2019-1-9 08:49 | 只看该作者
int main(void){
api_init();
while(1)
{
   api_code();
}
return 0;

}
回复

使用道具 举报

10#
ID:462861 发表于 2019-1-9 10:13 | 只看该作者
这个是整合后的程序  没有error  但是功能实现不了

LEI[7CWER4OJL()S$9IUL$H.png (79.84 KB, 下载次数: 10)

LEI[7CWER4OJL()S$9IUL$H.png
回复

使用道具 举报

11#
ID:462861 发表于 2019-1-9 10:42 | 只看该作者
笨笨兔 发表于 2019-1-9 08:45
关键的是筹划程序结构。
你打算怎样整合两个功能呢?
是电机要外部控制?还是电机工作状态需要通知外部呢 ...

电机转速由外部控制  同时工作状态(转速等级)也要通知外部。
回复

使用道具 举报

12#
ID:464992 发表于 2019-1-10 22:57 | 只看该作者
本帖最后由 kolinking 于 2019-1-11 00:37 编辑
PKH123456 发表于 2019-1-9 10:13
这个是整合后的程序  没有error  但是功能实现不了

收发及改变速度的控制错了,原来的程式,每收到命令后,会一直改变速度不会停止,造成错乱。
while(1)
{
  if (Flag==1)
  {
    SBUF=speed;
    while(TI==0);
    TI=0;
    Flag=0;
  }
  if(SenData==0x01) speed-=10;
  else if(SenData==0x02) speed+=10;
  else speed=SanData;
  ...

}

要把改变速度的部份放在发送之前,
while(1)
{
  if (Flag==1)
  {
    if(SenData==0x01) speed-=10;
    else if(SenData==0x02) speed+=10;
    else speed=SanData;

    SBUF=speed;
    while(TI==0);
    TI=0;
    Flag=0;
  }
  ...

}

回复

使用道具 举报

13#
ID:434073 发表于 2019-1-11 10:17 | 只看该作者
你将函数定义写在main函数外,函数初始化写在while循环外,串口与pwm函数执行写在while内就可以了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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