All pastes #118309 Raw Edit

Unnamed

public text v1 · immutable
·published 2006-08-06 09:42 UTC
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 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