.include "m8def.inc" ; ATMega8 ; частота 8 МГц .def adr_recive = R4 ; адрес для следующего принятого байта .def adr_transmit = R5 ; адрес для следующего переданного байта .def count_recive = R6 ; счетчик принятых байт .def count_transmit = R7 ; счетчик переданных байт .def save_SREG = R15 ; для сохранения регистра статуса .def count_int_T2 = R18 ; счетчик прерываний таймера2, значение 5 == 10 мс .def count_01sec = R19 ; счетчик по 10 мс .def number_par = R20 ; номер индицируемого параметра .equ d18b20 = 0 ; пин термометра .equ pin_d18b20 = pinC .equ ddr_d18b20 = ddrC .equ buffer_USART = 0xC0 ; буфер приемопередатчика .cseg .org 0 rjmp nachalo_code .org OC2addr ; адрес прерывания timer2, Timer on Compare Match (CTC) mode rjmp timer2 ; прерывание таймера2 .org URXCaddr ; адрес прерывания USART, Rx Complete rjmp USART_Rx_Complete ; прием готов nop rjmp USART_Tx_Complete ; передача готова nachalo_code: ldi R26, low(RAMEND) out SPL, R26 ldi R26, high(RAMEND) out SPH, R26 ldi R26, buffer_USART ; подготовить регистры для приемника USART mov adr_recive, R26 clr count_recive ;--- Порт C --- ; Порт C0 - 1-wire ;--- Порт D --- ; Порт D0 - приемник USART ; Порт D1 - передатчик USART ;--- установка портов --- ldi R26, 0b00000000 out ddrC, R26 ldi R26, 0b11111110 ; без подтяжки на PC0 out portC, R26 ldi R26, 0b00000000 out ddrD, R26 ldi R26, 0b11111111 out portD, R26 ;--- запустим конвертацию температуры, чтобы при входе в полный цикл (через 1 секунду) у нас уже был результат измерения температуры --- rcall initialization ldi R28, 0xCC ; пропуск ROM rcall one_byte_write ldi R28, 0x44 ; конвертировать температуру rcall one_byte_write ;------ Таймер2 ------ ldi R26, 249 ; 250 для 2 мс (8 * 250 = 2000 мкс = 2 мс) out OCR2, R26 ; сохранить в регистре сравнения ldi R26, 0b00001100 ; таймер2, режим Compare Match, предделитель 64 == пуск таймера2 out TCCR2, R26 ldi R26, (1<