[問題] C++求救!不知道問題在哪裡!!

看板ASM (組合語言)作者 (阿菁)時間15年前 (2009/07/18 21:44), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/4 (看更多)
※ [本文轉錄自 C_and_CPP 看板] 作者: wayn12342000 (阿菁) 看板: C_and_CPP 標題: [問題] C++求救!不知道問題在哪裡!! 時間: Sat Jul 18 21:40:13 2009 目前正在進行專題, 遇到一個很奇怪的問題, 我描述一下情況: 目前從學長那繼承一個由伺服馬達控制的機器人, 原有的控制方式是組語, 後來改用C控制, 但發生副程式無法動作的情況, 下面是控制方式 範例(組語): 略... mov r2,#50 ;給值50 loop0: mov p2,00000001;丟值進P2.0 控制motor1 call delay15 ;延遲1.5ms(角度一) mov p2,00000010;丟值進P2.1 控制motor2 同時將P2.0值=0 call delay20 ;延遲2.0ms(角度二) call delay200 ;延遲20ms (滿足週期 驅動馬達動作) djnz r2,loop0 略... 註:伺服馬達的控制是給予一小段特定時間脈波(1.5ms 2.0ms... 並於滿足週期後向著目標角度進行一動(視馬達而定... 給予足夠迴圈就可以移至正確角度位置(r2=50... 簡單介紹後進入正題, 目前寫出來的C是 略.... void hd1( int );宣告各部位副程式 頭 void lh2( int ); 手 略... main() { int i; for(i=0;i<50;i++) { hd1( 45 );要求移向的角度 } for(i=0;i<50;i++) { lh2( 45 ); } } void hd1( int angle ) { p1=00000001; angledelay( angle ); } void lh2( int angle ) { p1=00000010; angledelay( angle ); } void angledelay( int angle ) 略... 問題開始!! 在原先測試的時候發現robot像中風一樣一直抖...抖...抖... 轉而用這個簡易程式測試 結果發現各種交叉測試 1.交換馬達 2.交換程式位置(考慮定義先後 3.改變輸出port點 都無法使lh2這個副程式正常動作 但hd1完全正常!!! 但hd1完全正常!!! 但hd1完全正常!!! DEBUG到目前為止並無發現任何硬體上的錯誤以及軟體上直接的錯誤 是有什麼隱規則被忽略掉了嗎? 這兩個副程式只差在一個叫hd1 一個叫lh2 但結果是天差地別 請問各位高手有什麼辦法嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.120.102 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.120.102

07/18 22:05, , 1F
再這兩個副程式結束時都加一個 P2=0; 如何?
07/18 22:05, 1F

07/18 22:06, , 2F
看錯了,P1=0。對了,為甚ASM寫P2,C寫P1 ?
07/18 22:06, 2F

07/18 22:10, , 3F
忘記說了 補充:副程式結束時都有加上P1=0
07/18 22:10, 3F

07/18 22:12, , 4F
那檢查一下電路,可能有SHORT或連到別的東西
07/18 22:12, 4F

07/18 22:15, , 5F
經交叉測試 硬體方面完全沒有錯誤
07/18 22:15, 5F

07/18 22:16, , 6F
hd1不論是去控制p1.0或是p1.1都OK 兩顆馬達也單獨測
07/18 22:16, 6F

07/18 22:16, , 7F
試,結果也是正常的
07/18 22:16, 7F
文章代碼(AID): #1AOT727F (ASM)
文章代碼(AID): #1AOT727F (ASM)