Вопрос DS18S20 + AVR8515(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Вяч 15 марта 2004 г. 11:25

Имеется DS82S20, подключен к ножке PD2, питание внешнее, кварц 4,9152 МГц. Пытаюсь провести процедуру инициализации.

.org 0
rjmp start
.org OVF1addr ;Timer1 overflow vector
rjmp TIM_OVF1

Start:
ldi acc,low(RAMEND)
out spl,acc
ldi acc,high(RAMEND)
out sph,acc

clr flags
sei
;test:
rcall RESETDS ;Reset DS1820 device
; rjmp test

TIM_OVF1:
ori flags,$02 ;Set end timeout flag
in acc,TIMSK ;Disable Timer1 interrupt
andi acc,~$80
out TIMSK,acc
reti

;Reset DS1820 and read presence pulse, return result in flags.0
RESETDS:
sbi DDRD,dsio ;Make I/O pin an output
cbi PORTD,dsio ;Pull I/O pin low
ldi time_low,low(-2400) ;Make Timer1 count 2400*0.2uS=480uS
ldi time_high,high(-2400)
rcall DELAY
sbi PORTD,dsio ;Pull I/O pin high
cbi DDRD,dsio ;Make I/O pin an input
ldi time_low,low(-450) ;Make Timer1 count 450*0.2uS=90uS
ldi time_high,high(-450)
rcall DELAY
andi flags,~$01 ;Assume device not present
sbis PIND,dsio ;Check for presence pulse
ori flags,$01 ;Indicate result in flags.0
ldi time_low,low(-2400) ;Make Timer1 count 2400*0.2uS=480uS
ldi time_high,high(-2400)
rcall DELAY
ret

;Delay n*0.2 microseconds using Timer1, delay time passed in time
DELAY:
out TCNT1L,time_low ;Load Timer1
out TCNT1H,time_high
ldi acc,$80 ;Enable Timer1 interrupt
out TIMSK,acc
ldi acc,$01 ;Set Timer1 clock=0.2uS & start Timer1
out TCCR1B,acc
WAIT:
sbrs flags,1 ;Test timeout end flag
rjmp WAIT
andi flags,~$02 ;Reset timeout end flag
clr acc
out TCCR1B,acc ;Stop Timer1 clock
ret

В случае установки метки "test" и бесконечного цикла вижу на осциллографе ответ DS18S20 (просаживает шину до 0). Проблема в том что, не могу поймать этот ноль на ножке PD2.
Помогите, пожалуйста, кто чем может.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru