Страница 1 из 1
Вопрос по работе с RS232?
Добавлено: Ср ноя 11, 2009 17:30:03
LeonVS
Есть команда Input для ввода данных, но на этой команде МК впадает в ступор пока не придет инфа с ком порта... Это не есть хорошо, как это обойти? Требуется чтоб цикл крутился, но при приходе данных они обрабатывались. В общей как сделать чтоб Input не стопорил прогу?
Добавлено: Ср ноя 11, 2009 17:34:36
МитяРа
Принимай данные по прерыванию от последовательного порта...

Добавлено: Ср ноя 11, 2009 17:35:12
sun
Прерывания. Конкретно, на получение байта с USART.
Основной цикл программы будет работать, пока не появятся данные в порту, при поступлении прервётся выполнение основной программы и управление перейдёт в обработчик.
Добавлено: Ср ноя 11, 2009 17:38:37
LeonVS
sun писал(а):Прерывания. Конкретно, на получение байта с USART.
Основной цикл программы будет работать, пока не появятся данные в порту, при поступлении прервётся выполнение основной программы и управление перейдёт в обработчик.
Как раз то что нужно!

Эм... я в МК еще сАвсЭм ламер, только начал изучение, сейчас собираю электро печку для авто, управление с КарПС, вот потребовалось общение с компом...

Можно код в баскоме как сие реализовать если не сложно???
Добавлено: Ср ноя 11, 2009 17:41:01
sun
LeonVS писал(а):sun писал(а):Прерывания. Конкретно, на получение байта с USART.
Основной цикл программы будет работать, пока не появятся данные в порту, при поступлении прервётся выполнение основной программы и управление перейдёт в обработчик.
Как раз то что нужно!

Эм... я в МК еще сАвсЭм ламер, только начал изучение, сейчас собираю электро печку для авто, управление с КарПС, вот потребовалось общение с компом...

Можно код в баскоме как сие реализовать если не сложно???
Я сам начинаю только разбираться с контроллерами, писал в си (WinAVR), могу исходник предложить почитать.
А так всё в даташите описано, довольно таки понятно.
Исходником помогу только вечером, когда буду дома, на флешке не оказалось.
Добавлено: Ср ноя 11, 2009 17:43:36
LeonVS
Увы, с СИ не дружу совсем...
Знаю басик со школьных времен, на нем собственно и пишу софтинку

Термометр здесь нашел разобрался, пашет выплевывая данные на ком порт, теперь вот надо прием данных победить

Добавлено: Ср ноя 11, 2009 17:48:30
sun
LeonVS писал(а):Увы, с СИ не дружу совсем...
Знаю басик со школьных времен, на нем собственно и пишу софтинку

Термометр здесь нашел разобрался, пашет выплевывая данные на ком порт, теперь вот надо прием данных победить

вот с бейсиком я лет так дцать уже как не дружу, пока что только си
Добавлено: Ср ноя 11, 2009 17:51:46
LeonVS
sun писал(а):
вот с бейсиком я лет так дцать уже как не дружу, пока что только си
Жаль, ну чтож, будем ждать помощи от тех кто пишет в БАСКОМе:)
Не ожидал что так оперативно здесь отвечают

Думал придется ждать пару дней

Хороший форум однака

Добавлено: Ср ноя 11, 2009 18:02:35
МитяРа
Добавлено: Ср ноя 11, 2009 20:20:41
Секретный кот
Если в баскоме, то используйте для приёма прерывание On URXC. Соответственно надо разрешить глобальные прерывания, разрешить URXC и указать метку, где будет лежать обработчик.
Добавлено: Ср ноя 11, 2009 20:55:37
LeonVS
Секретный кот писал(а):Если в баскоме, то используйте для приёма прерывание On URXC. Соответственно надо разрешить глобальные прерывания, разрешить URXC и указать метку, где будет лежать обработчик.
К сожалению для меня глобальные прерывания и URXC мало что означают.... А можно для "особо одаренных" разжевать и примерчик привести?
Заранее благодарен!!!

Добавлено: Ср ноя 11, 2009 21:42:37
Секретный кот
Код: Выделить всё
On URXC rs232in
Enable URXC
Enable Interrupts
Maincycle: ;здесь основная зацикленная программа
...
Goto maincycle
rs232in: ;обработчик прерывания
RBYTE = UDR ;считывание принятого по UART байта
Return
Последний принятый байт всегда будет помещаться в переменную RBYTE, с которой сможет работать основная программа.
Добавлено: Ср ноя 11, 2009 22:37:32
LeonVS
Секретный кот писал(а):Код: Выделить всё
On URXC rs232in
Enable URXC
Enable Interrupts
Maincycle: ;здесь основная зацикленная программа
...
Goto maincycle
rs232in: ;обработчик прерывания
RBYTE = UDR ;считывание принятого по UART байта
Return
Последний принятый байт всегда будет помещаться в переменную RBYTE, с которой сможет работать основная программа.
Все так просто??? СПАСИБО!!! Завтра буду тестить

А можно:
Maincycle:
...
Goto maincycle
Заменить на:
DO
...
LOOP
Добавлено: Чт ноя 12, 2009 00:15:24
Секретный кот
LeonVS писал(а):А можно:
Maincycle:
...
Goto maincycle
Заменить на:
DO
...
LOOP
Легко

Я просто по привычке использую Goto метку, чтобы можно было на неё перепрыгивать из любого места основного цикла.
Добавлено: Пт ноя 13, 2009 22:57:33
LeonVS
Секретный кот писал(а):LeonVS писал(а):А можно:
Maincycle:
...
Goto maincycle
Заменить на:
DO
...
LOOP
Легко

Я просто по привычке использую Goto метку, чтобы можно было на неё перепрыгивать из любого места основного цикла.
СПАСИБ!!! Все крутится как мне и надо, даже не ожидал что так все просто

Добавлено: Пт ноя 13, 2009 23:48:20
Секретный кот
LeonVS писал(а):СПАСИБ!!! Все крутится как мне и надо, даже не ожидал что так все просто

Н З ЧТ )))