	list      p=16f676           
	#include <p16f676.inc>        
	
	__CONFIG _CP_OFF & _WDT_ON &  _PWRTE_ON & _BODEN & _INTRC_OSC_CLKOUT

;02.09.08г.    г.Екатеринбург  Шкильменский В.А.
;ПРОГРАММА ДЛЯ ЭЛЕКТРОННОГО АНАЛОГА ЦЕНТРОБЕЖНОГО РЕГУЛЯТОРА 
;УГЛА ОПЕРЕЖЕНИЯ  ЗАЖИГАНИЯ  (РУОЗ) С ХАРАКТЕРИСТИКОЙ
;ПРИБЛИЖЕНОЙ К ГРАНИЦЕ ДЕТОНАЦИИ (РАДИОЕЖЕГОДНИК -1991г. стр.129-149 Ю.Архипов)
;С КОРРЕКЦИЕЙ ПО РАЗРЕЖЕНИЮ ВО ВПУСКНОМ КОЛЛЕКТОРЕ
; ФУНКЦИЕЙ УПРАВЛЕНИЯ ЭПХХ .
; С ОТКЛЮЧЕНИЕМ КАТУШКИ ЗАЖИГАНИЯ ПРИ ОТСУТСТВИИ ИМПУЛЬСОВ НА ВХОДЕ
;F=4,0мгц , Тмаш.цикла=(1/4000000)*4 = 0,000001сек=1мкс
; 1/0,000001сек=1000000маш.цикл/сек
;ПРИ РАСЧЕТЕ УГЛА ОПЕРЕЖЕНИЯ ИСПОЛЬЗОВАНЫ ДАННЫЕ ПЕРИОДА ВРАЩЕНИЯ ВАЛА
;ПОЭТОМУ РАБОТА ПРОГРАММЫ НЕ ЗАВИСИТ ОТ СКВАЖНОСТИ ВХОДНЫХ ИМПУЛЬСОВ
;ПРОГРАММУ МОЖНО ИСПОЛЬЗОВАТЬ КАК ДЛЯ ДАТЧИКА ХОЛЛА ТАК И ДЛЯ ПРЕРЫВАТЕЛЯ ТОЛЬКО
;НЕОБХОДИМО ПРИВЕСТИ В СООТВЕТСТВИЕ УРОВЕНЬ НА ВХОДЕ И ВЫХОДЕ  (ИНВЕРТИРОВАТЬ)
;частота вращения вала в об/мин.=(частота импульсов зажигания в гц) * 30   т.к за  ;один оборот вала 2 имп.  зажигания
;при 600 об/мин : 20 имп.заж./сек=20гц , Тзаж.=1/20=0,05сек
; 1000000*0,05=50000 маш.циклов за период заж. при 600 об/сек
;при введенном сердечнике (разрежение мин.) УОЗ минимальный - на входе АЦП  0,9в
;при сердечнике вне катушки (разрежение макс.) УОЗ максимальный - на входе АЦП  0,6в
;напряжение на входе АЦП меняется от 0,6в (при макс.разрежении) до 0,9в (при мин. разрежении)
;  число .136 - строка 00428  листинга (с.м . исходный текст программы -
;                 "MOVWF     temp
;	MOVLW     .136	  
;	SUBWF    temp  " )
;  - расчитывалось по формуле  0,6в*1024/4,5в = .136 или 88h
; , где 0,6в напряжение на входе АЦП при максимальном разряжении 
;4,5в напряжение питания , являющееся опорным напряжением АЦП
;1024 число в 10 разрядном регистре АЦП при напряжении на входе АЦП - 4,5в 
;====================================================
#DEFINE	IN	PORTC,5	 ;ВХОД  ОТ  ПРЕРЫВАТЕЛЯ
#DEFINE	OUT	PORTC,4	 ;ВЫХОД      РУОЗ
#DEFINE	BANK0	BCF	STATUS,RP0	;ВКЛЮЧЕНИЕ БАНКА 0
#DEFINE	BANK1	BSF	STATUS,RP0	;ВКЛЮЧЕНИЕ БАНКА 1
#DEFINE     PXX         PORTA,2                                          ;ВЫХОД УПРАВЛЕНИЯ ЭПXХ
;=====================================================
CARRY  	equ 	0X00
Same    equ                  1
;=====================================================
	CBLOCK	0X20	
	CNDT_Lo	   ;МЛАДШАЯ  ЯЧЕЙКА  ПЕРИОДА T/10
	CNDT_Hi	   ;СТАРШАЯ  ЯЧЕЙКА  ПЕРИОДА T/10	
	NOM_ST             ;НОМЕР СТРОКИ ТАБЛИЦЫ
	RETLW_OB         ;КОРРЕКЦИЯ ПО ОБОРОТАМ
	RETLW_ADC       ;КОРРЕКЦИЯ ПО АЦП
	TEMP_Hi              ;СТАРШАЯ  ЯЧЕЙКА  	
	ZADER_Lo    ;младшая ячейка  задержки зажигания /10
	ZADER_Hi     ;старшая ячейка  задержки зажигания /10		
;===============================================		
	ACCa_Lo   ;переменные математики
	ACCa_Hi    ;переменные математики
	ACCa_Hh	  ;переменные математики
	ACCb_Lo   ;переменные математики
	ACCb_Hi    ;переменные математики
	ACCb_Hh	  ;переменные математики
	ACCc_Lo   ;переменные математики
	ACCc_Hi    ;переменные математики	
	ACCd_Lo   ;переменные математики
	ACCd_Hi   ;переменные математики	
	temp          ;переменные математики
	count        ;переменные математики
	mulcnd   ;переменные математики
	mulplr     ;переменные математики
	H_byte    ;переменные математики
	L_byte    ;переменные математики	
;===============================================		
	ENDC
;================================================
	ORG	0X00	;ВЕКТОР СБРОСА
	GOTO	START
	ORG	0X04	;ВЕКТОР ПРЕРЫВАНИЯ
	GOTO	INTER
INTER	RETURN		;ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ
			; (ПРЕРЫВАНИЯ НЕ ИСПОЛЬЗУЮТСЯ)
;========================================================
;ПЕРВОНАЧАЛЬНАЯ НАСТРОЙКА
START       BANK0	
	CLRF	PORTA	      ;ОБНУЛИТЬ ПОРТ A
	CLRF	PORTC	      ;ОБНУЛИТЬ ПОРТ C
	CLRWDT		      ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT
	CLRF      TMR0                  ;ОЧИСТКА    TMR0			
	BANK1		
	MOVLW	B'11101111'   ;RC4 -  ВЫХОД,  ОСТАЛЬНЫЕ ВХОД 
	MOVWF	TRISC	
	MOVLW	B'11111011'   ;RА2- ВЫХОД , ОСТАЛЬНЫЕ - ВХОД
	MOVWF	TRISA
	MOVLW	B'11111011'    ;RА2- ЦИФРОВОЙ   IN / OUT
	MOVWF    ANSEL		
	MOVLW	B'11101010'     ;КОЭФ. ДЕЛЕНИЯ  ПРЕДДЕЛИТЕЛЯ  1:4  (Тwdt =18мс*4)
	MOVWF	OPTION_REG  ;ПРЕДДЕЛИТЕЛЬ ПОДКЛЮЧЕН К WDT
	CALL       3FF                      ;КАЛИБРОВКА ТАКТОВОГО ГЕНЕРАТОРА
	MOVWF   OSCCAL	         ;	
	BANK0		
;************************************************************************	
	GOTO	IZMER_TZ	
;************************************************************************
;           ПП    ТАБЛИЧНОЙ КОНВЕРТАЦИИ
;************************************************************************	
convert	
	addwf PCL,f	
	retlw	.2	;	
	retlw	.2	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.3	;	
	retlw	.15	;	
	retlw	.25	;	
	retlw	.34	;	
	retlw	.43	;	
	retlw	.51	;	
	retlw	.58	;	10416   об/мин
	retlw	.64	;	9868
	retlw	.70	;	9375
	retlw	.76	;	8928
	retlw	.81	;	8522
	retlw	.86	;	8152
	retlw	.91	;	7812
	retlw	.95	;	7500
	retlw	.100	;	7211
	retlw	.104	;	6944
	retlw	.108	;	6696
	retlw	.112	;	6465
	retlw	.116	;	6250
	retlw	.119	;	6048    об/мин .............
	retlw	.123	;	5859
	retlw	.126	;	5681
	retlw	.129	;	5514
	retlw	.133	;	5357
	retlw	.136	;	5208
	retlw	.139	;	5067
	retlw	.142	;	4934
	retlw	.145	;	4807
	retlw	.148	;	4687
	retlw	.151	;	4573
	retlw	.154	;	4464
	retlw	.156	;	4360
	retlw	.159	;	4261
	retlw	.162	;	4166
	retlw	.165	;	4076
	retlw	.167	;	3989
	retlw	.170	;	3906
	retlw	.173	;	3826
	retlw	.175	;	3750
	retlw	.178	;	3676
	retlw	.180	;	3605
	retlw	.183	;	3537
	retlw	.185	;	3472
	retlw	.188	;	3409
	retlw	.190	;	3348
	retlw	.192	;	3289
	retlw	.195	;	3232
	retlw	.197	;	3177
	retlw	.200	;	3125
	retlw	.202	;	3073
	retlw	.204	;	3024
	retlw	.207	;	2976
	retlw	.209	;	2929
	retlw	.211	;	2884
	retlw	.214	;	2840
	retlw	.216	;	2798    об/мин ...............
	retlw	.219	;	2757
	retlw	.220	;	2717
	retlw	.220	;	2678
	retlw	.220	;	2640
	retlw	.221	;	2604
	retlw	.221	;	2568
	retlw	.222	;	2533
	retlw	.222	;	2500
	retlw	.222	;	2467
	retlw	.222	;	2435
	retlw	.223	;	2403
	retlw	.223	;	2373
	retlw	.223	;	2343
	retlw	.223	;	2314
	retlw	.223	;	2286
	retlw	.223	;	2259
	retlw	.224	;	2232
	retlw	.224	;	2205
	retlw	.224	;	2180
	retlw	.224	;	2155
	retlw	.224	;	2130
	retlw	.224	;	2106
	retlw	.224	;	2083
	retlw	.224	;	2060
	retlw	.224	;	2038
	retlw	.224	;	2016
	retlw	.224	;	1994   об/мин
	retlw	.224	;	1973
	retlw	.224	;	1953
	retlw	.224	;	1932
	retlw	.224	;	1913
	retlw	.223	;	1893
	retlw	.223	;	1875
	retlw	.223	;	1856
	retlw	.223	;	1838
	retlw	.223	;	1820
	retlw	.223	;	1802
	retlw	.223	;	1785
	retlw	.223	;	1768
	retlw	.222	;	1752
	retlw	.222	;	1736
	retlw	.222	;	1720
	retlw	.222	;	1704
	retlw	.222	;	1689
	retlw	.221	;	1674
	retlw	.221	;	1659
	retlw	.221	;	1644
	retlw	.221	;	1630
	retlw	.221	;	1616
	retlw	.220	;	1602
	retlw	.220	;	1588
	retlw	.220	;	1575
	retlw	.220	;	1562
	retlw	.219	;	1549
	retlw	.219	;	1536
	retlw	.219	;	1524
	retlw	.219	;	1512
	retlw	.218	;	1500   об/мин
	retlw	.218	;	1488
	retlw	.218	;	1476
	retlw	.217	;	1464
	retlw	.217	;	1453
	retlw	.217	;	1442
	retlw	.216	;	1431
	retlw	.216	;	1420
	retlw	.216	;	1409
	retlw	.216	;	1399
	retlw	.215	;	1388
	retlw	.215	;	1378
	retlw	.215	;	1368
	retlw	.214	;	1358
	retlw	.214	;	1348
	retlw	.213	;	1339
	retlw	.213	;	1329
	retlw	.213	;	1320
	retlw	.212	;	1311
	retlw	.212	;	1302
	retlw	.212	;	1293
	retlw	.211	;	1284
	retlw	.211	;	1275
	retlw	.211	;	1266
	retlw	.210	;	1258
	retlw	.210	;	1250
	retlw	.209	;	1241
	retlw	.209	;	1233
	retlw	.209	;	1225
	retlw	.208	;	1217
	retlw	.208	;	1209
	retlw	.207	;	1201
	retlw	.207	;	1194
	retlw	.207	;	1186
	retlw	.206	;	1179
	retlw	.206	;	1171
	retlw	.205	;	1164
	retlw	.205	;	1157
	retlw	.205	;	1150
	retlw	.204	;	1143
	retlw	.204	;	1136
	retlw	.203	;	1129
	retlw	.203	;	1122
	retlw	.203	;	1116
	retlw	.202	;	1109
	retlw	.202	;	1102
	retlw	.201	;	1096
	retlw	.201	;	1090
	retlw	.200	;	1083
	retlw	.200	;	1077
	retlw	.199	;	1071
	retlw	.199	;	1065
	retlw	.199	;	1059
	retlw	.198	;	1053
	retlw	.198	;	1047
	retlw	.197	;	1041
	retlw	.197	;	1035
	retlw	.196	;	1030
	retlw	.196	;	1024
	retlw	.195	;	1019
	retlw	.195	;	1013
	retlw	.195	;	1008
	retlw	.194	;	1002
	retlw	.194	;	997
	retlw	.193	;	992
	retlw	.193	;	986
	retlw	.192	;	981
	retlw	.192	;	976
	retlw	.191	;	971
	retlw	.191	;	966
	retlw	.190	;	961
	retlw	.190	;	956
	retlw	.189	;	951
	retlw	.189	;	946
	retlw	.188	;	942
	retlw	.188	;	937
	retlw	.187	;	932
	retlw	.187	;	928
	retlw	.187	;	923
	retlw	.186	;	919
	retlw	.186	;	914
	retlw	.185	;	910
	retlw	.185	;	905
	retlw	.184	;	901 об/мин.................
	retlw	.183	;	>450 об/мин  ,    <  900  об/мин  
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	>450 об/мин  ,    <  900  об/мин 
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;	
	retlw	.183	;            >450 об/мин  ,    <  900  об/мин   
;*************************************************************************
;            таблица    ADC
;
;*************************************************************************
	ORG	0100
   
convert_ADC	addwf PCL,f
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.1	;	
	retlw	.7	;	
	retlw	.8	;	
	retlw	.8	;	
	retlw	.9	;	
	retlw	.9	;	
	retlw	.9	;	10416
	retlw	.9	;	9868
	retlw	.10	;	9375
	retlw	.10	;	8928
	retlw	.10	;	8522
	retlw	.10	;	8152
	retlw	.11	;	7812
	retlw	.11	;	7500
	retlw	.11	;	7211
	retlw	.11	;	6944
	retlw	.11	;	6696
	retlw	.12	;	6465
	retlw	.12	;	6250
	retlw	.12	;	6048  об/мин .............
	retlw	.13	;	5859
	retlw	.13	;	5681
	retlw	.13	;	5514
	retlw	.13	;	5357
	retlw	.13	;	5208
	retlw	.13	;	5067
	retlw	.14	;	4934
	retlw	.14	;	4807
	retlw	.14	;	4687
	retlw	.14	;	4573
	retlw	.15	;	4464
	retlw	.15	;	4360
	retlw	.15	;	4261
	retlw	.15	;	4166
	retlw	.16	;	4076
	retlw	.16	;	3989
	retlw	.16	;	3906
	retlw	.16	;	3826
	retlw	.16	;	3750
	retlw	.17	;	3676
	retlw	.17	;	3605
	retlw	.17	;	3537
	retlw	.17	;	3472
	retlw	.18	;	3409
	retlw	.18	;	3348
	retlw	.18	;	3289
	retlw	.18	;	3232
	retlw	.18	;	3177
	retlw	.19	;	3125
	retlw	.19	;	3073
	retlw	.19	;	3024
	retlw	.19	;	2976
	retlw	.19	;	2929
	retlw	.20	;	2884
	retlw	.20	;	2840
	retlw	.21	;	2798    об/мин .............
	retlw	.23	;	2757
	retlw	.24	;	2717
	retlw	.24	;	2678
	retlw	.25	;	2640
	retlw	.26	;	2604
	retlw	.26	;	2568
	retlw	.27	;	2533
	retlw	.28	;	2500
	retlw	.28	;	2467
	retlw	.28	;	2435
	retlw	.29	;	2403
	retlw	.30	;	2373
	retlw	.30	;	2343
	retlw	.30	;	2314
	retlw	.31	;	2286
	retlw	.31	;	2259
	retlw	.32	;	2232
	retlw	.32	;	2205
	retlw	.32	;	2180
	retlw	.32	;	2155
	retlw	.33	;	2130
	retlw	.33	;	2106
	retlw	.33	;	2083
	retlw	.33	;	2060
	retlw	.33	;	2038
	retlw	.34	;	2016
	retlw	.34	;	1994    об/мин .............
	retlw	.34	;	1973
	retlw	.34	;	1953
	retlw	.34	;	1932
	retlw	.35	;	1913
	retlw	.34	;	1893
	retlw	.34	;	1875
	retlw	.35	;	1856
	retlw	.35	;	1838
	retlw	.35	;	1820
	retlw	.35	;	1802
	retlw	.35	;	1785
	retlw	.35	;	1768
	retlw	.35	;	1752
	retlw	.35	;	1736
	retlw	.35	;	1720
	retlw	.35	;	1704
	retlw	.35	;	1689
	retlw	.35	;	1674
	retlw	.35	;	1659
	retlw	.35	;	1644
	retlw	.35	;	1630
	retlw	.35	;	1616
	retlw	.34	;	1602
	retlw	.34	;	1588
	retlw	.34	;	1575
	retlw	.34	;	1562
	retlw	.34	;	1549
	retlw	.34	;	1536
	retlw	.34	;	1524
	retlw	.34	;	1512
	retlw	.33	;	1500
	retlw	.33	;	1488
	retlw	.33	;	1476
	retlw	.33	;	1464
	retlw	.33	;	1453
	retlw	.33	;	1442
	retlw	.32	;	1431
	retlw	.32	;	1420
	retlw	.32	;	1409
	retlw	.32	;	1399
	retlw	.32	;	1388
	retlw	.32	;	1378
	retlw	.31	;	1368
	retlw	.31	;	1358
	retlw	.31	;	1348
	retlw	.30	;	1339
	retlw	.30	;	1329
	retlw	.30	;	1320
	retlw	.30	;	1311
	retlw	.29	;	1302
	retlw	.29	;	1293
	retlw	.29	;	1284
	retlw	.29	;	1275
	retlw	.29	;	1266
	retlw	.28	;	1258
	retlw	.28	;	1250
	retlw	.27	;	1241
	retlw	.27	;	1233
	retlw	.27	;	1225
	retlw	.26	;	1217
	retlw	.26	;	1209
	retlw	.26	;	1201
	retlw	.26	;	1194
	retlw	.26	;	1186
	retlw	.25	;	1179
	retlw	.25	;	1171
	retlw	.24	;	1164
	retlw	.24	;	1157
	retlw	.24	;	1150
	retlw	.23	;	1143
	retlw	.23	;	1136
	retlw	.22	;	1129
	retlw	.22	;	1122
	retlw	.22	;	1116
	retlw	.22	;	1109
	retlw	.21	;	1102
	retlw	.21	;	1096
	retlw	.21	;	1090
	retlw	.20	;	1083
	retlw	.20	;	1077
	retlw	.19	;	1071
	retlw	.19	;	1065
	retlw	.19	;	1059
	retlw	.18	;	1053
	retlw	.18	;	1047
	retlw	.17	;	1041
	retlw	.17	;	1035
	retlw	.16	;	1030
	retlw	.16	;	1024
	retlw	.16	;	1019
	retlw	.15	;	1013
	retlw	.15	;	1008
	retlw	.15	;	1002
	retlw	.14	;	997
	retlw	.14	;	992
	retlw	.14	;	986
	retlw	.13	;	981
	retlw	.13	;	976
	retlw	.12	;	971
	retlw	.12	;	966
	retlw	.11	;	961
	retlw	.11	;	956
	retlw	.10	;	951
	retlw	.10	;	946
	retlw	.9	;	942
	retlw	.9	;	937
	retlw	.8	;	932
	retlw	.8	;	928
	retlw	.8	;	923
	retlw	.7	;	919
	retlw	.7	;	914
	retlw	.6	;	910
	retlw	.6	;	905
	retlw	.6	;	901    об/мин .............
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	
	retlw	.5	;	

;*************************************************************************
;настройка после всех видов сброса  контроллера              
; режим запуска двигателя и выход двигателя в режим менее 450 об/мин
;*************************************************************************
;*************************************************************************
IZMER_TZ      BCF   OUT ;
	      BSF          PXX              ;включить ХХ        (открыть клапан)
NACH           CLRWDT                          ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT	
	 MOVLW	0xFF           ;ЗАДАЕМ ВРЕМЯ ОТКЛЮЧЕНИЯ КАТУШКИ
	MOVWF    CNDT_Lo  ;ПРИ ОТСУТСТВИИ ИМПУЛЬСОВ НА ВХОДЕ
	MOVLW	0xFF
	MOVWF    CNDT_Hi	
NET_1	MOVLW	.20
	MOVWF    temp 
DEC_tmp    DECFSZ    temp	
	GOTO    DEC_tmp
	DECFSZ   CNDT_Lo
	GOTO    POISK_1
	DECFSZ   CNDT_Hi
	GOTO    POISK_1
	BSF   OUT       ;ОТКЛЮЧЕНИЕ КАТУШКИ ПРИ  ОТСУТСТВИИ ИМПУЛЬСОВ НА ВХОДЕ
	GOTO  NACH
POISK_1	CLRWDT                          ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT
	BTFSS 	IN
	GOTO     NET_1	
;*************************************************************************
;************************************************************************* 
SIGZ0_0	   BTFSS 	IN	 ;ПОИСК  ФРОНТА   ИМПУЛЬСА  НА ВХОДЕ
	 GOTO      SIGZ0_0	   ;ВХ=0
	BSF   OUT                      ;ВХ=1     
	CLRF    CNDT_Lo
	CLRF    CNDT_Hi			                         	
LOOPZ2	NOP
	NOP
	NOP
	INCFSZ	CNDT_Lo,F     ;УВЕЛИЧЕНИЕ МЛАДШЕГО РАЗРЯДА СЧЕТЧИКА НА 1 И
	GOTO	LOOPZ3	      ;ПРОВЕРКА ЕГО НА ПЕРЕПОЛНЕНИЕ
	INCF	CNDT_Hi        ;УВЕЛИЧЕНИЕ СТАРШЕГО РАЗРЯДА
	CLRWDT                            ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT		                                    
LOOPZ3	BTFSC	IN	      ;СЧИТАТЬ ПОКА   ВХ=1
	GOTO	LOOPZ2
	 CLRWDT                            ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT 	
;*************************************************************************
SIGZ1_1	   BTFSC 	IN	       ;ПОИСК  " 0 "  УРОВНЯ НА ВХОДЕ
	GOTO	SIGZ1_1	       ;ВХ=1
	BCF   OUT                           ;ВХ=0
	 CLRWDT                            ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT 	
	 NOP			                         	
LOOPZ22   NOP
	 NOP
	 NOP
	INCFSZ	CNDT_Lo,F     ;УВЕЛИЧЕНИЕ МЛАДШЕГО РАЗРЯДА СЧЕТЧИКА НА 1 И
	GOTO	LOOPZ33	      ;ПРОВЕРКА ЕГО НА ПЕРЕПОЛНЕНИЕ
	INCF	CNDT_Hi         ;УВЕЛИЧЕНИЕ СТАРШЕГО РАЗРЯДА
	NOP	                                    
LOOPZ33   BTFSS	   IN	      ;СЧИТАТЬ ПОКА  " 0 "  УРОВЕНЬ НА ВХОДЕ
	GOTO	LOOPZ22	
	BSF   OUT                          ;ИСКРА ПО ФРОНТУ ИМПУЛЬСА
	MOVLW     0x1D 	          ;частота вращения >450 об/мин ???
	SUBWF    CNDT_Hi,W            ;
	BTFSC      STATUS,C			
	GOTO       NACH           ;частота вращения <450 об/мин
	 CLRWDT                            ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT   частота вращения >450 об/мин 	
;===================================================
;*************************************************************************
;                       РАБОЧИЙ РЕЖИМ
;*************************************************************************	     
            ;очистка регистров математики    
      
IZMER_T 	    CLRF  ZADER_Lo
	    CLRF  ZADER_Hi
	    CLRF  ACCc_Lo  
	    CLRF  ACCc_Hi	    
	    CLRF  ACCd_Lo
	    CLRF  ACCd_Hi  	
	    CLRF  ACCa_Hh  
	    CLRF  ACCb_Hh	             
;*************************************************************************
;                            вычисление 
;    номера строки таблицы  опережения зажигания
;*************************************************************************
                     ; загружаем   данные о предыдущем периоде 
	 MOVF      CNDT_Lo,W         ;перегружаем младший байт периода
	 MOVWF   NOM_ST               ;в  NOM_ST  
	SWAPF     NOM_ST               ;меняем местами полубайты
	BCF           NOM_ST,7           ;очищаем старший полубайт
	BCF           NOM_ST,6    
	BCF           NOM_ST,5
	BCF           NOM_ST,4
	MOVF       CNDT_Hi,W         ;перегружаем старший байт периода
	MOVWF    TEMP_Hi 
	MOVLW	b'00001111'        ;выбираем младшую тетраду  TEMP_Hi 
	ANDWF     TEMP_Hi            ;логическое "И" аккумулятора и регистра "TEMP_Hi "
	SWAPF     TEMP_Hi ,W       ;меняем местами полубайты  , результат в аккумулятор
	ADDWF    NOM_ST              ;сумма содержимого аккумулятора и NOM_ST
;************************************************************************
                 ;РАСЧЕТ ЗАДЕРЖКИ ЗАЖИГАНИЯ
;************************************************************************
	MOVF 	NOM_ST,W        ;загружаем номер строки таблицы в аккумулятор
	CALL	convert	          ;вызываем ПП конвертации (таблица опережения)
XX_	 MOVWF     RETLW_OB      ;грузим значение из таблицы  опережение по оборотам
	MOVF 	NOM_ST,W        ;номер строки в аккумулятор
	INCF	PCLATH
	CALL         convert_ADC   ;вызываем ПП конвертации (таблица АЦП)
	CLRF	PCLATH
	MOVWF   RETLW_ADC      ;загружаем значение  множителя АЦП	
;************************************************************************ 
;                           УПРАВЛЕНИЕ ЭПХХ
;************************************************************************
	     BANK0	     
	    MOVF      NOM_ST,W 
	    SUBLW     .140             ;1340  об/мин (частота включения XХ)
	    BTFSC      STATUS,C
	    GOTO       OFF_PXX
	    BSF          PXX              ;включить ХХ        (открыть клапан)
	    GOTO     ADC
OFF_PXX     BCF     PXX                   ;выключить ХХ  (закрыть клапан)	
;************************************************************************                
; КОРРЕКЦИЯ ПО ВАКУУМУ ( по результату АЦП сигнала с датчика разрежения )
;************************************************************************          
ADC 	BANK0
	MOVLW      B'10011001'   ;внутренн. RC генератор , АЦП-вкл.  ,  канал-6 
	MOVWF        ADCON0
	CLRF  ADRESH
	BCF  ADCON0,GO            ;сбросить  GO
	BANK1
	CLRF  ADCON1
	CLRF  ADRESL                 ;очистка регистров результата АЦП
	BANK0	
	BSF  ADCON0,GO            ;начать АЦП 
	NOP
NO              NOP
	BTFSC      ADCON0,GO   ;АЦП закончено ?
	GOTO       NO                      ;нет
	NOP                                      ;да
	BANK0
;==========================================                
                ;СУММА             ADRESL+ZADER_
;==========================================
	BCF          STATUS,Z   ;проверка на  0 регистра  ADRESH
	MOVF	ADRESH
	BTFSS	STATUS,Z
	GOTO       NET_           ; >0
	GOTO         DA_            ; =0
NET_	MOVLW     .205
	MOVWF     temp
	GOTO       SUB_
DA_	BANK1
	MOVF	ADRESL,W  ;грузим в акк. младший байт регистра АЦП(старший не используется)	
	BANK0	
	MOVWF     temp
SUB_	MOVLW     .136	;содержимое регистра ADRESL при 0,6 в на входе АЦП  (при макс. разрежении)
	SUBWF    temp            ;программно устанавливаем 0 значение результата АЦП при макс. разрежении	
	BTFSC      STATUS,C			
	GOTO       CORR		
	CLRF	temp
CORR	BCF     STATUS,C
	MOVLW     .69	
	SUBWF    temp,W
	MOVF     temp,W
	BTFSC      STATUS,C
	MOVLW     .68	
	MOVWF     temp	
	BCF     STATUS,C
	RRF      temp          ;делим на 2  содержимое temp 
	MOVF     temp,W   ;	грузим результат  АЦП
	MOVWF   mulcnd
	MOVF     RETLW_ADC,W
	MOVWF   mulplr
	CALL       mpy_S    ;вызываем ПП умножения
	MOVLW	B'11110000'   ;     РЕЗУЛЬТАТ УМНОЖЕНИЯ  ДЕЛИМ     НА   16
	ANDWF     L_byte           ;
	SWAPF      L_byte
	MOVLW	B'00001111'    ;
	ANDWF     H_byte
	SWAPF      H_byte,W       ;
	ADDWF    L_byte
	MOVF        L_byte,W        ;
	SUBWF     RETLW_OB ;вычитаем содержимое аккумулятора из  RETLW_OB	
	MOVF       RETLW_OB,W
;вычитаем из счетчика периода значение опережения	
	MOVWF     ACCa_Lo
	MOVLW   0x00
	MOVWF     ACCa_Hi		 
	MOVF       CNDT_Lo,W      ;загружаем младший байт  в
	MOVWF            ACCb_Lo	
	MOVF      CNDT_Hi,W        ;загружаем старший байт в
	MOVWF   ACCb_Hi            ;ACCb_Hi
	CALL        D_sub                 ;вызываем ПП вычитания
;************************************************************************
	MOVF      ACCb_Lo,W     ; загружаем результат вычитания
	MOVWF   ZADER_Lo 
	MOVF      ACCb_Hi,W     ; загружаем результат вычитания
	MOVWF   ZADER_Hi		
;************************************************************************                      
	CLRWDT                  ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT 
	CLRF	CNDT_Lo         ;ОЧИСТКА  ЯЧЕЙКИ ПЕРИОДА
	CLRF	CNDT_Hi	        ;ОЧИСТКА  ЯЧЕЙКИ ПЕРИОДА	
;===============================================
;ИЗМЕРЕНИЕ ПЕРИОДА С ОДНОВРЕМЕННЫМ ОТСЧЕТОМ ЗАДЕРЖКИ ЗАЖИГАНИЯ
;(ОТНОСИТЕЛЬНО ПОЛОЖИТЕЛЬНОГО ФРОНТА)
;==============================================
			
SIG0_0	BTFSS 	IN	       ;ПОИСК  ФРОНТА   ИМПУЛЬСА  НА ВХОДЕ
	GOTO	SIG0_0	       ;ВХ=0
	BSF   OUT 	       ;ВХ=1					                         	
LOOP1	NOP
	DECFSZ  ZADER_Lo       
	GOTO	LOOP2
	BCF     STATUS,Z	
	MOVF	ZADER_Hi   ;проверка на нуль
	BTFSS	STATUS,Z
	GOTO	LOOP4	
	NOP                            ;"ИСКРА С ОПЕРЕЖЕНИЕМ"	
	GOTO	LOOP2
LOOP4	DECF    ZADER_Hi		
LOOP2	INCFSZ	CNDT_Lo,F     ;УВЕЛИЧЕНИЕ МЛАДШЕГО РАЗРЯДА СЧЕТЧИКА НА 1 И
	GOTO	LOOP3	      ;ПРОВЕРКА ЕГО НА ПЕРЕПОЛНЕНИЕ
	INCF	CNDT_Hi,F     ;УВЕЛИЧЕНИЕ СТАРШЕГО РАЗРЯДА	
	MOVF      CNDT_Hi,W 
	SUBLW     0x1D                 ; 450 об/мин ( мин.частота вращения коленчатого вала)
	BTFSC      STATUS,C
	GOTO	LOOP3
	GOTO        IZMER_TZ         ;ЧАСТОТА ВРАЩЕНИЯ ВАЛА МЕНЕЕ 404 об/мин 
LOOP3	BTFSC	IN	      ;СЧИТАТЬ ПОКА ПОЛОЖ. УРОВЕНЬ НА ВХОДЕ
	GOTO	LOOP1    
	CLRWDT                            ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT
	BCF   OUT 	       ;ВХ=0  		
;===================================================
SIG1_1	BTFSC 	IN	       ;ПОИСК  СПАДА ИМПУЛЬСА НА ВХОДЕ
	GOTO	SIG1_1	       ;ВХ=1
	BCF   OUT 	       ;ВХ=0 							                        
LOOP11	NOP
	DECFSZ  ZADER_Lo       
	GOTO	LOOP22
	BCF     STATUS,Z	
	MOVF	ZADER_Hi   ;проверка на нуль
	BTFSS	STATUS,Z
	GOTO	LOOP44	
	BSF   OUT                            ;"ИСКРА С ОПЕРЕЖЕНИЕМ"	
	GOTO	LOOP22
LOOP44	DECF    ZADER_Hi		
LOOP22	INCFSZ	CNDT_Lo,F     ;УВЕЛИЧЕНИЕ МЛАДШЕГО РАЗРЯДА СЧЕТЧИКА НА 1 И
	GOTO	LOOP33	       ;ПРОВЕРКА ЕГО НА ПЕРЕПОЛНЕНИЕ
	INCF	CNDT_Hi,F      ;УВЕЛИЧЕНИЕ СТАРШЕГО РАЗРЯДА	
	MOVF      CNDT_Hi,W 
	SUBLW     0x1D                  ;450 об/мин 
	BTFSC      STATUS,C	
	GOTO	LOOP33	
	GOTO         IZMER_TZ        ;ЧАСТОТА ВРАЩЕНИЯ ВАЛА < 450 об/мин (режим запуска)
LOOP33	BTFSS	IN	        ;СЧИТАТЬ ПОКА НУЛЕВОЙ УРОВЕНЬ НА ВХОДЕ
	GOTO	LOOP11
	CLRWDT                              ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT
	BSF   OUT 	       ;"ИСКРА  ПО ФРОНТУ"
	MOVF      CNDT_Hi,W  
	SUBLW     0x0D                  ;   <   >  900 об/мин   (  900 об/мин =    0x0D  ) 
	BTFSC      STATUS,C
	GOTO	IZMER_T           ;НА НАЧАЛО = РАБОЧИЙ РЕЖИМ >900 об/мин 	
	MOVLW     .183                     ;   (  900 об/мин     =   .183  ) 
	MOVWF      NOM_ST 
	GOTO	XX_                   ;НА XX ( < 900 об/мин , но >  450 об/мин )
;=======================================================================		
;*******************************************************************
;ПП ВЫЧИТАНИЯ ДВУХ ДВУХБАЙТОВЫХ ЧИСЕЛ      D_sub
;*******************************************************************
;      ACCb_ (16 бит) - ACCa_ (16 бит)->ACCb (16 бит)
; (a) Загружаем 1-й операнд в  ACCa_Lo и ACCa_Hi (16 бит)
; (b) Загружаем 2-й операнд в  ACCb_Lo и ACCb_Hi (16 бит)
; (c)ВЫЗЫВАЕМ     D_sub
; (d) результат находится в   ACCb_Lo и  ACCb_Hi (16 бит)
; память программ: 14
; машинных циклов: 17
;*******************************************************************
D_sub  	 call    neg_A
D_add 	  movf    ACCa_Lo,W     ;загрузить в аккумулятор содержимое ACCa_Lo
	 addwf   ACCb_Lo, F     ;сложить аккумулятор с ACCb_Lo
	 btfsc   STATUS,C          ;проверить бит carry
	 incf    ACCb_Hi, F	    ;увеличить  ACCb_Hi   на 1
	 movf    ACCa_Hi,W	    ;
	 addwf   ACCb_Hi, F      ;сложить аккумулятор с ACCb_Hi
	 btfsc   STATUS,C      
	 incf    ACCb_Hh, F
	 movf    ACCa_Hh,W
	 addwf   ACCb_Hh, F
	 retlw   0
;********************************************************************
neg_A   comf    ACCa_Lo, F            ; инвертируем   ACCa ( -ACCa -> ACCa )
	incf    ACCa_Lo, F
	btfsc   STATUS,Z
	decf    ACCa_Hi, F
	comf    ACCa_Hi, F
	btfsc   STATUS,Z
	decf    ACCa_Hh, F
	comf    ACCa_Hh, F	
	retlw   0
;========================================================
;                                 ПП         УМНОЖЕНИЯ      8X8
;========================================================
mpy_S      clrf    H_byte
	clrf    L_byte
	movlw   .8
	movwf   count
	movf    mulcnd,W
	bcf     STATUS,C    ; Clear the carry bit in the status Reg.
loop           rrf     mulplr, F
	btfsc   STATUS,C
	addwf   H_byte,Same
	rrf     H_byte,Same
	rrf     L_byte,Same
	decfsz  count, F
	goto    loop
	retlw   0
;========================================================
	          END


