DS18B20 Proteus не записывается температура в память EEPROM

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Вт май 28, 2013 17:34:23

Сообщение Decadanse »

Здравствуйте!
Написал программу на ассемблере под микроконтроллер AT89C51 для чтения данных с термодатчика DS18B20. При считывание данных с датчика постоянно получаю одно и то же значение температуры. Подаю датчику команду преобразования памяти, после которой он должен записать температуру в Scratchpad-память в виде двухбайтного слова. Но преобразования не происходит и значения в память так и остаются FF FF FF FF | FF FF FF FF. Подскажите, пожалуйста, почему ничего не записывается в память датчика??

Прилагаю файл кода и протеусовсий файл.
Вложения
1Wire.rar
(14.57 КБ) 169 скачиваний
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение 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		
Реклама
Родился
Сообщения: 3
Зарегистрирован: Вт май 28, 2013 17:34:23

Сообщение Decadanse »

Заново переписал весь код, заработало. Так и непонятно, в чем была ошибка. Зато теперь появилась новая проблема - симуляция идет не в реальном времени, так как очень сильно грузится процессор
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

теперь появилась новая проблема - симуляция идет не в реальном времени, так как очень сильно грузится процессор
.. так и должно быть - все задержки программные

ЗЫ. .... хотя нет, погонял свою версию - загрузка 50%
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 3
Зарегистрирован: Вт май 28, 2013 17:34:23

Сообщение Decadanse »

Я просто решил объединить 2 свои проги: одну с таймером и индикацией и, вот, прицепил теперь к ней код с термодатчиком. По отдельности работают отлично, но вместе грузят проц просто ужас. Наверное проблема в прерываниях, потому что их надо запрещать когда записываешь или считываешь данные с датчика. А таймеру это скорее всего не нравится..
Реклама
Ответить

Вернуться в «Периферия»