如何設定步進馬達的角度~並傳送至另一個8051! |
缺席
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
|
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
因為我要讓步進馬達再我設定的角度征測物體,
所以必須設定步進馬達在哪些角度感測到物體,
再將感測到物體的角度傳去給51_2執行運轉追蹤,
DB就是例如LED燈不是有設定TABLE的ㄇ!!
就是要利用那種方法來設定角度~
EX:
SteepMotorABC: MOV DPTR,#SteepMotor MOVC A,@A DPTR RET SteepMotor: DB #01H DB #02H DB #04H但我就是不知道該怎麼設定丫.. 請大大給予指導一下~拜託!! 請問~我假使要傳送角度到51_2的話, 除了連接P3.0、P3.1以外~還有別的方法可以傳輸的ㄇ?? 因為我用特殊功能來寫~傳送不過去>"< 想說是否有比較簡單的方法來相互連結2個8051?? 充滿疑問中~請大大多指教!! 謝謝~ |
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
就像這篇程式阿~
我不知道他怎麼設定角度的~
不過我知道它只設定了0~90~180度角~所以設定了3個DB...
但是我不懂他DB設定的01~02~04是什麼意思??
請各位大大能幫我解答ㄇ??
還有請問~假使我要設定其他角度要怎麼設定呢??
拜託大大了~~
BUFFER EQU 30H ORG 00H JMP START ;規避00H至2FH間之中斷向量執行位址 ORG 31H STARTS: MOV TMOD,#00100001B ;設定TIMER0為模式1, TIMER1為模式2 ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC MOV TH1,#FDH SETB TR1 ;啟動TIMER1 MOV SCON,#01000000B ;串列埠MODE1 設定為傳送 ;================== 讀取串列埠資料 ============================== LOOP: MOV A,#05H ;啟動UART的讀入接收資料動作資料 MOV SBUF,A KLOOP: JBC TI,START JMP KLOOP START: MOV P0,#00H MOV P1,#00H MOV P2,#00H MOV R1,#77H MOV R2,#25 MOV R5,#50 MOV R6,#00H MOV R7,#00H SETB P1.0 ;================SONAR 定位 (起始位置0度)================ RIGHT: ;尋找起始位置 JB P0.2,INT_EHCO MOV A,R1 RR A MOV R1,A MOV P2,A MOV R4,#4 CALL DELAY1 DJNZ R2,RIGHT MOV R2,#50 LIFT: JB P0.2,INT_EHCO MOV A,R1 RL A MOV R1,A MOV P2,A MOV R4,#4 CALL DELAY1 DJNZ R2,LIFT MOV R2,#50 JMP RIGHT ;============ 信號激發&接收(偵測障礙物體&距離)================ INT_EHCO: ;開始執行偵測障礙物主程式 CLR P0.0 MOV R3,#4 CALL DELAY SETB P0.0 CALL DELAY_SONAR CLR P0.0 EHCO: INT_EHCO1: ;開始執行偵測障礙物主程式 CLR P0.0 MOV R3,#4 CALL DELAY SETB P0.0 CALL DELAY_SONAR CLR P0.0 EHCO1: JB P0.1,ORIGINATE JB P0.1,ORIGINATE JB P0.1,ORIGINATE JB P0.1,ORIGINATE JB P0.1,ORIGINATE JB P0.1,ORIGINATE JB P0.1,ORIGINATE JB P0.1,ORIGINATE JB P0.1,ORIGINATE CLR P1.0 JMP INT_EHCO ORIGINATE: ;偵測到障礙物 SETB P1.0 ;傳送訊號至8951_2停止行走 MOV A,R7 CALL SteepMotorABC MOV R6,A MOV A,#01H XRL A,R6 JZ STEEP MOV A,#02H XRL A,R6 JZ STEEP1 MOV A,#04H XRL A,R6 JZ STEEP2 JMP INT_EHCO STEEP: CALL CALL_STEEP MOV R7,#01H JMP INT_EHCO STEEP1: CALL CALL_STEEP1 MOV R7,#02H JMP INT_EHCO STEEP2: CALL CALL_STEEP MOV R7,#00H JMP START ;繼續偵測障礙物 ;========================================================= SteepMotorABC: MOV DPTR,#SteepMotor MOVC A,@A DPTR RET SteepMotor: DB #01H DB #02H DB #04H ;=====================STEEP MOTOR================================ CALL_STEEP: MOV R2,#50 RIGHT1: MOV A,R1 RL A MOV R1,A MOV P2,A MOV R4,#2 CALL DELAY1 DJNZ R2,RIGHT1 RET CALL_STEEP1: MOV R2,#100 RIGHT2: MOV A,R1 RR A MOV R1,A MOV P2,A MOV R4,#2 CALL DELAY1 DJNZ R2,RIGHT2 RET ;================ 延遲副程式 ============================== DELAY: MOV TMOD,#01 ;設定Timer1為16位元計時模式 ;50ms產生溢位 MOV TL0,#<(65536-46080) ;儲存16位元之低8位元 MOV TH0,#>(65536-46080) ;儲存16位元之高8位元 SETB TR0 ;啟動計時器 WAIT: JBC TF0,OVERFLOW ;測試是否計時完畢產生溢位 JMP WAIT ;否, 則持續測試溢位之發生 OVERFLOW: CLR TR0 ;關閉計時器 DJNZ R3,DELAY RET ;==================================================================== DELAY1: MOV TMOD,#01 ;設定Timer1為16位元計時模式 ;50ms產生溢位 MOV TL0,#<(65536-46080) ;儲存16位元之低8位元 MOV TH0,#>(65536-46080) ;儲存16位元之高8位元 SETB TR0 ;啟動計時器 WAIT1: JBC TF0,OVERFLOW1 ;測試是否計時完畢產生溢位 JMP WAIT1 ;否, 則持續測試溢位之發生 OVERFLOW1: CLR TR0 ;關閉計時器 DJNZ R4,DELAY1 RET ;================= SONAR_INT_TIMER ================================ DELAY_SONAR: MOV TMOD,#01 ;設定Timer1為16位元計時模式 ;SONAR_INT_TIMER MOV TL0,#<(65536-2652) ;儲存16位元之低8位元 MOV TH0,#>(65536-2652) ;儲存16位元之高8位元 SETB TR0 ;啟動計時器 WAITS: JBC TF0,OVERFLOWS ;測試是否計時完畢產生溢位 JMP WAITS ;否, 則持續測試溢位之發生 OVERFLOWS: CLR TR0 ;關閉計時器 RET END |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |