 .include "A:\avr\avrasm\appnotes\m8def.inc"

		
.def     Temp=R16    ;общий
.def     Temp1=R17   ;общий
.def     Temp2=R18   ;общий
.def     Temp3=R19   ;общий
.def     Temp4=R20   ;общий

.def     Temp5=R21   ;время стирки
.def     Temp6=R22   ;температура
.def     Temp7=R23   ;общий
.def     Temp8=R24   ;общий
.def     Temp9=R25   ;общий
.def     Temp10=R26   ;общий
.def     Counter=R27


.cseg
.org 0

init:

	ldi		Temp,low(RAMEND)             
	out		SPL,Temp

	ldi		Temp,high(RAMEND)	; Stack Pointer = $45F
	out		SPH,Temp


          ldi Temp,0b01111111  ;настройка порта D
          out ddrD,Temp
          ldi Temp,0b11111111  ;настройка порта B
          out ddrB,Temp
          ldi Temp,0b00000000  ;настройка портаc
          out ddrc,Temp

          ldi R28,0b00000100 
          ldi R29,0b00000010 
          ldi R30,0b00000001 
          clr  Counter
;*************************************************************************************
;выбор програм
Start:
         sbic   PinC,2
         rjmp  releasewait
         inc   Counter

         cpi   Counter,3
         brne  PC+2
         clr  Counter

         ldi   ZL,28
         add   ZL,Counter
         ld    temp,Z
         out PortB,Temp

releasewait:

         sbis  PinC,2
         rjmp  releasewait

         sbic  PinC,3
         rjmp  Start

         in  temp,PortB
         cpi temp,0b00000001
         breq stirka01
         
         in  temp,PortB
         cpi temp,0b00000010
         breq stirka01

         in  temp,PortB
         cpi temp,0b00000100
         breq stirka01

         rjmp  Start

;*************************************************************************************
;стирка 1
stirka01: 
          ldi Temp5,60
          rcall nstirka
          ldi Temp,0b00100000
          rcall pause
          rcall nstirkar
          ldi Temp,0b00100000
          rcall pause
          sbis  PinC,4          ;проверяем уровень
          rjmp ngstirka1
          rjmp stirka01

    ngstirka1:

          rcall ngstirka
          ldi Temp,0b00010000
          rcall pause
          rcall ngstirkar
          ldi Temp,0b00010000
          rcall pause
          sbis  PinC,1           ;проверяем температуру
          rjmp stirka1
          rjmp ngstirka1

   stirka1:
          rcall stirka
          ldi Temp,0b00000000
          rcall pause
          rcall stirkar
          ldi Temp,0b00000000
          rcall pause

          dec Temp5
          cpi Temp5,0           ;проверяем время стирки
          brne  stirka1         ;поехали по новой!
          rcall otgim 
          ldi Temp,0b00001000
          rcall pause

poloskanie:
          ldi Temp5,15
          rcall nstirka
          ldi Temp,0b00100000
          rcall pause
          rcall nstirkar
          ldi Temp,0b00100000
          sbis  PinC,4          ;проверяем уровень
          rjmp poloskani
          rjmp poloskanie
    poloskani:
          rcall stirka
          ldi Temp,0b00000000
          rcall pause
          rcall stirkar
          ldi Temp,0b00000000
          rcall pause

          dec Temp5
          cpi Temp5,0           ;проверяем время полоскания
          brne  poloskani
          rcall otgim 
          ldi Temp,0b00001000
          rcall pause         

poloskanie2:
          ldi Temp5,15
          rcall nstirka
          ldi Temp,0b00100000
          rcall pause
          rcall nstirkar
          ldi Temp,0b00100000
          sbis  PinC,4          ;проверяем уровень
          rjmp poloskani2
          rjmp poloskanie2
    poloskani2:
          rcall stirka
          ldi Temp,0b00000000
          rcall pause
          rcall stirkar
          ldi Temp,0b00000000
          rcall pause

          dec Temp5
          cpi Temp5,0           ;проверяем время полоскания
          brne  poloskani2
          rcall otgim 
          ldi Temp,0b00001000
          rcall pause   

poloskanie3:
          ldi Temp5,15
          rcall nstirka
          ldi Temp,0b01000000
          rcall pause
          rcall nstirkar
          ldi Temp,0b01000000
          sbis  PinC,4          ;проверяем уровень
          rjmp poloskani3
          rjmp poloskanie3
    poloskani3:
          rcall stirka
          ldi Temp,0b00000000
          rcall pause
          rcall stirkar
          ldi Temp,0b00000000
          rcall pause

          dec Temp5
          cpi Temp5,0           ;проверяем время полоскания
          brne  poloskani3
          rcall otgimm 
          ldi Temp,0b00001000
          rcall pause  
konec:
          ldi Temp,0b11111111
          out PortB,Temp
          rjmp konec
;***********************************************************
otgimm:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,0
          ldi Temp7,20
otgm:
          ldi Temp,0b00001000  ; 
          out portD,Temp

          ldi Temp,150 
          in Temp1,adch
          cp  Temp,Temp1
          brlo nlebelllm

          ldi Temp,0b00001101  ; 
          out portD,Temp

          ldi Temp,150 
          in Temp1,adch
          cp  Temp,Temp1
          brsh nlebelllm


nlebelllm:
          dec Temp4
          brne otgm

          dec Temp2
          brne otgm

          dec Temp3
          brne otgm

          dec Temp7
          brne otgm
          ret

;*************************************************************************
otgim:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,0
          ldi Temp7,10


otgi:
          ldi Temp,0b00001000  ; 
          out portD,Temp

          ldi Temp,150 
          in Temp1,adch
          cp  Temp,Temp1
          brlo nlebelllo

          ldi Temp,0b00001101  ; 
          out portD,Temp

          ldi Temp,150 
          in Temp1,adch
          cp  Temp,Temp1
          brsh nlebelllo


nlebelllo:
          dec Temp4
          brne otgi

          dec Temp2
          brne otgi

          dec Temp3
          brne otgi

          dec Temp7
          brne otgi
          ret

;****************************************************************
;
nstirka:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,100

nLoopl:
nlebel:
          ldi Temp,0b00100000  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brlo nlebelll

          ldi Temp,0b00100101 ; 
          out portD,Temp

          ldi Temp,50 
          in Temp1,adch
          cp  Temp,Temp1
          brsh nlebelll


nlebelll:
          dec Temp4
          brne nLoopl

          dec Temp2
          brne nLoopl

          dec Temp3
          brne nLoopl
          ret
;*************************************************************
ngstirka:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,100

ngLoopl:
nglebel:
          ldi Temp,0b00010000  ; 
          out portD,Temp

          ldi Temp,50 
          in Temp1,adch
          cp  Temp,Temp1
          brlo nglebelll

          ldi Temp,0b00010101  ; 
          out portD,Temp

          ldi Temp,50 
          in Temp1,adch
          cp  Temp,Temp1
          brsh nglebelll


nglebelll:
          dec Temp4
          brne ngLoopl

          dec Temp2
          brne ngLoopl

          dec Temp3
          brne ngLoopl
          ret
;*****************************************************************************
stirka:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,100

Loopl:
lebel:
          ldi Temp,0b00000000  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brlo lebelll

          ldi Temp,0b00000101  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brsh lebelll


lebelll:
          dec Temp4
          brne Loopl

          dec Temp2
          brne Loopl

          dec Temp3
          brne Loopl
          ret
;*********************************************************************
nstirkar:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,100

nLooplr:
nlebelr:
          ldi Temp,0b00100000  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brlo nlebelllr

          ldi Temp,0b00100110  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brsh nlebelllr


nlebelllr:
          dec Temp4
          brne nLooplr

          dec Temp2
          brne nLooplr

          dec Temp3
          brne nLooplr
          ret
;*******************************************************************
ngstirkar:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,100

ngLooplr:
nglebelr:
          ldi Temp,0b00010000  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brlo nglebelllr

          ldi Temp,0b00010110  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brsh nglebelllr


nglebelllr:
          dec Temp4
          brne ngLooplr

          dec Temp2
          brne ngLooplr

          dec Temp3
          brne ngLooplr
          ret

;*********************************************************************
stirkar:
          ldi Temp,0b00100000  ;настройка ацп
          out admux,Temp

          ldi Temp,0b11100011  ;настройка ацп
          out ADCSRA,Temp
    
          ldi Temp4,0
          ldi Temp2,0
          ldi Temp3,100

Looplr:
lebelr:
          ldi Temp,0b00000000  ; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brlo lebelllr

          ldi Temp,0b00000110; 
          out portD,Temp

          ldi Temp,50
          in Temp1,adch
          cp  Temp,Temp1
          brsh lebelllr


lebelllr:
          dec Temp4
          brne Looplr

          dec Temp2
          brne Looplr

          dec Temp3
          brne Looplr
          ret

;************************************************************************
pause:
          out portD,Temp

          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,0

Loop:     dec Temp1
          brne Loop

          dec Temp2
          brne Loop

          dec Temp3
          brne Loop

          ret