Всем привет
подскажите как осуществить обмен данными через UART ? Микроконтроллер ATmega8
Конкретно нужно передать массив hex данных , например (81 10 F1 81 03)
С этим все ясно , это можно сделать так:
Printbin &H81
Printbin &H10
Printbin &HF1
Printbin &H81
Printbin &H03
После этого получить ответ , массив hex данных , например что-то типа этого (83 F1 10 C1 6B 8F 3F)
Положить эти данные в переменную
Длинна полученных данных разная
Обмен данными через UART
Сообщений 1 страница 12 из 12
Поделиться12015-10-05 18:00:05
Поделиться22015-10-05 18:53:27
ну логично же inputbin
или через inkey
так же можно заморочиться через буфер serialin
только учтите, что есть кратные частоты передачи, иначе: чем больше данных - тем больше вероятность ошибки
Поделиться32015-10-06 08:35:27
Можно конкретные примеры ? 
Поделиться42015-10-06 12:46:24
Примеры есть в хелпе программы (открывается по F1)!
Или на этом форуме, через поиск.
Или в гугле по запросу "bascom ...", где "..." - желаемый оператор (например: inputbin).
Поделиться52015-10-17 10:19:23
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 20
Dim Akey As Byte
Do
Akey = Waitkey()
Printbin Akey
Loop
В данном случае я вижу то , что мне пришло в COM порт
Например в COM порт отправили 81 10 F1 81 03 отображается 81 10 F1 81 03
Как отобразить конкретный байт ? Например четвертый 81 (не нужно сообщение польностью)
Поделиться62015-10-27 00:48:16
Неужели это так сложно ?
Поделиться72015-10-27 08:08:24
For Index = 1 To 5
XXX = Waitkey()
Print XXX
Next IndexПоделиться82015-10-27 10:58:43
Неужели это так сложно ?
Ну почему:
Dim A as Byte
Do
Akey = Waitkey()
If A = 3 then
Printbin Akey
A = 0
End If
Incr A
LoopВыводит только каждый 4-й байт.
НО!
Это всё работать будет только в синхронном виде и с задержками отправителя данных (ибо нужно использовать буфер, т.к. на момент использование "print", МК не слушает/не принимает из порта данные (будут потери/пропуски).
Поделиться92015-10-30 23:20:22
Всем привет, Всем спасибо , но каждый 4-ый байт это не айс.
код имеет вид
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 20
Dim Akey As Byte
Dim A As Byte
Do
Akey = Waitkey()
If A = 3 Then
Printbin Akey
A = 0
End If
Incr A
Loop
Если запустить программу и отправить в COM порт 81 10 F1 81 03 то я получаю 81 , в принципе так и надо (то что нужно) но если я еще раз отправить в COM порт 81 10 F1 81 03 то получаю 10 03 а если еще раз то F1
может можно как то 81 10 F1 81 03 отправлять в массив и потом из масива вытаскивать нужный байт ?
Мне нужны конкретные данные из из нужной последовательности данных , пример с IFом как бы то что надо , но не совсем то что нужно.
Поделиться102015-10-31 13:13:25
Протокол обмена какой? Складывается ощущение что его вообще нет. В посылке даже не указана ее длина. Так работать не будет.
Поделиться112015-10-31 14:14:58
Да, в протоколе должен быть: хедар, тело, контрольная сумма - это в идеале. Иначе через время, будет не возможно понять, где начало пакета.
Поделиться122015-10-31 22:16:18
протокол KWP2000