你将函数定义写在main函数外,函数初始化写在while循环外,串口与pwm函数执行写在while内就可以了 |
本帖最后由 kolinking 于 2019-1-11 00:37 编辑 PKH123456 发表于 2019-1-9 10:13 收发及改变速度的控制错了,原来的程式,每收到命令后,会一直改变速度不会停止,造成错乱。 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; } ... } |
笨笨兔 发表于 2019-1-9 08:45 电机转速由外部控制 同时工作状态(转速等级)也要通知外部。 |
int main(void){ api_init(); while(1) { api_code(); } return 0; } |
关键的是筹划程序结构。 你打算怎样整合两个功能呢? 是电机要外部控制?还是电机工作状态需要通知外部呢? |
1、改进两个程序中,所有用硬件延时以及等待的地方。 2、轮流运行两个程序。 |
中断接受数据还是在循环里面执行的,所以你可以在串口接收中断设置标志位,这样就可以在循环里面同时执行两个电机程序 |
两个程序想通过复制粘贴进行组合是不可能的! 其实应该是一个新的程序,包含了另外两个程序的功能。 既然是新程序,那么就应该有与其它两个程序完全相同的结构,如只有一个main()、一个while(1)等等,只不过它有那两个程序的端口申明、函数申明。同时要加上新的东西,如你的串口试验程序不能发送命令,只是一个泛泛的试验,你的步进电机程序也没有接收命令部分,要新程序中,就要加上发命令、接收命令并产生相应动作的部分。 |