;=============================================
; Частотомер с ЖКИ 16х2  
; Кварц - 13Мгц
; Автор: Александр Шарыпов (г. Владимир)
; Версия: 1.00
; E-mail: vladpage@rambler.ru
;=============================================
	list      p=16F84A
#include  <p16F84a.inc>
	__CONFIG   _CP_ON & _WDT_OFF & _PWRTE_ON & _HS_OSC
;=============================================
	errorlevel -302

IndF	equ	00h
Timer0	equ	01h
OptionR	equ	01h
PC	equ	02h
Status	equ	03h
FSR	equ	04h
PortA	equ	05h
TrisA	equ	05h
PortB	equ	06h
TrisB	equ	06h 
IntCon	equ	0Bh
Opt	equ	0Ch	;Опции
Count	equ	0Dh	;Временный счетчик
Count2	equ	0Eh	;Временный счетчик
LED0	equ	10h	;Цифры значения частоты
LED1	equ	11h
LED2	equ	12h
LED3	equ	13h 
LED4	equ	14h 
LED5	equ	15h
LED6	equ	16h
LED7	equ	17h
LED8	equ	20h
LED9	equ	21h
LED10	equ	22h
LED11	equ	23h 
Zer	equ	27h 	;Паузы
Zer2	equ	28h 	;для обратного отсчета
Zer3	equ	29h 	;при авт. выключении
IFL	equ	2Ah	;Промежуточные байты 
IFM	equ	2Bh	;счетчика частоты
IFH	equ	2Ch
IFHH	equ	2Dh
Opt2	equ	2Fh	;Опции
Temp	equ	18h	;Временный регистр
LEDtemp	equ	19h	;Указатель LED
TimerL	equ	1Ah	;Младший байт счетчика частоты
TimerM	equ	1Bh	;Средний байт счетчика частоты
TimerH	equ	1Ch	;Старший байт счетчика частоты
TimerHH	equ	1Dh	;Самый старший байт счетчика частоты
NDot1	equ	1Eh	;Первая точка
NDot2	equ	1Fh 	;Вторая точка
;=============================================
;Описание порта А
;=============================================
RS	equ	0
E	equ	1		      
Pit	equ	2
;=============================================
;Описание порта B
;=============================================
Off	equ	0
Time	equ	1
Umn	equ	2	
Hold	equ	3		 
;=============================================
;Opt,2 = 0 : х1000, Opt,2 = 1 : х1	;описание функции битов
;Opt,0 = 0, Opt,1 = 0 : 1 c
;Opt,0 = 0, Opt,1 = 1 : 10 c
;Opt,0 = 1, Opt,1 = 0 : 0.1 c
;=============================================
	org	0h
	goto	Start

	org 06h
;=============================================
;Старт
;=============================================
Start
	bsf	Status,5
	movlw	b'00100111'	;Предделитель 1:256, подключение резисторов
	movwf	OptionR   
	bcf	Status,5  
        movlw	.180		;Паузы при выключении (при нулевых показ.)
        movwf	Zer
        movlw	.19
        movwf	Zer2
        movlw	.9
        movwf	Zer3
        movlw	0h		;Чтение параметров из EEPROM
 	call	SetRD
        movwf	Opt
        call	Clear
	clrf	PortA
	clrf	PortB
	bsf	PortA,Pit
	clrf	IFHH
	clrf	IFH
	clrf	IFM
	clrf	IFL
	clrf	Opt2
;test start -Valerij
;	bcf	Opt,0
;	bsf Opt,1		;время измерения 10 сек
;	bcf	Opt,1
;	bcf Opt,0 	;время измерения 1 сек
	bcf	Opt,1
	bsf Opt,0 	;время измерения .1 сек
;установи в Stimulus RB0-0,RB1,RB2,RB3 - 1
	goto	measure 

;end tesst start -Valerij
	call	Pausem
	movlw	b'00000010'	;Инициализация ЖКИ	
	call	LEDcom
	movlw	b'00000001'	
	call	LEDcom
	call	Pausem
	movlw	b'00001100'	
	call	LEDcom

	movlw	b'10000011'	;Вывод на экран надписи
	call	LEDcom		;"Частотомер"
	movlw	7Bh		
	call	LEDdata
	movlw	11h	
	call	LEDdata
	movlw	13h	
	call	LEDdata
	movlw	24h	
	call	LEDdata
	movlw	1Fh	
	call	LEDdata
	movlw 	24h	
	call	LEDdata
	movlw	1Fh	
	call	LEDdata
	movlw	1Dh	
	call	LEDdata
	movlw	15h	
	call	LEDdata
	movlw	20h	
	call	LEDdata

	movlw	b'11000010'	;Вывод на экран версии
	call	LEDcom		;прошивки: 1.00 
	movlw	12h	
	call	LEDdata
	movlw	15h	
	call	LEDdata
	movlw	20h	
	call	LEDdata
	movlw	13h	
	call	LEDdata
	movlw	75h	
	call	LEDdata
	movlw	81h	
	call	LEDdata
	movlw	0Ah	
	call	LEDdata
	movlw	-10h	
	call	LEDdata
	movlw	01h	
	call	LEDdata
	movlw	-02h	
	call	LEDdata
	movlw	00h	
	call	LEDdata
	call	LEDdata

Offv	call	Pausem
	btfsc	PortB,Off	;Ожидание отпускани
	goto	Offv		;кнопки питания

	movlw	b'00000001'	;Курсор на первую строку
	call	LEDcom
	call	Pausem
;=============================================
Go	call	Bin2LCD

	bcf	Status,2	;Проверка нулевых
	addwf	TimerHH,w	;показаний на дисплее
	btfss	Status,2
	goto	ContinZer
	addwf	TimerH,w
	btfss	Status,2
	goto	ContinZer
	addwf	TimerL,w
	btfss	Status,2
	goto	ContinZer
	addwf	TimerM,w
	btfss	Status,2
	goto	ContinZer

        btfsc   Opt,0		;Отсчет времени		
	goto	Zer0_1		;при нулевых 
        btfsc   Opt,1		;показаниях
	goto	Zer10

	decfsz	Zer,1
	goto	ContinZer2
	goto	Stop
Zer10	
	decfsz	Zer2,1
	goto	ContinZer2
	goto	Stop
Zer0_1	
	decfsz	Zer,1
	goto	ContinZer2
	decfsz	Zer3,1
	goto	Zer0_1_2
	goto	Stop
Zer0_1_2
	movlw	.180
        movwf	Zer
	goto	ContinZer2

Stop	
	btfsc	PortB,Off	;Ожидание отпускания кнопки
	goto	Stop		;выключения питания

Stop2	bcf	PortA,Pit	;Выключение частотомера
	goto	Stop2

ContinZer
        movlw	.180		;Паузы при выключении (при нулевых показ.)
        movwf	Zer
        movlw	.19
        movwf	Zer2
        movlw	.9
        movwf	Zer3

ContinZer2
	call	Vyvod		;Вывод на экран частоты

	movlw	b'11000000'	;На начало 2-й строки
	call	LEDcom		;Вывод функций кнопок
	movlw   78h		;и параметров измерения
	call LEDdata
	movlw   11h	
	call LEDdata
	movlw   1Dh	
	call LEDdata
	movlw	-10h	
	call	LEDdata
	call	LEDdata

        btfss   Opt,2
	goto	NU1000

	movlw	-10h	
	call	LEDdata
	call	LEDdata
	movlw   48h	
	call	LEDdata
	movlw   1h	
	call	LEDdata
	movlw	-10h	
	call	LEDdata
	call	LEDdata
	call	LEDdata
	call	LEDdata
	goto	Tim
NU1000
	movlw   48h	
	call	LEDdata
	movlw   1h	
	call	LEDdata
	movlw   0h	
	call	LEDdata
	call	LEDdata
	call	LEDdata
	movlw	-10h	
	call	LEDdata
	call	LEDdata

Tim     movlw	b'11001100'	;На 2-ю строку
	call	LEDcom		

	btfss   Opt,0
	goto	Ntim1

	movlw   0h		;Вывод времени измерения
	call	LEDdata
	movlw   -02h	
	call	LEDdata
	movlw   1h	
	call	LEDdata
	goto	Perev

Ntim1	btfsc   Opt,1
	goto	Ntim10

	movlw	-10h	
	call	LEDdata
	movlw   1h	
	call	LEDdata
	movlw	-10h	
	call	LEDdata
	goto	Perev
Ntim10
	movlw   1h	
	call	LEDdata
	movlw   0h	
	call	LEDdata
	movlw	-10h	
	call	LEDdata
Perev	
	movlw	33h		;'c'
	call	LEDdata

	call	Clear
;=============================================
;Начало измерения.
;=============================================
measure  ;-Valerij
        bsf	Status,5
        movlw	b'00011000' ; RA0..RA2: выход ,RA3..RA4: вход
        movwf	TrisA
;начало отсчета в Trace  -Valerij
        bcf	Status,5
;=============================================
;Задержка при измерении.
;=============================================
        btfsc   Opt,0
	goto	P0_1
        btfsc   Opt,1
	goto	P10

 ;       movlw   .126		;пауза для 1 сек
        movlw   .15
        movwf   Count2       
        movlw   .22	;пауза для 1 сек
        movwf   Count        
Pause2  movlw   .28
        movwf   Temp
Pause1  
	call	provtmr		;Проверка счетчика на переполнение
	call	Key		;Опрос клавиатуры
	decfsz  Temp,1
        goto    Pause1
	nop
	decfsz  Count,1
        goto    Pause2
	decfsz  Count2,1
	goto    Pause1
;	nop
        movlw   .142
        movwf   Temp
Pause9
	call	provtmr		;Проверка счетчика на переполнение
	nop
	nop
	decfsz  Temp,1
        goto    Pause9
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	goto	Izmerend
P0_1				;пауза для 0.1 сек
        movlw   .82		
        movwf   Count        
Pause4  
	movlw   .127
        movwf   Temp
Pause5  
	call	provtmr		;Проверка счетчика на переполнение
	call	Key
	decfsz  Temp,1
        goto    Pause5
	nop
	decfsz  Count,1
        goto    Pause4
	nop
        movlw   .87
        movwf   Temp
Pause8  
	call	provtmr		;Проверка счетчика на переполнение
	nop
	decfsz  Temp,1
        goto    Pause8
	nop
	nop
;	nop
;	nop
;	nop
;	nop
	goto	Izmerend
P10				;пауза для 10 сек
        movlw   .33
        movwf   Count2       
Pause   nop
	 movlw   .135
        movwf   Count        
Pause6  nop
         movlw   .234
	movwf   Temp
Pause7  
	call	provtmr		;Проверка счетчика на переполнение
	call	Key
	decfsz  Temp,1
        goto    Pause7
	nop
	decfsz  Count,1
        goto    Pause6
	nop
	decfsz  Count2,1
	goto    Pause
;	nop
;       nop
        movlw   .81
        movwf   Count2       
Pause13			
        movlw   .101
        movwf   Temp
Pause3  
	call	provtmr		;Проверка счетчика на переполнение
	decfsz  Temp,1
        goto    Pause3
	decfsz  Count2,1
	goto    Pause13

	movlw	0x26
       movwf   Count2       
;	call	provtmr		;Проверка счетчика на переполнение
Pause31
	call	provtmr		;Проверка счетчика на переполнение
	decfsz  Count2,1
	goto    Pause31
	nop
	nop
	nop
Izmerend
	nop
	nop
;=============================================
;Завершение измерения.
;=============================================
        bsf	Status,5
        movlw	b'00010000'	;RA4-вход
        movwf	TrisA        
;конец отсчета в Trace  -Valerij
;need 0x202fbf0  = 32500000 mc ->10s   -OK
;need 0x337f98 = 3250000 mc ->1s
;need 0x5265c = 325000 mc ->.1s
        bcf	Status,5
;=============================================
	call	provtmr		;Последняя проверка счетчика на переполнение
;=============================================
;Анализ содержимого предварительного делителя.
;=============================================
	movf	Timer0,w	;Пересылка данных
	movwf	TimerM		;счетчика в TimerM
	clrf	TimerL
Cont 	incf	TimerL,F	;Досчет предварительного
	bsf	PortA,3		;делителя и запись его 
	bcf	PortA,3		;в TimerL
	nop
	movf	Timer0,w 
	bcf	Status,2
	subwf	TimerM,w
	btfsc	Status,2
	goto	Cont
	comf	TimerL,F
	incf	TimerL,F
	goto	Go
;=============================================
;Проверка TMR0 на переполнение.
;=============================================
provtmr
	btfss	IntCon,2	;проверка переполнения
        goto	Paus		;нет, идем на паузу
	movlw	0FFh           	;проверка не равен ли 
	bcf	Status,2	;TimerH=0FFh
	subwf	TimerH,w
	btfss	Status,2
       	goto	No    
	incf	TimerHH,F	;если равен, то увеличиваем
	clrf	TimerH		;TimerHH на единицу и
	bcf	IntCon,2	;обнуляем TimerH
	goto	ret		
No      incf	TimerH,F
	bcf	IntCon,2
        goto	ret
Paus    nop
        nop
        nop
	nop
	nop
	nop
	nop
	nop
	nop
ret
	return
;=============================================
;Посылка данных в ЖКИ.
;=============================================
LEDdata	
	bsf	PortA,RS	;1 на входе RS ЖКИ
	movwf	LEDtemp		;Перевод из цифрового формата
	addlw	30h		;в табличный код для ЖКИ
	movwf	PortB		;Посылка старшей тетрады в ЖКИ
	call	Enbl
	movf	LEDtemp,w
	addlw	30h
	movwf	Temp
	swapf	Temp,w 
	movwf	PortB		;Посылка младшей тетрады в ЖКИ
	call	Enbl
	movf	LEDtemp,w
	return
;=============================================
;Посылка команды в ЖКИ.
;=============================================
LEDcom				
	bcf	PortA,RS	;0 на входе RS ЖКИ
	movwf	LEDtemp
	movwf	PortB		;Посылка старшей тетрады в ЖКИ
	call	Enbl
	movf 	LEDtemp,w
	movwf	Temp
	swapf	Temp,w 		;Обмен тетрадами
	movwf	PortB		;Посылка младшей тетрады в ЖКИ
	call	Enbl
	return
;=============================================
;Опрос клавиатуры.
;=============================================
Key				
	btfss	PortB,Time
	goto	N1
	btfss	PortB,Hold
	goto	N2
	btfss	PortB,Umn
	goto	N3
	btfsc	PortB,Off
	goto	N4
	return
;=============================================
N1	btfsc	Opt2,3		;Определение функции
	goto	N1MemZ		;кнопки SB2

	btfsc	Opt,0
	goto	N1_1
	btfsc	Opt,1
	goto	N1_2
	bsf	Opt,1
	goto	NE1
N1_1
	bcf	Opt,0
	goto	NE1
N1_2
	bcf	Opt,1
	bsf	Opt,0
NE1
	movf	Opt,w		;Запись в EEPROM новых 
	movwf   EEDATA		;параметров измерения
	movlw   0h
	movwf   EEADR
	call	write
	call	Pausbig
NE1_1
	btfss	PortB,Time
	goto	NE1_1
	call	Clear
	call	Pausem
	goto	ContinZer

N1MemZ
	btfss	PortB,Time
	goto	N1MemZ

        movlw	.245		;Пауза для выключения
        movwf	Zer
        movlw	.4	
        movwf	Zer2

	bcf	Opt,7
	btfsc	Opt,2	
	bsf	Opt,7

	bcf	Opt,6
	btfsc	Opt,1	
	bsf	Opt,6

	bcf	Opt,5
	btfsc	Opt,0	
	bsf	Opt,5

	movf	Opt,w
	movwf   EEDATA
	movlw   0h
	movwf   EEADR
	call	write

	movf	IFHH,w		;Запись в EEPROM запомненой
	movwf   EEDATA		;частоты
	movlw   03h
	movwf   EEADR
	call	write
	movf	IFH,w
	movwf   EEDATA
	movlw   04h
	movwf   EEADR
	call	write
	movf	IFM,w
	movwf   EEDATA
	movlw   05h
	movwf   EEADR
	call	write
	movf	IFL,w
	movwf   EEDATA
	movlw   06h
	movwf   EEADR
	call	write
	goto	N2_2
;=============================================
N2
        movlw	.245		;Пауза для выключения
        movwf	Zer
        movlw	.4
        movwf	Zer2

	call	Pausem
	btfss	PortB,Hold
	goto	N2

 	btfsc	Opt2,3		;Определение функции
	goto	N2MemE		;кнопки SB4

	bsf	Opt2,3
	call	LCDMem

N2_2	
	call	Key

	call	Pausbig
	decfsz	Zer,1
	goto	N2_2

	decfsz	Zer2,1
	goto	Zer111

	goto	Stop2
Zer111
        movlw	.245
        movwf	Zer
	goto	N2_2
N2MemE
	bcf	Opt2,3
	call	Clear
	goto	ContinZer
;=============================================
N3	btfsc	Opt2,3		;Определение функции
	goto	N3MemS		;кнопки SB3

	btfsc	Opt,2
	goto	N3_1
	bsf	Opt,2
	goto	NE3
N3_1
	bcf	Opt,2
	goto	NE3
NE3
	movf	Opt,w
	movwf   EEDATA
	movlw   0h
	movwf   EEADR
	call	write
	call	Pausbig
NE3_1
	btfss	PortB,Umn
	goto	NE3_1
	call	Clear
	call	Pausem
	goto	ContinZer

N3MemS
	btfss	PortB,Umn
	goto	N3MemS

        movlw	.245
        movwf	Zer
        movlw	.4
        movwf	Zer2

	call	Clear		;Чтение из EEPROM записанной
        movlw	03h		;частоты
	call	SetRD
	movwf	TimerHH
        movlw	04h
	call	SetRD
	movwf	TimerH
	movlw	05h
	call	SetRD
	movwf	TimerM
	movlw	06h
	call	SetRD
 	movwf	TimerL

	movlw	0h
	call	SetRD
	movwf	Opt
	bcf	Opt,2
	btfsc	Opt,7
	bsf	Opt,2
	bcf	Opt,1
	btfsc	Opt,6
	bsf	Opt,1
	bcf	Opt,0
	btfsc	Opt,5
	bsf	Opt,0

	call	Bin2LCD
	call	Vyvod
	goto	N2_2
;=============================================
N4
	goto	Stop
;=============================================
;Чтение данных из EEPROM.
;=============================================
SetRD	movwf	EEADR		;Адрес из W в EEADR
	bsf	Status,5
	bsf	EECON1,RD  
	bcf	Status,5
 	movf	EEDATA,w	;Данные из EEDATA в W
	return
;=============================================
;Посылка строб-импульса.
;=============================================
Enbl	bsf	PortA,E		;1 на вывод E ЖКИ
	nop			;Пауза
	bcf	PortA,E		;0 на вывод E ЖКИ
	movlw	.25		;Пауза
	movwf	Temp
Paus2   
	decfsz  Temp,f
	goto    Paus2
	return
;=============================================
;Средняя задержка.
;=============================================
Pausem			
	movlw	.255
	movwf	Temp
Pausm2   
	nop
	nop
	nop
	nop
	decfsz  Temp,f
	goto    Pausm2
	return
;=============================================
;Большая задержка.
;=============================================
Pausbig	
	movlw   .255		
        movwf   Count        
Pause15	
	btfsc	PortB,Off
	goto	Stop
	movlw   .255
        movwf   Temp
Pause14	
	decfsz  Temp,1
        goto    Pause14
	decfsz  Count,1
        goto    Pause15
	return
;=============================================
;Запись в EEPROM.
;=============================================
write	bsf	Status,5
	bsf	EECON1,WREN	;разрешение записи
	bcf	EECON1,EEIF
	movlw	055h
	movwf	EECON2
	movlw	0AAh
	movwf	EECON2
	bsf	EECON1,WR
wee    	btfss	EECON1,EEIF	;проверка окончания записи
	goto	wee
	bcf	EECON1,WREN	;запрет записи
        bcf	Status,5
	return
;=============================================
;Вывод второй строки при работе с памятью.
;=============================================
LCDMem
	movlw	b'11000000'	;на начало 2-й строки
	call	LEDcom
	movlw   12h		;Надпись "ВЫХОД"
	call LEDdata
	movlw   7Eh	
	call LEDdata
	movlw   28h	
	call LEDdata
	movlw   1Fh	
	call LEDdata
	movlw   0B0h	
	call LEDdata
	movlw   -10h	
	call LEDdata
	movlw   13h		;Надпись "СЧИТ"
	call LEDdata
	movlw   7Bh	
	call LEDdata
	movlw   75h	
	call LEDdata
	movlw   24h	
	call LEDdata
	movlw   -10h	
	call LEDdata
	movlw   74h		;Надпись "ЗАПОМ"
	call LEDdata
	movlw   11h	
	call LEDdata
	movlw   78h	
	call LEDdata
	movlw   1Fh	
	call LEDdata
	movlw   1Dh	
	call LEDdata
	return
;=============================================
;Очистка регистров.
;=============================================
Clear
        bsf        Status,5
        movlw      b'00010000'
        movwf      TrisA
        movlw      b'00001111'
        movwf      TrisB
        bcf        Status,5
	bcf	   PortA,3
        clrf       LED0
        clrf       LED1
	clrf       LED2		
        clrf       LED3
        clrf       LED4
        clrf       LED5
        clrf       LED6
        clrf       LED7
        clrf       LED8
        clrf       LED9
        clrf       TimerL      ; ячейки счета
        clrf       TimerM
        clrf       TimerH
        clrf       TimerHH
        clrf       IntCon      ; обнуление бита переполнения
	clrf       Timer0      ; собственно таймер
	retlw	0
;=============================================
;Вывод на экран в формате: ххх.ххх.хх
;=============================================
Contin0_1
	movlw	-10h	
	call	LEDdata
	call	LEDdata
	movf 	LED7,w
	call	LEDdata
	movf 	LED6,w
	call	LEDdata
	movf 	LED5,w
	call	LEDdata
	movf 	NDot2,w
	call	LEDdata
	movf 	LED4,w
	call	LEDdata
	movf 	LED3,w
	call	LEDdata
	movf 	LED2,w
	call	LEDdata
	movf 	NDot1,w
	call	LEDdata
	movf 	LED1,w
	call	LEDdata
	goto Str2
;=============================================
;Вывод на экран в формате: хх.ххх.ххх.х
;=============================================
Contin10
	movf 	LED8,w
	call	LEDdata
	movf 	LED7,w
	call	LEDdata
	movf 	NDot2,w
	call	LEDdata
	movf 	LED6,w
	call	LEDdata
	movf 	LED5,w
	call	LEDdata
	movf 	LED4,w
	call	LEDdata
	movf 	NDot1,w
	call	LEDdata
	movf 	LED3,w
	call	LEDdata
	movf 	LED2,w
	call	LEDdata
	movf 	LED1,w
	call	LEDdata
	movlw   -02h		
	call	LEDdata
	goto	Str2
;=============================================
;Вывод на экран в формате: хх.ххх.ххх
;=============================================
Contin1
	movlw	-10h	
	call	LEDdata
	call	LEDdata
	movf 	LED7,w
	call	LEDdata
	movf 	LED6,w
	call	LEDdata
	movf 	NDot2,w
	call	LEDdata
	movf 	LED5,w
	call	LEDdata
	movf 	LED4,w
	call	LEDdata
	movf 	LED3,w
	call	LEDdata
	movf 	NDot1,w
	call	LEDdata
	movf 	LED2,w
	call	LEDdata
	movf 	LED1,w
	call	LEDdata
	goto Str2
;=============================================
;Перекодирование двоичного кода в двоично-
;десятичный
;=============================================
Bin2LCD
	movf	TimerHH,w
	movwf	IFHH
	movf	TimerH,w
	movwf	IFH
	movf	TimerM,w
	movwf	IFM
	movf	TimerL,w
	movwf	IFL

	bcf        Status,0
        movlw      .32
        movwf      Count
	clrf       LED4
        clrf       LED3
        clrf       LED2
        clrf       LED1
        clrf       LED0
loop32
        rlf        TimerL,f
        rlf        TimerM,f
        rlf        TimerH,f
        rlf        TimerHH,f
        rlf        LED0,f
        rlf        LED1,f
        rlf        LED2,f
        rlf        LED3,f
        rlf        LED4,f
        decfsz     Count,f
        goto       adjDEC
        movfw      LED4
        andlw      0Fh
        movwf      LED8
        swapf      LED3,w
        andlw      0Fh
        movwf      LED7
        movfw      LED3
        andlw      0Fh
        movwf      LED6
        swapf      LED2,w
        andlw      0Fh
        movwf      LED5
        movfw      LED2
        andlw      0Fh
        movwf      LED4
        swapf      LED1,w
        andlw      0Fh
        movwf      LED3
        movfw      LED1
        andlw      0Fh
        movwf      LED2
        swapf      LED0,w
        andlw      0Fh
        movwf      LED1
        movfw      LED0
        andlw      0Fh
        movwf      LED0
        return
adjDEC
        movlw      LED0
        movwf      FSR
        call       adjBCD
        movlw      LED1
        movwf      FSR
	call       adjBCD
        movlw      LED2
        movwf      FSR
        call       adjBCD
        movlw      LED3
        movwf      FSR
        call       adjBCD
	movlw      LED4
        movwf      FSR
        call       adjBCD
        goto       loop32
adjBCD
        movlw      3
        addwf      0,w
        movwf      Count2
        btfsc      Count2,3
        movwf      0
        movlw      30
        addwf      0,w
        movwf      Count2
        btfsc      Count2,7
        movwf      0
        retlw      0
;=============================================
;Гашение нулей и точек. Вывод данных на ЖКИ.
;=============================================
Vyvod
	movlw	b'10000000'	;на начало 1-й строки
	call	LEDcom
	movlw	-02h		;'.'
	movwf	NDot1
	movwf	NDot2
	movlw   71h		;'Г'
	movwf	LED10
        btfsc   Opt,2
	movlw   1Dh		;'M'
	movwf	LED9
	movlw	0B5h		;'ц'
	movwf	LED11
	
	btfsc   Opt,0		;Определение времени 
	goto	Out0_1		;измерения и вывод в
        btfsc   Opt,1		;соответствующем формате
	goto	Out10
	goto	Out1
Out0_1
	movlw	0		;8
	bcf	Status,2	;Проверка на ноль
	addwf	LED7,w
	btfss	Status,2
	goto	Contin0_1
	movlw   -10h		;Если LEDх='0', то LEDх=' '
	movwf   LED7
	movlw	0		;7
	addwf	LED6,w	;7
	btfss	Status,2
	goto	Contin0_1
	movlw   -10h
	movwf   LED6
	movlw	0		;6
	addwf	LED5,w
	btfss	Status,2
	goto	Contin0_1
	movlw   -10h
	movwf   LED5
	movwf	NDot2
	movlw   8Ah		;к
        btfss   Opt,2
	movlw   1Dh		;M
	movwf   LED9
	movlw	0	
	addwf	LED4,w		;5
	btfss	Status,2
	goto	Contin0_1
	movlw   -10h
	movwf   LED4
	movlw	0	
	addwf	LED3,w		;4
	btfss	Status,2
	goto	Contin0_1
	movlw   -10h
	movwf   LED3
	goto	Contin0_1
Out10
	movlw	0		;9
	bcf	Status,2
	addwf	LED8,w
	btfss	Status,2
	goto	Contin10
	movlw   -10h
	movwf   LED8
	movlw	0		;8
	addwf	LED7,w
	btfss	Status,2
	goto	Contin10
	movlw   -10h
	movwf   LED7
	movwf	NDot2
	movlw   8Ah		;к
        btfss   Opt,2
	movlw   1Dh		;M
	movwf   LED9
	movlw	0	
	addwf	LED6,w		;7
	btfss	Status,2
	goto	Contin10
	movlw   -10h
	movwf   LED6
	movlw	0		;6
	addwf	LED5,w
	btfss	Status,2
	goto	Contin10
	movlw   -10h
	movwf   LED5
	movlw	0	
	addwf	LED4,w	;5
	btfss	Status,2
	goto	Contin10
	movlw   -10h
	movwf   LED4
	movwf	NDot1
	movlw	-10h		;' ' 
        btfss   Opt,2
	movlw   8Ah		;к
	movwf	LED9
	movlw	0	
	addwf	LED3,w	;4
	btfss	Status,2
	goto	Contin10
	movlw   -10h
	movwf   LED3
	movlw	0		;3
	addwf	LED2,w
	btfss	Status,2
	goto	Contin10
	movlw   -10h
	movwf   LED2
	goto	Contin10
Out1
	movlw	0		;8
	bcf	Status,2
	addwf	LED7,w
	btfss	Status,2
	goto	Contin1
	movlw   -10h
	movwf   LED7
	movlw	0	
	addwf	LED6,w		;7
	btfss	Status,2
	goto	Contin1
	movlw   -10h
	movwf   LED6
	movwf	NDot2
	movlw   8Ah		;к
        btfss   Opt,2
	movlw   1Dh		;M
	movwf   LED9
	movlw	0		;6
	addwf	LED5,w
	btfss	Status,2
	goto	Contin1
	movlw   -10h
	movwf   LED5
	movlw	0	
	addwf	LED4,w		;5
	btfss	Status,2
	goto	Contin1
	movlw   -10h
	movwf   LED4
	movlw	0	
	addwf	LED3,w		;4
	btfss	Status,2
	goto	Contin1
	movlw   -10h
	movwf   LED3
	movwf	NDot1
	movlw	-10h		;' '
        btfss   Opt,2
	movlw   8Ah		;к
	movwf	LED9
	movlw	0		;3
	addwf	LED2,w
	btfss	Status,2
	goto	Contin1
	movlw   -10h
	movwf   LED2
	movlw	0	
	addwf	LED1,w		;2
	btfss	Status,2
	goto	Contin1
	movlw   -10h
	movwf   LED1
	goto	Contin1
Str2
	movf 	LED0,w
	call	LEDdata
	movlw   -10h		;' '
	call	LEDdata
	movf 	LED9,w		;'' ',к, М, Г'
	call	LEDdata
	movf 	LED10,w		;'Г'
	call	LEDdata
	movf 	LED11,w		;'ц'
	call	LEDdata
	return
;=============================================
;Данные в EEPROM
;=============================================
	org    2100h
	DATA   .165, 0, 0, 0, 0, 0, 0, 0
	DATA   0, 0, 0, 0, 0, 0, 0, 0
	DATA   0, 0, 0, 0, 0, 0, 0, 0
	DATA   0, 0, 0, 0, 0, 0, 0, 0
	DATA   0, 0, 0, 0, 0, 0, 0, 0
	DATA   0, 0, 0, 0, 0, 0, 0, 0
	DATA   0, 0, 0, 0, 0, 0, 0, 0
	DATA   0, 0, 0, 0, 0, 0, 0, 0
;=============================================
end
