'**************************************************************** '* Name : USBPROJECT.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 22.12.2013 * '* Version : 1.0 * '* Notes : vid 6000 * '* : pid 2000 * '**************************************************************** Declare Reminders=off Device = 18F2550 Config_Start PLLDIV = 12 ' Кварц на 48 МГц CPUDIV = OSC1_PLL2 'CPUDIV = OSC2_PLL3 ; [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3] 'CPUDIV = OSC3_PLL4 ; [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4] 'CPUDIV = OSC4_PLL6 ; [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6] USBDIV = 2 FOSC = HSPLL_HS FCMEN = OFF IESO = OFF PWRT = On BOR = OFF BORV = 2 VREGEN = On WDT = OFF WDTPS = 2 MCLRE = OFF LPT1OSC = OFF PBADEN = OFF CCP2MX = OFF STVREN = OFF LVP = OFF XINST = OFF Debug = OFF Config_End ;------------------------------------------------------------------------------- Xtal = 48 USB_Descriptor = "USBProjectDESC.inc" USBIn_Auto_Poll = On USBOut_Auto_Poll = On ' параметры USB Buffer (максимальное передаваемое и принимаемое значение до 8 байт) Symbol USBBufferSizeMax = 8 Symbol USBBufferSizeTX = 8 Symbol USBBufferSizeRX = 8 Dim USBBuffer[USBBufferSizeMax] As Byte 'переменные для преобразования Dim USB_BUFFER As String * 20 'USB буффер (строка которая содержит 20 символов[максимальное кол-во символов 255]) Dim USB_BUFFERin As String * 20 Dim AD_RESULT As Word ' результат преобразования АЦП Dim VALUE As Word ' Dim VOLTS As Byte 'переменные для преобразования Dim MILLIVOLTS As Byte ' Dim MILLIVOLTS0 As Byte Dim MILLIVOLTS1 As Byte Dim N As Byte Dim TT As Byte ' some useful flags... Dim PP0 As Byte System ' USBPOLL status return Symbol CARRY_FLAG = STATUS.0 ' high if microcontroller does not have control over the buffer Symbol ATTACHED_STATE = 6 ' is USB attached ' ************************************************************ ' * main program loop - remember, you must keep the USB * ' * connection alive with a call to USBPoll, USBIn or USBOut * ' * every couple of milliseconds or so * ' ************************************************************ GoSub AttachToUSB 'настроим АЦП TRISA.0=1 'порт А.0 на вход TRISA.1=1 'порт А.1 на вход TRISB=%00000000 'ADCON1=%10001110 'как аналоговый вход AN0 ADCON1=%10001101 'как аналоговый вход AN1, AN0 ADCON2=%10000000 DelayMS 100 ProgramLoop: AD_RESULT=ADIn 0 ' читаем с АЦП ' N=0 GoSub DoUSBOut ' передаем значение АЦП на ПК ' AD_RESULT=ADIn 1 ' N=1 ' GoSub DoUSBOut GoSub DoUSBIn 'PORTA.2=1 'DelayMS 500 'PORTA.2=0 'DelayMS 500 GoTo ProgramLoop ' ************************************************************ ' * прием данных и запись в буфер USB * ' ************************************************************ 'при приеме 35 или 36 зажигаем соответствующий пин порта DoUSBIn: USBIn 1, USB_BUFFERin, USBBufferSizeRX, DoUSBIn1 DoUSBIn1: TT=USB_BUFFERin[5] If TT=35 Then PORTB.0=1: PORTB.1=0 '$23 или 35 If TT=36 Then PORTB.1=1: PORTB.0=0 '$24 или 36 Return ' ************************************************************ ' * передача данных из буфера USB * ' ************************************************************ DoUSBOut: VALUE=((AD_RESULT*/500)>>2) VOLTS=VALUE/100 VOLTS=Dig VOLTS, 0 MILLIVOLTS=VALUE//100 MILLIVOLTS0=Dig MILLIVOLTS, 1 MILLIVOLTS1=Dig MILLIVOLTS, 0 USB_BUFFER= N + VOLTS + "." + MILLIVOLTS0 + MILLIVOLTS1 USBOut 1, USB_BUFFER, USBBufferSizeTX, DoUSBOut1 DoUSBOut1: Return ' ************************************************************ ' * wait for USB interface to attach * ' ************************************************************ AttachToUSB: Repeat USBPoll Until PP0 = ATTACHED_STATE Return