| uart | 
| 
				
			 | 
| 
| Lelik54 | Дата: Понедельник, 18.02.2013, 09:26 | Сообщение # 1 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | Учу purebasic для общего развития и всяких полезностей дома и в гараже.взял за основу статью Управляем микроконтроллером с ПК по UART,и начал мудрить.на контроллер прикрутил ацп,а принять данные могу только в EditorGadget,там всё правильно отображается,а вот в StringGadget и ProgressBarGadget показания неправильные. Код #COM_Port = 2 ;Идентификатор COM порта.  ;Процедура открытия порта. выбранного из списка
 Procedure Select_ComPort()
 Protected Port.s, Text.s, Color
 
 If IsSerialPort(#COM_Port) ;С таким ИД уже открыт порт.
 CloseSerialPort(#COM_Port)  ;Закрываем его.
 EndIf
 
 Port = GetGadgetText(3) ;Тут открываем порт с необходимыми настройками
 If OpenSerialPort(#COM_Port,Port,19200,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,255,255)
 Text="Порт "+Port+" открыт" : Color=RGB(46, 137, 36)
 Else
 Text="Не удалось открыть порт "+Port : Color=RGB(255,0,0)
 EndIf
 SetGadgetText(5, Text)
 SetGadgetColor(5, #PB_Gadget_FrontColor, Color)
 EndProcedure
 ;Процедура приема данных
 Procedure InData()
 Protected InBytes
 
 
 If IsSerialPort(#COM_Port)  ;С таким ИД порт открыт.
 InBytes = AvailableSerialPortInput(#COM_Port)
 If InBytes>0  ;Получены данные.
 Protected Dim InBuffer.a(InBytes), RealInBytes
 
 RealInBytes = ReadSerialPortData(#COM_Port, @InBuffer(), InBytes)
 If RealInBytes>0
 AddGadgetItem(4, -1, PeekS(@InBuffer(), InBytes,#PB_Ascii ))
 
 SetGadgetState   (70,(InBytes) )
 SetGadgetText(40,Str(InBytes))
 EndIf
 EndIf
 EndIf
 EndProcedure
 
 ;Процедура передачи данных
 Procedure ComOut(Send_data.s)
 
 If IsSerialPort(#COM_Port) ;если порт открыт
 ComWrite(SerialPortID(#COM_Port),@send_data,1) ;Шлем данные из переменной Send_data
 Else
 ;Выводим сообщение об ошибке.
 MessageRequester("Ошибка","Текущий порт не доступен!",16)
 EndIf
 
 EndProcedure
 
 If OpenWindow(0, 200, 200, 500, 590, "Не понятно что это???",#PB_Window_MinimizeGadget | #PB_Window_SizeGadget) ;Создаем окно программы
 ButtonGadget(1, 90, 380, 110, 35, "Зажечь", #PB_Button_Default) ;Кнопка "Зажечь"
 ButtonGadget(10, 90, 420, 110, 35, "Зажечь 2", #PB_Button_Default) ;Кнопка "Зажечь 2"
 TextGadget(2,10,310,25,15,"Порт") ;Выводим в окно надпись "Порт".
 ComboBoxGadget(3, 10, 325, 70, 21, #PB_ComboBox_Editable) ;гаджет выпадающего списка
 For i=1 To 3 ;создаем список от 1 до 3 с возможными портами для открытия
 AddGadgetItem(3,-1,"COM"+Str(i))
 Next i
 AddWindowTimer(0, 123, 250)
 StringGadget(40, 330, 40, 100, 100, "",  #PB_String_ReadOnly)
 
 ;SetGadgetFont(40,FontID(1))
 
 SetGadgetState(3,0) ;Делаем активным нулевой пункт выпадающего списка.
 EditorGadget(4, 8, 10, 305, 280,#PB_Editor_ReadOnly)
 TextGadget(5,10,350,200,15,"")  ;Здесь будет отображаться результат открытия порта.
 StringGadget(12, 70,  480, 200, 20, "")
 ButtonGadget(6, 200, 380, 110, 35, "Погасить", #PB_Button_Default) ;Кнопка "Погасить"
 ButtonGadget(11, 200, 420, 110, 35, "Погасить 2", #PB_Button_Default) ;Кнопка "Погасить"
 Select_ComPort()
 ProgressBarGadget(70, 330, 230,  150, 30, 0, 1000)
 
 ; ProgressBarGadget(23,  10, 480, 250,  30, 0, 100)
 ;   SetGadgetState   (0, 20 )   ;  set 1st progressbar (ID = 0) to 50 of 100
 Repeat
 
 Event = WaitWindowEvent()
 If Event = #PB_Event_Timer And EventTimer() = 123
 InData()
 
 EndIf
 
 ;InData()  ;принимаем данные из UART все время пока работает программа
 If Event=#PB_Event_Gadget  ;если произошло срабатывание гаджета
 Gadget = EventGadget ( )  ;узнаем какой гаджет был активирован
 If Gadget=1  ;если нажата кнопка "Зажечь"
 ComOut("A")  ;Переходим на процедуру передачи байта.
 :InData()
 ElseIf Gadget=10  ;если нажата кнопка "Зажечь2"
 ComOut("K")  ;Переходим на процедуру передачи байта.
 ;InData()
 ElseIf Gadget=3  ;если был активирован выпадающий список
 ComboBox.s=GetGadgetText(3)  ;Считываем текст из текущего пункта выпадающего списка.
 ; Переходим на процедуру, закрывающую текущий порт и открывающую выбранный.
 Select_ComPort()
 EndIf
 ;InData()
 If Gadget=6  ;нажата кнопка "Погасить"
 ComOut("B")  ;Переходим на процедуру передачи байта.
 ;InData()
 ElseIf Gadget=11  ;нажата кнопка "Погасить2"
 ComOut("L")  ;Переходим на процедуру передачи байта.
 ;InData()
 EndIf
 EndIf
 ;EndIf
 
 ;EndIf
 Until Event=#PB_Event_CloseWindow
 
 EndIf
 End
предпологаю что в inbytes зарыто животное,но не могу понять.направте в пожалуйсто в нужное русло.
 
 
 |  
 |  |  |  | 
| 
| 301992 | Дата: Понедельник, 18.02.2013, 18:08 | Сообщение # 2 |  | Группа: Проверенные Сообщений: 47 
 Статус: Offline | Есть интересная программа Hiasm. Это своего рода конструктор для написания программ как для ПК, так и для МК. На сайте  www.Hiasm.com  можно почитать подробнее. Я с ее помощью, в свое время написал хороший диплом  . 
 Так в ней работа с COM и USB, очень просто осуществляется. Вот один из примеров :http://www.getchip.net/posts/082-avtomat-upravleniya-nagruzkami-apdejjt-gcn_effector_12/.  Там для этой оболочки, хороший человек начал делать конструктор для МК, но на выходе или готовый хекс или код на Си. Есть желание написать данный конструкор, но с компилятором Bascom. Начал заниматься, но времени нехватает. если есть интерес, то можно всем хором написать данный конструктор и это облегчит знакомство с МК.
 
 
 |  
 |  |  |  | 
| 
| exersizze | Дата: Вторник, 19.02.2013, 10:12 | Сообщение # 3 |  |   Группа: Администраторы Сообщений: 720 
 Статус: Offline | 301992, это что-то наподобе Algorithm Builder'a? Для асма подобные графические оболочки еще более менее полезны, а вот для баскома это лишнее, имхо. Он и без того предельно прост в освоении. 
 
 |  
 |  |  |  | 
| 
| 301992 | Дата: Вторник, 19.02.2013, 11:02 | Сообщение # 4 |  | Группа: Проверенные Сообщений: 47 
 Статус: Offline | Это не Algorithm Builder, а гараздо удобнее. Имел знакомство с Algorithm Builder, так вообще ничего не понял. Здесь все предельно понятно. По поводу Баскома я согласен, он прост в освоении. Надо только немного времени и терпения. Hiasm альтернатива С++, да еще какая. Я голову сломал с этими закорючками, пока не наткнулся на Hiasm. Последний можно использовать для написания программ для ПК (WINDA, LINUX) или для Андроида, для сопряжения своего детища с ними. 
 
 |  
 |  |  |  | 
| 
| Lelik54 | Дата: Вторник, 19.02.2013, 11:35 | Сообщение # 5 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | Я не силен в программировании,поэтому вопросы и задаю.Кто ни будь,что ни будь подскажет??? 
 
 |  
 |  |  |  | 
| 
| exersizze | Дата: Вторник, 19.02.2013, 12:56 | Сообщение # 6 |  |   Группа: Администраторы Сообщений: 720 
 Статус: Offline | Lelik54, думается мне что значение не той переменной пытаетесь использовать. В InBytes лежит всего-навсего кол-во байт, которые находятся в буфере. Попробуйте использовать InBuffer 
 
 |  
 |  |  |  | 
| 
| Петр | Дата: Вторник, 19.02.2013, 13:12 | Сообщение # 7 |  | Группа: Проверенные Сообщений: 47 
 Статус: Offline | Нужно было еще написать что туда должно выводится, а то догадаться сложно.Цитата (Lelik54) в StringGadget и ProgressBarGadget показания неправильныеДопустим, что в StringGadget() должен отображаться текущий принятый текст, а что должно быть в ProgressBarGadget(), даже представить не могу.
 
 Код #COM_Port = 2 ;Идентификатор COM порта.    ;Процедура открытия порта. выбранного из списка
 Procedure Select_ComPort()
 Protected Port.s, Text.s, Color
 
 If IsSerialPort(#COM_Port) ;С таким ИД уже открыт порт.
 CloseSerialPort(#COM_Port)  ;Закрываем его.
 EndIf
 
 Port = GetGadgetText(3) ;Тут открываем порт с необходимыми настройками
 If OpenSerialPort(#COM_Port,Port,19200,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,255,255)
 Text="Порт "+Port+" открыт" : Color=RGB(46, 137, 36)
 Else
 Text="Не удалось открыть порт "+Port : Color=RGB(255,0,0)
 EndIf
 SetGadgetText(5, Text)
 SetGadgetColor(5, #PB_Gadget_FrontColor, Color)
 EndProcedure
 ;Процедура приема данных
 Procedure InData()
 Protected InBytes
 
 
 If IsSerialPort(#COM_Port)  ;С таким ИД порт открыт.
 InBytes = AvailableSerialPortInput(#COM_Port)
 If InBytes>0  ;Получены данные.
 Protected Dim InBuffer.a(InBytes+4), RealInBytes
 
 RealInBytes = ReadSerialPortData(#COM_Port, @InBuffer(), InBytes)
 If RealInBytes>0
 AddGadgetItem(4, -1, PeekS(@InBuffer(), InBytes,#PB_Ascii ))
 
 SetGadgetState(70, InBytes)
 SetGadgetText(40, PeekS(@InBuffer(), InBytes,#PB_Ascii ))
 EndIf
 EndIf
 EndIf
 EndProcedure
 
 ;Процедура передачи данных
 Procedure ComOut(Send_data.s)
 
 If IsSerialPort(#COM_Port) ;если порт открыт
 WriteSerialPortData(#COM_Port,@send_data,1) ;Шлем данные из переменной Send_data
 Else
 ;Выводим сообщение об ошибке.
 MessageRequester("Ошибка","Текущий порт не доступен!",16)
 EndIf
 
 EndProcedure
 
 If OpenWindow(0, 200, 200, 500, 590, "Не понятно что это???",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered) ;Создаем окно программы
 ButtonGadget(1, 90, 380, 110, 35, "Зажечь", #PB_Button_Default) ;Кнопка "Зажечь"
 ButtonGadget(10, 90, 420, 110, 35, "Зажечь 2", #PB_Button_Default) ;Кнопка "Зажечь 2"
 TextGadget(2,10,310,25,15,"Порт") ;Выводим в окно надпись "Порт".
 ComboBoxGadget(3, 10, 325, 70, 21, #PB_ComboBox_Editable) ;гаджет выпадающего списка
 For i=1 To 3 ;создаем список от 1 до 3 с возможными портами для открытия
 AddGadgetItem(3,-1,"COM"+Str(i))
 Next i
 AddWindowTimer(0, 123, 250)
 StringGadget(40, 330, 40, 100, 100, "",  #PB_String_ReadOnly)
 
 ;SetGadgetFont(40,FontID(1))
 
 SetGadgetState(3,0) ;Делаем активным нулевой пункт выпадающего списка.
 EditorGadget(4, 8, 10, 305, 280,#PB_Editor_ReadOnly)
 TextGadget(5,10,350,200,15,"")  ;Здесь будет отображаться результат открытия порта.
 StringGadget(12, 70,  480, 200, 20, "")
 ButtonGadget(6, 200, 380, 110, 35, "Погасить", #PB_Button_Default) ;Кнопка "Погасить"
 ButtonGadget(11, 200, 420, 110, 35, "Погасить 2", #PB_Button_Default) ;Кнопка "Погасить"
 Select_ComPort()
 ProgressBarGadget(70, 330, 230,  150, 30, 0, 1000)
 
 ; ProgressBarGadget(23,  10, 480, 250,  30, 0, 100)
 ;   SetGadgetState   (0, 20 )   ;  set 1st progressbar (ID = 0) to 50 of 100
 Repeat
 
 Event = WaitWindowEvent()
 If Event = #PB_Event_Timer And EventTimer() = 123
 InData()
 
 EndIf
 
 ;InData()  ;принимаем данные из UART все время пока работает программа
 If Event=#PB_Event_Gadget  ;если произошло срабатывание гаджета
 Gadget = EventGadget ( )  ;узнаем какой гаджет был активирован
 If Gadget=1  ;если нажата кнопка "Зажечь"
 ComOut("A")  ;Переходим на процедуру передачи байта.
 :InData()
 ElseIf Gadget=10  ;если нажата кнопка "Зажечь2"
 ComOut("K")  ;Переходим на процедуру передачи байта.
 ;InData()
 ElseIf Gadget=3  ;если был активирован выпадающий список
 ComboBox.s=GetGadgetText(3)  ;Считываем текст из текущего пункта выпадающего списка.
 ; Переходим на процедуру, закрывающую текущий порт и открывающую выбранный.
 Select_ComPort()
 EndIf
 ;InData()
 If Gadget=6  ;нажата кнопка "Погасить"
 ComOut("B")  ;Переходим на процедуру передачи байта.
 ;InData()
 ElseIf Gadget=11  ;нажата кнопка "Погасить2"
 ComOut("L")  ;Переходим на процедуру передачи байта.
 ;InData()
 EndIf
 EndIf
 ;EndIf
 
 ;EndIf
 Until Event=#PB_Event_CloseWindow
 
 EndIf
 End
 
 В хайасме некоторые вещи реализованы не очень логично и если не найдется необходимого компонента (например, на данный момент, нет компонента для работы с USB HID), то вы без ЯП не сможете реализовать задумку.Цитата (301992) Я голову сломал с этими закорючками, пока не наткнулся на Hiasm
 
 
 
 Сообщение отредактировал Петр - Вторник, 19.02.2013, 13:15 |  
 |  |  |  | 
| 
| Lelik54 | Дата: Вторник, 19.02.2013, 14:26 | Сообщение # 8 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | и в StringGadget() и ProgressBarGadget() должно отображаться напряжение снятое с АЦП.одно и тоже,просто для разной визуализации.когда использую переменную InBuffer ,на выходе отображается 3747728,а в EditorGadget как положено 560-это то что передает atmega.ни к чему привязать то,не получается эти 7 цифр. 
 
 |  
 |  |  |  | 
| 
| Петр | Дата: Вторник, 19.02.2013, 16:20 | Сообщение # 9 |  | Группа: Проверенные Сообщений: 47 
 Статус: Offline | В каком виде эти данные передает MK?Цитата (Lelik54) должно отображаться напряжение снятое с АЦПХотя бы скопируйте то, что выводится в EditorGadget, а там посмотрим.
 
 
 |  
 |  |  |  | 
| 
| Lelik54 | Дата: Вторник, 19.02.2013, 16:38 | Сообщение # 10 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | Петр,могу avr код выложить,но там обычно,A=getAdc() Код 
 
 [/color]Код [color=#828282]$regfile = "M8535.dat"[/color][color=#828282]$crystal = 8000000[/color][color=#828282]$baud = 19200[/color] [color=#828282]Config Porta.1 = Output[/color][color=#828282]Config Porta.3 = Output[/color][color=#828282]Config Porta.4 = Input[/color][color=#828282]$lib "lcd4.lbx"[/color][color=#828282]Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7[/color][color=#828282]Config Lcd = 16 * 2                    'подключаем светодиод[/color][color=#828282]Led Alias Porta.3[/color][color=#828282]Led1 Alias Porta.1[/color][color=#828282]Config Adc = Single , Prescaler = Auto , Reference = Avcc[/color] [color=#828282]'объявляем подпрограммы[/color][color=#828282]Declare Sub Getline(s As String)                            'чтение данных из буфера[/color][color=#828282]Declare Sub Del_buffer()                    'очистка буфера[/color][color=#828282]Dim F As Byte[/color][color=#828282]Dim R As Byte[/color][color=#828282]Dim S As String * 1[/color][color=#828282]Dim B As Byte[/color][color=#828282]Dim A As Word[/color][color=#828282]Dim P As Byte[/color]
 [color=#828282]Start Adc[/color][color=#828282]Cursor Off[/color][color=#828282]Cls[/color][color=#828282]Do[/color][color=#828282]If F = 10 Then[/color]
 [color=#828282]F = 0[/color][color=#828282]End If[/color][color=#828282]F = F + 1[/color][color=#828282]A = Getadc(5)[/color]
 [color=#828282]Waitms 100[/color][color=#828282]R = Ischarwaiting()                    'проверка наличия команды в буфере UART[/color] [color=#828282]If R = 1 Then                    'если в буфере что-то есть переменной R присвоится значение 1[/color]  [color=#828282]Getline S                    'вытаскиваем содержимое буфера в переменную S[/color]   [color=#828282]If S = "A" Then                    'если там символ "А"[/color]    [color=#828282]Print "Свет1 включен"                    'отошлем сообщение[/color]    [color=#828282]Led = 1                    'и включим светодиод[/color]   [color=#828282]Elseif S = "B" Then                    'если там символ "В"[/color]    [color=#828282]Print "Свет1 выключен"                    'сообщим о выключении[/color]    [color=#828282]Led = 0[/color]                    [color=#828282]'выключаем светодиод[/color]   [color=#828282]End If[/color]   [color=#828282]If S = "K" Then                    'если там символ "А"[/color]    [color=#828282]Print "Свет2 включен"                    'отошлем сообщение[/color]    [color=#828282]Led1 = 1                    'и включим светодиод[/color]   [color=#828282]Elseif S = "L" Then                    'если там символ "В"[/color]    [color=#828282]Print "Свет 2 выключен"                    'сообщим о выключении[/color]    [color=#828282]Led1 = 0                    'выключаем светодиод[/color]   [color=#828282]End If[/color]   [color=#828282]'End If[/color]  [color=#828282]Del_buffer                    'если в буфере что-то другое очищаем его[/color] [color=#828282]End If[/color][color=#828282]' Debounce Pind.3 , 1 , Rr[/color] [color=#828282]If Pind.3 = 1 Then[/color] [color=#828282]Waitms 100[/color] [color=#828282]Print "сработал концевик"[/color] [color=#828282]End If[/color]
 [color=#828282]If F = 5 Then[/color][color=#828282]' Print "b"[/color][color=#828282]Print A[/color] [color=#828282]End If[/color] [color=#828282]Locate 1 , 1[/color] [color=#828282]Lcd A[/color] [color=#828282]Locate 2 , 1[/color] [color=#828282]Lcd F[/color] [color=#828282]Locate 1 , 5[/color]    [color=#828282]Lcd S[/color]
 [color=#828282]Loop[/color][color=#828282]End[/color]
 [color=#828282]'подпрограмма для разбора сообщения c UART[/color][color=#828282]'=========================================[/color][color=#828282]Sub Getline(s As String)[/color][color=#828282]S = ""[/color][color=#828282]Do[/color] [color=#828282]B = Inkey()[/color]                    [color=#828282]'берем символ из буфера в формате ASCII[/color] [color=#828282]Select Case B[/color]  [color=#828282]Case 0 : Exit Do                    'если дальше буфер пуст - выходим из цикла[/color]  [color=#828282]Case 10 : If S <> "" Then Exit Do                         'конец строки, значит выходим из цикла[/color]  [color=#828282]Case Else : If B > 31 Then S = S + Chr(b)                 'составляем строку[/color] [color=#828282]End Select[/color][color=#828282]Loop[/color][color=#828282]End Sub[/color]
 [color=#828282]'очистка буфера UART[/color][color=#828282]'===================[/color][color=#828282]Sub Del_buffer()[/color] [color=#828282]Do[/color] [color=#828282]B = Inkey()                    'кладем в переменную "В" данные из буфера[/color] [color=#828282]Loop Until B = 0                    'выходим из цикла когда в переменную попадет 0 (буфер пуст)[/color][color=#828282]End Sub[/color][color=#828282]'Rr:[/color][color=#828282]'Set Porta.3[/color][color=#828282]'Print "butt"[/color][color=#828282]'Return
 
 |  
 |  |  |  | 
| 
| Lelik54 | Дата: Вторник, 19.02.2013, 16:39 | Сообщение # 11 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | как то коряво получилось выложить 
 
 |  
 |  |  |  | 
| 
| Lelik54 | Дата: Вторник, 19.02.2013, 16:41 | Сообщение # 12 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | Код Код [color=#828282]$regfile = "M8535.dat"[/color][color=#828282]$crystal = 8000000[/color][color=#828282]$baud = 19200[/color] [color=#828282]Config Porta.1 = Output[/color][color=#828282]Config Porta.3 = Output[/color][color=#828282]Config Porta.4 = Input[/color][color=#828282]$lib "lcd4.lbx"[/color][color=#828282]Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7[/color][color=#828282]Config Lcd = 16 * 2                    'подключаем светодиод[/color][color=#828282]Led Alias Porta.3[/color][color=#828282]Led1 Alias Porta.1[/color][color=#828282]Config Adc = Single , Prescaler = Auto , Reference = Avcc[/color] [color=#828282]'объявляем подпрограммы[/color][color=#828282]Declare Sub Getline(s As String)                            'чтение данных из буфера[/color][color=#828282]Declare Sub Del_buffer()                    'очистка буфера[/color][color=#828282]Dim F As Byte[/color][color=#828282]Dim R As Byte[/color][color=#828282]Dim S As String * 1[/color][color=#828282]Dim B As Byte[/color][color=#828282]Dim A As Word[/color][color=#828282]Dim P As Byte[/color]
 [color=#828282]Start Adc[/color][color=#828282]Cursor Off[/color][color=#828282]Cls[/color][color=#828282]Do[/color][color=#828282]If F = 10 Then[/color]
 [color=#828282]F = 0[/color][color=#828282]End If[/color][color=#828282]F = F + 1[/color][color=#828282]A = Getadc(5)[/color]
 [color=#828282]Waitms 100[/color][color=#828282]R = Ischarwaiting()                    'проверка наличия команды в буфере UART[/color] [color=#828282]If R = 1 Then                    'если в буфере что-то есть переменной R присвоится значение 1[/color]  [color=#828282]Getline S                    'вытаскиваем содержимое буфера в переменную S[/color]   [color=#828282]If S = "A" Then                    'если там символ "А"[/color]    [color=#828282]Print "Свет1 включен"                    'отошлем сообщение[/color]    [color=#828282]Led = 1                    'и включим светодиод[/color]   [color=#828282]Elseif S = "B" Then                    'если там символ "В"[/color]    [color=#828282]Print "Свет1 выключен"                    'сообщим о выключении[/color]    [color=#828282]Led = 0[/color]                    [color=#828282]'выключаем светодиод[/color]   [color=#828282]End If[/color]   [color=#828282]If S = "K" Then                    'если там символ "А"[/color]    [color=#828282]Print "Свет2 включен"                    'отошлем сообщение[/color]    [color=#828282]Led1 = 1                    'и включим светодиод[/color]   [color=#828282]Elseif S = "L" Then                    'если там символ "В"[/color]    [color=#828282]Print "Свет 2 выключен"                    'сообщим о выключении[/color]    [color=#828282]Led1 = 0                    'выключаем светодиод[/color]   [color=#828282]End If[/color]   [color=#828282]'End If[/color]  [color=#828282]Del_buffer                    'если в буфере что-то другое очищаем его[/color] [color=#828282]End If[/color][color=#828282]' Debounce Pind.3 , 1 , Rr[/color] [color=#828282]If Pind.3 = 1 Then[/color] [color=#828282]Waitms 100[/color] [color=#828282]Print "сработал концевик"[/color] [color=#828282]End If[/color]
 [color=#828282]If F = 5 Then[/color][color=#828282]' Print "b"[/color][color=#828282]Print A[/color] [color=#828282]End If[/color] [color=#828282]Locate 1 , 1[/color] [color=#828282]Lcd A[/color] [color=#828282]Locate 2 , 1[/color] [color=#828282]Lcd F[/color] [color=#828282]Locate 1 , 5[/color]    [color=#828282]Lcd S[/color]
 [color=#828282]Loop[/color][color=#828282]End[/color]
 [color=#828282]'подпрограмма для разбора сообщения c UART[/color][color=#828282]'=========================================[/color][color=#828282]Sub Getline(s As String)[/color][color=#828282]S = ""[/color][color=#828282]Do[/color] [color=#828282]B = Inkey()[/color]                    [color=#828282]'берем символ из буфера в формате ASCII[/color] [color=#828282]Select Case B[/color]  [color=#828282]Case 0 : Exit Do                    'если дальше буфер пуст - выходим из цикла[/color]  [color=#828282]Case 10 : If S <> "" Then Exit Do                         'конец строки, значит выходим из цикла[/color]  [color=#828282]Case Else : If B > 31 Then S = S + Chr(b)                 'составляем строку[/color] [color=#828282]End Select[/color][color=#828282]Loop[/color][color=#828282]End Sub[/color]
 [color=#828282]'очистка буфера UART[/color][color=#828282]'===================[/color][color=#828282]Sub Del_buffer()[/color] [color=#828282]Do[/color] [color=#828282]B = Inkey()                    'кладем в переменную "В" данные из буфера[/color] [color=#828282]Loop Until B = 0                    'выходим из цикла когда в переменную попадет 0 (буфер пуст)[/color][color=#828282]End Sub[/color][color=#828282]'Rr:[/color][color=#828282]'Set Porta.3[/color][color=#828282]'Print "butt"[/color][color=#828282]'Return[/color]
 
вот так лучше будет
 
 
 |  
 |  |  |  | 
| 
| Lelik54 | Дата: Вторник, 19.02.2013, 16:42 | Сообщение # 13 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | простите,что то не получается. 
 
 |  
 |  |  |  | 
| 
| exersizze | Дата: Вторник, 19.02.2013, 19:00 | Сообщение # 14 |  |   Группа: Администраторы Сообщений: 720 
 Статус: Offline | Lelik54, скопируй текст программы и вставь между тэгами [code] 
 
 |  
 |  |  |  | 
| 
| exersizze | Дата: Вторник, 19.02.2013, 19:23 | Сообщение # 15 |  |   Группа: Администраторы Сообщений: 720 
 Статус: Offline | Можно использовать вот эту кнопку 
 
   
 
 |  
 |  |  |  | 
| 
| Lelik54 | Дата: Вторник, 19.02.2013, 20:19 | Сообщение # 16 |  | Группа: Проверенные Сообщений: 11 
 Статус: Offline | Код $regfile = "M8535.dat" $crystal = 8000000
 $baud = 19200
 Config Porta.1 = Output
 Config Porta.3 = Output
 Config Porta.4 = Input
 $lib "lcd4.lbx"
 Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
 Config Lcd = 16 * 2 'подключаем светодиод
 Led Alias Porta.3
 Led1 Alias Porta.1
 Config Adc = Single , Prescaler = Auto , Reference = Avcc
 
 'объявляем подпрограммы
 Declare Sub Getline(s As String) 'чтение данных из буфера
 Declare Sub Del_buffer() 'очистка буфера
 Dim F As Byte
 Dim R As Byte
 Dim S As String * 1
 Dim B As Byte
 Dim A As Word
 Dim P As Byte
 
 Start Adc
 Cursor Off
 Cls
 Do
 If F = 10 Then
 
 F = 0
 End If
 F = F + 1
 A = Getadc(5)
 
 Waitms 100
 R = Ischarwaiting() 'проверка наличия команды в буфере UART
 If R = 1 Then 'если в буфере что-то есть переменной R присвоится значение 1
 Getline S 'вытаскиваем содержимое буфера в переменную S
 If S = "A" Then 'если там символ "А"
 Print "Свет1 включен" 'отошлем сообщение
 Led = 1 'и включим светодиод
 Elseif S = "B" Then 'если там символ "В"
 Print "Свет1 выключен" 'сообщим о выключении
 Led = 0
 'выключаем светодиод
 End If
 If S = "K" Then 'если там символ "А"
 Print "Свет2 включен" 'отошлем сообщение
 Led1 = 1 'и включим светодиод
 Elseif S = "L" Then 'если там символ "В"
 Print "Свет 2 выключен" 'сообщим о выключении
 Led1 = 0 'выключаем светодиод
 End If
 'End If
 Del_buffer 'если в буфере что-то другое очищаем его
 End If
 ' Debounce Pind.3 , 1 , Rr
 If Pind.3 = 1 Then
 Waitms 100
 Print "сработал концевик"
 End If
 
 If F = 5 Then
 ' Print "b"
 Print A
 End If
 Locate 1 , 1
 Lcd A
 Locate 2 , 1
 Lcd F
 Locate 1 , 5
 Lcd S
 
 Loop
 End
 
 'подпрограмма для разбора сообщения c UART
 '=========================================
 Sub Getline(s As String)
 S = ""
 Do
 B = Inkey()
 'берем символ из буфера в формате ASCII
 Select Case B
 Case 0 : Exit Do 'если дальше буфер пуст - выходим из цикла
 Case 10 : If S <> "" Then Exit Do 'конец строки, значит выходим из цикла
 Case Else : If B > 31 Then S = S + Chr(b) 'составляем строку
 End Select
 Loop
 End Sub
 
 'очистка буфера UART
 '===================
 Sub Del_buffer()
 Do
 B = Inkey() 'кладем в переменную "В" данные из буфера
 Loop Until B = 0 'выходим из цикла когда в переменную попадет 0 (буфер пуст)
 End Sub
 'Rr:
 'Set Porta.3
 'Print "butt"
 'Return
 
 |  
 |  |  |  |