程式的修改!!! |
缺席
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
各位大大!!
我試著寫一ㄍ程式~但是有關TXD跟RXD的用法有點模糊~請各位老大幫忙指點一下~~因為學校也關了~無法ㄑ測試~也請各位大大能幫我看看哪邊有錯誤或MISS掉的地方~~拜託各位老大了>"<~ PS:
89c51-1==>(P3.0~3.1是rxd跟txd~p2.0~2.3是步進馬達~p0.5是光遮斷器p0.6是人體紅外線) 89c51-2==>(P3.0~3.1是rxd跟txd~p1.0~1.3是馬達正反轉~p0.0~0.7是馬達轉速) 89c51-1的程式
;=======SONARE感測器測試控制模式=========================== BUFFER EQU 30H ORG 00H JMP START ;規避00H至2FH間之中斷向量執行位址 ORG 31H START: ;執行感測器程式 MOV P0,#00H ;清除P0&P1停止馬達轉動 MOV P1,#00H MOV P2,#00H ;清除接收模組所接收之資料 MOV R1,#33H ;R1設定STEP MOTOR為二相激磁 MOV R2,#25 ;R2設定STEP MOTOR轉動角度45度 MOV R5,#50 MOV R6,#00H ;清除R6&R7清除STEP MOTOR模式 MOV R7,#00H SETB P1.0 ;機器人等待感測器訊號 ;==========SONAR 定位 (起始位置0度)============ ===== RIGHT: ;執行感測器歸位為0度 JB P0.5,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.5,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 ;============================================================ 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 ;8951_1,UART傳送資料至8951_2啟動傳送與接收 MOV SBUF,A KLOOP: JBC TI,INT_EHCO ;等待資料傳送完畢執行感測器程式 JMP KLOOP ;=== ===SONAR 信號接收模式(偵測障礙物體)==== ========= INT_EHCO: ;開始執行偵測物體主程式 CLR P0.6 ;延遲激發感測器之時間 MOV R3,#4 CALL DELAY SETB P0.6 ;傳送激發訊號至感測器開始偵測障礙物 CALL DELAY_SONAR CLR P0.6 ;感測器由激發訊號轉換為接收訊號 JB P0.6,ORIGINATE ;等待接收到接收訊號傳送訊號至8951_2停止前進副程式 JB P0.1,ORIGINATE ;執行STEP MOTOR主程式,呼叫STEP MOTOR模式0 CLR P0.6 ;未偵測到物體傳送訊號至8951_2繼續執行直走副程式 JMP INT_EHCO ;繼續執行偵測障礙物 ;===========SONAR 信號接收模式1(偵測障礙物體)===== INT_EHCO1: ;開始執行偵測物體主程式主程式0 CLR P0.6 ;;延遲激發感測器之時間 MOV R3,#4 CALL DELAY SETB P0.6 CALL DELAY_SONAR CLR P0.6 JB P0.6,ORIGINATE ;等待接收到接收訊號傳送訊號至8951_2停止前進副程式 JB P0.6,ORIGINATE ;執行STEP MOTOR主程式,呼叫STEP MOTOR模式1 SETB P3.0 ;未偵測到物體停止機器人行走副程式 STARTS1: MOV TMOD,#00100001B ;設定TIMER0為模式1, TIMER1為模式2 ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC MOV TH1,#FDH SETB TR1 ;啟動TIMER1 MOV SCON,#01000000B ;串列埠MODE1 設定為傳送 LOOP1: MOV A,#06H ;8951_1,UART傳送資料至8951_2執行機器人右轉副程式 MOV SBUF,A KLOOP1: JBC TI,CA JMP KLOOP1 CA: MOV R2,#50 ACALL CALL_STEP1 ;感測器歸位 MOV R6,#00H MOV R7,#00H ;清除重新選擇STEP MOTOR模式 JMP STARTS ;回程式頭繼續偵測障礙物JMP STARTS ;========傳送訊號至8951_2停止前進副程式================ ORIGINATE: ;偵測到障礙物 SETB P3.0 ;傳送訊號至8951_2停止行走 MOV A,R7 CALL StepMotorABC ;呼叫STEP MOTOR轉動角度副程式 MOV R6,A ;選擇STEP MOTOR模式0 MOV A,#01H XRL A,R6 JZ STEP MOV A,#02H ;選擇STEP MOTOR模式1 XRL A,R6 JZ STEP1 MOV A,#04H ;選擇STEP MOTOR模式2 XRL A,R6 JZ STEP2 JMP STARTS ;JMP STARTS INT_EHCO2: ;開始執行偵測物體主程式 CLR P0.6 MOV R3,#4 CALL DELAY SETB P0.6 CALL DELAY_SONAR CLR P0.6 JB P0.6ORIGINATE SETB P3.0 STARTSX1: MOV TMOD,#00100001B ;設定TIMER0為模式1, TIMER1為模式2 ANL PCON,#01111111B ;設定鮑率為9600 BIT/SEC MOV TH1,#FDH SETB TR1 ;啟動TIMER1 MOV SCON,#01000000B ;串列埠MODE1 設定為傳送 LOOP2: MOV A,#01H ;啟動UART的讀入接收資料動作資料 MOV SBUF,A KLOOP2: JBC TI,CA1 JMP KLOOP2 CA1: MOV R2,#50 ACALL CALL_STEP ;感測器歸位 MOV R6,#00H MOV R7,#00H ;清除重新選擇STEP MOTOR模式 JMP STARTS ;回程式頭繼續偵測物體 STARTS ;=================STEP MOTOR模式================== STEP: ;STEP MOTOR模式0 MOV R2,#50 CALL CALL_STEP MOV R7,#01H JMP INT_EHCO1 ;執行感測模式1 STEP1: ;STEP MOTOR模式1 MOV R2,#100 CALL CALL_STEP1 MOV R7,#02H JMP INT_EHCO2 ;執行感測模式2 STEP2: ;STEP MOTOR模式2 MOV R2,#50 CALL CALL_STEP MOV R7,#00H JMP STARTS ;回程式頭繼續偵測物體; ;==================STEP MOTOR轉動角度副程式=================== StepMotorABC: MOV DPTR,#StepMotor MOVC A,@A DPTR RET StepMotor: DB #01H DB #02H DB #04H ;=====================STEEP MOTOR副程式================== CALL_STEP: RIGHT1: MOV A,R1 RL A MOV R1,A MOV P2,A MOV R4,#2 CALL DELAY1 DJNZ R2,RIGHT1 RET CALL_STEP1: LIFT1: MOV A,R1 RR A MOV R1,A MOV P2,A MOV R4,#2 CALL DELAY1 DJNZ R2,LIFT1 RET ;================================= 延遲副程式 ========== DELAY: MOV TMOD,#01 ;設定Timer1為16位元計時模式 ;5ms秒產生溢位 MOV TL0,#<(65536-4608) ;儲存16位元之低8位元 MOV TH0,#>(65536-4608) ;儲存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這是89C51-2的程式 ORG 00H JMP START ORG 30H START: MOV P0,#00H ;清除R/L轉速 MOV P1,#00H ;清除模式 LOOP: MOV A,P2 XRL A,#09H ;判斷是否為右自轉 JZ SLOW ;是,轉速為低速檔 MOV A,P2 XRL A,#06H ;判斷是否為左自轉 JZ SLOW ;是,轉速為低速檔 FAST: MOV P0,#BFH ;轉速為高速檔 MOV P1,P2 ;載入模式 JMP LOOP SLOW: MOV P0,#22H ;轉速為低速檔 MOV P1,P2 ;載入模式 JMP LOOP發表人 - big_eyes 於 2005/04/29 18:03:58 發表人 - big_eyes 於 2005/04/29 18:04:27 發表人 - big_eyes 於 2005/04/29 18:09:53 發表人 - big_eyes 於 2005/04/29 18:12:48 發表人 - big_eyes 於 2005/04/29 18:18:36 發表人 - big_eyes 於 2005/04/29 19:18:57 |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 對阿~我只是做IO控制阿~ 需要用到RS32??? 我沒有要用RS232耶!!! 這程式只是要讓他追蹤物體阿~~ 只是想讓大家看看有關TXD跟RXD的寫法是否正確的傳送!!沒有用232他就只是單純的I/O,你51-2還要寫一段程去判斷P3.0的接腳,才會動作. 沒有用到232,它就只是I/O P3.0,3.1 ok?
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
big_eyes
一般會員 發表:28 回覆:52 積分:16 註冊:2005-03-22 發送簡訊給我 |
引言: 不曉得你在改什麼內!! 你89C51-2的程式還是沒有寫出判斷51-1有沒有送P3.0 的訊號 89C51-2的程式中也沒有停止的部份...只有你寫的低速與高速的部份抱歉~~版主! 您說51-2是不是只要從51-1的P3.0的暫存器中拿出數值呢?? 一樣要寫MOV A,#05H MOV SBUF,A~~這樣就能從51-1拿出數值呢?? 關於P3.0~3.1的指令還不太清楚要怎麼寫呢!! 真抱歉>"< 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 ;8951_1,UART傳送資料至8951_2啟動傳送與接收 MOV SBUF,A KLOOP: JBC TI,INT_EHCO ;等待資料傳送完畢執行感測器程式 JMP KLOOP這段不是傳送過ㄑ51/2ㄌㄇ?? 那51-2要接收的程式也都寫一樣是ㄇ??? 抱歉~請版主多教訓了... |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 抱歉~~版主! 您說51-2是不是只要從51-1的P3.0的暫存器中拿出數值呢?? 一樣要寫MOV A,#05H MOV SBUF,A~~這樣就能從51-1拿出數值呢?? 關於P3.0~3.1的指令還不太清楚要怎麼寫呢!! 真抱歉>"<請你先弄清楚,到底有無要用RS-232做傳輸控制.若有先把它摸熟再說. 如果只是單純I/O控制,只須要把兩個51的P3.0,P3.1都接在一起,再去 做判斷即可.(51-2判斷P3.0 或P3.1的Lo Hi決定低速高速或停止) 我已經說的很清楚了,自己多實驗看看吧!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 ;8951_1,UART傳送資料至8951_2啟動傳送與接收 MOV SBUF,A KLOOP: JBC TI,INT_EHCO ;等待資料傳送完畢執行感測器程式 JMP KLOOP這段不是傳送過ㄑ51/2ㄌㄇ?? 那51-2要接收的程式也都寫一樣是ㄇ??? 抱歉~請版主多教訓了...
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |