DHT-11 + atmega16+assembler
Добавлено: Вс янв 26, 2014 19:05:46
Нужно написать программку, для работы DHT11 на assemblere.
Статью читал http://radiokot.ru/articles/13/, + основывался на данной заметке
http://avrproject.ru/publ/kak_podkljuch ... r/2-1-0-72
К сожалению не работает.
Датчик на выводе А0.
Расчет задержек через AvrDelayLoop.
Как это отлаживать тоже неясно
Статью читал http://radiokot.ru/articles/13/, + основывался на данной заметке
http://avrproject.ru/publ/kak_podkljuch ... r/2-1-0-72
К сожалению не работает.
Датчик на выводе А0.
Расчет задержек через AvrDelayLoop.
Как это отлаживать тоже неясно
Спойлер
Код: Выделить всё
.include "m16def.inc"
.def count=r19
.def temperat=r18;
.def temp=r23;
.def tempdrob=r24
.def vlag=R16;
.def vlagdrob=r17;
main:
out PORTB,R
sbi PORTA,0;
ldi count,0;
sbi DDRA,0;нулевой вывод порта А на выход
cbi PORTA,0;прижимаем вывод к землеж
;ждем 25милисекунд
; ===========
; delay loop generator
; 115200 cycles:
; -----------------------------
; delaying 115182 cycles:
ldi R20, $9E
WGLOOP0: ldi R21, $F2
WGLOOP1: dec R21
brne WGLOOP1
dec R20
brne WGLOOP0
; -----------------------------
; delaying 18 cycles:
ldi R20, $06
WGLOOP2: dec R20
brne WGLOOP2
;
sbi porta,0;отпускаем шину
cbi DDRA,0;на вход
;ждем 40мс
; ===========
; delay loop generator
; 184320 cycles:
; -----------------------------
; delaying 183768 cycles:
ldi R20, $F7
WGLOOP0: ldi R21, $F7
WGLOOP1: dec R21
brne WGLOOP1
dec R20
brne WGLOOP0
; -----------------------------
; delaying 552 cycles:
ldi R20, $B8
WGLOOP2: dec R20
brne WGLOOP2
; ===========
sbic PIND,0x00 ;если на выходе досих пор 0, то
jmp ERROR;ошибка :(
;Если на шине 0,то ждем 80мс
; ===========
; delay loop generator
; 368640 cycles:
; -----------------------------
; delaying 368586 cycles:
ldi R20, $03
WGLOOP0: ldi R21, $BB
WGLOOP1: ldi R22, $DA
WGLOOP2: dec R22
brne WGLOOP2
dec R21
brne WGLOOP1
dec R20
brne WGLOOP0
; -----------------------------
; delaying 54 cycles:
ldi R20, $12
WGLOOP3: dec R20
brne WGLOOP3
; ===========
sbic pind,0x00; если на выходе досихпор 0
jmp ERROR;ошибка :(
;иначе начинаем получать данные
clr count;очищаем шетчик
cikle:
sbic pind,0x00; ждем пока на выходе появиться 1
jmp cikle;
;начинаем принимать биты
sbis pind,0x00;ждем появления 0
;ждем 30 мс
; ===========
; delay loop generator
; 138240 cycles:
; -----------------------------
; delaying 138195 cycles:
ldi R20, $B9
WGLOOP3: ldi R21, $F8
WGLOOP4: dec R21
brne WGLOOP4
dec R20
brne WGLOOP3
; -----------------------------
; delaying 45 cycles:
ldi R20, $0F
WGLOOP3: dec R20
brne WGLOOP3
; ===========
sbis pind,0x00; если на шине до сих пор 1
inc temp;
add temperature,temp;
lsr temperature;
;в temperature целая часть температуры
inc count;инкрементируем счетчик
cpi count,8;
BRNE cikle;
clr count
cikle2:
sbic pind,0x00; ждем пока на выходе появиться 1
jmp cikle2;
;начинаемпринимать биты
sbis pind,0x00;ждем появления 0
;ждем 30 мс
; ===========
; delay loop generator
; 138240 cycles:
; -----------------------------
; delaying 138195 cycles:
ldi R20, $B9
WGLOOP5: ldi R21, $F8
WGLOOP6: dec R21
brne WGLOOP6
dec R20
brne WGLOOP5
; -----------------------------
; delaying 45 cycles:
ldi R20, $0F
WGLOOP7: dec R20
brne WGLOOP7
; ===========
sbis pind,0x00; если на шине досихпор 1
inc temp;
add tempdrob,temp;
lsr tempdrob;
;в tempdrob дробная часть температуры
inc count;инкрементируем счетчик
cpi count,8;
BRNE cikle2;
clr count
cikle3:
sbic pind,0x00; ждем пока на выходе появиться 1
jmp cikle3;
;начинаем принимать биты
sbis pind,0x00;ждем появления 0
;ждем 30 мс
; ===========
; delay loop generator
; 138240 cycles:
; -----------------------------
; delaying 138195 cycles:
ldi R20, $B9
WGLOOP8: ldi R21, $F8
WGLOOP9: dec R21
brne WGLOOP9
dec R20
brne WGLOOP8
; -----------------------------
; delaying 45 cycles:
ldi R20, $0F
WGLOOP10: dec R20
brne WGLOOP10
; ===========
sbis pind,0x00; если на шине досихпор 1
inc temp;
add tempdrob,temp;
lsr tempdrob;
;в tempdrob дробная часть температуры
inc count;инкрементируем счетчик
cpi count,8;
BRNE cikle3;
clr count
cikle4:
sbic pind,0x00; ждем пока на выходе появиться 1
jmp cikle4;
;начинае принимать биты
sbis pind,0x00;ждем появления 0
;ждем 30 мс
; ===========
; delay loop generator
; 138240 cycles:
; -----------------------------
; delaying 138195 cycles:
ldi R20, $B9
WGLOOP11: ldi R21, $F8
WGLOOP12: dec R21
brne WGLOOP12
dec R20
brne WGLOOP11
; -----------------------------
; delaying 45 cycles:
ldi R20, $0F
WGLOOP13: dec R20
brne WGLOOP11
; ===========
sbis pind,0x00; если на шине досихпор 1
inc temp;
add vlag,temp;
lsr vlag;
;в vlag целая часть влажности
inc count;инкрементируем счетчик
cpi count,8;
BRNE cikle4;
clr count
cikle5:
sbic pind,0x00; ждем пока на выходе появиться 1
jmp cikle5;
;наяинае принимат биты
sbis pind,0x00;ждем появления 0
;ждем 30 мс
; ===========
; delay loop generator
; 138240 cycles:
; -----------------------------
; delaying 138195 cycles:
ldi R20, $B9
WGLOOP14: ldi R21, $F8
WGLOOP15: dec R21
brne WGLOOP15
dec R20
brne WGLOOP14
; -----------------------------
; delaying 45 cycles:
ldi R20, $0F
WGLOOP16: dec R20
brne WGLOOP14
; ===========
sbis pind,0x00; если на шине до сих пор 1
inc temp;
add vlagdrob,temp;
lsr vlagdrob;
;в vlag целая часть влажности
inc count;инкрементируем счетчик
cpi count,8;
BRNE cikle5;
jmp main;
ERROR
ldi R16,0b10101010
out portb,R16;
jmp ERROR