Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
11/26/04 01:49
Read: times


 
#81971 - now i past the progarm with comment.
Responding to: ???'s previous message
DATA0 EQU P1.4
DATA1 EQU P1.5
public WIEGAND_RXSTART ;global function,called by the main.c
public BYTE_ADDR ;global variable,accessed by the main.c
public RX_EVEN_CHECK
public RX_ODD_CHECK

BIT_VAR segment bit
BYTE_VAR segment data
proc segment code

rseg BIT_VAR
RX_EVEN_CHECK: DBIT 1
RX_ODD_CHECK: DBIT 1
EVEN_FLAG: DBIT 1
TIME_OUT_FLAG: DBIT 1

rseg BYTE_VAR
BYTE_ADDR: DS 6

cseg at 000BH
LJMP TIMER0_INT
rseg proc
WIEGAND_RXSTART:
MOV A,TMOD
ORL A,#01H
MOV TMOD,A ;timer0 as 16-bits timer
SETB EVEN_FLAG ;indicate the start of wiegand data
CLR TIME_OUT_FLAG ;indicate the 0-level length too long
MOV R2,#6 ;26bits data contain 6 numbers,
MOV R3,#4 ;per number consist of 4 bits
MOV R0,#BYTE_ADDR ;start address of 3bytes data,6 numbers consist of 3 bytes,
MOV TH0,#00H ;65.536ms timeout
MOV TL0,#00H
SETB TR0
WIEGAND_BEGIN:
JB TIME_OUT_FLAG,ERR ;if in 65.536ms there is no data received,return
WIEGAND_1:
JNB DATA0,WIEGAND_2 ;enquiry the data0 and data1 to judge 0-level
JB DATA1,WIEGAND_BEGIN
JB TIME_OUT_FLAG,ERR ;check the 0-level length is legal
MOV TH0,#0F8H ;2000us time-out,the max length of 0-level interval
MOV TL0,#30H
CLR TIME_OUT_FLAG
SETB TR0
LCALL DELAY25US
MOV C,DATA0
LCALL DELAY175US ;200us,the max length of 0-level
JNB DATA1,ERR
LJMP WIEGAND_3 ;jump to store 3bytes data
WIEGAND_2: ;data0=0
NOP
JB TIME_OUT_FLAG,ERR
MOV TH0,#0F8H
MOV TL0,#30H
CLR TIME_OUT_FLAG
SETB TR0
LCALL DELAY25US
MOV C,DATA0
LCALL DELAY175US
JNB DATA0,ERR
WIEGAND_3:
JNB EVEN_FLAG,WIEGAND_DATA
MOV RX_EVEN_CHECK,C
CLR EVEN_FLAG
LJMP WIEGAND_1
WIEGAND_DATA:
RLC A
DJNZ R3,WIEGAND_1
ANL A,#00001111B
MOV @R0,A
INC R0
MOV R3,#4
DJNZ R2,WIEGAND_1
ODD: ;the last odd-check bit
JNB DATA0,ODD_BIT
JB DATA1,ODD
ODD_BIT:
NOP
LCALL DELAY25US
MOV C,DATA0
MOV RX_ODD_CHECK,C
RET
DELAY25US:
MOV R4,#11
DELAY25US_A:
DJNZ R4,DELAY25US_A
NOP
RET
DELAY175US:
MOV R4,#86
DELAY175US_A:
DJNZ R4,DELAY175US_A
NOP
RET
TIMER0_INT:
SETB TIME_OUT_FLAG ;indictate the length of 0-level or interval illegal
CLR TR0
RETI
ERR:
NOP
;LJMP WIEGAND_START
RET
END


List of 11 messages in thread
TopicAuthorDate
about wiegand26 receive            01/01/70 00:00      
   no need to use timer here            01/01/70 00:00      
      the program i listed is a subroutine.            01/01/70 00:00      
   Feng Shui            01/01/70 00:00      
   no time to look at            01/01/70 00:00      
      now i past the progarm with comment.            01/01/70 00:00      
         minor suggestion            01/01/70 00:00      
            CLR TR0 is in t0 interrupt subroutine            01/01/70 00:00      
               The Odd Bit            01/01/70 00:00      
                  wait for the odd bit!            01/01/70 00:00      
                     Sorry, my fault            01/01/70 00:00      

Back to Subject List