// устройство и частота Device = 18F4550 Clock = 48 // настроечные фьюсы Config PLLDIV = 5, CPUDIV = OSC1_PLL2, USBDIV = 2, FOSC = HSPLL_HS, VREGEN = ON // настройки для LCD #option LCD_DATA = PORTD.4 #option LCD_RS = PORTD.1 #option LCD_EN = PORTD.0 '#option LCD_RW = PORTD.2 // подключаем дескриптор сгенерированный EasyHID #option USB_DESCRIPTOR = "HEXSAPOD3XV10Desc" // импортируем библиотеки Include "ADC.bas" // ADC Include "convert.bas" // Конвертирование данных Include "LCD.bas" // LCD алфавитно-цифровой Include "usbhid.bas" // HID // читаем значение канала АЦП и преобразовываем значение 0 - 5 Вольт... Function ADInAsVolt(Numn_Ch As Byte) As Word result = (ADC.Read(Numn_Ch) + 1) * 500 / 1024 End Function Dim Buffer(64) As Byte // буффер для приема-отправки через USB Dim LED As PORTD.7 // светодиоды Dim KEY1 As PORTC.0 // Кнопка 1 Dim KEY2 As PORTC.1 // Кнопка 2 Dim M1 As PORTD.6 Dim M2 As PORTD.5 Dim M3 As PORTD.4 Dim DIRx As PORTC.7 Dim DIRy As PORTC.6 Dim DIRz As PORTD.3 Dim X As Word // ПЕРЕМЕННАЯ ОСИ Х Dim Y As Word // ПЕРЕМЕННАЯ ОСИ Y Dim Z As Word // ПЕРЕМЕННАЯ ОСИ Z Dim T As Byte Dim Xon As Bit Dim Yon As Bit Dim Zon As Bit T = 20 X = 0 Y = 0 Z = 0 // настройка портов ADCON1 = $07 // PORTE цифровой TRISA.0 = 1 // AN0, AN1 вход TRISA.1 = 1 ADCON1.7 = 1 // AN0, AN1 аналоговые входа TRISB=0 // PORTB выход TRISC=0 // PORTC PORTE=0 // очищаем PORTE TRISD.3 = 0 DelayMS (500) // задержка перед старотом для правильной настройки портов и LCD LCD.Cls // все ясно, очистка LCD LED = 1 LCD.WriteAt(1,1,"Test") While true DIRx = 0 DIRy = 0 DIRz = 0 // Соединение через USB... Repeat Service Until Attached //********************************************************************************** // Основная программа // Если есть новые данные, то принимаем и обрабатываем If DataAvailable Then // если есть новые данные из компа ReadArray(Buffer,64) // читаем данные из компа // Обновляем светодиоды LED=Buffer(22) ' // X = Buffer(1)*256+Buffer(2), ' Y = Buffer(3)*256+Buffer(4) ' Z = Buffer(5)*256+Buffer(6) ' X = Buffer(1)*256+Buffer(2) Y.byte1=Buffer(3) Y.byte0=Buffer(4) Z.byte1=Buffer(5) Z.byte0=Buffer(6) X.byte1=Buffer(1) X.byte0=Buffer(2) DIRx = Buffer(7) DIRy = Buffer(8) DIRz = Buffer(9) T = Buffer(10) EndIf If X>0 Then Xon=1 // где Xon флаг запуска мотора, то же для других End If If Y>0 Then Yon=1 End If If Z>0 Then Zon=1 End If If Xon=1 Then M1 = 1 Dec(X) If X=0 Then Xon=0 End If End If If Yon=1 Then M2 = 1 Dec(Y) If Y=0 Then Yon=0 End If End If If Zon=1 Then M3 = 1 Dec(Z) If Z=0 Then Zon=0 End If End If DelayMS(T) M1=0 M2=0 M3=0 // Данные в комп // Подготавливаем данные Buffer(0)=0 // на свякий пожарный чиcтим перед записью значений Buffer(0).0=Not KEY1 // бит 0 значение кнопки 1 (Инверсия) Buffer(0).1=Not KEY2 // бит 1 значение кнопки 2 (Инверсия) // отправляем в комп WriteArray(Buffer,64) // Проверяем соединение с USB Service Wend