.include "m8def.inc" ; Используем ATMega8 .equ XTAL = 8000000 ; Частота кварца .equ baudrate = 38400 ; Скорость передачи .equ bauddivider = XTAL/(16*baudrate)-1 ; Константа скорости передачи .def str = R17 ; Строка для команды .def buf = R16 ; Буфер UART .def buf2 = R18 ; Буфер 2 .def cnt_sig = R20 ; Число периодов1 .def cnt_sig2 = R21 ; Число периодов2 .def dir = R19 ; Направление .def one = R22 .def zero = R23 .def mark = R24 .MACRO outi ; Макрос загрузки LDI R16,@1 ; OUT @0,R16 ; .ENDMACRO .CSEG .ORG 0x0000 ; Вектор сброса RJMP Reset ; Переход к начальным установками программы .ORG OC2addr RJMP Tick .ORG URXCaddr RJMP Emergen Reset: CLI OUTI SPL,low(RAMEND) ; инициализация стека OUTI SPH,High(RAMEND) RCALL uart_init ; Инициализация UART LDI one,1 LDI zero,0 LDI mark,0 OUTI DDRB,(0b00011110) ; Конфигурирование ног порта на выход OUTI PORTB,(0b00000000) ; Низкий уровень на выходах порта ; Приглашение на ввод команды LDI ZL,low(hello*2) ; Адрес текста приглашения LDI ZH,high(hello*2) ; на ввод команды RCALL uart_str ; Отправление приглашения Main: LDI ZL,low(inpt) ; Адрес текста LDI ZH,high(inpt) ; ожидаемой команды ST Z,zero LDI ZL,low(inpt+1) ; Адрес текста LDI ZH,high(inpt+1) ; ожидаемой команды ST Z,zero LDI ZL,low(inpt+2) ; Адрес текста LDI ZH,high(inpt+2) ; ожидаемой команды ST Z,zero ; Приём команды и сохранение в памяти LDI ZL,low(inpt+3) ; Адрес текста LDI ZH,high(inpt+3) ; ожидаемой команды ST Z,zero LDI ZL,low(inpt) ; Адрес текста LDI ZH,high(inpt) ; ожидаемой команды RCALL wtcmd ; Приём команды ; Обработка команды start_cmd: LDI ZL,low(inpt) ; Адрес текста LDI ZH,high(inpt) ; принятой команды LD cnt_sig,Z ; Чтение кода команды LDI ZL,low(inpt+1) ; Адрес текста LDI ZH,high(inpt+1) ; принятой команды LD cnt_sig2,Z ; Чтение кода команды LDI ZL,low(inpt+2) ; Адрес текста LDI ZH,high(inpt+2) ; принятой команды LD dir,Z ; Чтение кода команды RCALL Timer_start RJMP Main ; Процедура инициализации приёмо-передатчика UART uart_init: OUTI UBRRL,low(bauddivider) ;Установка скорости обмена OUTI UBRRH,high(bauddivider) ;Установка скорости обмена OUTI UCSRA, 0 ; Прерывания запрещены, прием-передача разрешен. OUTI UCSRB, (1<