??? 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 |
Topic | Author | Date |
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 |