Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 8810|回復: 17
打印 上一主題 下一主題

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

[複製鏈接]
1#
發表於 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
2#
發表於 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
3#
發表於 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
4#
發表於 2010-6-20 20:46:50 | 顯示全部樓層
詳細的解說在此,請自行吸收他人的知識:
http://myiecs.iecs.fcu.edu.tw/upload/paper_uni/911pdf/910113.pdf
我回答:不必客氣
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-10 11:01 , Processed in 0.204082 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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