please dont rip this site

Microchip Davidtait Button.txt

; 
; Dallas TouchMemory routines
; (c) 1997 Pavel Korensky <pavelk@dator3.anet.cz> 
;
; Freely usable for non-commercional use. 
; Commercional use strictly prohibited
;
;


DS_PORT			equ	PORTA			; Dallas port
DS_BIT			equ	4			; Dallas bit


;
; Dallas TouchMemory commands - Touch Multikey specifically
;

READ_ROM		equ	0x33
SKIP_ROM		equ	0xCC
MATCH_ROM		equ	0x55
WRITE_SCR		equ	0x96
READ_SCR		equ	0x69
COPY_SCR		equ	0x3C
WRITE_PSW		equ	0x5A
WRITE_SUB		equ	0x99
READ_SUB		equ	0x66

FAM_MULTIKEY		equ	0x02




;*****************************************************************
;
; Some macros
;
;*****************************************************************

DSIN		macro					; Set Dallas as input
		bsf	STATUS, RP0
		bsf	TRISA,DS_BIT
		bcf	STATUS, RP0
		endm
		
DSOUT		macro					; Set Dallas as output - 1
		bsf	STATUS, RP0
		bcf	TRISA, DS_BIT
		bcf	STATUS, RP0
		bsf	DS_PORT, DS_BIT
		endm


;************************************************************
;
; Touch Memory routines
;
;************************************************************



;************************************************************
;
; Delay 67 us - For PRESENCE routine
;
;************************************************************

D67us:	
		movlw	6
		movwf	del4
D67l_4		movlw	1
		movwf	del3
D67l_3		movlw	1
		movwf	del2
D67l_2		movlw	5
		movwf	del1
D67l_1		decfsz	del1
		goto	D67l_1
		decfsz	del2
		goto	D67l_2
		decfsz	del3
		goto	D67l_3
		decfsz	del4
		goto	D67l_4
		retlw	0

;************************************************************
;
; Delay 498 us - For RESET pulse
;
;************************************************************

D498us:	
		movlw	1
		movwf	del4
D498l_4		movlw	1
		movwf	del3
D498l_3		movlw	0x4d
		movwf	del2
D498l_2		movlw	4
		movwf	del1
D498l_1		decfsz	del1
		goto	D498l_1
		decfsz	del2
		goto	D498l_2
		decfsz	del3
		goto	D498l_3
		decfsz	del4
		goto	D498l_4
		retlw	0

;************************************************************
;
; Delay 2 us - Recovery time etc.
;
;************************************************************

D2us:	
		nop
		retlw	0


;************************************************************
;
; Touch_Reset - Reset memory and check presence
;
; Return: 0 if memory not present, 1 if present, 3 if short circuit

;
;************************************************************

Touch_Reset	DSOUT				; Set DS for output
		bcf	DS_PORT, DS_BIT		; 0 to 1-wire
		call	D498us			; wait tRSTL
		bsf	DS_PORT, DS_BIT		; 1 to 1-wire
		DSIN				; Set DS for input
		call	D67us			; wait tPDH
		btfsc	DS_PORT, DS_BIT		; Presence pulse ?
		retlw	0			; Return 0 if not
		call	D498us			; Wait some time
		btfsc	DS_PORT, DS_BIT		; 1-wire back HI ?
		retlw	1			; return 1 if so
		retlw	2			; Probably short circuit

;*************************************************************
;
; Write_DS_Byte - write byte from W to 1-wire
;
;*************************************************************

Write_DS_Byte	DSOUT				; Set DS for output
		movwf	Temp1			; store W
		movlw	8
		movwf	Temp			; 8 bits
wdsb1:		bcf	DS_PORT, DS_BIT		; 0 to 1-wire
		call	D2us			; wait 2 usec
		rrf	Temp1,F			; rotate right
		skpnc				; if not carry, 0 to 1-wire
		bsf	DS_PORT, DS_BIT
		call	D67us			; wait 67 usec
		bsf	DS_PORT, DS_BIT		; 1 to 1-wire
		call	D2us			; wait tREC
		decfsz	Temp
		goto	wdsb1			; loop for 8 bits
		DSIN				; Set DS for input
		retlw	0		

;**************************************************************
;
; Read_DS_Byte - read byte from DS to W 
;
;**************************************************************

Read_DS_Byte	movlw	8
		movwf	Temp
		clrf	Temp1
rdsb1:		DSOUT				; set DS for output
		bcf	DS_PORT, DS_BIT		; Start pulse
		call	D2us			; wait
		DSIN
		nop
		nop				; wait a bit
		clrc				; clear carry
		btfsc	DS_PORT, DS_BIT		; bit is 0 ?
		setc				; set carry if not
		rrf	Temp1,F			; carry to Temp1
		call	D67us			; wait 67 usec
		decfsz	Temp			; cycle for 8 bits
		goto	rdsb1
		movf	Temp1,W			; byte to W
		return

;************************************************************************
;
; DS_CRC8 - 	Will calculate 8 bit CRC for DALLAS DS components
;
;		Input: 	Byte for CRC in W
;		Return: Byte in W, CRC in CRC8
;************************************************************************

DS_CRC8		movwf	del2
		movwf	Temp			; Save byte
		movlw	8			; 8 bits
		movwf	Temp1			; store counter
		movf	Temp,W			; byte to W
CRC8_L1		xorwf	CRC8,W			; xor
		movwf	del1			; temp store
		rrf	del1,W
		movf	CRC8,W			; fetch last CRC
		skpnc				; if not C, skip
		xorlw	0x18			; xor with fixed
		movwf	CRC8			; store new CRC
		rrf	CRC8,F			; update new CRC
		clrc				; clear carry
		rrf	Temp,F			; next bit
		movf	Temp,W
		decfsz	Temp1			; count bits
		goto	CRC8_L1			;
		movf	del2,W			; fetch original to W
		return

;*************************************************************************
;
; DS_CRC16 -	Will calculate 16bit CRC for DALLAS DS components
;
;		Input: 	Byte for CRC in W
;		Output:	Original byte in W, 
;			CRC16_HI and CRC16_LO new value of CRC16
;
;*************************************************************************

DS_CRC16	movwf	del1
		movwf	Temp			; store W
		movlw	8			; 8 bits
		movwf	Temp1
		movf	Temp,W			; fetch W
Crc_Get_Bit	rrf	Temp,F			; bit in C
		movf	Temp,W			; value to W
		skpnc
		goto	Crc_In_1
		btfss	CRC16_LO,0		; lowest bit set ?
		goto	Crc_Cont		; goto count with C=0
		setc
		goto	Crc_Cont		; goto count with C=1
Crc_In_1	btfsc	CRC16_LO,0		; lowest bit zero ?
		clrc				; if no, C=0 = complement
Crc_Cont	skpc
		goto	Crc_Shift		; if C=0 only shift
		btfsc	CRC16_HI,6		; complement 15th bit of CRC
		goto	Crc1
		bsf	CRC16_HI,6		; if clear, set
		goto	Crc2
Crc1		bcf	CRC16_HI,6		; if set, clear
Crc2		btfsc	CRC16_LO,1		; complement 2nd bit of CRC
		goto	Crc3
		bsf	CRC16_LO,1
		goto	Crc_Shift
Crc3		bcf	CRC16_LO,1
Crc_Shift	rrf	CRC16_HI,F		; 16bit rotate
		rrf	CRC16_LO,F
		movf	Temp,W
		decfsz	Temp1
		goto	Crc_Get_Bit
		movf	del1,W			; fetch the original byte
		return
		
		
		
;****************************************************************************
;
; Get_DS_Serial - Get Key serial number to buffer
;
; Argument - W=start of buffer
; Return - W=0x01 OK, W=0x02 bad button
;
;****************************************************************************
Get_DS_Serial
		movwf	FSR
		clrf	CRC8			; clear CRC8
		movlw	READ_ROM
		call	Write_DS_Byte		; Read ROM
		call	Read_DS_Byte		; Fam. code
		call	DS_CRC8
		movwf	INDF
		incf	FSR
		call	Read_DS_Byte		; Ser 1
		call	DS_CRC8
		movwf	INDF
		incf	FSR
		call	Read_DS_Byte		; Ser 2
		call	DS_CRC8
		movwf	INDF
		incf	FSR
		call	Read_DS_Byte		; Ser 3
		call	DS_CRC8
		movwf	INDF
		incf	FSR
		call	Read_DS_Byte		; ser 4
		call	DS_CRC8
		movwf	INDF
		incf	FSR
		call	Read_DS_Byte		; ser 5
		call	DS_CRC8
		movwf	INDF
		incf	FSR
		call	Read_DS_Byte		; ser 6
		call	DS_CRC8
		movwf	INDF
		incf	FSR
		call	Read_DS_Byte		; CRC
		call	DS_CRC8
		movf	CRC8,W			; CRC to W
		iorlw	0			; is 0 ?
		skpz
		retlw	2			; if not, error
		retlw	1			; else OK




file: /Techref/microchip/davidtait/button.txt, 7KB, , updated: 2001/4/17 12:15, local time: 2024/3/19 02:29,
TOP NEW HELP FIND: 
52.205.218.160:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://www.piclist.com/techref/microchip/davidtait/button.txt"> microchip davidtait button</A>

Did you find what you needed?

  PICList 2024 contributors:
o List host: MIT, Site host massmind.org, Top posters @none found
- Page Editors: James Newton, David Cary, and YOU!
* Roman Black of Black Robotics donates from sales of Linistep stepper controller kits.
* Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters.
* Monthly Subscribers: Gregg Rew. on-going support is MOST appreciated!
* Contributors: Richard Seriani, Sr.
 

Welcome to www.piclist.com!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .