\ -------------------------------------------------------------- \ history: last revision first ALL 14:07 28AUG95 \ ALL950828 V0.06 first release \ .... \ ALL950112 V0.01 first try \ -------------------------------------------------------------- \ TMEM? DALLAS TOUCHMEMORY ALL 11:53 28AUG95 DECIMAL ASSEMBLER P1.5 EQU $PTM \ define TOUCH-MEM DATA port pin FORTH HEX 33 EQU cTMRD DECIMAL \ 0F or 33 are read commands \ -------------------------------------------------------------- \ TMEM? DALLAS TOUCHMEMORY present? ALL 21:13 14APR96 CODE TMEM? ( -- t=PRESENT ) \ TM present? A,# 4 MOV $PTM CLR \ start of RESET pulse LOW B ,# 250 MOV 1$: B , 1$ DJNZ \ 480..960uSEC->500Tcycles $PTM SETB \ end of RESET pulse HIGH B ,# 6 MOV C CLR \ clear CY = NO_presence 2$: $PTM , 3$ JB \ B: HIGH, leave loop B , 2$ DJNZ \ LOOP for 3360uSEC ACC , 2$ DJNZ \ if DATA stays LOW 9$ SJMP \ STUCK LOW 3$: B ,# 40 MOV \ 60..240uSEC-> 160Tcycles 4$: C,/ $PTM ORL B , 4$ DJNZ \ delay CY=1=PRESENCE detect 9$: A CLR A,# 0 SUBB R1,A MOV APUSH LJMP END-CODE \ -------------------------------------------------------------- \ TM><CY TM><bit0 exchange bits w/ DOW ALL 21:14 14APR96 \ 15uS DS2401 window, then MASTER window, 60..120uS total slot PROC TM><CY \ exchange CY and TMdata bit B PUSH $PTM CLR NOP NOP NOP NOP \ start time slot 1..15uSEC $PTM ,C MOV \ >=1uS ..6T, send CY B ,# 05 MOV 1$: B , 1$ DJNZ \ ..6+2+10=18Tcycles C, $PTM MOV \ read DS_DATA ..20Tcycles B ,# 18 MOV 1$: B , 1$ DJNZ \ 20+2+36=78Tcycles B POP \ =60..120uSEC =tSLOT $PTM SETB \ terminate time slot RET END-PROC CODE TM><bit0 ( c -- c' ) \ exchange bit0 and TMdata DP=SP DPL INC A,@DPTR MOVX \ get c -> ACC A RRC TM><CY LCALL A RLC @DPTR,A MOVX \ put ACC -> c' NEXT LJMP END-CODE \ -------------------------------------------------------------- \ TMC><C TMRD TMWR exchange bytes w/ DOW ALL 21:15 14APR96 CODE TM><C ( c -- c' ) \ exchange byte and TMdata DP=SP DPL INC A,@DPTR MOVX \ get c -> ACC B PUSH B ,# 8 MOV \ bit count=8 1$: A RRC TM><CY LCALL B , 1$ DJNZ \ send a bit A RRC \ get final bit B POP @DPTR,A MOVX \ put ACC -> c' NEXT LJMP END-CODE : TMRD ( -- c ) 255 TM><C ; : TMWR ( c -- ) TM><C DROP ; \ -------------------------------------------------------------- \ CRC8 =X^8+X^5+X^4+1 ALL 21:17 14APR96 CODE CRC8 ( crc char -- crc' ) DP=SP \ build CRC8 DPL INC A,@DPTR MOVX DPTR INC \ charL ->ACC R0,A MOV \ -> R0 DPL INC A,@DPTR MOVX R1,A MOV \ crc -> R1 B ,# 8 MOV A,R0 MOV \ B=bit count; A=char 1$: A,R1 XRL A RRC \ CY=char XOR crc.0 A,R1 MOV 2$ JNC \ NC: bit0 was 0 A,# 24 XRL \ 18h feedbacks 2$: A RRC R1,A MOV \ positition new crc A,R0 MOV A RR R0,A MOV \ next bit to bit0 B , 1$ DJNZ \ NZ: more bits A,R1 MOV @DPTR,A MOVX DPL DEC \ put crc' DP=>SP LJMP END-CODE \ -------------------------------------------------------------- \ .tm# TML show DOW/DS2401 data ALL 12:43 31JAN95 \ L. shows low byte as 2 HEX chars : .tm# TMEM? IF CR cTMRD TM><C \ 33h | 0Fh is RD CMD DROP 0 ( -- cCRC ) 8 0 DO TMRD DUP L. CRC8 LOOP IF 7 EMIT ." CRC error " THEN \ append moaning THEN ; : TML BEGIN .tm# ESC? UNTIL ; \ an endless loop shows DOW \ --------------------------------------------------------------