//program do laserové zbraně druhé generace (modrý laser)
//na napájení je hlavní vypínač on off
// na B jsou tlačítka 
	// B0 - tlačítko pro normální nekonečnou střelbu
	//B1 - tlačítko pro biatlon (nutné zmáčknout páčku než můžu střílet znovu)
	//B2 - páčka přepínače (nabíjení biatlonu)
	//B7 - SPOUST
// D obsluhuje infradiodu/diody a laser

//K výstřelu se musí přivést nejprve nula na B0 nebo B1 (volba programu) 
//prakticky se před zapnutím sepne tlačítko B nebo N na přepínači a po spuštění jede v tom jednom programu
//Pak nula na spoušť (B7)


.include "m8def.inc"

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

		
		ldi R16, 0x00	//B vstupni
		out DDRB, R16
		ldi R16, 0xFF
		out PORTB, R16	//pull up rezistor

		ldi R16, 0xFF	//D vystupni
		out DDRD, R16

//test: 	rcall cekej25
//		rjmp test


program: 	in R16, PINB
			ori R16, 0b11111110
			cpi R16, 0b11111110
			breq normal
			
			in R16, PINB
			ori R16, 0b11111101
			cpi R16, 0b11111101
			breq biatlon

			rjmp program

biatlon: rjmp biatlon2

normal:
smycka:	in R20, PINB
		ori 	R20, 	0b01111111
		cpi 	R20, 	0b01111111
		brne smycka				//ceka na sepnuti tlacitka

		ldi R16,0x1F
		out PORTD, R16
		rcall cekej25
		ldi R16,0x00
		out PORTD  , R16
		rcall cekej24
		rcall cekej24
		rcall cekej24
		rcall cekej24
		rcall cekej24
	
pustil:	in R16, PINB
		ori R16, 0b01111111			//dokud nepustím spoust nemuzu vystrelit znovu
		cpi R16, 0b11111111
		brne pustil


		
		//rcall cekej500
		rjmp smycka				//po sepnuti blikne s laserem a s IR diodou na 24ms a pocka 500ms a vrati se do smycky

/////////////////////////////////////////////////////////////////////////////////////////////////////////
biatlon2:
smycka2:	in R20, PINB
			ori R20, 0b01111111
			cpi R20, 0b01111111
			brne smycka2				//ceka na sepnuti tlacitka

			ldi R16,0x1F
			out PORTD, R16
			rcall cekej25
			ldi R16,0x00
			out PORTD  , R16
			rcall cekej24
			rcall cekej24
			rcall cekej24
			rcall cekej24
			rcall cekej24
	
pustil2:	in R16, PINB
			ori R16, 0b01111111			//dokud nepustím spoust nemuzu vystrelit znovu
			cpi R16, 0b11111111
			brne pustil2

nabiti:		in R16, PINB
			ori R16, 0b11111011
			cpi R16, 0b11111011
			breq nabiti

nabiti2:	in R16, PINB
			ori R16, 0b11111011
			cpi R16, 0b11111011
			brne nabiti2



		rjmp smycka2




/*cekej500:
			ldi R17, 5			//cca 500ms (R17 20)
	b1:		ldi R18, 0
	b2:		ldi R19, 0
	b3:		dec R19
		
			brne b3
			dec R18
			brne b2
			dec R17
			brne b1
	
				ret*/

cekej24:
			 						//cca 24mss (R17 neni)
			ldi R18, 0
	c1:		ldi R19, 60
	c2:		dec R19
			brne c2	
			dec R18
			brne c1
			
		
	
				ret

cekej25:	ldi R24,0x1F						//tvoření frekvence 38khz pro diodu 
			ldi R25,0x01
						 						//cca 27ms
		
		 	ldi R17, 4							//laser zustava svitit konstantne
	d0:		ldi R18, 0
	d1:		nop
			out portD, R24
			ldi R19, 0x04
	d2:		dec R19
			brne d2
			nop
			out portD, R25
			ldi R19, 0x03
	d3:		dec R19
			brne d3 
	
			dec R18
			brne d1

			dec R17
			brne d0
			
		
	
				ret


ec R17
			brne d0
			
		
	
				ret


