            LIST        P=PIC16F84A
            __CONFIG    0x3FF1
STATUS      EQU         0x03
PORTA       EQU         0x05
PORTB       EQU         0x06
TRISA       EQU         0x05
TRISB       EQU         0x06
W           EQU         0x00
OPTION_REG  EQU         0x01
INTCON		EQU         0x0B
REZ1		EQU         0x0C		;значение 1-го сегмента
REZ2		EQU         0x0D		;значение 2-го сегмента
REZ3		EQU         0x0E		;значение 3-го сегмента
REZ4		EQU         0x0F		;значение 4-го сегмента
RC			EQU			0x10		;старший разряд задержки
dis			EQU			0x11		;вспомогательная для вывода на экран
did			EQU			0x12		;вспомогательная для вывода на экран
klav		EQU			0x13		;код нажатой клавиши
sp0			EQU			0x14		;старший разряд скорости
sp1			EQU			0x15		;средний разряд скорости
sp2			EQU			0x16		;младший разряд скорости
c0			EQU			0x17		;четность определяет направление подачи
v0			EQU			0x18		;1-й разряд кол-ва витков
v1			EQU			0x19		;2-й разряд кол-ва витков
v2			EQU			0x1A		;3-й разряд кол-ва витков
v3			EQU			0x1B		;4-й разряд кол-ва витков
lv0			EQU			0x1C		;1-й разряд кол-ва витков в ряду
lv1			EQU			0x1D		;2-й разряд кол-ва витков в ряду
lv2			EQU			0x1E		;3-й разряд кол-ва витков в ряду
RC0			EQU			0x1F		;задержка для процедуры delay
RC1			EQU			0x20		;задержка для процедуры delay
RC2			EQU			0x21		;задержка для процедуры delay
RC3			EQU			0x22		;задержка для процедуры delay
del0		EQU			0x23		;1-й разряд делителя(диаметра провода)		
del1		EQU			0x24		;2-й разряд делителя(диаметра провода)		
del00		EQU			0x25		;1-й разряд делителя(диаметра провода) вспомогательный		
del10		EQU			0x26		;2-й разряд делителя(диаметра провода) вспомогательный		
lv00		EQU			0x27		;1-й разряд кол-ва витков в ряду вспомогательный		
lv10		EQU			0x28		;2-й разряд кол-ва витков в ряду вспомогательный		
lv20		EQU			0x29		;3-й разряд кол-ва витков в ряду вспомогательный		
ext			EQU			0x2A		;переменная окончания намотки, если > 0, то намотка окончена
;b1			EQU			0x2B
;b2			EQU			0x2C
;b3			EQU			0x2D
w1			EQU			0x2E		;переменная хранения W
st			EQU			0x2F		;переменная хранения STATUS

			org         0x00
			goto		start
			org			0x04			;обработка прерываний
			movwf		w1
			swapf		STATUS,0
			movwf		st
			bcf			STATUS,2		;вычитание младшего разряда витков, если =0 вычитаем след. разряд
			decf		v3,1
			btfss		STATUS,2
			goto		exit
			movlw		0x0A
			movwf		v3
			bcf			STATUS,2
			decf		v2,1
			btfss		STATUS,2
			goto		exit			
			movlw		0x0A
			movwf		v2
			bcf			STATUS,2
			decf		v1,1
			btfss		STATUS,2
			goto		exit
			movlw		0x0A
			movwf		v1
			bcf			STATUS,2
			decf		v0,1
			btfss		STATUS,2
			goto		exit			
			bsf			ext,0			;если все разряды =0 то оканчиваем намотку
exit
			movf		v3,0			;задание переменных вывода оставшихся витков
			movwf		klav
			decf		klav,1
			call		mode
			decf		klav,1
			movwf		REZ4
			movf		v2,0
			movwf		klav
			decf		klav,1
			call		mode
			movwf		REZ3
			movf		v1,0
			movwf		klav
			decf		klav,1
			call		mode
			movwf		REZ2
			movf		v0,0
			movwf		klav
			decf		klav,1
			call		mode
			movwf		REZ1

			bcf			STATUS,2		;подсчет кол-ва витков в ряду(обратный)
			decf		lv20,1
			btfss		STATUS,2
			goto		exit1
			movlw		0x0A
			movwf		lv20
			bcf			STATUS,2
			decf		lv10,1
			btfss		STATUS,2
			goto		exit1
			movlw		0x0A
			movwf		lv10
			bcf			STATUS,2
			decf		lv00,1
			btfss		STATUS,2
			goto		exit1

			movf		lv0,0			;если все =0 то задаем заново и меняем направление подачи
			movwf		lv00
			movf		lv1,0
			movwf		lv10
			movf		lv2,0
			movwf		lv20
			incf		lv00,1
			incf		lv10,1
			incf		lv20,1

			bcf			STATUS,2		;уменьшаем общее число витков в ряду на 1
			decf		lv20,1
			btfss		STATUS,2
			goto		exit2
			movlw		0x0A
			movwf		lv20
			bcf			STATUS,2
			decf		lv10,1
			btfss		STATUS,2
			goto		exit2
			movlw		0x0A
			movwf		lv10
			decf		lv00,1
exit2


			incf		c0,1			;меняем направление подачи через переменную иначе пришлось бы делать задержку
			btfss		c0,0
			bcf			PORTB,3
			btfsc		c0,0
			bsf			PORTB,3


			

exit1									;выход из прерывания

			swapf		st,0
			movwf		STATUS
			swapf		w1,1
			swapf		w1,0
			RETFIE						;выход из прерывания

start		
			

;установки портов
			bsf         STATUS,5        ; установка бита 5 в 1,переход в банк 1
			bcf			TRISA,0			; установка RA0 на выход
			bcf			TRISA,1			; установка RA1 на выход
			bcf			TRISA,2			; установка RA2 на выход
			bcf			TRISA,3			; установка RA3 на выход
			bcf			TRISA,4			; установка RA4 на выход
			bsf			TRISB,7			; установка RB7 на вход
			bsf			TRISB,0			; установка RB0 на вход
			bsf			TRISB,1			; установка RB1 на вход
			bsf			TRISB,2			; установка RB2 на вход
			bcf			TRISB,3			; установка RB3 на выход
			bsf			TRISB,4			; установка RB4 на вход
			bsf			TRISB,5			; установка RB5 на вход
			bsf			TRISB,6			; установка RB6 на вход
			bsf			TRISB,7			; установка RB7 на вход

			bcf         STATUS,5        ; cброс, бита 5 в 1,переход в банк 0
			bcf			PORTA,1		    ; установка CHCP 0
			bsf         PORTA,0			; установка STCP 1
			bcf         PORTA,2		    ; установка DS 0
			bcf         PORTA,3
			bcf         PORTA,4
			bcf         PORTB,3

			clrf		REZ1
			clrf		REZ2
			clrf		REZ3
			clrf		REZ4
			clrf		klav
			clrf		RC1
			clrf		RC2
			clrf		RC3
			movlw		0x10				
			movwf		dis
			clrf		did
ust			;юстировка
			movlw		0x00			;установка скорости
			movwf		RC
			movlw		0x00			
			movwf		sp0
			movlw		0x00			
			movwf		sp1
			movlw		0x01			
			movwf		sp2
			movlw		0x89			;"У"	
			movwf		REZ1
			movlw		0x62			;"С."	
			movwf		REZ2
			movlw		0xFF			;" "	
			movwf		REZ3
			movlw		0x03			;"0"	
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2
			movlw		0x01			
			subwf		klav,0
			btfsc		STATUS,2		;если результат <>0, то 			
			goto		ustL
			bcf			STATUS,2
			movlw		0x03			
			subwf		klav,0
			btfsc		STATUS,2		;если результат <>0, то 			
			goto		ustR
			bcf			STATUS,2
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если результат <>0, то 			
			goto		prog			
			goto		ust
ustL		; движение в лево
			bsf			PORTB,3
			call		delay
			bsf			PORTA,4
			call		delay
			bcf			PORTA,4
			goto		ust
ustR		; движение в право
			bcf			PORTB,3
			call		delay
			bsf			PORTA,4
			call		delay
			bcf			PORTA,4
			goto		ust


prog		;режим ввода данных
			movlw		0x07			;задержка повторного нажатия			
			movwf		RC
			movlw		0x13			;"П"	
			movwf		REZ1
			movlw		0x31			;"Р"	
			movwf		REZ2
			movlw		0x03			;"О"	
			movwf		REZ3
			movlw		0x73			;"Г"	
			movwf		REZ4
			call		delay
			call		scan

			bcf			STATUS,2
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если результат <>0, то 			
			goto		prog

speed
			clrf		sp0
			clrf		sp1
			clrf		sp2
			movlw		0x49			;"S"	
			movwf		REZ1
			movlw		0x31			;"P"	
			movwf		REZ2
			movlw		0x61			;"E "	
			movwf		REZ3
			movlw		0x03			;"D"	
			movwf		REZ4			
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		prog

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если результат = 0, то 			
			goto		speed
;первая цифра
			movlw		0xFF			;" "	
			movwf		REZ1
			movlw		0xEF			;"_"	
			movwf		REZ2
			movlw		0xEF			;"_"	
			movwf		REZ3
			movlw		0xEF			;"_"	
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		speed

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если результат = 0, то 			
			goto		speed

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,0
			movwf		sp0
			call		mode
			movwf		REZ2
			call		delay
			call		scan
;вторая цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		speed

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,W
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		sp1			
			call		mode
			movwf		REZ3
			call		delay
			call		scan
;третья цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		speed

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		sp2		
			call		mode
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если =0, то 			
			goto		speed
			
vit
			clrf		v0
			clrf		v1
			clrf		v2
			clrf		v3
			movlw		0x01			;"В"	
			movwf		REZ1
			movlw		0xFF			;" "	
			movwf		REZ2
			movlw		0xFF			;" "	
			movwf		REZ3
			movlw		0xFF			;" "	
			movwf		REZ4			
			call		delay
			call		scan

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		speed

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если результат = 0, то 			
			goto		vit
;первая цифра
			movlw		0xEF			;"_"	
			movwf		REZ1
			movlw		0xEF			;"_"	
			movwf		REZ2
			movlw		0xEF			;"_"	
			movwf		REZ3
			movlw		0xEF			;"_"	
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если результат = 0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,0
			movwf		v0
			call		mode
			movwf		REZ1
			call		delay
			call		scan
;вторая цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,W
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		v1			
			call		mode
			movwf		REZ2
			call		delay
			call		scan
;третья цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		v2		
			call		mode
			movwf		REZ3
			call		delay
			call		scan

;четвертая цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		v3		
			call		mode
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если =0, то 			
			goto		vit

rast
			clrf		lv0
			clrf		lv1
			clrf		lv2
			movlw		0x01			;"В"	
			movwf		REZ1
			movlw		0xFF			;" "	
			movwf		REZ2
			movlw		0xFF			;" "	
			movwf		REZ3
			movlw		0x31			;"P"	
			movwf		REZ4			
			call		delay
			call		scan

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		vit

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если результат = 0, то 			
			goto		rast
;первая цифра
			movlw		0xFF			;" "	
			movwf		REZ1
			movlw		0xEF			;"_"	
			movwf		REZ2
			movlw		0xEF			;"_"	
			movwf		REZ3
			movlw		0xEF			;"_"	
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если результат = 0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,0
			movwf		lv0
			call		mode
			movwf		REZ2
			call		delay
			call		scan
;вторая цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		del

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,W
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		lv1			
			call		mode
			movwf		REZ3
			call		delay
			call		scan
;третья цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		del

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		lv2		
			call		mode
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если =0, то 			
			goto		rast
del
			clrf		del0
			clrf		del1
			movlw		0x03			;"D"	
			movwf		REZ1
			movlw		0x61			;"E"	
			movwf		REZ2
			movlw		0xE3			;"L "	
			movwf		REZ3
			movlw		0xFF			;""	
			movwf		REZ4			
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		rast

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если результат = 0, то 			
			goto		del
;первая цифра
			movlw		0xFF			;" "	
			movwf		REZ1
			movlw		0xFF			;" "	
			movwf		REZ2
			movlw		0xEF			;"_"	
			movwf		REZ3
			movlw		0xEF			;"_"	
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		del

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если результат = 0, то 			
			goto		del

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,0
			movwf		del0
			call		mode
			movwf		REZ3
			call		delay
			call		scan
;вторая цифра
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		ready

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		del

			bcf			STATUS,2		;проверка на 0
			movlw		0x0A			
			subwf		klav,W
			btfsc		STATUS,2		;если =0, то 			
			clrf		klav		
			movf		klav,W
			movwf		del1			
			call		mode
			movwf		REZ4
			call		delay
			call		scan
			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если =0, то 			
			goto		del

ready
			movlw		0x43			;"G"	
			movwf		REZ1
			movlw		0x02			;"0."	
			movwf		REZ2
			movlw		0xFF			;" "	
			movwf		REZ3
			movlw		0xFF			;" "	
			movwf		REZ4			
			call		delay
			call		scan

			bcf			STATUS,2		;проверка на отмену
			movlw		0x0B			
			subwf		klav,0
			btfsc		STATUS,2		;если =0, то 			
			goto		prog

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если результат = 0, то 			
			goto		ready
			
; намотка, начальная установка, разрешение прерывания

			bsf         STATUS,5        ;переход в банк 1
			movlw		0xC0			;разрешение прерываний, сброс флагов
			movwf		OPTION_REG		;запись

			bcf         STATUS,5        ;переход в банк 0
			movlw		0x90			;разрешение прерываний, сброс флагов
			movwf		INTCON			;запись
			movf		lv0,0
			movwf		lv00
			movf		lv1,0
			movwf		lv10
			movf		lv2,0
			movwf		lv20
			incf		lv00,1
			incf		lv10,1
			incf		lv20,1

			bcf			STATUS,2
			decf		lv20,1
			btfss		STATUS,2
			goto		ex
			movlw		0x0A
			movwf		lv20
			bcf			STATUS,2
			decf		lv10,1
			btfss		STATUS,2
			goto		ex
			movlw		0x0A
			movwf		lv10
			decf		lv00,1
ex




			clrf		ext
			incf		v0,1
			incf		v1,1
			incf		v2,1
			incf		v3,1
			clrf		RC
			bcf			PORTB,3			;установка направления в право
			bsf			PORTA,3
			bsf			PORTA,4
			movf		del0,0
			movwf		del00
			movf		del1,0
			movwf		del10
			incf		del00,1
			incf		del10,1
			clrf		c0




run1		;проверка длинны, изменение направления
			btfsc		PORTB,2
			goto		pause
			btfsc		ext,0
			goto		finish
			
			bcf			STATUS,2
			decf		del10,1
			btfss		STATUS,2
			goto		run2
			movlw		0x0A
			movwf		del10
			bcf			STATUS,2
			decf		del00,1
			btfss		STATUS,2
			goto		run2
			bcf			PORTA,4
			movf		del0,0
			movwf		del00
			movf		del1,0
			movwf		del10
			incf		del00,1
			incf		del10,1

			bcf			STATUS,2
			decf		del10,1
			btfss		STATUS,2
			goto		run2
			movlw		0x0A
			movwf		del10
			decf		del00,1





run2
			bcf			PORTA,3
			call		delay
			bsf			PORTA,3
			bsf			PORTA,4
			call		delay
			goto		run1







pause
			call		delay
			btfss		PORTB,2
			goto		run1			
			goto		pause



			










		













mode		;запись в аккумулятор кода для восьмерки
			bcf			STATUS,2		;проверка на 0 
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 			
			movlw		0x03
			decf		klav,1
			bcf			STATUS,2		;проверка на 1
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x9F
			decf		klav,1
			bcf			STATUS,2		;проверка на 2
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x25
			decf		klav,1
			bcf			STATUS,2		;проверка на 3
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x0D
			decf		klav,1
			bcf			STATUS,2		;проверка на 4
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x99
			decf		klav,1
			bcf			STATUS,2		;проверка на 5
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x49
			decf		klav,1
			bcf			STATUS,2		;проверка на 6
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x41
			decf		klav,1
			bcf			STATUS,2		;проверка на 7
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x1F
			decf		klav,1
			bcf			STATUS,2		;проверка на 8
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x01
			decf		klav,1
			bcf			STATUS,2		;проверка на 9
			movf		klav,1
			btfsc		STATUS,2		;если =0, то 	
			movlw		0x09

			return










scan		call		displ
			clrf		klav
			btfsc		PORTB,4
			bsf			klav,0
			btfsc		PORTB,5
			bsf			klav,1
			btfsc		PORTB,6
			bsf			klav,2
			btfsc		PORTB,7
			bsf			klav,3
			bcf			STATUS,2
			movf		klav,1			;проверка klav на равенство 0, если klav=0, то Z=1				
			btfsc		STATUS,2		;если klav=0, то 
			goto		scan
			call		displ
			call		displ
			clrf		klav
			btfsc		PORTB,4
			bsf			klav,0
			btfsc		PORTB,5
			bsf			klav,1
			btfsc		PORTB,6
			bsf			klav,2
			btfsc		PORTB,7
			bsf			klav,3
			bcf			STATUS,2
			movf		klav,1			;проверка klav на равенство 0, если klav=0, то Z=1				
			btfsc		STATUS,2		;если klav=0, то 
			goto		scan
			return













delay		;подпрограмма задержки 
			movf		RC,0				
			movwf		RC0
			movf		sp0,0				
			movwf		RC1
			movf		sp1,0				
			movwf		RC2
			movf		sp2,0				
			movwf		RC3
			incf		RC0,1
			incf		RC1,1
			incf		RC2,1
			incf		RC3,1
dela
			call		displ
			bcf			STATUS,2
			decf		RC3,1
			btfss		STATUS,2
			goto		dela
			movlw		0x0A
			movwf		RC3
			bcf			STATUS,2
			decf		RC2,1
			btfss		STATUS,2
			goto		dela			
			movlw		0x0A
			movwf		RC2
			bcf			STATUS,2
			decf		RC1,1
			btfss		STATUS,2
			goto		dela			
			movlw		0x0A
			movwf		RC1
			bcf			STATUS,2
			decf		RC0,1
			btfss		STATUS,2
			goto		dela			
			return











displ		
			btfsc		dis,7
			movlw		0x10
			btfsc		dis,6
			movlw		0x80
			btfsc		dis,5
			movlw		0x40
			btfsc		dis,4
			movlw		0x20
			movwf		dis

			btfsc		dis,7
			movf		REZ4,W
			btfsc		dis,6
			movf		REZ3,W
			btfsc		dis,5
			movf		REZ2,W
			btfsc		dis,4
			movf		REZ1,W
			movwf		did			


			
			bcf         PORTA,1		    ; установка CHCP 0	
			bsf			PORTA,0			; установка STCP 1 (разрешаем прием)
			NOP
			bcf			PORTA,0			; установка STCP 0 (разрешаем прием)
			bcf			PORTA,2			; установка DS 0
			btfsc		did,0			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 0
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		did,1			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 1
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		did,2			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 2
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		did,3			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 3
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		did,4			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 4
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		did,5			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 5
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		did,6			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 6
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		did,7			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 7
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,0			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 8
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,1			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 9
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,2			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 10
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,3			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 11
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,4			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 12
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,5			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 13
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,6			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 14
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bcf			PORTA,2			; установка DS 0
			btfsc		dis,7			; пропустить след. ком если бит =0
			bsf			PORTA,2			; установка DS 1
			NOP
			bsf         PORTA,1		    ; установка CHCP 1	пердаем бит 15
			NOP
			bcf         PORTA,1		    ; установка CHCP 0
			bsf			PORTA,0			; установка STCP 1 (запрещаем прием)
			NOP	
			bcf			PORTA,0			; установка STCP 0 (запрещаем прием)
			NOP
			return
		
finish
			movlw		0x09			
			movwf		RC
			movlw		0x43			;"G"	
			movwf		REZ1
			movlw		0x03			;"0"	
			movwf		REZ2
			movlw		0x03			;"0"	
			movwf		REZ3
			movlw		0x03			;"0"	
			movwf		REZ4			
			call		delay
			call		scan

			bcf			STATUS,2		;проверка на ввод
			movlw		0x0C			
			subwf		klav,0
			btfss		STATUS,2		;если результат = 0, то 			
			goto		finish
			goto		start			
	


			end     
