
.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

