Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Обмен данными через UART


Обмен данными через UART

Сообщений 1 страница 12 из 12

1

Всем привет
подскажите как осуществить обмен данными через 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)
Положить эти данные в переменную
Длинна полученных данных разная

0

2

ну логично же inputbin :D
или через inkey
так же можно заморочиться через буфер serialin

только учтите, что есть кратные частоты передачи, иначе: чем больше данных - тем больше вероятность ошибки

0

3

Можно конкретные примеры ? :-)

0

4

Примеры есть в хелпе программы (открывается по F1)!
Или на этом форуме, через поиск.
Или в гугле по запросу "bascom ...", где "..." - желаемый оператор (например: inputbin).

0

5

$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 (не нужно сообщение польностью)

0

6

Неужели это так сложно ?

0

7

Код:
   
           For Index = 1 To 5
               XXX = Waitkey()
               Print XXX
            Next Index

0

8

zfoxx написал(а):

Неужели это так сложно ?

Ну почему:

Код:
Dim A as Byte

Do

Akey = Waitkey()
If A = 3 then
    Printbin Akey
    A = 0
End If
Incr A

Loop

Выводит только каждый 4-й байт.
НО!
Это всё работать будет только в синхронном виде и с задержками отправителя данных (ибо нужно использовать буфер, т.к. на момент использование "print", МК не слушает/не принимает из порта данные (будут потери/пропуски).

0

9

Всем привет, Всем спасибо , но каждый  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ом как бы то что надо , но не совсем то что нужно.

0

10

Протокол обмена какой? Складывается ощущение что его вообще нет. В посылке даже не указана ее длина. Так работать не будет.

0

11

Да, в протоколе должен быть: хедар, тело, контрольная сумма - это в идеале. Иначе через время, будет не возможно понять, где начало пакета.

0

12

протокол KWP2000

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Обмен данными через UART