線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1302
推到 Plurk!
推到 Facebook!

程式的修改!!!

缺席
big_eyes
一般會員


發表:28
回覆:52
積分:16
註冊:2005-03-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-29 17:56:30 IP:218.164.xxx.xxx 未訂閱
各位大大!! 我試著寫一ㄍ程式~但是有關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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-29 18:58:30 IP:211.22.xxx.xxx 未訂閱
看不懂你在寫什麼,你這程式根本沒有用到RS232,你只是單純用I/O做控制... 那有什麼疑惑呢>? 可以測試時,先做點功課吧!8051的書一定有RS232的範例~先實習玩玩看吧!!
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
big_eyes
一般會員


發表:28
回覆:52
積分:16
註冊:2005-03-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-29 19:11:45 IP:218.164.xxx.xxx 未訂閱
引言: 看不懂你在寫什麼,你這程式根本沒有用到RS232,你只是單純用I/O做控制... 那有什麼疑惑呢>? 可以測試時,先做點功課吧!8051的書一定有RS232的範例~先實習玩玩看吧!!
對阿~我只是做IO控制阿~ 需要用到RS32??? 我沒有要用RS232耶!!! 這程式只是要讓他追蹤物體阿~~ 只是想讓大家看看有關TXD跟RXD的寫法是否正確的傳送!!

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-29 19:26:47 IP:211.22.xxx.xxx 未訂閱
引言: 對阿~我只是做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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-01 05:33:52 IP:61.70.xxx.xxx 未訂閱
不曉得你在改什麼內!! 你89C51-2的程式還是沒有寫出判斷51-1有沒有送P3.0 的訊號 89C51-2的程式中也沒有停止的部份...只有你寫的低速與高速的部份
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
big_eyes
一般會員


發表:28
回覆:52
積分:16
註冊:2005-03-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-01 21:26:40 IP:218.164.xxx.xxx 未訂閱
引言: 不曉得你在改什麼內!! 你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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-01 21:59:57 IP:221.169.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58630 去讀讀吧。

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-02 15:24:03 IP:61.70.xxx.xxx 未訂閱
引言: 抱歉~~版主! 您說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要接收的程式也都寫一樣是ㄇ??? 抱歉~請版主多教訓了...
請你先弄清楚,到底有無要用RS-232做傳輸控制.若有先把它摸熟再說. 如果只是單純I/O控制,只須要把兩個51的P3.0,P3.1都接在一起,再去 做判斷即可.(51-2判斷P3.0 或P3.1的Lo Hi決定低速高速或停止) 我已經說的很清楚了,自己多實驗看看吧!
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
系統時間:2024-05-02 8:34:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!