Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz

如何將SHY-J6122無線模組銜接8051伺服馬達控制版

查看數: 9347 | 評論數: 17 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發佈時間: 2010-5-25 22:24

正文摘要:

如何將SHY-J6122無線模組銜接8051伺服馬達控制版 無線模組的接收端在HT-12D(IC)有4各輸入端~ 這四各輸入端不知要接入89S52單晶片的哪些腳位>< 爬了很多文都說直接就可以用了但是怎麼是也不行.... ...

回復

vegewell 發表於 2010-6-20 20:46:50
詳細的解說在此,請自行吸收他人的知識:
http://myiecs.iecs.fcu.edu.tw/upload/paper_uni/911pdf/910113.pdf
我回答:不必客氣
vegewell 發表於 2010-6-20 20:42:42
8051 受控端上的程式碼
DEMO EQU 20H
RESET EQU 21H
DEMOFNL EQU 22H
ORG 0
LJMP START
ORG 30H
;********************
;* 初始化一切設定值
;********************
START:
MOV P1,#20H ;傳送燈亮起,傳送出0
MOV R7,#50
CALL DELAY
MOV P0,#00H
MOV P1,#80H
MOV P2,#FFH
MOV R0,#1 ;起始指標位置為1 並用以紀錄最後停留的指標位置
MOV R1,#0 ;紀錄總相激磁的大小(也就是激磁Talbe 的大小)
MOV R2,#0 ;紀錄R1 所需再重複的次數(Table 重複次數)
MOV R3,#0 ;一般暫存用
CLR DEMO
CLR RESET
CLR DEMOFNL ;DEMO 最後一步的指示旗標
;****************************************
;* 主程式,接收指令並適當的做出回應與動作
;****************************************
OUTPUT:
MOV A,P2
ANL A,#0FH
JZ OUTPUT
CALL Motor
JB RESET,START
JMP OUTPUT
;************************************************
;* 依照指令跳至對應的副程式運作,必須使用CALL 呼叫
;************************************************
Motor:
$1: CJNE A,#1,$2
MOV DPTR,#Forward
66 of 74
MOV R1,#8
MOV R2,#80
JMP RUN
$2: CJNE A,#2,$3
MOV DPTR,#Backward
MOV R1,#8
MOV R2,#80
JMP RUN
$3: CJNE A,#3,$4
MOV DPTR,#Left
MOV R1,#8
MOV R2,#64
JMP RUN
$4: CJNE A,#4,$5
MOV DPTR,#Right
MOV R1,#8
MOV R2,#64
JMP RUN
$5: CJNE A,#5,$6 ;DEMO1
SETB DEMO
MOV A,#1
CALL $1
JB RESET,$INT
MOV A,#3
CALL $3
JB RESET,$INT
MOV A,#1
CALL $1
JB RESET,$INT
MOV A,#3
CALL $3
JB RESET,$INT
MOV A,#1
CALL $1
JB RESET,$INT
MOV A,#3
CALL $3
JB RESET,$INT
MOV A,#1
CALL $1
JB RESET,$INT
67 of 74
MOV A,#3
CALL $3
JB RESET,$INT
MOV A,#1
CALL $1
JB RESET,$INT
MOV A,#4
CALL $4
JB RESET,$INT
MOV A,#1
CALL $1
JB RESET,$INT
MOV A,#4
CALL $4
JB RESET,$INT
MOV A,#1
CALL $1
JB RESET,$INT
MOV A,#4
CALL $4
JB RESET,$INT
MOV A,#1
CALL $1
JB RESET,$INT
SETB DEMOFNL
MOV A,#4
CALL $4
$INT:
CLR DEMO
CLR DEMOFNL
RET
$6: CJNE A,#6,$7 ;若Pause/Continue 在這時被按下將不做任何處理
JMP $F
$7: CJNE A,#7,$8 ;若RESET 被按下
SETB RESET
JMP $F
$8: CJNE A,#8,$9 ;逆時針旋轉180 度
MOV DPTR,#Left
MOV R1,#8
MOV R2,#128
JMP RUN
68 of 74
$9: CJNE A,#9,$A ;順時針旋轉180 度
MOV DPTR,#Right
MOV R1,#8
MOVR2,#128
JMP RUN
$A: CJNE A,#AH,$B ;未定義
$B: CJNE A,#BH,$C ;未定義
$C: CJNE A,#CH,$D ;未定義
$D: CJNE A,#DH,$E ;未定義
$E: CJNE A,#EH,$F ;未定義
$F: CALL TOUT ;若指令未定義則不做任何動作
CALL OVER
RET
;**********************************************
;* 步進馬達驅動,R0 決定指標值在相激磁表中的位置
;* R1 決定總驅動的相激磁數目,R2 決定R1 重複的次數
;* 行程中會檢查暫停/繼續或停止有無被按下,行程
;* 從Motor 跳過來因此最後會以RET 結束
;**********************************************
RUN:
MOV R3,A
CALL TOUT
LOOP:
MOV A,R1
SUBB A,R0
JNZ MotorStep
MOV R0,#1
MotorStep:
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
MOV A,P2
ANL A,#0FH
JZ MotorNext
CJNE A,#6,$1 ;若Pause/Continue 被按下
CALL TOUT
CALL OVER
CALL PCCHK
JB RESET,$0
CALL TOUT
JMP MotorNext
69 of 74
$1: CJNE A,#7,MotorNext
SETB RESET
CALL TOUT
CALL OVER
$0: RET
MotorNext:
CALL DELAYINI
INC R0
DJNZ R2,LOOP
JNB DEMO,$1 ;若正在演示中就判斷是否要傳送結束位元
JNB DEMOFNL,$2 ;DEMOFNL 被設定表示已達最後一步要傳送結束位元
$1: CALL OVER
$2: RET
;**************************************************
;* 負責暫停/繼續的工作,當暫停時行程會被限制在此,
;* 並等待再次暫停指令到來才繼續,必須用CALL 呼叫
;**************************************************
PCCHK: ;Pause/Continue 的檢查機制
$waitp:
MOV A,P2
ANL A,#0FH
CJNE A,#7,$wait0
SETB RESET
CALL TOUT
CALL OVER
RET
$wait0:
CJNE A,#6,$waitp ;等待控制端送出Continue 的指令(再次Pause)
CALL TOUT
CALL OVER
MOV A,R3
RET
;*****************************************
;* 負責回傳結束位元使控制端能繼續下一指令
;* 必須用CALL 呼叫
;*****************************************
OVER:
MOV P1,#2FH
CALL TDELAY
MOV P1,#20H
CALL TDELAY
MOV P1,#80H
70 of 74
RET
;*****************************************
;* 傳送A 中的資料給控制端,必須使用CALL 呼叫
;*****************************************
TOUT:
ADD A,#20H ;使傳送燈亮起的位元
JNB DEMO,$1
ADD A,#10H
$1: MOV P1,A
SUBB A,#20H ;將A 中的值恢復原狀
JNB DEMO,$2
SUBB A,#10H
$2: CALL TDELAY
MOV P1,#20H
CALL TDELAY
JNB DEMO,$3
MOV P1,#90H ;停止傳送,避免影響接收模組,DEMO 指示燈亮
RET
$3: MOV P1,#80H ;停止傳送,避免影響接收模組
RET
;**********************************************
;* 傳送專用延遲,使本地端有足夠時間送出回傳值
;* 給控制端,必須使用CALL 呼叫
;**********************************************
TDELAY:
MOV R7,#15
JMP DELAY
;************************************************
; 步進馬達專用延遲,必須使用CALL 呼叫
;************************************************
DELAYINI:
MOV R7,#4
DELAY:
MOV R6,#10
D1: MOV R5,#249
D2: DJNZ R5,D2
DJNZ R6,D1
DJNZ R7,DELAY
RET
;************************************************
;* Motor Table
;************************************************
71 of 74
Forward DB 45H,61H,29H,A8H,8AH,92H,16H,54H
Backward DB 54H,16H,92H,8AH,A8H,29H,61H,45H
Left DB 55H,11H,99H,88H,AAH,22H,66H,44H
Right DB 44H,66H,22H,AAH,88H,99H,11H,55H
END
vegewell 發表於 2010-6-20 20:39:54
手機號碼大大:
這有8051 cotrol HT-12E & 接收HT-12D 的組合語言範例,請參考

8051 控制端上的程式碼
COUNTER REG 20H
TRFLAG REG 21H
ORG 0
LJMP START
ORG 23H
LJMP SERVICE
ORG 30H
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
START:
MOV P1,#00H
MOV P2,#FFH
CLR COUNTER
CLR TRFLAG
CLR R0
CLR R1
CLR R2
MOV TMOD,#20H
MOV TH1,#FDH
MOV SCON,#50H
MOV IE,#10010000B
SETB TR1
$LOOP:
CLR R0
JNB R2,$RESET
MOV A,P2
CPL A
ANL A,#0FH
JZ $LOOP
CJNE A,R0,$1
MOV P1,#00H
JMP $LOOP
$RESET:
MOV SBUF,#250 ;Tell PC that RESET has been pressed.
SETB R2
SETB TRFLAG
JMP $LOOP
$1:
MOV P1,#00H
MOV R0,A
$wait:
JB TRFLAG,$wait
MOV SBUF,A
SETB TRFLAG
JMP $LOOP
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ORG 100H
SERVICE:
JB TI,TRANS
MOV B,SBUF
MOV SBUF,B
SETB TRFLAG
MOV P1,B
CLR RI
RETI
RSINVALID:
RETI
TRANS:
CLR TRFLAG
CLR TI
RETI
END
0980702824 發表於 2010-6-19 22:31:31
HT-12D解碼IC有4個輸出腳位~

平常是高電位~等到接收到發射端的訊號後變成低電位~

小弟我不太懂的是這樣4個輸出腳位要如何運用在8051的IO腳位上呢?

又要如何運用在其他電路上呢?

請各位有經驗的大大多交島一下小弟我吧~
0980702824 發表於 2010-6-19 20:01:20
十分感謝~慢慢研究一下!!
vegewell 發表於 2010-6-18 14:16:18
雖然我沒摸過SHY-J6122無線模組
大部份的解碼程式應該差不多
你自己看看有那幾行可以利用的

紅外遙控器進行解碼測試
    ORG   0000H
MAIN:  MOV   SP,#60H
    MOV   P0,#0FFH
    MOV   P1,#0FFH
    MOV   P2,#0FFH
    MOV   P3,#0FFH
    JNB   P3.2,$    ;等待遙控信號出現
    MOV   R6,#10
SB:   ACALL  YS1      ;呼叫882微秒延時子程式
    JB   P3.2,MAIN   ;延時882微秒後判斷P3.2腳是否出現高電平如果有就離開解碼程式
    DJNZ  R6, SB    ;重複10次,目的是偵測在8820微秒內如果出現高電平就離開解碼程式
               ;以上完成對遙控信號的9000微秒的初始低電平信號的識別。
    JNB   P3.2, $    ;等待高電平避開9毫秒低電平引導脈衝
    ACALL  YS2      ;延時4.74毫秒避開4.5毫秒的結果碼
    MOV   R1,#1AH    ;設定1AH為起始RAM區
    MOV   R2,#4
PP:   MOV   R3,#8
JJJJ:  JNB   P3.2,$    ;等待位址碼第一位的高電平信號
    LCALL  YS1      ;高電平開始後用882微秒的時間尺去判斷信號此時的高低電平狀態
    MOV   C,P3.2    ;將P3.2引腳此時的電平狀態0或1存入C中
    JNC   UUU      ;如果為0就跳前往UUU
    JB   P3.2,$    ;如果為1就等待高電平信號結束
UUU:   MOV   A,@R1     ;將R1中位址的給A
    RRC   A       ;將C中的值0或1移入A中的最低位
    MOV   @R1,A     ;將A中的數暫時存放在R1中
    DJNZ  R3,JJJJ    ;接收位址碼的高8位
    INC   R1      ;對R1中的值加1,換成下一個RAM
    DJNZ  R2,PP     ;接收完16位位址碼和8位數據碼和8位數據反碼,存放在1AH/1BH/1CH/1DH的RAM中
               ;以下對代碼是否正確和定義進行識別
    MOV   A,1AH     ;比較高8位位址碼
    XRL   A,#00000000B ;判斷1AH的值是否等於00000000,相等的話A為0
    JNZ   MAIN     ;如果不相等說明解碼失敗離開解碼程式
    MOV   A,1BH     ;比較低8位位址
    XRL   A,#11111111B ;再判斷高8位位址是否正確
    JNZ   MAIN     ;如果不相等說明解碼失敗離開解碼程式
    MOV   A,1CH     ;比較數據碼和數據反碼是否正確?
    CPL   A
    XRL   A,1DH     ;將1CH的值取反後和1DH比較 不同則無效丟棄,核對數據是否準確
    JNZ   MAIN     ;如果不相等說明解碼失敗離開解碼程式
    LCALL         SOUND            ;解碼成功,聲音提示
    MOV   A,1AH
    CPL   A
    MOV   P1,A     ;遙控碼十六進位值通過P1口LED顯示出來
;-------- 下面為0~9鍵碼判斷並在實驗板的5位數碼管中顯示鍵值 --------
JZPD:  MOV   A,1AH
IRD0:  CJNE  A,#00H,IRD1  ;按鍵"0"判斷顯示
    MOV   P0,#0C0H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD1:  CJNE  A,#01H,IRD2  ;按鍵"1"判斷顯示
    MOV   P0,#0F9H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD2:  CJNE  A,#02H,IRD3  ;按鍵"2"判斷顯示
    MOV   P0,#0A4H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD3:  CJNE  A,#03H,IRD4  ;按鍵"3"判斷顯示
    MOV   P0,#0B0H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD4:  CJNE  A,#04H,IRD5  ;按鍵"4"判斷顯示
    MOV   P0,#99H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD5:  CJNE  A,#05H,IRD6  ;按鍵"5"判斷顯示
    MOV   P0,#92H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD6:  CJNE  A,#06H,IRD7  ;按鍵"6"判斷顯示
    MOV   P0,#82H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD7:  CJNE  A,#07H,IRD8  ;按鍵"7"判斷顯示
    MOV   P0,#0F8H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD8:  CJNE  A,#08H,IRD9  ;按鍵"8"判斷顯示
    MOV   P0,#80H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD9:  CJNE  A,#09H,IRDOR  ;按鍵"9"判斷顯示
    MOV   P0,#90H
    MOV   P2,#11100000B
    AJMP  MAIN
IRDOR: MOV   P2,#0FFH     ;關閉數碼管使能。"0~9"以外的非數字功能按鍵鍵值不採用數碼管顯示,直接從P1口輸出鍵值
    AJMP  MAIN
YS1:   MOV   R4,#19 ;延時子程式1
D1:   MOV   R5,#18
    DJNZ  R5,$
    DJNZ  R4,D1
    RET
YS2:   MOV   R4,#10 ;延時子程式2
D2:   MOV   R5,#216
    DJNZ  R5,$
    DJNZ  R4,D2
    RET
SOUND: MOV   R7,#228 ;音效延時子程式
SDL1:  CPL   P3.7
    MOV   R6,#0FFH
SDL0:  DJNZ  R6,SDL0
    DJNZ  R7,SDL1
    RET
0980702824 發表於 2010-6-17 21:08:37
今天又將8051配合315M無線模組重新排版製出~

控制板是用8051加上16個伺服馬達控制排針接頭外掛無線模組組成的~

再用HT-12D跟12E來做解碼跟編碼的動作!

遙控板跟接收板都可以正常發送跟接收~

有用電表量出HI~LO訊號!

但想請問各位大大當HI-LO訊號進入8051的IO腳位時~

組合語言要怎麼宣告怎麼寫語法來用遙控控制各路的伺服馬達?

ORG        0000H
        JMP     START
;=============================
S1      EQU     30H
S2      EQU     31H  
;=============================
;計時/計數器0中斷副程式
;=============================
        ORG     000BH
TIMER0:
       PUSH    ACC             ;將ACC暫存器之資料放置於堆疊區
         CLR     TF0             ;將TF0中斷要求先清除
         MOV     TH0,#0FFH       ;手動載入TH0及TL0的值
         MOV     TL0,#64H        ;
       INC     R0              ;中斷一次就把R0加1
        
CYCLE:  
        CJNE    R0,#200,SERVO1  ;判斷R0是否為200,不是,則跳至SERVO1執行
          MOV     R0,#0           ;若R0=200,則將R0清為0
        SETB    P2.0            ;若R0=200,則將PWM1.PWM2設為Hi
        SETB    P2.1
        JMP     GOBACK

SERVO1: MOV     A,R0              
        XRL     A,S1             ;判斷R0是否等於S1
        JNZ     SERVO2           ;若R0不等於S1則跳至SERVO2
        CLR     P2.0             ;若R0=S1,則將PWM1設為Lo
SERVO2:
        MOV     A,R0         
        XRL     A,S2             ;判斷R0是否等於S2
        JNZ     GOBACK           ;若R0不等於S2則跳至GOBACK
        CLR     P2.1             ;若R0=S2,則將PWM2設為Lo
        GOBACK: POP     ACC             ;將ACC暫存器之資料從堆疊區取回
        RETI
;===============================
;           主程式
;===============================
START:  MOV     S1,#15
        MOV     S2,#15
        MOV     TMOD,#00000001B ;設定計時計數器0工作於計時模式1,如圖  所示.
        MOV     TH0,#0FFH       ;設定0.1ms中斷一次
        MOV     TL0,#64H
        SETB    EA              ;中斷致能(打開中斷總開關)
        SETB    ET0             ;計時/計數器0的中斷致能
        SETB    TR0             ;計時/計數器0開始工作

LOOP:   MOV     S1,#15
        MOV     S2,#15
        CALL    DELAY
        MOV     S1,#21
        MOV     S2,#9
        CALL    DELAY
        MOV     S1,#15
        MOV     S2,#15
        CALL    DELAY
        MOV     S1,#9
        MOV     S2,#21
        CALL    DELAY
        JMP     LOOP            
;=========================
;延時副程式(延時1秒)
;=========================
DELAY:  MOV     R5,#15          ;重複10次
DL1:    MOV     R6,#250         ;延時0.1秒
DL2:    MOV     R7,#200
DL3:    DJNZ    R7,DL3
DJNZ    R6,DL2
DJNZ    R5,DL1
RET

        END

不知要如何加入無線模組的控制部分??
a7710184 發表於 2010-5-27 15:48:35
0980702824 發表於 2010-5-26 23:23:00
G大說得是接收端還是發射端接收端用HT-12D沒按鈕但有4各輸入腳位~發射端用HT-12E有四各按鈕
g921002 發表於 2010-5-26 22:29:29
如何將SHY-J6122無線模組銜接8051伺服馬達控制版
無線模組的接收端在HT-12D(IC)有4各輸入端~
這四各輸入端不知要接入89S52單晶片的哪些腳位><
爬了很多文都說直接就可以用了但是怎麼是也不行....


就是用一般的I/O去接就好<--HT-12原來接按鈕接51的Portx就好。
g921002 發表於 2010-5-26 22:27:11
便宜的東西有他好用的地方,比如75元的9g的Servo,拿來玩玩電動遙控飛機OK啦!拿來玩機器人就可能力有未逮。90~數千的servo都用過,都要看機構的條件來取捨。
這類需要解編碼IC的無線系統做做簡單的I/O控制還可以,但是將來想要玩到遠端控制和數據傳輸監控就會鎚心肝,手上有個數據無線絕對可以省很多時間,而且可以玩很多應用。用這類做鐵捲門控制一類的應用的設備,用到最後只會走一堆冤枉路。自己參考斟酌囉。
0980702824 發表於 2010-5-26 20:56:13
那組G大介紹的無線模組我下訂單了但是回歸到正題之前的東西買了總不能放著不用吧....所以還是拜託知道這方面整合系統的人能幫幫忙~或著提供意見還是一些資料小弟會很感激的~
mzw2008 發表於 2010-5-26 12:42:47
我只是舉例, 不是針對你
不要想太多喔
周圍這樣的人太多了
我也會比價啊
何況這也不太算是價值觀的問題
0980702824 發表於 2010-5-26 09:44:21
別這樣說啦~畢竟我不是專業或職業的所以在最便宜的情況下取得適用的阿~G大說的我會考慮去買~畢竟這樣東西品質跟使用上就非要一分錢一分貨了...但是我只是比價一下伺服馬達有必要因為詢價而把個人的價值觀都往下拉吧><
mzw2008 發表於 2010-5-26 01:25:49
其實SERVO 80元一顆他都嫌貴了
這種一千多的模組是聽不進去的
不過這樣也好, 每個人獲取樂趣的方式不同哩

就像, 有人斤斤計較SERVO控制器一定要100元以內
對我來說, 能解決問題的連一萬多的都買下去, 反正是客戶出錢, 我也是出一張嘴而已

就像, 有人作骨架一定要整台共一百元就作出來, 明明就很像狗啃的他也樂在其中
我作骨架就一定要用雷射鋁合金才看得入眼, 手工只是作來搞笑
但是學校的老師就會覺得那要開模才會有FU
業界老闆就會要求開模還要斤斤計較價格
一樣米養百樣人哩, 不過主要有分兩種啦, 要花錢跟不花錢的兩種

不過話說回來您用的那個還真是炫...整盒的耶, 看起來就很高級
讓我想起最近去中華電信機房看到的行動基地台也是很大一台, 超複雜的無線應用
g921002 發表於 2010-5-25 23:10:32
不要再用落伍又難用的東西了。
如果你真的想用無線做比較多的控制,好歹去買個無線數據傳輸組吧!?
真的沒錢,最爛的好歹用這個:
http://store.pchome.com.tw/cpushop/M01229687.htm

我自己是用:
http://www.aerocomm.com/rf_data_modems/connexlink_radio_modem.htm

參考一下。

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-24 12:20 , Processed in 0.304249 second(s), 11 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表