 .include "A:\avr\avrasm\appnotes\tn2313def.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     Counter=R24
.def     Temp8=R25

.cseg
.org 0

          ldi Temp,RamEnd       ;инициализация стека
          out SPL,Temp

          ldi Temp,0b11111111  ;настройка порта D
          out DDRD,Temp

          ldi Temp,0b11100000  ;настройка порта B
          out DDRB,Temp

          ldi Temp,0b00011111  ;подтяжка порта B
          out PortB,Temp

          ldi Temp4,90
          ldi Temp5,20
          ldi Temp6,20
          ldi Temp7,20
          ldi Temp8,4

          ldi R25,0b10000000 
          ldi R26,0b01000000 
          ldi R27,0b00100000 
          clr  Counter


;****************************************************
;выбор програм
Start:
         sbic   PinB,3
         rjmp  releasewait
         inc   Counter

         cpi   Counter,3
         brne  PC+2
         clr  Counter

         ldi   ZL,25
         add   ZL,Counter
         ld    temp,Z
         out PortB,Temp

releasewait:

         sbis  PinB,3
         rjmp  releasewait

         sbic  PinB,4
         rjmp  Start

         sbis  PinB,7
         rjmp  labelll
         rjmp nabnagst
labelll:        
         sbis  PinB,6
         rjmp  labell
         rjmp nabpolli
labell:
         sbis  PinB,5
         rjmp  label
         rjmp otggggi
label:
         rjmp  Start

;****************************************************
;СТИРКА НАБИРАЕМ ВОДУ
          ldi Temp,0b10011111  
          out PortB,Temp

nabnagst:    

          sbis  PinB,0          ;проверяем уровень
          rjmp  nagst
          
          ldi Temp,0b00011010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00011000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00011011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00011000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки


          rjmp nabnagst         ;поехали по новой!

nagst:
          sbis  PinB,2          ;проверяем температуру
          rjmp  str

          ldi Temp,0b00001010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00001000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00001011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00001000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          rjmp nabnagst         ;поехали по новой!

str: 
          ldi Temp,0b00000011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00000010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          dec Temp4
          cpi Temp4,0           ;проверяем время стирки
          breq  otg
          rjmp str              ;поехали по новой!

;****************************************************
;отжим 
otg: 
          ldi Temp,0b00111111  
          out PortB,Temp

          ldi Temp,0b01000000   ;
          rcall Delay           ;
          sbic  PinB,1          ;проверяем уровень
          rjmp otg
          ldi Temp,0b01000100   ;
          rcall Dely             ; 

          ldi Temp,0b01000000   ;
          rcall  Delayy
;****************************************************
nabpolli:
           rjmp  nabpoll
otggggi:
           rjmp   otgggg
;полоскание
          ldi Temp,0b01011111 
          out PortB,Temp

nabpol:
          sbis  PinB,0          ;проверяем уровень
          rjmp  pol

          ldi Temp,0b00010011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00010000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00010010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00010000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          rjmp nabpol              ;поехали по новой!

pol:
          ldi Temp,0b00000011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00000010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          dec Temp5
          cpi Temp5,0            ;проверяем время стирки
          breq  otgg

          rjmp   nabpol         ;поехали по новой!


;****************************************************
;отжим 
otgg: 
          ldi Temp,0b00111111  
          out PortB,Temp

          ldi Temp,0b01000000   ;
          rcall Delay           ;
          sbic  PinB,1          ;проверяем уровень
          rjmp otgg
          ldi Temp,0b01000100   ;
          rcall Dely             ;

          ldi Temp,0b01000000   ;
          rcall  Delayy

;****************************************************
;полоскание
          ldi Temp,0b01011111 
          out PortB,Temp

nabpoll:
          sbis  PinB,0          ;проверяем уровень
          rjmp  poll
          
          ldi Temp,0b00100011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00100000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00100010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00100000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки


          rjmp nabpoll          ;поехали по новой!


poll:
          ldi Temp,0b00000011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00000010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          dec Temp6
          cpi Temp6,0            ;проверяем время стирки
          breq  otggg

          rjmp   nabpoll         ;поехали по новой!


;****************************************************
;отжим 
otggg: 
          ldi Temp,0b00111111  
          out PortB,Temp

          ldi Temp,0b01000000   ;
          rcall Delay           ;
          sbic  PinB,1          ;проверяем уровень
          rjmp otggg
          ldi Temp,0b01000100   ;
          rcall Dely             ;

          ldi Temp,0b01000000   ;
          rcall  Delayy

;****************************************************
;полоскание
          ldi Temp,0b01011111 
          out PortB,Temp

nabpolll:
          sbis  PinB,0          ;проверяем уровень
          rjmp  polll
          
          ldi Temp,0b00010011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00010000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00010010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00010000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки


          rjmp   nabpolll       ;поехали по новой!


polll:
          ldi Temp,0b00000011   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          ldi Temp,0b00000010   ;ВРАЩАЕМ
          rcall Delay           ;вызов подпрограммы задержки

          ldi Temp,0b00000000   ;ПАУЗА
          rcall Dela            ;вызов подпрограммы задержки

          dec Temp7
          cpi Temp7,0            ;проверяем время стирки
          breq  otgggg

          rjmp   nabpolll         ;поехали по новой!


;****************************************************
;отжим 
          ldi Temp,0b00111111  
          out PortB,Temp

otgggg: 
          ldi Temp,0b01000000   ;
          rcall Delay           ;
          sbic  PinB,1          ;проверяем уровень
          rjmp otgggg

          ldi Temp,0b01000100   ;
          rcall Del 

          ldi Temp,0b01000000   ;
          rcall  Delayy

          ldi Temp,0b00000000  
          out PortD,Temp
 konec:   
          ldi Temp1,0b11111111  
          out PortB,Temp1
          rjmp  konec
;****************************************************
;ЗадержкИ
Delayy:    out PortD,Temp

          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,130

Loop:     dec Temp1
          brne Loop

          dec Temp2
          brne Loop

          dec Temp3
          brne Loop

          ret

Delay:    out PortD,Temp

          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,30

Loopy:     dec Temp1
          brne Loopy

          dec Temp2
          brne Loopy

          dec Temp3
          brne Loopy

          ret


Dela:    out PortD,Temp

          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,15

Loo:     dec Temp1
          brne Loo

          dec Temp2
          brne Loo

          dec Temp3
          brne Loo

          ret


Del:    out PortD,Temp

          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,0
          ldi Temp8,6

Loopl:     dec Temp1
          brne Loopl

          dec Temp2
          brne Loopl

          dec Temp3
          brne Loopl

          dec Temp8
          brne Loopl

          ret

Dely:    out PortD,Temp

          ldi Temp1,0
          ldi Temp2,0
          ldi Temp3,0
          ldi Temp8,3

Looply:     dec Temp1
          brne Looply

          dec Temp2
          brne Looply

          dec Temp3
          brne Looply

          dec Temp8
          brne Looply

          ret