rendered paste body;# 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 Isiseivinam seną reikmę
RJMP Loop ;2
;####################################################################
Transmit:
IN IntTemp,SREG ;1 Isiseivinam 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