114 lines
2.7 KiB
NASM
114 lines
2.7 KiB
NASM
|
;------------------------------------------------------------------------------
|
||
|
;
|
||
|
;------------------------------------------------------------------------------
|
||
|
.equ OW_PORT = PORTD
|
||
|
.equ OW_PIN = PIND
|
||
|
.equ OW_DDR = DDRD
|
||
|
.equ OW_DQ = PD6
|
||
|
|
||
|
.def OWCount = r17
|
||
|
;------------------------------------------------------------------------------
|
||
|
;
|
||
|
;------------------------------------------------------------------------------
|
||
|
.cseg
|
||
|
;------------------------------------------------------------------------------
|
||
|
; Output : T - presence bit
|
||
|
;------------------------------------------------------------------------------
|
||
|
OWReset:
|
||
|
cbi OW_PORT,OW_DQ
|
||
|
sbi OW_DDR,OW_DQ
|
||
|
|
||
|
ldi XH, HIGH(DVUS(470))
|
||
|
ldi XL, LOW(DVUS(470))
|
||
|
rcall Wait4xCycles
|
||
|
|
||
|
cbi OW_DDR,OW_DQ
|
||
|
|
||
|
ldi XH, HIGH(DVUS(70))
|
||
|
ldi XL, LOW(DVUS(70))
|
||
|
rcall Wait4xCycles
|
||
|
|
||
|
set
|
||
|
sbis OW_PIN,OW_DQ
|
||
|
clt
|
||
|
|
||
|
ldi XH, HIGH(DVUS(240))
|
||
|
ldi XL, LOW(DVUS(240))
|
||
|
rcall Wait4xCycles
|
||
|
|
||
|
ret
|
||
|
;------------------------------------------------------------------------------
|
||
|
; Input : C - bit to write
|
||
|
;------------------------------------------------------------------------------
|
||
|
OWWriteBit:
|
||
|
brcc OWWriteZero
|
||
|
ldi XH, HIGH(DVUS(1))
|
||
|
ldi XL, LOW(DVUS(1))
|
||
|
rjmp OWWriteOne
|
||
|
OWWriteZero:
|
||
|
ldi XH, HIGH(DVUS(120))
|
||
|
ldi XL, LOW(DVUS(120))
|
||
|
OWWriteOne:
|
||
|
sbi OW_DDR, OW_DQ
|
||
|
rcall Wait4xCycles
|
||
|
cbi OW_DDR, OW_DQ
|
||
|
|
||
|
ldi XH, HIGH(DVUS(60))
|
||
|
ldi XL, LOW(DVUS(60))
|
||
|
rcall Wait4xCycles
|
||
|
ret
|
||
|
;------------------------------------------------------------------------------
|
||
|
; Input : r16 - byte to write
|
||
|
;------------------------------------------------------------------------------
|
||
|
OWWriteByte:
|
||
|
push OWCount
|
||
|
ldi OWCount,0
|
||
|
OWWriteLoop:
|
||
|
ror r16
|
||
|
rcall OWWriteBit
|
||
|
inc OWCount
|
||
|
cpi OWCount,8
|
||
|
brne OWWriteLoop
|
||
|
pop OWCount
|
||
|
ret
|
||
|
;------------------------------------------------------------------------------
|
||
|
; Output : C - bit from slave
|
||
|
;------------------------------------------------------------------------------
|
||
|
OWReadBit:
|
||
|
ldi XH, HIGH(DVUS(1))
|
||
|
ldi XL, LOW(DVUS(1))
|
||
|
sbi OW_DDR, OW_DQ
|
||
|
rcall Wait4xCycles
|
||
|
cbi OW_DDR, OW_DQ
|
||
|
ldi XH, HIGH(DVUS(5))
|
||
|
ldi XL, LOW(DVUS(5))
|
||
|
rcall Wait4xCycles
|
||
|
clt
|
||
|
sbic OW_PIN,OW_DQ
|
||
|
set
|
||
|
ldi XH, HIGH(DVUS(50))
|
||
|
ldi XL, LOW(DVUS(50))
|
||
|
rcall Wait4xCycles
|
||
|
sec
|
||
|
brts OWReadBitEnd
|
||
|
clc
|
||
|
OWReadBitEnd:
|
||
|
ret
|
||
|
;------------------------------------------------------------------------------
|
||
|
; Output : r16 - byte from slave
|
||
|
;------------------------------------------------------------------------------
|
||
|
OWReadByte:
|
||
|
push OWCount
|
||
|
ldi OWCount,0
|
||
|
OWReadLoop:
|
||
|
rcall OWReadBit
|
||
|
ror r16
|
||
|
inc OWCount
|
||
|
cpi OWCount,8
|
||
|
brne OWReadLoop
|
||
|
pop OWCount
|
||
|
ret
|
||
|
;------------------------------------------------------------------------------
|
||
|
;
|
||
|
;------------------------------------------------------------------------------
|