;# Vėjo malūnai v1.0 ;# 4MHz .nolist .include "2313def.inc" .list .DEF Temp =r16 ;Kintamieji .DEF IntTemp =r17 .DEF OldInp =r18 .DEF Input =r19 .DEF rot1 =r20 .DEF rot2 =r21 .DEF rot3 =r22 .DEF rot4 =r23 .DEF rot5 =r24 .DEF mnr =r25 .EQU PORTA =$1B ;Konstantos .EQU DDRA =$1A .EQU UCSRB =$0A .EQU UCSRC =$03 .EQU UBRRL =$09 .EQU TCCR0B =$33 .EQU OCR1BL =$28 .EQU OCR1BH =$29 .EQU LED =1 .EQU m1 =0 .EQU m2 =1 .EQU m3 =2 .EQU m4 =3 .EQU m5 =4 .CSEG .ORG $00 ;Starto adresas RJMP start .ORG $09 ;Tx pabaiga RJMP Transmit .ORG $0C ;Taimeris RJMP Transmit start: LDI Temp,RAMEND ;1 Inicializuojam stack'ą OUT SPL,Temp ;1 SEI ;1 Įjungiam global interruptus LDI Temp,0b00000010 ;1 OUT DDRA,Temp ;1 Nustatomos PORTA kryptys ;USART inicializacija LDI Temp,0b01001000 ;1 Inicializuojamas USART OUT UCSRB,Temp ;1 Įjungiamas USART siųstuvas ir jo interruptas LDI Temp,0b00000110 ;1 2 stop bitai, 8 bitų freimai OUT UCSRC,Temp ;1 LDI Temp,25 ;1 Nustatom boud rate - 9.6kbps OUT UBRRL,Temp ;1 ;Taimerio inicializacija LDI Temp,0b00011101 ;1 Timer clock = clk/1024 OUT TCCR1B,Temp ;1 LDI Temp,$03 ;1 Timer 200ms @ 4MHz OUT OCR1AH,Temp ;1 OUT OCR1BH,Temp ;1 LDI Temp,$0D ;1 OUT OCR1AL,Temp ;1 OUT OCR1BL,Temp ;1 LDI Temp,0b00100000 ;1 įjungiamas taimerio interruptas OUT TIMSK,Temp ;1 Loop: IN Input,PINB ;1 Nusikopijuojam duomenis CPSE Input,OldInp ;2/1 Palyginam seną ir naują inputus RJMP Check1 ;2 RJMP Loop ;2/1 Grįžtam, jei inputas nepasikeitė Check1: SBRS Input,m1 ;2/1 Tikrinam kitą, jei m1=0 RJMP Check2 ;2 SBRS OldInp,m1 ;2/1 INC rot1 ;1 Padidinam rot1 Check2: SBRS Input,m2 ;2/1 Tikrinam kitą, jei m1=0 RJMP Check3 ;2 SBRS OldInp,m2 ;2/1 INC rot2 ;1 Padidinam rot1 Check3: SBRS Input,m3 ;2/1 Tikrinam kitą, jei m1=0 RJMP Check4 ;2 SBRS OldInp,m3 ;2/1 INC rot3 ;1 Padidinam rot1 Check4: SBRS Input,m4 ;2/1 Tikrinam kitą, jei m1=0 RJMP Check5 ;2 SBRS OldInp,m4 ;2/1 INC rot4 ;1 Padidinam rot1 Check5: SBRS Input,m5 ;2/1 Tikrinam kitą, jei m1=0 RJMP CheckEnd ;2 SBRS OldInp,m5 ;2/1 INC rot5 ;1 Padidinam rot1 Checkend: MOV OldInp,Input ;1 Išsiseivinam seną reikšmę RJMP Loop ;2 ;#################################################################### Transmit: IN IntTemp,SREG ;1 Išsiseivinam Status registrą CPI mnr,0 ;1 tikrinam ar pirmo baito eilė BREQ TransmitRot1 ;1/2 CPI mnr,1 ;1 tikrinam ar antro baito eilė BREQ TransmitRot2 ;1/2 CPI mnr,2 ;1 tikrinam ar trečio baito eilė BREQ TransmitRot3 ;1/2 CPI mnr,3 ;1 tikrinam ar ketvirto baito eilė BREQ TransmitRot4 ;1/2 CPI mnr,4 ;1 tikrinam ar penkto baito eilė BREQ TransmitRot5 ;1/2 CPI mnr,5 ;1 tikrinam ar penkto baito eilė BREQ TransmitEnd ;1/2 TransmitRot1: SBI PORTA,LED ;2 Debugui OUT UDR,rot1 ;1 RJMP TransmitNext ;2 TransmitRot2: OUT UDR,rot2 ;1 RJMP TransmitNext ;2 TransmitRot3: OUT UDR,rot3 ;1 RJMP TransmitNext ;2 TransmitRot4: OUT UDR,rot4 ;1 RJMP TransmitNext ;2 TransmitRot5: OUT UDR,rot5 ;1 TransmitNext: INC mnr ;1 Perjungiam sekantį baitą OUT SREG,IntTemp ;1 Restorinam Status registrą RETI TransmitEnd: LDI mnr,0 ;1 nuresetinam baito numerį CBI PORTA,LED ;2 Debugui OUT SREG,IntTemp ;1 Restorinam Status registrą RETI