51hei板子配的無線解碼通過串口顯示地址和鍵值
;使用AT89S52解碼PT2262 晶振11.0592 MHZ ;0-代表接VSS 1-代表接VDD *2代表懸空;通過串口顯示出來 ;晶體頻率為11.0592Mhz ;本程序中的時(shí)間定位關(guān)系只適用于接3.3M振蕩電阻的PT2262解碼 ;使用其它阻值電阻時(shí),應(yīng)將定位時(shí)間按電阻比例縮放 ;----------------------------------------------------------- ;----------------------------------------------------------------
TDN EQU 20H
TDN1 EQU 21H
TMP0 EQU 30H
TMP1 EQU 31H
BUF1 EQU 40H ;儲(chǔ)存 1ST 數(shù)據(jù)流
BUF2 EQU 50H ;儲(chǔ)存 2ND 據(jù)
;-----------------------------------------------------------
ORG 0000H
JMP LAB00
LAB00:
MOV SP,#60H
MOV A,#0FFH
MOV P1,A
MOV P3,A
CALL DLY01 ;調(diào)用延時(shí)100MS
;--------------------------------------------------
SETBD:
MOV TMOD,#22H ;兩個(gè)定時(shí)器都設(shè)為8位自動(dòng)重裝初值
MOV TH1,#0FDH ;11.059MHZ 設(shè)置波特率為 9600
SETB TR1 ;
MOV SCON,#01010000B ;設(shè)定串列方式 MODE1,接收時(shí) REN=1
NOP
MOV TH0,#0F4H ;定時(shí)器0 模式2, 8位自動(dòng)重裝 0.013MS
CLR TR0 ;11.0592 = 13 uS
MOV IE,#10010000B ;UART中斷使能
;--------------------------------------------------
LOOPX:
SETB P1.0 ;信號指示燈
CALL WSTAT ;等待 2 同步 (>3.3MS)
CALL WSTAT ;等待 2 同步 (>3.3MS)
CLR P1.0 ;信號指示燈
MOV R0,#BUF1 ;分解 1ST 數(shù)據(jù)流
MOV R2,#12
LOOPX2:
CALL GET2P ;收到 2 脈沖
JNC LOOPX1
JMP LOOPX ;失敗
LOOPX1:
MOV A,B
MOV @R0,A
INC R0
DJNZ R2,LOOPX2
CALL WSTAT ;
MOV R0,#BUF2 ;分解 2ND 數(shù)據(jù)流
MOV R2,#12
LOOPX3:
CALL GET2P ;收到 2 脈沖
JNC LOOPX4
JMP LOOPX ;失敗
LOOPX4:
MOV A,B
MOV @R0,A
INC R0
DJNZ R2,LOOPX3
SETB P1.0;信號指示燈
;--------------------------------------------------
;CHECK BOTH STREAM DATA
MOV R0,#BUF1;儲(chǔ)存 1ST 數(shù)據(jù)流
MOV R1,#BUF2;儲(chǔ)存 2ND 據(jù)
MOV R2,#12
LOOPX51:
MOV A,@R0
ANL A,#3
MOV B,A
MOV A,@R1
ANL A,#3
CJNE A,B,LOOPX5
INC R0
INC R1
DJNZ R2,LOOPX51
JMP TXDATA
;--------------------------------------------------
LOOPX5:
JMP LOOPX ;檢查 失敗,重新LOOPX
;--------------------------------------------------
; (發(fā)送地址 - 鍵編碼)
;TX 數(shù)據(jù)串 : $AAAAAAAAAAAA-KKKK!
;-------------------------------------------------
TXDATA:
MOV A,#'$' ;通過串口發(fā)送 $ 字符
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
MOV R2,#8 ;共8位地址
MOV R0,#BUF1;儲(chǔ)存 1ST 數(shù)據(jù)流
TXNXD:
MOV A,@R0
ANL A,#3
CALL CONVD
LOOPX6:
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
INC R0
DJNZ R2,TXNXD
MOV A,#'-' ;通過串口發(fā)送 - 字符
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
MOV R2,#4 ;共1位地鍵值
TXNXD1:
MOV A,@R0
ANL A,#3
CALL CONVD
LOOPX7:
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
INC R0
DJNZ R2,TXNXD1
MOV A,#'!' ;通過串口發(fā)送 ! 字符
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
CALL CRLF
JMP LOOPX
;--------------------------------------------------
CONVD:
CJNE A,#0,CONV1
MOV A,#'0'
RET
CONV1:
CJNE A,#3,CONV2
MOV A,#'1'
RET
CONV2:
CJNE A,#1,CONV3
MOV A,#'2'
RET
CONV3:
MOV A,#'3'
RET
;--------------------------------------------------
WSTAT: ;等待數(shù)據(jù)流 SLOT >3MS
NOP
MOV R4,#33
WSTAT1:
JB P3.2,WSTAT ;尋找數(shù)據(jù)流
CALL DLY100U ;延時(shí) 100uS
DJNZ R4,WSTAT1
WSTAT2:
JNB P3.2,WSTAT2
RET ;重新開始尋找數(shù)據(jù)流
;--------------------------------------------------
GET2P:
CALL GET1P ;RET TMP0=HIGH TIME, TMP1=LOW TIME
JC GPERR
MOV A,TMP1
CPL A
ADD A,TMP0 ;
MOV B.1,C
CALL GET1P ;2
JC GPERR ;2
MOV A,TMP1 ;2
CPL A ;1
ADD A,TMP0 ;2
MOV B.0,C ;2
CLR C
RET
GPERR:
SETB C
RET
;--------------------------------------------------
GET1P:
MOV TDN,#0
RXHP1:
JNB P3.2,RXHP2 ;2 cycle
INC TDN ;1 ACCUMULATE HIGH TIME
MOV A,TDN ;1
ADD A,#-80 ;1 high:> 80*7*1.085>600U-->ERR
JNC RXHP1 ;2
JMP RXPERR
RXHP2:
MOV A,TDN ;1, find low,
ADD A,#-5 ;1,
JC RXHP3 ;2, HIGH MUST > 4*1.085*7 =31U
JMP RXPERR ;2,
RXHP3:
MOV TMP0,TDN ;2
MOV TDN,#0 ;2
RXLP1:
JB P3.2,RXLP2 ;2
INC TDN ;1
MOV A,TDN ;1
ADD A,#-80 ;1 LOW> 80*7*1.085>600U-->ERR
JNC RXLP1 ;2
JMP RXPERR
RXLP2:
MOV A,TDN ;1, find high
ADD A,#-5 ;1
JC RXLP3 ;2, LOW MUST >31U
JMP RXPERR ;2
RXLP3:
MOV TMP1,TDN ;2
CLR C
RET
RXPERR:
SETB C
RET
;--------------------------------------------------
TXASC:
MOV A,@R1 ;TX 2 BYTE : "5A" --> '5' 'A'
SWAP A
ANL A,#0FH
CALL HEXASC
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
MOV A,@R1
ANL A,#0FH
CALL HEXASC
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
RET
;--------------------------------------------------
HEXASC:
ADD A,#30H
CJNE A,#39H,HEXA1
RET ;39H
HEXA1:
JNC HEXA2
RET ;30..38H
HEXA2:
ADD A,#7 ;3A-->41H
RET
;--------------------------------------------------
CRLF:
MOV A,#0DH
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
MOV A,#0AH
CALL TRANS ;通過串口發(fā)送數(shù)據(jù)
RET
TRANS: ;通過串口發(fā)送數(shù)據(jù)
MOV SBUF,A ;send A from pin txd
JNB TI,$ ;等待 TI = 1
CLR TI ;清除 TI
RET
;-----------------------------------------------
; 延時(shí)
;-----------------------------------------------
DLY01: ;延時(shí) 100MS
MOV R6,#100 ;0.1 SEC 100/1MS = 100
DD1:
CALL DLYT;基本延時(shí) 1MS
DJNZ R6,DD1
RET
;------------------------------------------------
DLYT: ;基本延時(shí) 1MS
MOV R5,#230 ;11.0592M= 1.085U
DLYT1:
NOP
NOP
DJNZ R5,DLYT1 ;1.085*230*4= 1MS
RET
;------------------------------------------------
DLY100U: ;100US
MOV R5,#46
DJNZ R5,$
RET
DLYS1:
CALL DLY01 ;延時(shí) 100MS
DJNZ R7,DLYS1
RET
END
315mhz超再生接收模塊.gif (30.1 KB, 下載次數(shù): 93)
下載附件
2011-2-13 21:34 上傳
dfs1.jpg (100.24 KB, 下載次數(shù): 93)
下載附件
2011-2-13 21:34 上傳
dfs2.jpg (89.87 KB, 下載次數(shù): 82)
下載附件
2011-2-13 21:34 上傳
未命名1.jpg (29.76 KB, 下載次數(shù): 88)
下載附件
2011-2-13 21:34 上傳
|