////simulace impulsu z Atmegy5 k pocitadlu pro laserovy terc  - Atmega 6////

.include "m8def.inc"

////////////////////////////////////////////////////////////
//hlavni program
//////////////////////////////////////

zac:  	ldi R16, HIGH(RAMEND) // inicializace STACK POINTERu
		out SPH, R16
		ldi R16, LOW(RAMEND)
		out SPL, R16

		ldi R16, 0xFF	//B vystupni - jednotlivé segmenty displejů B0 - B6, B7 adresuje diody
		out DDRB, R16
		ldi R16, 0x1F	//C0-C4 vystupni - jednotlivé displeje C0 - C3 (C0 je 1. displej)  C4 adresuje diody      
		out DDRC, R16		// C5 vstupni komunikace s atmegou5
		ldi R16, 0xFF	//D0-D7 výstupni
		out DDRD, R16
		ldi R16, 0xFF
		ldi R17, 0
		out PORTB, R17

		rcall cekej2ms
		rcall cekej1
		
		out PORTB, R16
		rcall cekej400		//2 impulsy 400us program
		out PORTB, R17
		rcall cekej400
		out PORTB, R16
		rcall cekej400
		out PORTB, R17
	

				//počká 3 sekundy
		rcall cekej1
		rcall cekej1
		rcall cekej1

start:	rcall cekej1		//počká 3 sekundy
		
		/////1vystrel
	

		out PORTB, R16		
		rcall cekej400		//Střela(x)
		out PORTB, R17
		rcall cekej2ms		//čeka na kotrolu stopu
		rcall cekej2ms		

		out PORTB, R16		//střela(0)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(1)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(2)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(3)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(4)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		rcall cekej1
		rcall cekej1		//2 sekundy do dalsi střely		


////////2vystrel
		out PORTB, R16		
		rcall cekej400		//Střela(x)
		out PORTB, R17
		rcall cekej2ms
		rcall cekej2ms	
		
		out PORTB, R16		//střela(0)
		rcall cekej400
		out PORTB, R17
		rcall cekej400	

		out PORTB, R16		//střela(1)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(2)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(3)
		rcall cekej400
		out PORTB, R17
		rcall cekej400


			/////2.5 vystřel :P

		rcall cekej1
		rcall cekej1		//2 sekundy do dalsi střely		

		out PORTB, R16		
		rcall cekej400		//Střela(x)
		out PORTB, R17
		rcall cekej2ms
		rcall cekej2ms

		out PORTB, R16		//střela(0)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

///////////3 vystřel


		rcall cekej1
		rcall cekej1		//2 sekundy do dalsi střely		

		out PORTB, R16		
		rcall cekej400		//Střela(x)
		out PORTB, R17
		rcall cekej2ms
		rcall cekej2ms	
		
		out PORTB, R16		//střela(0)
		rcall cekej400
		out PORTB, R17
		rcall cekej400	

		out PORTB, R16		//střela(1)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(2)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(3)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(4)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(5)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(6)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(7)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(8)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
	//	out PORTB, R16		//střela(9)
	//	rcall cekej400
	//	out PORTB, R17
	//	rcall cekej400
	//	rcall cekej1
	//	rcall cekej1




//////////4 vystřel


		rcall cekej1
		rcall cekej1		//2 sekundy do dalsi střely		

		out PORTB, R16		
		rcall cekej400		//Střela(x)
		out PORTB, R17
		rcall cekej2ms
		rcall cekej2ms
		
		out PORTB, R16		//střela(0)
		rcall cekej400
		out PORTB, R17
		rcall cekej400		

		out PORTB, R16		//střela(1)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(2)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(3)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(4)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(5)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(6)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(7)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(8)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
		
		out PORTB, R16		//střela(9)
		rcall cekej400
		out PORTB, R17
		rcall cekej400
	
		

				///// 6 vystřel

		rcall cekej1
		rcall cekej1		//2 sekundy do dalsi střely		

		out PORTB, R16		
		rcall cekej400		//Střela(x)
		out PORTB, R17
		rcall cekej2ms
		rcall cekej2ms	

		out PORTB, R16		//střela(0)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		out PORTB, R16		//střela(1)
		rcall cekej400
		out PORTB, R17
		rcall cekej400

		rcall cekej1
		rcall cekej1
		rcall cekej1
		rcall cekej1

			
		
		out PORTB, R16		//stop impuls
		rcall cekej2ms
		out PORTB, R17

		rcall cekej1  	// počka a za sekundu resetuje atmegu7 do načtení programu 
		rcall cekej1				//už neposílám znovu signál Program ale rovnou start
		out PORTB, R16		//RESTART impuls
		rcall cekej2ms
		out PORTB, R17
	
			rcall cekej1
			rcall cekej1

			rjmp start		//počká a skočí na start



/////////////delay////

cekej1:
			ldi R20, 5			//cca 1s (R17 5)
	d1:		ldi R18, 0
	d2:		ldi R19, 0
	d3:		dec R19
		
			brne d3
			dec R18
			brne d2
			dec R20
			brne d1
	
				ret

cekej200:	
			
			ldi R18, 0
	b1:		ldi R19, 0
	b2:		dec R19
		
			brne b2
			dec R18
			brne b1
			cli
				ret

cekej2ms:
			 						//cca 24mss (R17 neni)
			ldi R18, 3
	c1:		ldi R19, 220
	c2:		dec R19
		
			brne c2
			dec R18
			brne c1
			ret

cekej400:
			 						//cca 216us (R19 = 72)
			ldi R19, 130
	w1:		dec R19
			brne w1
			ret







