.include "output\tn13def.inc"
;================================================================================================================



;================================================================================================================

;*******************************		îáçûâàåì ïåðåìåííûå		****************************

.def   	Temp=R16
.def   	Temp1=R17
.def   	Temp2=R18
.def	Temp3=R19
.def	countsht=R20



.dseg
;********************************					‡„…‘Ÿ					**********************************
;********************************		âûïðàøèâàåì ó êîìïèëßòîðà ÷óòîê Ž‡“		**********************************
;********************************			äëß õðàíåíèß "ëè÷íûõ äàííûõ"		**********************************
stroka:		.byte 4
stolbik:	.byte 1
.cseg
;*************************** ‚åêòîðà ïðåðûâàíèé ************************
.org 0
	rjmp RESET   
	rjmp INT_0				; External Interrupt 0
	rjmp PCI0				; External Interrupt Request 0
	rjmp OVF0				; Timer/Counter0 Overflow
	rjmp ERDY				; EEPROM Ready
	rjmp AnaComp				; Analog Comparator
	rjmp OC0A				; Timer/Counter Compare Match A
	rjmp OC0B				; Timer/Counter Compare Match B
	rjmp WDT					; Watchdog Time-out
	rjmp ADCC				; ADC Conversion Complete
  
	;RESET:
	INT_0:
	PCI0:
	OVF0:
	ERDY:
	AnaComp:
	;OC0A:
	OC0B:
	WDT:
	ADCC:
reti	

;********************** îáðàáîò÷èê ïðåðûâàíèß ïåðåïîëíåíèß òàéìåðà *********************
;**********************               TIMER0_OVF                   *********************
OC0A:		in R15,SREG
			ldi Temp,0 
			out TCNT0,Temp				;îáíóëßåì ñ÷åòíûé ðåãèñòð
				rcall effects

exitoc0a:
			out SREG,R15
		reti
		


		
   
RESET:

							;***********************	èíèöèàëèçàöèß ŒŠ	**********************
				ldi countsht,0
				ldi Temp,1
				sts stroka,Temp
				ldi Temp,2
				sts stroka+1,Temp
				ldi Temp,3
				sts stroka+2,Temp
				ldi Temp,4
				sts stroka+3,Temp
				ldi Temp,1
				sts stolbik,Temp
							
ldi Temp,0b11111111			;íàñòðîéêà ïîðòîâ
out DDRB,Temp
		  
ldi Temp,0 
out TCNT0,Temp				;îáíóëßåì ñ÷åòíûé ðåãèñòð

ldi Temp,0b00001000 			;ðàçðåøèòü ïðåðûâàíèå ïî ïåðåïîëíåíèþ òàéìåðà/ñ÷åò÷èêà 0
out TIMSK0,Temp

ldi Temp,0b00001000 			;”ëàã íàñòóïëåíèß ïðåðûâàíèß ïî ïåðåïîëíåíèþ
out TIFR0,Temp

ldi Temp,0b00000010 			;ðåæèì ðàáîòû "ñáðîñ ïðè ñîâïàäåíèè"
out TCCR0A,Temp

ldi Temp,0b00000100 			;òàêòîâûé ñèãíàë = CK/256
out TCCR0B,Temp

ldi Temp,RamEnd     			;óñòàíîâêà óêàçàòåëß ñòåêà
out SPL,Temp

ldi Temp,255					;ðåãèñòð ñðàâíåíèß 
out OCR0A,Temp

ldi Temp1,0b00000000
sei

;****************************									****************************
;****************************     Žñíîâíîé öèêë ïðîãðàììû  		****************************
;****************************									****************************

			
main:							
				rcall shifting
				
				cbi PORTB,1			;äåãðàåì íîãîé äëß âûâîäà èç ðåãèñòðîâ
				sbi PORTB,1
				cbi PORTB,1
				rcall dealey
			rjmp main
		
		
dealey: 		ldi Temp,255
dealey0:		dec Temp
				brne dealey0
				ldi Temp,255
dealey1:		dec Temp
				brne dealey1
			ret
;+++++++++++++++++++++++++++	�ðîöåäóðà ïîñëåäîâàòåëüíîãî âûâîäà	+++++++++++++++++++++++
;0 - äàííûå, 1 - çàùåëêà, 2 - òàêòèðîâàíèå

shifting:		lds Temp,stolbik
				inc countsht
				rcall  shift
				
				lds Temp,stroka
				inc countsht
				rcall  shift

				lds Temp,stroka+1
				inc countsht
				rcall  shift

				lds Temp,stroka+2
				inc countsht
				rcall  shift
				
				lds Temp,stroka+3
				inc countsht
				rcall  shift
				
				lds Temp,stolbik
				sbrc Temp,7			;ïðîïóñòèòü åñëè áèò 7 â ðåãèñòðå =0
				rjmp init
				lsl Temp
exitsht:		sts stolbik,Temp
				ldi countsht,0
			ret
				

				
shift:			ldi Temp1,8			;èíèöèàëèçàöèß ñ÷åò÷èêà öèêëîâ

shift1:			sbrc Temp,7			;ïðîïóñòèòü åñëè áèò 7 â ðåãèñòðå =0
				sbi	PORTB,0			;óñòàíîâèòü áèò â ïîðò PB 0
				sbrs Temp,7			;ïðîïóñòèòü åñëè áèò 7 â åãèñòðå =1
				cbi PORTB,0			;ñáðîñèòü áèò â ïîðòå PB 0
		
				cbi PORTB,2			;ñäâèãàåì áèò 
				sbi PORTB,2			;â ñäâèãîâîì ðåãèñòðå
				cbi PORTB,2
		
				lsl Temp				;ñäâèãàåì ââîäèìûå äàííûå âëåâî
				dec Temp1			;îòñ÷èòûâàåì êîë-âî öèêëîâ
				brne shift1			;íå ðàâíî 0 - ïîâòîðèòü
			ret
			
init:			ldi Temp,1
			rjmp exitsht
;================================================================================


;+++++++++++++++++++++++++++++++	‘ìåíà ýôåêòîâ	+++++++++++++++++++++++++++++
;

effects:		lds Temp3,stroka+3
				inc Temp3
				sts stroka+3,Temp3
				
				lds Temp3,stroka
				inc Temp3
				sts stroka,Temp3
				
				lds Temp3,stroka+1
				inc Temp3
				sts stroka+1,Temp3
				
				lds Temp3,stroka+2
				inc Temp3
				sts stroka+2,Temp3
			ret 