.include "m8def.inc" ; Программа робота ездещего по линии. Двигатели на порту В 1,2 и 3,4 ;Датчики на порту С 0,1,2,3 ; порты .equ motor_port = PORTB .equ ir_port = PORTC .equ button_port= PORTB .equ led_port = PORTD .equ pin_ir = PINC .equ button_pin = PINB ; направление движения .equ stop = $00 .equ vpered = $0A .equ vpered_lev = $12 .equ vpered_prav= $0C .equ nazad = $14 .equ razvorot = 0x12 ; ноги для датчиков .equ leviy = 0 .equ center_lev = 1 .equ center_prav= 2 .equ praviy = 3 ; ноги для светодиодов .equ led_lev = 0 .equ led_cenlev = 1 .equ led_cenpr = 2 .equ led_prav = 3 ; переменные .def temp = r20 ; переменная движения .def temp2 = r16 ; временная ; инициализация стека .org $0000 RESET: ldi r30,HIGH(RAMEND) out SPH,r30 ldi r30,LOW(RAMEND) out SPL,r30 ldi r29,$1F out DDRB,r29 ldi r29,$00 out DDRC,r29 cbi DDRB,0 sbi button_port,0 ldi r29,$0f out DDRD,r29 Button_start: sbis button_pin,0 rjmp start rjmp Button_start START: in temp,PINC ; проверка если все выключены cpi temp,0x00 breq Vpered_exat SENSORI: ; опрос датчиков: ; центральный правый CENTR_PRAVIY: ldi temp,vpered_prav sbi led_port,led_cenpr sbic pin_ir, center_prav rcall sens_cen_prav ; центральный левый CENTR_LEVIY: ldi temp,vpered_lev sbi led_port,led_cenlev sbic pin_ir, center_lev rcall sens_cen_lev ;правый PRAVIY1: ldi temp,vpered_prav cbi led_port,led_prav sbis pin_ir, praviy rcall sens_prav ;левый LEVIY1: ldi temp,vpered_lev cbi led_port,led_lev sbis pin_ir, leviy rcall sens_lev rcall Pausa ; движение вперед VPERED_EXAT: ldi temp,vpered out motor_port,temp rjmp start sens_cen_prav: cbi led_port,led_cenpr out motor_port,temp ret sens_cen_lev: cbi led_port,led_cenlev out motor_port,temp ret sens_prav: sbi led_port,led_prav out motor_port,temp ret sens_lev: sbi led_port,led_lev out motor_port,temp ret Pausa: ldi R17, $97 WGLOOP0: ldi R18, $06 WGLOOP1: ldi R19, $92 WGLOOP2: dec R19 brne WGLOOP2 dec R18 brne WGLOOP1 dec R17 brne WGLOOP0 ret