Перейти к содержанию

Не Удается Скомпилировать С Файл В Mikroc


adray

Рекомендуемые сообщения

Проблема состоит в том что не удается получить hex файл для програмирования микроконтроллеров pic18f452 и pic16f84. C файлы прелагаются.

Программа блока контроля оси.txt

Программа контроллера управления.txt

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Подробнее можно, почему не удается? Компилятор выдает ошибки?

Да компилятор выдает ошибки

0 1 mikroCPIC1618.exe -MSF -DBG -pP18F452 -LHF -DL -O11111114 -fo8 -N"C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\Examples\MyProject.mcppi" -SP"C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\defs\" -SP"C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\uses\P18\" -SP"C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\Examples\" "MyProject.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl"

0 1139 Available RAM: 1515 [bytes], Available ROM: 32768 [bytes]

0 122 Compilation Started __Lib_Delays.c

172 123 Compiled Successfully __Lib_Delays.c

0 122 Compilation Started MyProject.c

8 396 Invalid declarator expected'(' or identifier MyProject.c

12 393 'n' Identifier redefined MyProject.c

69 324 Undeclared identifier 'Soft_Uart_Write' in expression MyProject.c

78 324 Undeclared identifier 'Soft_Uart_Init' in expression MyProject.c

85 396 Invalid declarator expected'(' or identifier MyProject.c

85 324 Undeclared identifier 'Soft_Uart_Read' in expression MyProject.c

86 315 Invalid expression MyProject.c

86 406 ')' expected, but 'data' found MyProject.c

86 315 Invalid expression MyProject.c

86 402 ; expected, but ')' found MyProject.c

87 424 '}' expected ';' found MyProject.c

0 1163 Variable '' has been declared, but not used MyProject.c

91 424 '}' expected '}' found MyProject.c

95 424 '}' expected '}' found MyProject.c

96 424 '}' expected '}' found MyProject.c

101 424 '}' expected '}' found MyProject.c

105 312 Internal error '' MyProject.c

0 102 Finished (with errors): 20 май 2015, 17:03:02 MyProject.mcppi

И для программы контроллера управления:

0 1 mikroCPIC1618.exe -MSF -DBG -pP18F452 -LHF -DL -O11111114 -fo8 -N"C:\Users\Ivan\Desktop\Ïðàêòèêà\ïóëüò\sdfsd.mcppi" -SP"C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\defs\" -SP"C:\Users\Public\Documents\Mikroelektronika\mikroC PRO for PIC\uses\P18\" -SP"C:\Users\Ivan\Desktop\Ïðàêòèêà\ïóëüò\" "sdfsd.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_CType.mcl" "__Lib_CString.mcl" "__Lib_CStdlib.mcl" "__Lib_CMath.mcl" "__Lib_MemManager.mcl" "__Lib_Conversions.mcl" "__Lib_Sprintf.mcl" "__Lib_PrintOut.mcl" "__Lib_Sprinti.mcl" "__Lib_Sprintl.mcl" "__Lib_Time.mcl" "__Lib_Trigonometry.mcl" "__Lib_Button.mcl" "__Lib_Keypad4x4.mcl" "__Lib_Manchester.mcl" "__Lib_OneWire.mcl" "__Lib_PS2.mcl" "__Lib_Sound.mcl" "__Lib_SoftI2C.mcl" "__Lib_SoftSPI.mcl" "__Lib_SoftUART.mcl" "__Lib_ADC_A_C.mcl" "__Lib_EEPROM_256.mcl" "__Lib_FLASH_w8_e64.mcl" "__Lib_I2C_c34.mcl" "__Lib_PWM_c21.mcl" "__Lib_SPI_c345.mcl" "__Lib_UART_c67.mcl" "__Lib_PortExpander.mcl" "__Lib_CANSPI.mcl" "__Lib_CF.mcl" "__Lib_CFFat16.mcl" "__Lib_GlcdFonts.mcl" "__Lib_Glcd.mcl" "__Lib_LcdConsts.mcl" "__Lib_Lcd.mcl" "__Lib_Mmc.mcl" "__Lib_MmcFat16.mcl" "__Lib_MmcFat16Constants.mcl" "__Lib_RS485.mcl" "__Lib_S1D13700.mcl" "__Lib_T6963C.mcl" "__Lib_SPIGlcd.mcl" "__Lib_SPILcd.mcl" "__Lib_SPILcd8.mcl" "__Lib_SPIT6963C.mcl" "__Lib_EthEnc28j60.mcl" "__Lib_TFT.mcl" "__Lib_TFT_Defs.mcl" "__Lib_TFT_16bit.mcl" "__Lib_TFT_16bit_Defs.mcl" "__Lib_TouchPanel_TFT.mcl" "__Lib_EthEnc24j600.mcl" "__Lib_TouchPanel.mcl"

0 1139 Available RAM: 1515 [bytes], Available ROM: 32768 [bytes]

0 122 Compilation Started sdfsd.c

4 396 Invalid declarator expected'(' or identifier sdfsd.c

261 324 Undeclared identifier 'Usart_Write' in expression sdfsd.c

267 324 Undeclared identifier 'Usart_Data_Ready' in expression sdfsd.c

267 309 Invalid statement sdfsd.c

268 324 Undeclared identifier 'Usart_Read' in expression sdfsd.c

297 324 Undeclared identifier 'Usart_Write' in expression sdfsd.c

303 324 Undeclared identifier 'Usart_Data_Ready' in expression sdfsd.c

303 309 Invalid statement sdfsd.c

304 324 Undeclared identifier 'Usart_Read' in expression sdfsd.c

347 324 Undeclared identifier 'Usart_Write' in expression sdfsd.c

353 324 Undeclared identifier 'Usart_Data_Ready' in expression sdfsd.c

353 309 Invalid statement sdfsd.c

354 324 Undeclared identifier 'Usart_Read' in expression sdfsd.c

383 324 Undeclared identifier 'Usart_Write' in expression sdfsd.c

389 324 Undeclared identifier 'Usart_Data_Ready' in expression sdfsd.c

389 309 Invalid statement sdfsd.c

390 324 Undeclared identifier 'Usart_Read' in expression sdfsd.c

440 312 Internal error '' sdfsd.c

0 102 Finished (with errors): 20 ìàé 2015, 17:05:45 sdfsd.mcppi

Изменено пользователем adray
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Первое, что очевидно, нет ни одного include, как компилятор узнает, что такое "PORTB", например? Ни одного прототипа функций тоже не видно, о чём компилятор Вам чёрным-по белому говорит. Сначала Вам следует посмотреть примеры от самой MikroC и переписать код под этот компилятор. Порты, SFR в разных компиляторах описываются и применяются по-другому, помнится. Да и Кернигана с Ричи стОит почитать. :)

Изменено пользователем shindbad
Ссылка на комментарий
Поделиться на другие сайты

Что бы что-то сказать по вашей проблеме, нужно выложить весь проект на микроси.

А файлы тем более текстовые сами по себе не компилируются.

Сам я только учусь, но кое что из готовых проектов получается переделать на микроси

под свой микроконтроллер.

Ссылка на комментарий
Поделиться на другие сайты

Что бы что-то сказать по вашей проблеме, нужно выложить весь проект на микроси.

А файлы тем более текстовые сами по себе не компилируются.

Сам я только учусь, но кое что из готовых проектов получается переделать на микроси

под свой микроконтроллер.

Просто я не могу найти толкового описания как это сделать я понимаю что не хватает библиотек и все такое но не понимаю как это все привязать к своему микроконтроллеру да еще и с библиотеками.

Ссылка на комментарий
Поделиться на другие сайты

...Просто я не могу найти толкового описания как это сделать...

Не не можете найти, а не хотите, информации по MikroC - море. Что мануала с компилятором нет?

я понимаю что не хватает библиотек и все такое но не понимаю как это все привязать к своему микроконтроллеру да еще и с библиотеками.

Я выше уже сказал, что Вам в первую очередь надо почитать и на базовые ошибки внимание обратил. Си - это не Бейсик, придётся поработать, тогда и понимание придёт.

P.S. А вообще, IMHO, MikroC для PIC - самый неудачный выбор для начинающего, а-ля ардуино. Или это курсовик?

Изменено пользователем shindbad
Ссылка на комментарий
Поделиться на другие сайты

А вообще, IMHO, MikroC для PIC - самый неудачный выбор для начинающего

Почему?

Сам я с нуля начал имено с микроси.

Взял пример отсюда http://embedded-lab.com/blog/?p=396 , создал проект в микроси, откомпилировал,

получил hex файл, в PROTEUS создал проект по схеме, проверил работоспособность, спаял макет.

И-и-и-и схемка заработала :P .

Позже доработал програмку и сделал вольт-амперметр с выводом на LCD.

Вот :bye:post-99825-0-05497200-1432306392_thumb.jpg

А вообще создать проект достаточно просто.

Нажимай на верхнем ряду надпись Proyect и дальше New proyect и далее по порядку.

В принципе сложного ничего нет.

Если плохо с Ангельским языком гугл переводчик и гугл поиск в помощь.

Да еще есть хелп на русском.

Файл не удается загрузить.

Изменено пользователем 100482
Ссылка на комментарий
Поделиться на другие сайты

А вообще, IMHO, MikroC для PIC - самый неудачный выбор для начинающего

Почему?...

Потому, что никому не известно, как написана функция, ADC_Read, например, или Lcd_Init. MikroC - это вообще не компилятор с Си, это - что-то вроде Arduino. Куча библиотек, неизвестно какими индусо-китайцами писаными, но однозначно развращающими начинающих. Много Вы узнали о работе с Lcd "откомпилировав" код от MikroC? Хрена-ли там не откомпилировать? 20 строк? Изменено пользователем shindbad
Ссылка на комментарий
Поделиться на другие сайты

Начинающему в принципе до лампочки кем и как написана функция.

Ему важно чтобы конкретная програмка пусть и в 20 строк реально заработала

и что бы начать разбираться в этих строках и менять их по необходимости.

И решить надо ему это программирование или забросить куда нибудь ее вместе со всей электроникой.

Сам я, повторюсь, начал изучать с нуля (рядом нет советчиков, когда учился был язык АП а когда заканчивал бейсик),

я не работаю и уже не буду работать програмистом.

Попробовал разные компиляторы и нашел микроси с примерами простых, рабочих програмок.

Спорить больше не буду, каждый решает сам.

ps. Ну как знаток помоги человеку.

Изменено пользователем 100482
Ссылка на комментарий
Поделиться на другие сайты

Начинающему в принципе до лампочки кем и как написана функция...

С MikroC этот начинающий так и останется начинающим. Научиться программированию можно лишь изучая качественные исходные тексты и документацию.

...ps. Ну как знаток помоги человеку.

А чем помочь-то? Я ТС ответил, откуда берутся ошибки. Достаточно просто перевести сообщение с английского на русский и почитать, как уже говорил, Кернигана и Ричи.

Изменено пользователем shindbad
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Здравствуйте! Помогите, пожалуйста с MikroC (работаю в версии 6.6.3 не зарегистрирована). Изучаю СИ через pic16f628a (был опыт общения с асмом на авр). Не могу понять, почему компилятор ругается на функции (вылазят сообщения типа Undeclared identifier '' in expression).

ButtonForMultiCooker.rar

Ссылка на комментарий
Поделиться на другие сайты

adray

это вы от куда взяли?

													 /*
Программа ведущего контроллера поворотного устройства
*/
unsigned short data, *rec;
char Highbyteangle; //старший байт для приёма пакета энкодера
char Lowbyteangle; //Младший байт для приёма пакета энкодера
char Highbyteangle2; //старший байт для приёма пакета энкодера
char Lowbyteangle2; //Младший байт для приёма пакета энкодера
char Last_Highbyteangle;
char Last_Lowbyteangle;
char Last_Highbyteangle2;
char Last_Lowbyteangle2;
int angle; //буфер формирования угла
long angle1; // рассчитанное значение угла для вывода
int angle_up;
long angle_up1;
long realangle; // рассчитанное значение реального угла
long realangle_up;
long zeropoint; // угол принятый за 000
long zeropoint_up;
long incpoint; // значение угла для нулевой точки энкодера азимута
long incpoint2; // значение угла для нулевой очки энкодера элевации
long lastangle; // угол последней стоянки
int lowpacket; //промежуточные значения
int hipacket; // пактов чтения энкодеров
int lowpacket2; // элевации
int hipacket2; // и азимута
long tlong;
long tlong1;
char ch;
char ch1;
char mark_CW; //маркеры перекрута поворотки
char mark_CCW;
int i; //счётчик
int sr; //счётчик
char ds; //счётчик
char dw; //счётчик
char marker1 = 0x11;//маркер-запрос старшего байта азимута
char marker2 = 0x17;//маркер-запрос младшего байта азимута
char marker3 = 0x41; //маркер-запрос старшего байта элевации
char marker4 = 0x47; //маркер-запрос старшего байта элевации
char *text;
char movestat; //переменная статуса движения поворотки по азимуту
char elevastat; //переменная статуса движения поворотки по элевации
char moderotate; //переменная - указатель режима управления вращением
unsigned char firstbyte; //флаг приёма первого байта пакета из компьютера
char buffer1 [8]; // массив приёма пакета из ПК в режиме ведения
int hundr_AZ; //Сотни угла азимута из ПК
int tens_AZ; //Десятки угла азимута из ПК
int onces_AZ; //Еденицы угла азимута из ПК
long angle_AZ_PC;//Угол азимута принятый из ПК
int hundr_AZ_rot;//Сотни угла азимута из ротатора
int tens_AZ_rot;//Десятки угла азимута из ротатора
int onces_AZ_rot;//Еденицы угла азимута из ротатора
long angle_AZ_ROT;//Угол азимута принятый из ротатора
long last_angle_AZ_PC;//Запомненный угол азимута из ПК
long diff_angle_AZ;//Разница углов азимута ПК и ПУ
int hundr_EL; //Сотни угла элевации из ПК
int tens_EL; //Десятки угла элевации из ПК
int onces_EL; //Еденицы угла элевации из ПК
long angle_EL_PC;//Угол элевации принятый из ПК
int hundr_EL_rot;//Сотни угла элевации из ротатора
int tens_EL_rot;//Десятки угла элевации из ротатора
int onces_EL_rot;//Еденицы угла элевации из ротатора
long angle_EL_ROT;//Угол элевации принятый из ротатора
long last_angle_EL_PC;//Запомненный угол элевации из ПК
long diff_angle_EL;//Разница углов элевации ПК и ПУ
int move_AZ;//Флаг разрешения подстройки азимута ПУ от ПК
int move_EL;//Флаг разрешения подстройки элевации ПУ от ПК
int menu_view;//Определитель вывода меню
int current_menu;//Определитель текущего меню настроек
char grad = 0xDF;//значёк градуса
char stat_azim;//статус связи с датчиком азимута
char stat_elevat;//статус связи с датчиком энкодера
long byte_save; //Байт сохранения во FLASH
long byte_save1;
long byte_save2;
long byte_save3;
long angOwerwindLeft;//Значение угла перекрута влево
long angOwerwindRight;//Значение угла перекрута вправо
long angMaxElevate;//Угол максимального подъёма элевации
long angPulseZone;//угол Азимута при меньшем значении которого ПУ начинает подстройку угла толчками
long angPulseZone_up;//угол Азимута при меньшем значении которого ПУ начинает подстройку угла толчками
char setOverwind;//Флаг записи углов перекрута в EEPROM
char setMaxElevate;//Флаг записи максимального ушла подъёма в EEPROM
char setPulseZone;//Флаг записи угла азимута зоны толчкового режима
char setPulseZone_up;//Флаг записи угла элевации зоны толчкового режима
char set_inputOutside;//флаг записи порта связи с ПК
char set_step_AZ;
char set_step_EL;
int steps_AZ;
int steps_EL;
int steps;
char flagSetposition;
char stat;
char flagERR_AZ;//флаг ошибки связи
char flagERR_EL;//флаг ошибки связи
char counter_alarm;
char flagSTOP;
char setStartBit;//Бит обнуления угла принятого из ПК
char work; //Флаг разрешения работы после включения
char inputOutside;//Маркер входа для связи с ПК
char markOutmodesAZ;//Маркеры осуществления вывода надписей в ручном режиме
char markOutmodesEL;
//-------------------------------------------------------------------------------------------------------------------------------
void Words_status_AZ() { //Процедура формирования значения угла азимута и слова состояния
	 hipacket = Highbyteangle;
	 angle = hipacket << 2; //сдвигаем на 2 бита влево
	 lowpacket = Lowbyteangle >> 6; //Сдвигаем на 6 бит вправо
	 realangle = angle + lowpacket; //формируем 10-битное значение угла
	 if (realangle >= zeropoint) {
		 angle1 = realangle - zeropoint;
								 }
	 if (realangle < zeropoint) {
		 incpoint = 1024 - zeropoint;
		 angle1 = incpoint + realangle;
								 }
 }
//-------------------------------------------------------------------------------------------------------------------------------
void Words_status_EL() { //Процедура формирования значения угла элевации и слова состояния
	 hipacket2 = Highbyteangle2;
	 angle_up = hipacket2 << 2; //сдвигаем на 2 бита влево
	 lowpacket2 = Lowbyteangle2 >> 6; //Сдвигаем на 6 бит вправо
	 realangle_up = angle_up + lowpacket2; //формируем 10-битное значение угла
	 if (realangle_up >= zeropoint_up) {
		 angle_up1 = realangle_up - zeropoint_up;
								 }
	 if (realangle_up < zeropoint_up) {
		 incpoint2 = 1024 - zeropoint_up;
		 angle_up1 = incpoint2 + realangle_up;
								 }
	 if(angle_up1 > 0x380) {
				 angle_up1 = 0;
						 }
 }
//-------------------------------------------------------------------------------------------------------------------------------
void Angle_LCD_AZ() {
			 tlong = (long)angle1 * 3597;		 // covert adc reading to milivolts
			 tlong = tlong / 1023;				 // 0..1023 -> 0-5000mV
			 ch	 = tlong / 1000;				 // extract volts digit
			 LCD_Chr(1,3,48+ch);				 // write ASCII digit at 2nd row, 9th column
			 ch = (tlong / 100) % 10;		 // extract 0.1 volts digit
			 LCD_Chr_CP(48+ch);					 // write ASCII digit at cursor point
			 ch = (tlong / 10) % 10;			 // extract 0.01 volts digit
			 LCD_Chr_CP(48+ch);					 // write ASCII digit at cursor point
			 LCD_Chr_CP('.');
			 ch = tlong % 10;				 // extract 0.001 volts digit
			 LCD_Chr_CP(48+ch);					 // write ASCII digit at cursor point
 if(moderotate == 0x00) {//Если ручной режим
			 if (movestat == 0x26) {
								 LCD_Chr(2,3,' ');
								 LCD_Chr_CP('L');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP(' ');
								 }
			 if (movestat == 0x31) {
								 LCD_Chr(2,3,' ');
								 LCD_Chr_CP('R');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP(' ');
								 }
			 if (movestat == 0x28) {
								 LCD_Chr(2,2,' ');
								 LCD_Chr_CP('S');
								 LCD_Chr_CP('T');
								 LCD_Chr_CP('O');
								 LCD_Chr_CP('P');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP(' ');
								 }
					 }
 if(moderotate == 0x01) {//Если автоматический режим
			 if(movestat == 0x26) {
						 LCD_Chr(2,7,'L');
									 }
			 if (movestat == 0x31) {
						 LCD_Chr(2,7,'R');
									 }
			 if (movestat == 0x28) {
						 LCD_Chr(2,7,'S');
									 }
						 }
			 if (moderotate == 0x00) {
									 LCD_Chr(2,16,'H'); //Индикация режима
									 }
			 if (moderotate == 0x01) {
									 LCD_Chr(2,16,'A');
									 }
			 }
//-------------------------------------------------------------------------------------------------------------------------------
void Angle_LCD_EL() {
			 tlong1 = (long)angle_up1 * 3597;		 // covert adc reading to milivolts
			 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
			 ch1 = (tlong1 / 100) % 10;		 // extract 0.1 volts digit
			 LCD_Chr(1,11,48+ch1);					 // write ASCII digit at cursor point
			 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
			 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
			 LCD_Chr_CP('.');
			 ch1 = tlong1 % 10;				 // extract 0.001 volts digit
			 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point */
 if(moderotate == 0x00) {//Если ручной режим
			 if (elevastat == 0x65) {
								 LCD_Chr(2,11,' ');
								 LCD_Chr_CP('U');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP(' ');
								 }
			 if (elevastat == 0x61) {
								 LCD_Chr(2,11,' ');
								 LCD_Chr_CP('D');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP(' ');
								 }
			 if (elevastat == 0x63) {
								 LCD_Chr(2,10,' ');
								 LCD_Chr_CP('S');
								 LCD_Chr_CP('T');
								 LCD_Chr_CP('O');
								 LCD_Chr_CP('P');
								 LCD_Chr_CP(' ');
								 }
						 }
 if(moderotate == 0x01) {
			 if (elevastat == 0x65) {
						 LCD_Chr(2,14,'U');
								 }
			 if (elevastat == 0x61) {
						 LCD_Chr(2,14,'D');
								 }
			 if (elevastat == 0x63) {
						 LCD_Chr(2,14,'S');
								 }
						 }
			 }
//------------------------------------------------------------------------------------------------------------------------------
void Read_Angle_AZ() { //Запрос данных угла поворота и данных состояния датчика
	 lowpacket = 0;
	 hipacket = 0;
	 ds = 0;
	 PORTD.F4 = 1; //Включаем передачу
	 Usart_Write(marker1); //Передача маркера
	 delay_us(545);
	 PORTD.F4 = 0; //Выключаем передачу

	 for (i = 0; i < 1000; i++) {
		 if (Usart_Data_Ready()) { // Если данные приняты
			 Highbyteangle = Usart_Read(); // Прочитать, что принято
			 //Анализируем байт на маркер запрещённого байта
			 if(Highbyteangle == 0x80) {//Если принят маркер запрещённого байта
				 if(Last_Highbyteangle >= 0x3F && Last_Highbyteangle <= 0x43) {
											 Highbyteangle = 0x41;
											 }
				 if(Last_Highbyteangle >= 0x45 && Last_Highbyteangle <= 0x49) {
											 Highbyteangle = 0x47;
											 }
				 if(Last_Highbyteangle >= 0x4B && Last_Highbyteangle <= 0x4F) {
											 Highbyteangle = 0x4D;
											 }
				 if(Last_Highbyteangle >= 0x51 && Last_Highbyteangle <= 0x55) {
											 Highbyteangle = 0x53;
											 }
				 if(Last_Highbyteangle >= 0x57 && Last_Highbyteangle <= 0x60) {
											 Highbyteangle = 0x59;
											 }
									 }
			 i = 1100;
			 ds = 1; //Если 1 то байт прочитан
			 Last_Highbyteangle = Highbyteangle;//Присваиваем переменной прошлого байта принятый байт
			 }
					 }
		 if (ds == 1) { //Если байт прочитан можно читать второй
			 delay_ms(20); //Задержка между запросами обязательна(подбирать)!!!!!!!
			 PORTD.F4 = 1; //Включаем передачу
			 Usart_Write(marker2); //Передача маркера
			 delay_us(545);
			 PORTD.F4 = 0; //Выключаем передачу

			 for (sr = 0; sr < 1000; sr++) {
					 if (Usart_Data_Ready()) { // Если данные приняты
					 Lowbyteangle = Usart_Read(); // Прочитать, что принято
					 //Анализируем байт на маркер запрещённого байта
					 if(Lowbyteangle == 0x80) {//Если принят маркер запрещённого байта
					 if(Last_Lowbyteangle >= 0x3F && Last_Lowbyteangle <= 0x43) {
													 Lowbyteangle = 0x41;
													 }
					 if(Last_Lowbyteangle >= 0x45 && Last_Lowbyteangle <= 0x49) {
													 Lowbyteangle = 0x47;
													 }
					 if(Last_Lowbyteangle >= 0x4B && Last_Lowbyteangle <= 0x4F) {
													 Lowbyteangle = 0x4D;
													 }
					 if(Last_Lowbyteangle >= 0x51 && Last_Lowbyteangle <= 0x55) {
													 Lowbyteangle = 0x53;
													 }
					 if(Last_Lowbyteangle >= 0x57 && Last_Lowbyteangle <= 0x60) {
													 Lowbyteangle = 0x59;
													 }
												 }
					 sr = 1200;
					 ds = 0; //Для опознавания чтения первого байта
					 Last_Lowbyteangle = Lowbyteangle;//Присваиваем переменной прошлого байта принятый байт
					 LCD_Chr(2,1,'*');
					 flagERR_AZ = 0;
					 counter_alarm = 0;
											 }
					 else {LCD_Chr(2,1,'!');
						 flagERR_AZ = 1;
						 }
							 }
					 }
			 else {LCD_Chr(2,1,'!');
				 flagERR_AZ = 1;
				 }
			 }
//------------------------------------------------------------------------------------------------------------------------------
void Read_Angle_EL() { //Запрос данных угла подъёма и данных состояния датчика
	 lowpacket2 = 0;
	 hipacket2 = 0;
	 dw = 0;
	 PORTD.F4 = 1; //Включаем передачу
	 Usart_Write(marker3); //Передача маркера
	 delay_us(545);
	 PORTD.F4 = 0; //Выключаем передачу

	 for (i = 0; i < 1000; i++) {
		 if (Usart_Data_Ready()) { // Если данные приняты
			 Highbyteangle2 = Usart_Read(); // Прочитать, что принято
			 //Анализируем байт на маркер запрещённого байта
			 if(Highbyteangle2 == 0x80) {//Если принят маркер запрещённого байта
				 if(Last_Highbyteangle2 >= 0x0F && Last_Highbyteangle2 <= 0x13) {
											 Highbyteangle2 = 0x11;
											 }
				 if(Last_Highbyteangle2 >= 0x15 && Last_Highbyteangle2 <= 0x19) {
											 Highbyteangle2 = 0x17;
											 }
				 if(Last_Highbyteangle2 >= 0x1B && Last_Highbyteangle2 <= 0x1E) {
											 Highbyteangle2 = 0x1D;
											 }
				 if(Last_Highbyteangle2 >= 0x21 && Last_Highbyteangle2 <= 0x25) {
											 Highbyteangle2 = 0x23;
											 }
				 if(Last_Highbyteangle2 >= 0x27 && Last_Highbyteangle2 <= 0x2B) {
											 Highbyteangle2 = 0x29;
											 }
									 }
			 i = 1100;
			 dw = 1; //Если 1 то байт прочитан
			 Last_Highbyteangle2 = Highbyteangle2;
			 }
					 }
		 if (dw == 1) { //Если байт прочитан можно читать второй
			 delay_ms(20); //Задержка между запросами обязательна(подбирать)!!!!!!!
			 PORTD.F4 = 1; //Включаем передачу
			 Usart_Write(marker4); //Передача маркера
			 delay_us(545);
			 PORTD.F4 = 0; //Выключаем передачу

			 for (sr = 0; sr < 1000; sr++) {
					 if (Usart_Data_Ready()) { // Если данные приняты
					 Lowbyteangle2 = Usart_Read(); // Прочитать, что принято
					 //Анализируем байт на маркер запрещённого байта
			 if(Lowbyteangle2 == 0x80) {//Если принят маркер запрещённого байта
				 if(Last_Lowbyteangle2 >= 0x0F && Last_Lowbyteangle2 <= 0x13) {
											 Lowbyteangle2 = 0x11;
											 }
				 if(Last_Lowbyteangle2 >= 0x15 && Last_Lowbyteangle2 <= 0x19) {
											 Lowbyteangle2 = 0x17;
											 }
				 if(Last_Lowbyteangle2 >= 0x1B && Last_Lowbyteangle2 <= 0x1E) {
											 Lowbyteangle2 = 0x1D;
											 }
				 if(Last_Lowbyteangle2 >= 0x21 && Last_Lowbyteangle2 <= 0x25) {
											 Lowbyteangle2 = 0x23;
											 }
				 if(Last_Lowbyteangle2 >= 0x27 && Last_Lowbyteangle2 <= 0x2B) {
											 Lowbyteangle2 = 0x29;
											 }
									 }
					 sr = 1200;
					 dw = 0; //Для опознавания чтения первого байта
					 Last_Lowbyteangle2 = Lowbyteangle2;
					 stat_elevat = 1;
											 }
				 else stat_elevat = 0;
							 }
					 }
				 else {
					 stat_elevat = 0;
					 }
				 if (current_menu == 1 && stat_elevat == 0) {
														 LCD_Chr(2,1,'!');
														 flagERR_EL = 1;
															 }
				 if (current_menu != 1 && stat_elevat == 0) {
														 LCD_Chr(2,9,'!');
														 flagERR_EL = 1;
															 }
				 if (current_menu == 1 && stat_elevat == 1) {
														 LCD_Chr(2,1,'*');
														 flagERR_EL = 0;
														 counter_alarm = 0;
															 }
				 if (current_menu != 1 && stat_elevat == 1) {
														 LCD_Chr(2,9,'*');
														 flagERR_EL = 0;
														 counter_alarm = 0;
															 }
			 }
//-----------------------------------------------------------------------------------------------------------------------------
void Zerocalibr_EL () { //Программа калибровки 000
			 if (PORTD.F0 == 1) {
			 hipacket2 = Highbyteangle2;
			 angle_up = hipacket2 << 2; //сдвигаем на 2 бита влево
			 lowpacket2 = Lowbyteangle2 >> 6; //Сдвигаем на 6 бит вправо
			 realangle_up = angle_up + lowpacket2; //формируем 10-битное значение угла
			 zeropoint_up = realangle_up;
			 //Сохраняем калибровочное значение во FLASH
			 byte_save = zeropoint_up >> 24; //Старший байт значения
			 EEprom_Write(0x04, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
			 byte_save = zeropoint_up >> 16; //байт после старшего
			 EEprom_Write(0x05, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
			 byte_save = zeropoint_up >> 8; //байт перед младшим
			 EEprom_Write(0x06, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
			 byte_save = zeropoint_up; //байт младший
			 EEprom_Write(0x07, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
								 }
			 }
//------------------------------------------------------------------------------------------------------------------------------
void Zerocalibr_AZ () { //Программа калибровки 000
			 if (PORTD.F0 == 1) {
			 hipacket = Highbyteangle;
			 angle = hipacket << 2; //сдвигаем на 2 бита влево
			 lowpacket = Lowbyteangle >> 6; //Сдвигаем на 6 бит вправо
			 realangle = angle + lowpacket; //формируем 10-битное значение угла
			 zeropoint = realangle;
			 //Сохраняем калибровочное значение во FLASH
			 byte_save = zeropoint >> 24; //Старший байт значения
			 EEprom_Write(0x00, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
			 byte_save = zeropoint >> 16; //байт после старшего
			 EEprom_Write(0x01, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
			 byte_save = zeropoint >> 8; //байт перед младшим
			 EEprom_Write(0x02, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
			 byte_save = zeropoint; //байт младший
			 EEprom_Write(0x03, byte_save); //Записываем в ячейку памяти
			 delay_ms(30);
			 EEprom_Write(0x1D, mark_CW);//Снимаем флаги перекрутов
			 delay_ms(30);
			 EEprom_Write(0x1C, mark_CCW);
			 mark_CW = 0;
			 mark_CCW = 0;
								 }
			 }
//------------------------------------------------------------------------------------------------------------------------------
void Rotate_CCW() { //Модуль вращения против часовой стрелки
						 PORTD.F4 = 1; //Включаем передачу
						 Usart_Write(0x1D); //Команда влево CCW
						 delay_us(545);
						 PORTD.F4 = 0; //Выключаем передачу

						 for (i = 0; i < 1000; i++) {
									 if (Usart_Data_Ready()) { // Если данные приняты
									 movestat = Usart_Read(); // Прочитать, что принято
									 i = 1100;
															 }
												 }
			 }
//-------------------------------------------------------------------------------------------------------------------------------
void Rotate_CW() { //Модуль вращения по часовой стрелке
						 PORTD.F4 = 1; //Включаем передачу
						 Usart_Write(0x23); //Команда вправо CW
						 delay_us(545);
						 PORTD.F4 = 0; //Выключаем передачу

						 for (i = 0; i < 1000; i++) {
								 if (Usart_Data_Ready()) { // Если данные приняты
								 movestat = Usart_Read(); // Прочитать, что принято
								 i = 1100;
														 }
													 }
			 }
//-------------------------------------------------------------------------------------------------------------------------------
void RotateStop_AZ() { //Остановка двигателя
			 if(mark_CW == 0 && mark_CCW == 0) {
							 lastangle = angle1; //Запоминаем угол стоянки
											 }
			 PORTD.F4 = 1; //Включаем передачу
			 Usart_Write(0x29); //Команда стоп
			 delay_us(545);
			 PORTD.F4 = 0; //Выключаем передачу

			 for (i = 0; i < 1000; i++) {
				 if (Usart_Data_Ready()) { // Если данные приняты
				 movestat = Usart_Read(); // Прочитать, что принято
				 i = 1100;
										 }
										 }
			 }
//-------------------------------------------------------------------------------------------------------------------------------
void RotateUp() { //Вращение вверх
		 PORTD.F4 = 1; //Включаем передачу
		 Usart_Write(0x4D); //Команда поднять вверх
		 delay_us(545);
		 PORTD.F4 = 0; //Выключаем передачу

		 for (i = 0; i < 1000; i++) {
			 if (Usart_Data_Ready()) { // Если данные приняты
				 elevastat = Usart_Read(); // Прочитать, что принято
				 i = 1100;
									 }
									 }
		 }
//-------------------------------------------------------------------------------------------------------------------------------
void RotateDown() {
			 PORTD.F4 = 1; //Включаем передачу
			 Usart_Write(0x53); //Команда опустить вниз
			 delay_us(545);
			 PORTD.F4 = 0; //Выключаем передачу

			 for (i = 0; i < 1000; i++) {
				 if (Usart_Data_Ready()) { // Если данные приняты
					 elevastat = Usart_Read(); // Прочитать, что принято
					 i = 1100;
										 }
										 }
			 }
//-------------------------------------------------------------------------------------------------------------------------------
void RotateStop_EL() { //Остановка двигателя элевации
			 PORTD.F4 = 1; //Включаем передачу
			 Usart_Write(0x59); //Команда стоп
			 delay_us(545);
			 PORTD.F4 = 0; //Выключаем передачу

			 for (i = 0; i < 1000; i++) {
				 if (Usart_Data_Ready()) { // Если данные приняты
				 elevastat = Usart_Read(); // Прочитать, что принято
				 i = 1100;
										 }
										 }
			 }
//-------------------------------------------------------------------------------------------------------------------------------
//Контроль перекрутов и вращение влево
void CCW_rotate_con() {
		 if (mark_CCW == 0) {//Условия отключения вращения при перекруте
							 Rotate_CCW(); //Вращаем против часовой стрелки
							 }
		 if (mark_CCW == 1 && angle1 >= angOwerwindLeft && flagSTOP == 0) {//если перекрут
											 Rotate_CCW(); //Вращаем против часовой стрелки
											 }
		 if (mark_CCW == 1 && angle1 < angOwerwindLeft) {
											 RotateStop_AZ(); //Стоп
											 }
		 if (angle1 > lastangle + 5 && mark_CW == 0) {LCD_Chr(1,16,'R');
												 mark_CCW = 1;//Выставляем маркер перекрута
												 EEprom_Write(0x1C, mark_CCW); //Записываем в ячейку памяти
												 PORTC.F1 = 1;
												 }
		 if (angle1 > lastangle && mark_CW == 1) {LCD_Chr(1,16,' ');//Снятие перекрута вправо
												 lastangle = 0x2000;
												 mark_CW = 0;
												 EEprom_Write(0x1D, mark_CW); //Записываем в ячейку памяти
												 PORTC.F1 = 0;
												 }
}
//-------------------------------------------------------------------------------------------------------------------------------
//Контроль перекрутов и вращение вправо
void CW_rotate_con() {
		 if (mark_CW == 0) { //Условия отключения вращения при перекруте
						 Rotate_CW(); //Вращаем по часовой стрелке
						 }
		 if (mark_CW == 1 && angle1 <= angOwerwindRight && flagSTOP == 0) {
											 Rotate_CW(); //Вращаем по часовой стрелке
											 }
		 if (mark_CW == 1 && angle1 > angOwerwindRight) {
											 RotateStop_AZ(); //Стоп
											 }
		 if (angle1 < lastangle - 5 && mark_CCW == 0) {LCD_Chr(1,16,'R');
												 mark_CW = 1;//Выставляем маркер перекрута
												 EEprom_Write(0x1D, mark_CW); //Записываем в ячейку памяти
												 PORTC.F1 = 1;
												 }
		 if (angle1 < lastangle && mark_CCW == 1) {LCD_Chr(1,16,' ');
												 lastangle = 0x00;
												 mark_CCW = 0; //Снимаем маркер перекрута
												 EEprom_Write(0x1C, mark_CCW); //Записываем в ячейку памяти
												 PORTC.F1 = 0;
												 }
}
//------------------------------------------------------------------------------------------------------------------------------
void RotateCom() { //Ручное управление повороткой
	 if (PORTD.F3 == 1 && PORTD.F2 == 0 && flagSTOP == 0) { //Вращение влево
										 CCW_rotate_con();
										 }
	 if (PORTD.F3 == 0 && PORTD.F2 == 1 && flagSTOP == 0) { //Вращение вправо
										 CW_rotate_con();
										 }
	 if (PORTD.F3 == 0 && PORTD.F2 == 0) {
										 RotateStop_AZ(); //Стоп
										 }
	 if (PORTD.F3 == 1 && PORTD.F2 == 1) {
										 RotateStop_AZ(); //Стоп
										 }
	 if (PORTD.F5 == 1 && PORTD.F6 == 0 && flagSTOP == 0) {//Вращение вверх
		 if(angle_up1 <= angMaxElevate || angle_up1 >= 0x300) {
								 RotateUp();//Крутим вверх
								 PORTC.F4 = 0;
								 }
		 if(angle_up1 > angMaxElevate && angle_up1 < angMaxElevate + 10) {
								 RotateStop_EL(); //Стоп элевация
								 PORTC.F4 = 1;
								 }
										 }
	 if (PORTD.F5 == 0 && PORTD.F6 == 0) {
										 RotateStop_EL(); //Стоп элевация
										 }
	 if (PORTD.F5 == 1 && PORTD.F6 == 1) {
										 RotateStop_EL(); //Стоп элевация
										 }
	 if (PORTD.F5 == 0 && PORTD.F6 == 1 && flagSTOP == 0) {//Вращение вниз
		 if(angle_up1 <= 0x02 || angle_up1 > 0x300) {
							 RotateStop_EL(); //Стоп
					 if(angle_up1 > 0x300) {
							 RotateUp();//Крутим вверх
							 for(steps = 1; steps < steps_EL; steps++) {//шаг
													 delay_ms(1);
													 }
										 }
							 }
		 if(angle_up1 > 0x02 && angle_up1 <= 0x300) {
							 RotateDown();//Крутим вниз
							 PORTC.F4 = 0;
							 }
										 }
			 }
//------------------------------------------------------------------------------------------------------------------------------
void RotateUpAuto() { //Вращение вверх в автоматическом режие
 if(angle_up1 <= angMaxElevate || angle_up1 >= 0x250 && flagSTOP == 0) {
								 RotateUp();//Крутим вверх
								 PORTC.F4 = 0;
								 }
 if(angle_up1 > angMaxElevate && angle_up1 < angMaxElevate + 10) {
								 RotateStop_EL(); //Стоп элевация
								 PORTC.F4 = 1;
								 }
 }
void RotateDownAuto() {//Вращение вниз в автоматическом режиме
		 if(angle_up1 > 0x02 && angle_up1 <= 0x250 && flagSTOP == 0) {
						 RotateDown();//Крутим вниз
						 PORTC.F4 = 0;
						 }
						 else {
								 RotateStop_EL(); //Стоп
						 }
		 if(angle_up1 == 0) RotateStop_EL(); //Стоп
 }
//------------------------------------------------------------------------------------------------------------------------------
void Mode_rotate() {//Переключение режима управления поворотным устройством
 if (PORTD.F7 == 1) {//Переключение в режим авто
			 moderotate = 1;
					 }
 if (PORTD.F7 == 0) {//Переключение в режим ручной
			 moderotate = 0;
					 }
}
//-------------------------------------------------------------------------------------------------------------------------------
void Read_Packet_Orbitron() { //Чтение пакета из Орбитрона
if(inputOutside == 0) {//RS232 канал 1
			 PORTC.F0 = 1;	 //Включаем чтение с компьютера
			 PORTC.F2 = 0;
					 }
if(inputOutside == 1) {//RS232 канал 2
			 PORTC.F0 = 0;	 //Включаем чтение с компьютера
			 PORTC.F2 = 1;
					 }
if(inputOutside == 2) {//RS232 канал 3
			 PORTC.F0 = 1;	 //Включаем чтение с компьютера
			 PORTC.F2 = 1;
					 }
		 for (i = 0; i < 30000; i++) { //Принимаем начало пакета
			 if(Usart_Data_Ready()) { //если байт принят
					 buffer1[0] = Usart_Read();
					 if (buffer1 [0] == 'W') { //если байт = началу пакета
						 firstbyte = 1; //устанавливаем флаг приёма остальных байтов
						 i = 30100;	 //выходим из цикла приёма 1 байта
											 }
					 if (buffer1 [0] != 'W') {
											 firstbyte = 0; //если байт != началу пакета не принимаем остальные
											 }
								 }
									 }
		 if (firstbyte == 1) {
			 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[1] = Usart_Read();
				 i = 110;
									 }
									 }
			 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[2] = Usart_Read();
				 i = 110;
									 }
									 }
		 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[3] = Usart_Read();
				 i = 110;
									 }
									 }
		 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[4] = Usart_Read();
				 i = 110;
									 }
									 }
		 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[5] = Usart_Read();
				 i = 110;
									 }
									 }
		 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[6] = Usart_Read();
				 i = 110;
									 }
									 }
		 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[7] = Usart_Read();
				 i = 110;
									 }
									 }
		 for(i = 0; i < 100; i++) {
				 if(Usart_Data_Ready()) {
				 buffer1[8] = Usart_Read();
				 i = 110;
									 }
									 }
}//Конец чтения пакета из Орбитрона
}
//-------------------------------------------------------------------------------------------------------------------------------
void Screen_handle_mode() { //Основной экран ручное управление
LCD_Chr(1,1,'A');
LCD_Chr_CP(':');
Angle_LCD_AZ();//Вывод на LCD
LCD_Chr(1,8,grad);//Градус
LCD_Chr_CP('E');
LCD_Chr_CP(':');
Angle_LCD_EL();//Вывод на LCD
LCD_Chr(1,15,grad);//Градус
}
//-------------------------------------------------------------------------------------------------------------------------------
void Screen_automatic_mode() {//Основной экран автоматическое управление
LCD_Chr(1,1,'A');
LCD_Chr_CP(':');
Angle_LCD_AZ();//Вывод на LCD
LCD_Chr(1,8,grad);//Градус
LCD_Chr_CP('E');
LCD_Chr_CP(':');
Angle_LCD_EL();//Вывод на LCD
LCD_Chr(1,15,grad);//Градус
LCD_Chr(2,2,'(');
LCD_Chr_CP(buffer1[1]);
LCD_Chr_CP(buffer1[2]);
LCD_Chr_CP(buffer1[3]);
LCD_Chr_CP(')');
LCD_Chr(2,8,' ');
LCD_Chr(2,10,'(');
LCD_Chr_CP(buffer1[6]);
LCD_Chr_CP(buffer1[7]);
LCD_Chr_CP(')');
LCD_Chr(2,15,' ');
}
void Tuning_menu_selector() {
 //Переключение менюшек настройки
if (PORTD.F5 == 0 && PORTD.F6 == 1) {
 current_menu ++;
 if (current_menu > 8) {
						 current_menu = 8;
						 }
 if (current_menu < 0) {
					 current_menu = 0;
					 }
 delay_ms(200);
								 }
 if (PORTD.F5 == 1 && PORTD.F6 == 0) {
 current_menu --;
 if (current_menu > 8) {
						 current_menu = 8;
						 }
 if (current_menu < 0) {
					 current_menu = 0;
					 }
 delay_ms(200);
								 }
}
//----------------------------------------------------------------------------------------------------------------------------
void Read_save_parameters_FLASH() {//Чтение сохранённых парметров в EEPROM
 //Читаем нулевой параметр азимута
 byte_save = EEprom_Read(0x00); //Читаем старший байт
 byte_save = byte_save << 24;
 delay_ms(30);
 byte_save1 = EEprom_Read(0x01);
 byte_save1 = byte_save1 << 16;
 delay_ms(30);
 byte_save2 = EEprom_Read(0x02);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x03);
 zeropoint = byte_save + byte_save1 + byte_save2 + byte_save3;
 delay_ms(30);
 //Читаем нулевой параметр элевации
 byte_save = EEprom_Read(0x04); //Читаем старший байт
 byte_save = byte_save << 24;
 delay_ms(30);
 byte_save1 = EEprom_Read(0x05);
 byte_save1 = byte_save1 << 16;
 delay_ms(30);
 byte_save2 = EEprom_Read(0x06);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x07);
 zeropoint_up = byte_save + byte_save1 + byte_save2 + byte_save3;
 //Читаем углы перекрута перекрут вправо
 byte_save = EEprom_Read(0x08); //Читаем старший байт
 byte_save = byte_save << 24;
 delay_ms(30);
 byte_save1 = EEprom_Read(0x09);
 byte_save1 = byte_save1 << 16;
 delay_ms(30);
 byte_save2 = EEprom_Read(0x0A);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x0B);
 angOwerwindRight = byte_save + byte_save1 + byte_save2 + byte_save3;
 angOwerwindLeft = 0x3FF - angOwerwindRight;
 //Читаем угол максимального родъёма
 byte_save = EEprom_Read(0x0C); //Читаем старший байт
 byte_save = byte_save << 24;
 delay_ms(30);
 byte_save1 = EEprom_Read(0x0D);
 byte_save1 = byte_save1 << 16;
 delay_ms(30);
 byte_save2 = EEprom_Read(0x0E);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x0F);
 angMaxElevate = byte_save + byte_save1 + byte_save2 + byte_save3;
 //Читаем угол зоны импульсного режима Азимута
 byte_save = EEprom_Read(0x10); //Читаем старший байт
 byte_save = byte_save << 24;
 delay_ms(30);
 byte_save1 = EEprom_Read(0x11);
 byte_save1 = byte_save1 << 16;
 delay_ms(30);
 byte_save2 = EEprom_Read(0x12);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x13);
 angPulseZone = byte_save + byte_save1 + byte_save2 + byte_save3;
 //Читаем угол зоны импульсного режима Элевации
 byte_save = EEprom_Read(0x18); //Читаем старший байт
 byte_save = byte_save << 24;
 delay_ms(30);
 byte_save1 = EEprom_Read(0x19);
 byte_save1 = byte_save1 << 16;
 delay_ms(30);
 byte_save2 = EEprom_Read(0x1A);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x1B);
 angPulseZone_up = byte_save + byte_save1 + byte_save2 + byte_save3;
 //Читаем значение длины импульса азимута
 byte_save2 = EEprom_Read(0x14);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x15);
 steps_AZ = byte_save + byte_save1 + byte_save2 + byte_save3 + 1;
 //Читаем значение длины импульса элевации
 byte_save2 = EEprom_Read(0x16);
 byte_save2 = byte_save2 << 8;
 delay_ms(30);
 byte_save3 = EEprom_Read(0x17);
 steps_EL = byte_save + byte_save1 + byte_save2 + byte_save3 + 1;
 //Читаем флаги перекрута
 mark_CCW = EEprom_Read(0x1C);
 if(mark_CCW == 0x01) LCD_Chr(1,16,'R'); PORTC.F1 = 1;
 if(mark_CCW == 0xFF) mark_CCW = 0; PORTC.F1 = 0;
 mark_CW = EEprom_Read(0x1D);
 if(mark_CW == 0x01) LCD_Chr(1,16,'R'); PORTC.F1 = 1;
 if(mark_CW == 0xFF) mark_CW = 0; PORTC.F1 = 0;
 //Читаем порт связи с пк
 inputOutside = EEprom_Read(0x1E);
}
//-------------------------------------------------------------------------------------------------------------------------------
void Off_alarm() {//Отключение ПУ при ошибке связи
 if(flagERR_AZ == 1 || flagERR_EL == 1) {
			 counter_alarm++;
 }
 if(counter_alarm > 10 && flagSTOP == 0) {
						 PORTD.F1 = 0;
						 delay_ms(1000);
						 PORTD.F1 = 1;
						 counter_alarm = 0;
						 flagSTOP = 1;
 }
 if(flagERR_AZ == 0 && flagERR_EL == 0) {
						 flagSTOP = 0;
 }
}
void Test_connect_rotator() { //Проверка соединения с поворотным устройством при включении контроллера
 LCD_Chr(1,1,' ');
 LCD_Chr_CP('-');
 LCD_Chr_CP('S');
 LCD_Chr_CP('Y');
 LCD_Chr_CP('S');
 LCD_Chr_CP('T');
 LCD_Chr_CP('E');
 LCD_Chr_CP('M');
 LCD_Chr_CP(' ');
 LCD_Chr_CP('T');
 LCD_Chr_CP('E');
 LCD_Chr_CP('S');
 LCD_Chr_CP('T');
 LCD_Chr_CP('-');
 LCD_Chr_CP(' ');
 LCD_Chr_CP(' ');
while(work == 0) {
 delay_ms(1000);
 Read_Angle_AZ();//Читаем угол из контроллера азимута
 delay_ms(50);
 Read_Angle_EL();//Читаем угол из контроллера элевации
 if(flagERR_AZ == 1 && flagERR_EL == 0) {
		 LCD_Chr(2,1,' ');
		 LCD_Chr_CP('N');
		 LCD_Chr_CP('o');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('A');
		 LCD_Chr_CP('Z');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('c');
		 LCD_Chr_CP('o');
		 LCD_Chr_CP('n');
		 LCD_Chr_CP('n');
		 LCD_Chr_CP('e');
		 LCD_Chr_CP('c');
		 LCD_Chr_CP('t');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP(' ');
		 work = 0;//Запрещаем работу работу ПУ
 }
 if(flagERR_AZ == 0 && flagERR_EL == 1) {
		 LCD_Chr(2,1,' ');
		 LCD_Chr_CP('N');
		 LCD_Chr_CP('o');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('E');
		 LCD_Chr_CP('L');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('c');
		 LCD_Chr_CP('o');
		 LCD_Chr_CP('n');
		 LCD_Chr_CP('n');
		 LCD_Chr_CP('e');
		 LCD_Chr_CP('c');
		 LCD_Chr_CP('t');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP(' ');
		 work = 0;//Запрещаем работу работу ПУ
 }
 if(flagERR_AZ == 1 && flagERR_EL == 1) {
		 LCD_Chr(2,1,' ');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('N');
		 LCD_Chr_CP('o');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('c');
		 LCD_Chr_CP('o');
		 LCD_Chr_CP('n');
		 LCD_Chr_CP('n');
		 LCD_Chr_CP('e');
		 LCD_Chr_CP('c');
		 LCD_Chr_CP('t');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP(' ');
		 work = 0;//Запрещаем работу работу ПУ
 }
 if(flagERR_AZ == 0 && flagERR_EL == 0) {
		 LCD_Chr(2,1,'T');
		 LCD_Chr_CP('e');
		 LCD_Chr_CP('s');
		 LCD_Chr_CP('t');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('b');
		 LCD_Chr_CP('e');
		 LCD_Chr_CP(' ');
		 LCD_Chr_CP('c');
		 LCD_Chr_CP('o');
		 LCD_Chr_CP('m');
		 LCD_Chr_CP('p');
		 LCD_Chr_CP('l');
		 LCD_Chr_CP('e');
		 LCD_Chr_CP('t');
		 LCD_Chr_CP('e');
		 delay_ms(2000);
		 work = 1;//Разрешаем работу ПУ
 }
}
}
//-------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------
void main() { //Основная прога
TRISD = 0xED; // Set pins PORTD 3-in
TRISA = 0x00;
TRISB = 0x00;
TRISC = 0x08; //Set C1 and C3 as input
TRISE = 0x00;
Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // Lcd_Init_EP5, see Autocomplete
LCD_Cmd(LCD_CLEAR);	 // Clear display
LCD_Cmd(LCD_CURSOR_OFF); // Turn cursor off
USART_init(19200); // initialize USART module
zeropoint = 0x00;
zeropoint_up = 0x00;
mark_CW = 0x00;
mark_CCW = 0x00;
moderotate = 0x00;
firstbyte = 0;
move_AZ = 0x00;//Запрещаем подстройку азимута и элевации от ПК
move_EL = 0x00;
last_angle_AZ_PC = angle_AZ_PC;
last_angle_EL_PC = angle_EL_PC;
menu_view = 0x00;
current_menu = 0;
flagERR_AZ = 0;
flagERR_EL = 0;
flagSTOP = 0;
counter_alarm = 0;
PORTD.F1 = 1;//Включаем ПУ
buffer1[1] = '-';
buffer1[2] = '-';
buffer1[3] = '-';
buffer1[5] = '-';
buffer1[6] = '-';
buffer1[7] = '-';
work = 0;//Перед тестом связи с контроллерами запрещаем работу с ПУ

Test_connect_rotator();//Проверка состояния и связи с ПУ
Read_save_parameters_FLASH();//Читаем параметры из EEPROM
Mode_rotate(); //Переключение режимов ручной/автоматический
while(work == 1)//Если тестирование прошло успешно
	 {
 if(menu_view == 0x00) {//Выводим основные экраны
	 if (PORTD.F0 == 1) {//Если кнопку МЕНЮ нажали выводим меню настроек
						 menu_view = 0x01; //устанавливаем флаг вывода меню настроек
						 }
	 if (moderotate == 0) {//Режим ручного управления
		 PORTC.F0 = 0;	 //Включаем чтение с интерфейсной платы
		 PORTC.F2 = 0;
		 Read_Angle_AZ();	 //Читаем угол поворота
		 Words_status_AZ(); //Формирование 10-битного числа угла
		 Read_Angle_EL();	 //Читаем угол подьёма
		 Words_status_EL(); //Формирование 10-битного числа угла
		 Screen_handle_mode();//Основной экран контроллера
		 RotateCom();	 //Команды вращения от кнопок AZ and EL
		 delay_ms(20);	 //Задержка между запросами подбирать !!!!
		 Mode_rotate(); //Переключение режимов ручной/автоматический
		 flagSetposition = 0;//Перекрут не устранён (для автоматического режима)
		 stat = 0;
		 Off_alarm();//Отключение ПУ при потере связи
		 if(setStartBit == 1) {
							 buffer1[1] = 0x2D;
							 buffer1[2] = '-';
							 buffer1[3] = '-';
							 buffer1[5] = '-';
							 buffer1[6] = '-';
							 buffer1[7] = '-';
							 setStartBit = 0;
							 }
						 }
//-------------------------------------------------------------------------------------------------------------------------------
	 if (moderotate == 1) {//Режим автоматического управления
		 Mode_rotate(); //Переключение режимов ручной/автоматический
		 Off_alarm();//Отключение ПУ при потере связи
		 Read_Packet_Orbitron();//Читаем пакет из Орбитрона
		 setStartBit = 1;
		 //Преобразуем значения пакета из CHAR в значения углов для сравнения
		 hundr_AZ = (buffer1[1]-48) * 100; //Сотни угла азимута из ПК
		 tens_AZ = (buffer1[2]-48) * 10; //Десятки угла азимута из ПК
		 onces_AZ = buffer1[3]-48; //Еденицы угла азимута из ПК
		 angle_AZ_PC = hundr_AZ + tens_AZ + onces_AZ;//Угол азимута принятый из ПК (шеснадцатеричный)
		 hundr_EL = (buffer1[5]-48) * 100;//Сотни угла элевации из ПК
		 tens_EL = (buffer1[6]-48) * 10;//Десятки угла элевации из ПК
		 onces_EL = buffer1[7]-48;//Единицы угла элевации из ПК
		 angle_EL_PC = hundr_EL + tens_EL + onces_EL;//Угол элевации принятный из ПК (шестнадцатеричный)
		 if(buffer1[1] == 0x2D) {//Если в буфер из ПК ничего не прочитано запрещаем вращение ПУ
				 angle_AZ_PC = 0;
				 last_angle_AZ_PC = 0;
				 move_AZ = 0x00;
				 angle_EL_PC = last_angle_EL_PC;
				 move_EL = 0x00;
		 }
		 //Проверяем изменились ли данные углов из ПК
 if(move_AZ == 0x00) {//Если угол азимута установлен
		 if(angle_AZ_PC == last_angle_AZ_PC) {//Если угол не изменился запрещаем подстройку угла
											 move_AZ = 0x00;
											 }
		 if(angle_AZ_PC != last_angle_AZ_PC) {//Если угол изменился разрешаем подстройку угла
											 move_AZ = 0x01;
											 last_angle_AZ_PC = angle_AZ_PC;
											 }
					 }
 if(move_EL == 0x00) {
		 if(angle_EL_PC == last_angle_EL_PC) {//Если угол изменился запрещаем подстройку угла
											 move_EL = 0x00;
											 }
		 if(angle_EL_PC != last_angle_EL_PC) {//Если угол изменился разрешаем подстройку угла
											 move_EL = 0x01;
											 last_angle_EL_PC = angle_EL_PC;
											 }
					 }
		 //Принимаем углы из поворотного устройства
		 PORTC.F0 = 0;	 //Включаем чтение с интерфейсной платы
		 PORTC.F2 = 0;
		 Read_Angle_AZ();	 //Читаем угол поворота
		 Words_status_AZ(); //Формирование 10-битного числа угла
		 Screen_automatic_mode();//Вывод на экран меню автоматический режим
		 Read_Angle_EL();	 //Читаем угол подьёма
		 Words_status_EL(); //Формирование 10-битного числа угла
		 Screen_automatic_mode();//Вывод на экран меню автоматический режим
		 Off_alarm();//Отключение ПУ при потере связи
		 //Преобразуем значения углов из поворотного устройства для сравнения
		 tlong = (long)angle1 * 3597;		 // covert adc reading to milivolts
			 tlong = tlong / 1023;				 // 0..1023 -> 0-5000mV
			 ch	 = tlong / 1000;				 // extract volts digit
			 hundr_AZ_rot = ch * 100;
			 ch = (tlong / 100) % 10;		 // extract 0.1 volts digit
			 tens_AZ_rot = ch * 10;					 // write ASCII digit at cursor point
			 ch = (tlong / 10) % 10;			 // extract 0.01 volts digit
			 onces_AZ_rot = ch;
			 angle_AZ_ROT = hundr_AZ_rot + tens_AZ_rot + onces_AZ_rot;
		 tlong = (long)angle_up1 * 3597;		 // covert adc reading to milivolts
			 tlong = tlong / 1023;				 // 0..1023 -> 0-5000mV
			 ch	 = tlong / 1000;				 // extract volts digit
			 hundr_EL_rot = ch * 100;
			 ch = (tlong / 100) % 10;		 // extract 0.1 volts digit
			 tens_EL_rot = ch * 10;					 // write ASCII digit at cursor point
			 ch = (tlong / 10) % 10;			 // extract 0.01 volts digit
			 onces_EL_rot = ch;
			 angle_EL_ROT = hundr_EL_rot + tens_EL_rot + onces_EL_rot;
//-------------------------------------------------------------------------------------------------------------------------------
 if(move_AZ == 0x01) {//Если угол принятый из ПК изменился
		 //Производим вращение ПУ к углу принятому из ПК
		 if(angle_AZ_ROT < angle_AZ_PC && buffer1 [0] == 'W' && mark_CW == 0 && flagSTOP == 0) {//Если угол ПУ < угла из ПК крутим вправо
										 Rotate_CW();
										 diff_angle_AZ = angle_AZ_PC - angle_AZ_ROT;
						 if(diff_angle_AZ < angPulseZone) { //Если разница между углами < докроучиваем шагами
								 for(steps = 1; steps < steps_AZ; steps++) {//шаг
									 delay_ms(1);
									 }
									 RotateStop_AZ();
											 }
										 }
		 if(angle_AZ_ROT > angle_AZ_PC && buffer1 [0] == 'W' && mark_CCW == 0 && flagSTOP == 0) {//Если угол ПУ > угла из ПК крутим влево
										 Rotate_CCW();
										 diff_angle_AZ = angle_AZ_ROT - angle_AZ_PC;
						 if(diff_angle_AZ < angPulseZone) { //Если разница между углами < докроучиваем шагами
								 for(steps = 1; steps < steps_AZ; steps++) {//шаг
									 delay_ms(1);
									 }
									 RotateStop_AZ();
											 }
										 }
		 if(mark_CCW == 1) {
							 CW_rotate_con();
						 }
		 if(mark_CW == 1) {
						 CCW_rotate_con();
						 }

		 if(angle_AZ_ROT == angle_AZ_PC || buffer1 [0] != 'W') {
										 RotateStop_AZ();
							 if(buffer1 [0] != 'W'){
										 move_AZ = 0x01;//Разрешаем подстройку угла
												 }
							 else move_AZ = 0x00;
											 }
		 }
//-------------------------------------------------------------------------------------------------------------------------------
 if(move_EL == 0x01) {//Если угол элевации приятый из ПК изменился
		 if(angle_EL_ROT < angle_EL_PC && buffer1 [0] == 'W' && flagSTOP == 0) {//Если элевация ПУ меньше чем из ПК поднимаем
										 RotateUpAuto();
										 diff_angle_EL = angle_EL_PC - angle_EL_ROT;
						 if(diff_angle_EL < angPulseZone_up) {
								 for(steps = 1; steps < steps_EL; steps++) {//шаг
													 delay_ms(1);
													 }
										 RotateStop_EL();
											 }
									 }
		 if(angle_EL_ROT > angle_EL_PC + 1 && buffer1 [0] == 'W' && flagSTOP == 0) {//Если элевация ПУ больше чем из ПК опускаем
									 RotateDownAuto();//Крутим вниз
									 diff_angle_EL = angle_EL_ROT - angle_EL_PC;
						 if(diff_angle_EL < angPulseZone_up) { //Если разница между углами < установленных градусов, докроучиваем шагами
								 for(steps = 1; steps < steps_EL; steps++) {//шаг
													 delay_ms(1);
													 }
										 RotateStop_EL();
											 }
									 }
		 if(angle_EL_ROT == angle_EL_PC && buffer1 [0] == 'W') {
										 RotateStop_EL();
										 move_EL = 0x00;//Запрещаем подстройку угла
											 }
		 if(buffer1 [0] != 'W') {
								 RotateStop_EL();
								 }
					 }
						 }
	 }//Конец ввода рабочего экрана
//-------------------------------------------------------------------------------------------------------------------------------
if(menu_view == 0x01) {//Выводим меню настройки
			 if (PORTC.F3 == 1) {//Если кнопку ESC нажали выводим рабочие экраны
						 menu_view = 0x00; //сбрасываем флаг вывода меню настроек
						 current_menu = 0; //начальня менюшка настроек
						 setOverwind = 0; //Обнулим флаг записи углов перекрута
						 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
						 setPulseZone = 0; //Обнулим флаг записи зоны толчкового режима азимута
						 setPulseZone_up = 0;//Обнулим флаг записи зоны толчкового режима элевации
							 }
			 if (current_menu == 0) {//Меню калибровки 000 Азимута
						 setOverwind = 0; //Обнулим флаг записи углов перекрута
						 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
						 LCD_Chr(1,1,'C');//Заголовок меню калибровки 000
						 LCD_Chr_CP('a');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('b');
						 LCD_Chr_CP('.');
						 LCD_Chr_CP('Z');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('r');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('p');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('t');
						 LCD_Chr(2,2,'A');
						 LCD_Chr_CP('z');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('m');
						 LCD_Chr_CP('u');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP('h');
						 LCD_Chr_CP(':');
						 //Выводим значения углов для калибровки 000
						 PORTC.F0 = 0;	 //Включаем чтение с интерфейсной платы
						 Read_Angle_AZ();	 //Читаем угол поворота
						 Words_status_AZ(); //Формирование 10-битного числа угла
						 //Выводим азимут
						 tlong = (long)angle1 * 3597;		 // covert adc reading to milivolts
						 tlong = tlong / 1023;				 // 0..1023 -> 0-5000mV
						 ch	 = tlong / 1000;				 // extract volts digit
						 LCD_Chr(2,10,48+ch);				 // write ASCII digit at 2nd row, 9th column
						 ch = (tlong / 100) % 10;		 // extract 0.1 volts digit
						 LCD_Chr_CP(48+ch);					 // write ASCII digit at cursor point
						 ch = (tlong / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch);					 // write ASCII digit at cursor point
						 LCD_Chr_CP('.');
						 ch = tlong % 10;				 // extract 0.001 volts digit
						 LCD_Chr_CP(48+ch);
						 LCD_Chr_CP(grad);//знак градус
						 delay_ms(50);
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Вращение влево
															 Rotate_CCW();
															 LCD_Chr(2,16,'L');
															 }
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Вращение вправо
															 Rotate_CW();
															 LCD_Chr(2,16,'R');
															 }
						 if (PORTD.F3 == 0 && PORTD.F2 == 0) {
										 RotateStop_AZ(); //Стоп
										 LCD_Chr(2,16,'S');
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 1) {
										 RotateStop_AZ(); //Стоп
										 LCD_Chr(2,16,'S');
															 }
						 Zerocalibr_AZ();	 //Модуль калибровки 000 AZ and EL
						 Tuning_menu_selector();//Переключатель менюшек настройки
								 }//Конец меню калибровки 000 Азимута
//--------------------------------------------------------------------------------------------------------------------------------
			 if (current_menu == 1) {//Меню калибровки 000 Элевации
						 setOverwind = 0; //Обнулим флаг записи углов перекрута
						 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
						 LCD_Chr(1,1,'C');//Заголовок меню калибровки 000
						 LCD_Chr_CP('a');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('b');
						 LCD_Chr_CP('.');
						 LCD_Chr_CP('Z');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('r');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('p');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('t');
						 LCD_Chr(2,2,'E');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('v');
						 LCD_Chr_CP('a');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(':');
						 //Выводим значения угла для калибровки
						 PORTC.F0 = 0;	 //Включаем чтение с интерфейсной платы
						 Read_Angle_EL();	 //Читаем угол подьёма
						 Words_status_EL(); //Формирование 10-битного числа угла
						 //Выодим элевацию
						 tlong1 = (long)angle_up1 * 3597;		 // covert adc reading to milivolts
						 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
						 ch1 = (tlong1 / 1000) % 10;		 // extract 0.1 volts digit
						 LCD_Chr(2,10,48+ch1);					 // write ASCII digit at cursor point
						 ch1 = (tlong1 / 100) % 10;
						 LCD_Chr_CP(48+ch1);
						 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
						 LCD_Chr_CP('.');
						 ch1 = tlong1 % 10;				 // extract 0.001 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point */
						 LCD_Chr_CP(grad);//знак градус
						 delay_ms(50);
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Вращение вверх
															 RotateUp();
															 LCD_Chr(2,16,'U');
															 }
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Вращение вниз
															 RotateDown();
															 LCD_Chr(2,16,'D');
															 }
						 if (PORTD.F3 == 0 && PORTD.F2 == 0) {
										 RotateStop_EL(); //Стоп элевация
										 LCD_Chr(2,16,'S');
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 1) {
										 RotateStop_EL(); //Стоп элевация
										 LCD_Chr(2,16,'S');
															 }
						 Zerocalibr_EL();	 //Модуль калибровки 000 AZ and EL
						 Tuning_menu_selector();//Переключатель менюшек настройки
								 }
//------------------------------------------------------------------------------------------------------------------------------
			 if (current_menu == 2) {//Меню калибровки углов перекрута азимута
						 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
						 LCD_Chr(1,1,' ');//Заголовок меню
						 LCD_Chr_CP('S');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('v');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('r');
						 LCD_Chr_CP('r');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP('a');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(' ');
						 LCD_Chr(2,1,' ');
						 LCD_Chr_CP('A');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('g');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(':');
						 //Выводим значения угла перекрута
						 tlong1 = (long)angOwerwindRight * 3600;		 // covert adc reading to milivolts
						 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
						 ch1 = (tlong1 / 1000) % 10;		 // extract 0.1 volts digit
						 LCD_Chr(2,8,48+ch1);					 // write ASCII digit at cursor point
						 ch1 = (tlong1 / 100) % 10;
						 LCD_Chr_CP(48+ch1);
						 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
						 LCD_Chr_CP('.');
						 ch1 = tlong1 % 10;				 // extract 0.001 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point */
						 LCD_Chr_CP(grad);//знак градус
		 if(setOverwind == 0) {
						 LCD_Chr(2,14,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
								 }
		 if(setOverwind == 1) {
						 LCD_Chr(2,14,'M');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('M');
								 }
						 //Изменяем значение углов перекрута кнопками
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Увеличиваем угол угол
															 angOwerwindRight++;
													 if(angOwerwindRight > 0x180) {
																					 angOwerwindRight = 0x180;
																					 }
															 angOwerwindLeft = 0x3FF - angOwerwindRight;
															 setOverwind = 0; //Обнулим флаг записи углов перекрута
															 delay_ms(100);
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Уменьшаем угол
															 angOwerwindRight--;
													 if(angOwerwindRight < 0x00) {
																				 angOwerwindRight = 0x00;
																				 }
															 angOwerwindLeft = 0x3FF - angOwerwindRight;
															 setOverwind = 0; //Обнулим флаг записи углов перекрута
															 delay_ms(100);
															 }
						 if (PORTD.F0 == 1) {//Сохраняем значения перекрута в EEPROM
											 byte_save = angOwerwindRight >> 24; //Старший байт значения
											 EEprom_Write(0x08, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angOwerwindRight >> 16; //байт после старшего
											 EEprom_Write(0x09, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angOwerwindRight >> 8; //байт перед младшим
											 EEprom_Write(0x0A, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angOwerwindRight; //байт младший
											 EEprom_Write(0x0B, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 setOverwind = 1;
											 }
						 Tuning_menu_selector();//Переключатель менюшек настройки
								 }
//-------------------------------------------------------------------------------------------------------------------------------
			 if (current_menu == 3) {//Меню калибровки Максимального угла подъёма
						 setOverwind = 0; //Обнулим флаг записи углов перекрута
						 setPulseZone = 0; //Обнулим флаг записи зоны толчкового режима
						 LCD_Chr(1,1,' ');//Заголовок меню калибровки 000
						 LCD_Chr_CP('S');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('u');
						 LCD_Chr_CP('p');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('m');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr(2,1,' ');
						 LCD_Chr_CP('A');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('g');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(':');
			 if(setMaxElevate == 0) {
						 LCD_Chr(2,14,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
								 }
			 if(setMaxElevate == 1) {
						 LCD_Chr(2,14,'M');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('M');
								 }
			 //Выводим значение максимального угла подъёма
						 //Выводим значения угла перекрута
						 tlong1 = (long)angMaxElevate * 3600;		 // covert adc reading to milivolts
						 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
						 ch1 = (tlong1 / 100) % 10;		 // extract 0.1 volts digit
						 LCD_Chr(2,8,48+ch1);					 // write ASCII digit at cursor point
						 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
						 LCD_Chr_CP('.');
						 ch1 = tlong1 % 10;				 // extract 0.001 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point */
						 LCD_Chr_CP(grad);//знак градус
						 LCD_Chr_CP(' ');
						 //Изменяем значение углов перекрута кнопками
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Увеличиваем угол угол
															 angMaxElevate++;
													 if(angMaxElevate > 0x100) {
																					 angMaxElevate = 0x100;
																					 }
															 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
															 delay_ms(100);
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Уменьшаем угол
															 angMaxElevate--;
													 if(angMaxElevate < 0x00) {
																				 angMaxElevate = 0x00;
																				 }
															 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
															 delay_ms(100);
															 }
						 if (PORTD.F0 == 1) {//Сохраняем значения максимального подъёма в EEPROM
											 byte_save = angMaxElevate >> 24; //Старший байт значения
											 EEprom_Write(0x0C, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angMaxElevate >> 16; //байт после старшего
											 EEprom_Write(0x0D, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angMaxElevate >> 8; //байт перед младшим
											 EEprom_Write(0x0E, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angMaxElevate; //байт младший
											 EEprom_Write(0x0F, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 setMaxElevate = 1;
											 }
						 Tuning_menu_selector();//Переключатель менюшек настройки
								 }
//-------------------------------------------------------------------------------------------------------------------------------
			 if (current_menu == 4) {//Меню калибровки Зоны азимута перехода к толчковому режиму
						 setOverwind = 0; //Обнулим флаг записи углов перекрута
						 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
						 setPulseZone_up = 0;
						 LCD_Chr(1,1,' ');//Заголовок меню
						 LCD_Chr_CP('S');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('p');
						 LCD_Chr_CP('u');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('s');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('z');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('e');
						 LCD_Chr(2,1,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('A');
						 LCD_Chr_CP('z');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('m');
						 LCD_Chr_CP(':');
			 if(setPulseZone == 0) {
						 LCD_Chr(2,14,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
								 }
			 if(setPulseZone == 1) {
						 LCD_Chr(2,14,'M');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('M');
								 }
			 //Выводим значение угла зоны толчкового режима
						 //Выводим значения угла перекрута
						 tlong1 = (long)angPulseZone * 3600;		 // covert adc reading to milivolts
						 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
						 ch1 = (tlong1 / 100) % 10;		 // extract 0.1 volts digit
						 LCD_Chr(2,8,48+ch1);					 // write ASCII digit at cursor point
						 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
						 LCD_Chr_CP('.');
						 ch1 = tlong1 % 10;				 // extract 0.001 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point */
						 LCD_Chr_CP(grad);//знак градус
						 LCD_Chr_CP(' ');
			 //Изменяем значение углов перекрута кнопками
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Увеличиваем угол угол
															 angPulseZone++;
													 if(angPulseZone > 0x22) {
																			 angPulseZone = 0x22;
																			 }
															 setPulseZone = 0; //Обнулим флаг записи зоны толчкового режима
															 delay_ms(100);
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Уменьшаем угол
															 angPulseZone--;
													 if(angPulseZone < 0x03) {
																			 angPulseZone = 0x03;
																			 }
															 setPulseZone = 0; //Обнулим флаг записи зоны толчкового режима
															 delay_ms(100);
															 }
			 if (PORTD.F0 == 1) {//Сохраняем значение угла начала толчкового режима в EEPROM
											 byte_save = angPulseZone >> 24; //Старший байт значения
											 EEprom_Write(0x10, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angPulseZone >> 16; //байт после старшего
											 EEprom_Write(0x11, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angPulseZone >> 8; //байт перед младшим
											 EEprom_Write(0x12, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angPulseZone; //байт младший
											 EEprom_Write(0x13, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 setPulseZone = 1;
											 }
						 Tuning_menu_selector();//Переключатель менюшек настройки
									 }
//-------------------------------------------------------------------------------------------------------------------------------
			 if (current_menu == 5) {//Меню калибровки Зоны элевации перехода к толчковому режиму
						 setOverwind = 0; //Обнулим флаг записи углов перекрута
						 setMaxElevate = 0; //Обнулим флаг записи максимального угла подъёма
						 setPulseZone = 0;
						 set_step_AZ = 0;
						 setPulseZone = 0;
						 LCD_Chr(1,1,' ');//Заголовок меню
						 LCD_Chr_CP('S');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('p');
						 LCD_Chr_CP('u');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('s');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('z');
						 LCD_Chr_CP('o');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('e');
						 LCD_Chr(2,1,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('v');
						 LCD_Chr_CP(':');
			 if(setPulseZone_up == 0) {
						 LCD_Chr(2,14,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
								 }
			 if(setPulseZone_up == 1) {
						 LCD_Chr(2,14,'M');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('M');
								 }
			 //Выводим значение угла зоны толчкового режима
						 //Выводим значения угла перекрута
						 tlong1 = (long)angPulseZone_up * 3600;		 // covert adc reading to milivolts
						 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
						 ch1 = (tlong1 / 100) % 10;		 // extract 0.1 volts digit
						 LCD_Chr(2,8,48+ch1);					 // write ASCII digit at cursor point
						 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
						 LCD_Chr_CP('.');
						 ch1 = tlong1 % 10;				 // extract 0.001 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point */
						 LCD_Chr_CP(grad);//знак градус
						 LCD_Chr_CP(' ');
			 //Изменяем значение углов перекрута кнопками
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Увеличиваем угол угол
															 angPulseZone_up++;
													 if(angPulseZone_up > 0x22) {
																			 angPulseZone_up = 0x22;
																			 }
															 setPulseZone_up = 0; //Обнулим флаг записи зоны толчкового режима
															 delay_ms(100);
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Уменьшаем угол
															 angPulseZone_up--;
													 if(angPulseZone_up < 0x03) {
																			 angPulseZone_up = 0x03;
																			 }
															 setPulseZone_up = 0; //Обнулим флаг записи зоны толчкового режима
															 delay_ms(100);
															 }
			 if (PORTD.F0 == 1) {//Сохраняем значение угла начала толчкового режима в EEPROM
											 byte_save = angPulseZone_up >> 24; //Старший байт значения
											 EEprom_Write(0x18, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angPulseZone_up >> 16; //байт после старшего
											 EEprom_Write(0x19, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angPulseZone_up >> 8; //байт перед младшим
											 EEprom_Write(0x1A, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = angPulseZone_up; //байт младший
											 EEprom_Write(0x1B, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 setPulseZone_up = 1;
											 }
						 Tuning_menu_selector();//Переключатель менюшек настройки
									 }
//------------------------------------------------------------------------------------------------------------------------------
			 if (current_menu == 6) {//Меню калибровки Длительности шага подстройки азимута в толчковом режиме
						 setPulseZone = 0;
						 set_step_EL = 0;
						 LCD_Chr(1,1,'P');//Заголовок меню
						 LCD_Chr_CP('u');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('s');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('g');
						 LCD_Chr_CP('h');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr(2,1,' ');
						 LCD_Chr_CP('A');
						 LCD_Chr_CP('z');
						 LCD_Chr_CP('i');
						 LCD_Chr_CP('m');
						 LCD_Chr_CP(':');
						 LCD_Chr(2,10,'m');
						 LCD_Chr_CP('s');
						 LCD_Chr_CP(' ');
			 if(set_step_AZ == 0) {
						 LCD_Chr(2,14,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
								 }
			 if(set_step_AZ == 1) {
						 LCD_Chr(2,14,'M');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('M');
								 }
						 //Выводим значение длительности шага в милисекундах
						 tlong1 = (long)steps_AZ * 10000;		 // covert adc reading to milivolts
						 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
						 ch1 = (tlong1 / 1000) % 10;		 // extract 0.1 volts digit
						 LCD_Chr(2,7,48+ch1);					 // write ASCII digit at cursor point
						 ch1 = (tlong1 / 100) % 10;
						 LCD_Chr_CP(48+ch1);
						 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
						 //Изменяем значение длительности шага в милисекундах
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Увеличиваем угол угол
															 steps_AZ++;
													 if(steps_AZ > 0x7FFF) {
																			 steps_AZ = 0x7FFF;
																			 }
															 set_step_AZ = 0; //Обнулим флаг записи длительности шага азимута
															 delay_ms(100);
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Уменьшаем угол
															 steps_AZ--;
													 if(steps_AZ < 0x00) {
																		 steps_AZ = 0x00;
																		 }
															 set_step_AZ = 0; //Обнулим флаг записи длительности шага азимута
															 delay_ms(100);
															 }
						 if (PORTD.F0 == 1) {//Сохраняем значение длительности шага азимута
											 byte_save = steps_AZ >> 8; //байт перед младшим
											 EEprom_Write(0x14, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = steps_AZ; //байт младший
											 EEprom_Write(0x15, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 set_step_AZ = 1;
											 }
						 Tuning_menu_selector();//Переключатель менюшек настройки
									 }
//------------------------------------------------------------------------------------------------------------------------------
			 if (current_menu == 7) {//Меню калибровки Длительности шага подстройки элевации в толчковом режиме
						 setPulseZone = 0;
						 set_step_AZ = 0;
						 set_inputOutside = 0;
						 LCD_Chr(1,1,'P');//Заголовок меню
						 LCD_Chr_CP('u');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('s');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('n');
						 LCD_Chr_CP('g');
						 LCD_Chr_CP('h');
						 LCD_Chr_CP('t');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr(2,1,' ');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('l');
						 LCD_Chr_CP('e');
						 LCD_Chr_CP('v');
						 LCD_Chr_CP(':');
						 LCD_Chr(2,10,'m');
						 LCD_Chr_CP('s');
						 LCD_Chr_CP(' ');
			 if(set_step_EL == 0) {
						 LCD_Chr(2,13,' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
						 LCD_Chr_CP(' ');
								 }
			 if(set_step_EL == 1) {
						 LCD_Chr(2,14,'M');
						 LCD_Chr_CP('E');
						 LCD_Chr_CP('M');
								 }
						 //Выводим значение длительности шага в милисекундах
						 tlong1 = (long)steps_EL * 10000;		 // covert adc reading to milivolts
						 tlong1 = tlong1 / 1023;				 // 0..1023 -> 0-5000mV
						 ch1 = (tlong1 / 1000) % 10;		 // extract 0.1 volts digit
						 LCD_Chr(2,7,48+ch1);					 // write ASCII digit at cursor point
						 ch1 = (tlong1 / 100) % 10;
						 LCD_Chr_CP(48+ch1);
						 ch1 = (tlong1 / 10) % 10;			 // extract 0.01 volts digit
						 LCD_Chr_CP(48+ch1);					 // write ASCII digit at cursor point
						 //Изменяем значение длительности шага в милисекундах
						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Увеличиваем угол угол
															 steps_EL++;
													 if(steps_AZ > 0x7FFF) {
																			 steps_EL = 0x7FFF;
																			 }
															 set_step_AZ = 0; //Обнулим флаг записи длительности шага азимута
															 delay_ms(100);
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Уменьшаем угол
															 steps_EL--;
													 if(steps_AZ < 0x00) {
																		 steps_EL = 0x00;
																		 }
															 set_step_EL = 0; //Обнулим флаг записи длительности шага азимута
															 delay_ms(100);
															 }
						 if (PORTD.F0 == 1) {//Сохраняем значение длительности шага азимута
											 byte_save = steps_EL >> 8; //байт перед младшим
											 EEprom_Write(0x16, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 byte_save = steps_EL; //байт младший
											 EEprom_Write(0x17, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 set_step_EL = 1;
											 }
						 Tuning_menu_selector();//Переключатель менюшек настройки
									 }
//-------------------------------------------------------------------------------------------------------------------------------
						 if (current_menu == 8) {//Меню выбора порта соединения с ПК
								 set_step_AZ = 0;
								 LCD_Chr(1,1,' ');//Заголовок меню
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP('S');
								 LCD_Chr_CP('e');
								 LCD_Chr_CP('t');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP('C');
								 LCD_Chr_CP('O');
								 LCD_Chr_CP('M');
								 LCD_Chr_CP('-');
								 LCD_Chr_CP('p');
								 LCD_Chr_CP('o');
								 LCD_Chr_CP('r');
								 LCD_Chr_CP('t');
								 LCD_Chr_CP(' ');
								 LCD_Chr(2,1,' ');
								 LCD_Chr_CP('P');
								 LCD_Chr_CP('o');
								 LCD_Chr_CP('r');
								 LCD_Chr_CP('t');
								 LCD_Chr_CP('-');
							 if(inputOutside == 0) {
								 LCD_Chr(2,7,'1');
								 LCD_Chr_CP('-');
								 LCD_Chr_CP('R');
								 LCD_Chr_CP('S');
								 LCD_Chr_CP('2');
								 LCD_Chr_CP('3');
								 LCD_Chr_CP('2');
							 }
							 if(inputOutside == 1) {
								 LCD_Chr(2,7,'2');
								 LCD_Chr_CP('-');
								 LCD_Chr_CP('U');
								 LCD_Chr_CP('S');
								 LCD_Chr_CP('B');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP(' ');
							 }
							 if(inputOutside == 2) {
								 LCD_Chr(2,7,'3');
								 LCD_Chr_CP('-');
								 LCD_Chr_CP('B');
								 LCD_Chr_CP('t');
								 LCD_Chr_CP('h');
								 LCD_Chr_CP(' ');
								 LCD_Chr_CP(' ');
							 }
							 if(set_inputOutside == 0) {
											 LCD_Chr(2,14,' ');
											 LCD_Chr_CP(' ');
											 LCD_Chr_CP(' ');
												 }
							 if(set_inputOutside == 1) {
											 LCD_Chr(2,14,'M');
											 LCD_Chr_CP('E');
											 LCD_Chr_CP('M');
												 }

						 if (PORTD.F3 == 0 && PORTD.F2 == 1) { //Изменяем порт связи с ПК
															 inputOutside++;
													 if(inputOutside > 2) {
																			 steps_EL = 2;
																			 }
															 set_inputOutside = 0; //Обнулим флаг записи длительности шага азимута
															 delay_ms(300);
															 }
						 if (PORTD.F3 == 1 && PORTD.F2 == 0) { //Уменьшаем угол
															 inputOutside--;
													 if(inputOutside < 0) {
																		 inputOutside = 0;
																		 }
															 set_inputOutside = 0; //Обнулим флаг записи длительности шага азимута
															 delay_ms(300);
															 }
						 if (PORTD.F0 == 1) {//Сохраняем значение порта связи с ПК
											 byte_save = inputOutside; //байт
											 EEprom_Write(0x1E, byte_save); //Записываем в ячейку памяти
											 delay_ms(30);
											 set_inputOutside = 1;
											 }
						 Tuning_menu_selector();//Переключатель менюшек настройки
						 }
					 }
}
//-------------------------------------------------------------------------------------------------------------------------------
}

Ссылка на комментарий
Поделиться на другие сайты

 Ratamahatta, запустить проект не на чем, смотрел блокнотом. Пока вижу, что расположение процедур "не по порядку", т.е. вызываемая процедура должна быть расположена выше места, откуда она вызывается. 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...