|
| 你將函數定義寫在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)等等,只不過它有那兩個程序的端口申明、函數申明。同時要加上新的東西,如你的串口試驗程序不能發送命令,只是一個泛泛的試驗,你的步進電機程序也沒有接收命令部分,要新程序中,就要加上發命令、接收命令并產生相應動作的部分。 |