Страница 1 из 1
DS18B20 Proteus не записывается температура в память EEPROM
Добавлено: Вт май 28, 2013 18:02:39
Decadanse
Здравствуйте!
Написал программу на ассемблере под микроконтроллер AT89C51 для чтения данных с термодатчика DS18B20. При считывание данных с датчика постоянно получаю одно и то же значение температуры. Подаю датчику команду преобразования памяти, после которой он должен записать температуру в Scratchpad-память в виде двухбайтного слова. Но преобразования не происходит и значения в память так и остаются FF FF FF FF | FF FF FF FF. Подскажите, пожалуйста, почему ничего не записывается в память датчика??
Прилагаю файл кода и протеусовсий файл.
Re: DS18B20 Proteus не записывается температура в память EEP
Добавлено: Вт май 28, 2013 22:47:39
ChipKiller
Подскажите, пожалуйста, почему ничего не записывается в память датчика??
... скорее всего неверно работают ф-ции чтения/записи - проще с нуля написать, чем разбираться .....
Спойлер
Код: Выделить всё
; ////// ф-ции для работы с DS18b20 ///////
Init_1W:
push B
clr Ds18b20 ; Ds18b20_pin=0
mov B,#250
djnz B,$
setb Ds18b20 ; Ds18b20_pin=1
mov B,#7
djnz B,$
mov B,#25
tst_line:
jnb Ds18b20,ok_1w
djnz B,tst_line
setb C
sjmp exit_init
ok_1w:
mov B,#250
djnz B,$
clr C
exit_init:
pop B
ret
Wr_1w: ; записываемый байт в ACC
push B
mov B,#8
wr_bit:
clr Ds18b20 ; Ds18b20_pin=0
push B
rrc A ; rlc A
mov Ds18b20,C ; write bit
mov B,#25
djnz B,$
setb Ds18b20 ; Ds18b20_pin - release
mov B,#6
djnz B,$
pop B
djnz B,wr_bit
pop B
ret
Rd_1w: ; считываемый байт в ACC
push B
mov B,#8 ; 8 bit read
rd_bit:
clr Ds18b20 ; Ds18b20_pin=0
push B
setb Ds18b20 ; Ds18b20_pin - release
mov B,#10
djnz B,$ ; delay 20 us
mov C,Ds18b20 ; read bit
rrc A
mov B,#21
djnz B,$
pop B
djnz B,rd_bit
pop B
ret
Re: DS18B20 Proteus не записывается температура в память EEP
Добавлено: Вт май 28, 2013 23:10:42
Decadanse
Заново переписал весь код, заработало. Так и непонятно, в чем была ошибка. Зато теперь появилась новая проблема - симуляция идет не в реальном времени, так как очень сильно грузится процессор
Re: DS18B20 Proteus не записывается температура в память EEP
Добавлено: Вт май 28, 2013 23:18:53
ChipKiller
теперь появилась новая проблема - симуляция идет не в реальном времени, так как очень сильно грузится процессор
.. так и должно быть - все задержки программные
ЗЫ. .... хотя нет, погонял свою версию - загрузка 50%
Re: DS18B20 Proteus не записывается температура в память EEP
Добавлено: Ср май 29, 2013 00:04:02
Decadanse
Я просто решил объединить 2 свои проги: одну с таймером и индикацией и, вот, прицепил теперь к ней код с термодатчиком. По отдельности работают отлично, но вместе грузят проц просто ужас. Наверное проблема в прерываниях, потому что их надо запрещать когда записываешь или считываешь данные с датчика. А таймеру это скорее всего не нравится..