Easyelectronics.ru

Электроника для всех
Текущее время: 23 окт 2019, 02:43

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Помогите найти ошибку (rs485) (решено)
СообщениеДобавлено: 11 фев 2016, 22:43 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
Обрабатываю запросы, приходящие на attiny2313 через st485. Прием-передача буферизованы.
По дефолту нога отвечающая за направление передачи rs485 опущена в ноль. Идет наполнение приемного буфера побайтно в прерывании URXC. Как только данные похожи на запрос, выставляется флаг готовности данных. Данные преобразовываются, наполняется выходящий буфер и нога поднимается для передачи. Передача происходит в прерывании UDRE.
После передачи последнего байта нога опускается прямо в прерывании.

Проблема в том, что устройство в точности получает инструкции и отрабатывает их, но отвечает по шине билибердой. Такое ощущение что где-то либо нога раньше времени опускается либо хз что. Начало ответа верное, но в середине и конце возникает мусор.

Может у кого-нибудь есть рабочий пример работы по rs485 с буферизованым uartом? Или скажите куда рыть. Анализатора сигналов нету :(
Show


Последний раз редактировалось timsa 17 фев 2016, 11:39, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 11 фев 2016, 22:49 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
Я допускаю что слишком рано опускаю ногу (данные в UDR засунул, но времени им высраться не дал). Но ведь это была бы ошибка только в последнем байте передачи. А ошибка начинается со второго байта ответа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 11 фев 2016, 22:52 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
А может для опускания ноги использовать прерывание UTXC предварительно выставив в UDRE флаг что это последний байт? Или это тоже будет преждевременно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 12:36 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2624
Откуда: Москва
Ух,
Цитата:
OUTI UCSRB, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE) ; запускаем передачу
Отключите прием , он же все равно не нужен
Логику вот этого:
Код:
LDS      R16, UARTOUTBUFPTR
      LDI      R17, MAXOUTBUF
      DEC      R17
      CP      R16, R17
      BREQ   _ud_buffer_empty

Я вообще не понял. Если вы знаете это число MAXOUTBUF , которое стремительно стремится к нулю DEC R17 , то зачем все остальное.
Так , а это вообще все лишнее :
Код:
PUSH   ZL
      PUSH   ZH
  LDS      R16, UARTOUTBUFPTR

      ADD      ZL, R16            ; Сложением адреса со смещением
      CLR      R16               ; получаем адрес точки чтения
      ADC      ZH, R16
LDS      R16, UARTOUTBUFPTR
      INC      R16
      STS      UARTOUTBUFPTR, R16
  POP      ZH
      POP      ZL

==
Код:
LD      R16, Z+


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 13:10 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
подключил ftdiшку послушать что там говорит тинька интерфейсу, она говорит все верно:
55 11 01 41 4F 4B 0D
а проходя через ST485EB эта посылка превращается вот в такие (каждый раз разные):
55 81 40 B0 6A 35
55 91 40 B0 6A CA
55 81 40 A0 6A 35
55 91 40 B0 6A CA
55 C4 81 EA 15


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 13:21 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
ILYAUL писал(а):
Отключите прием , он же все равно не нужен


но и не мешает, или мешает? (попробую)

ILYAUL писал(а):
Логику вот этого:
...
Я вообще не понял. Если вы знаете это число MAXOUTBUF , которое стремительно стремится к нулю DEC R17 , то зачем все остальное.

отправка завершается или по символу 0D в исходящем буфере или по окончанию буфера. вы видите ошибку?

ILYAUL писал(а):
Так , а это вообще все лишнее :


Это прерывание! Мы туда заходим один раз за каждым байтом. Не понимаю о чем вы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 13:45 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
отключил прием везде где только можно, переделал переключение управляющей ножки интерфейса в прерывании TX (т.е. передатчик выключается когда все биты улетели в провод), добавил терминирующее сопротивление 120ом на стороне приемника, добавил подтяжку к питанию 10ком на RX выход контроллера и подтяжку к земле 10ком на управляющий выход (PD2).

один хрен.

причем ПОЛУЧАЕТ данные оно точно, у меня проверка по стартовой посылке, по чексумме да и я вижу по исполнительному механизму что оно работает.
но почему оно отвечает мусором я не понимаю.
кстати после всех переделок теперь еще и первый байт бывает заваленым, раньше он гарантированно проходил.

вместо 55 11 01 41 4F 4B 0D получаю
55 C4 A1 AA 35
D5 84 41 BA 35
D5 A4 41 6A DA
D5 A4 41 BA 35
55 84 41 6A DA


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 13:46 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6490
Откуда: Из тех... Из бывших...
Буфер может быть уже пуст (готов к приему следующего байте), но передача предыдущего при этом еще не завершена. На прием переключайтесь не по UDRE, а по TX Complete. Интерфейс по меркам МК очень медленный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 13:59 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
STT писал(а):
Буфер может быть уже пуст (готов к приему следующего байте), но передача предыдущего при этом еще не завершена. На прием переключайтесь не по UDRE, а по TX Complete. Интерфейс по меркам МК очень медленный.


Уже сделал. Нет эффекта. Укоротил провода до 10 сантиметров. Нет эффекта.

вместо:
55 11 01 41 4F 4B 0D

получаю:
D5 A4 C1 EA 15
D5 A4 41 6A 15
55 84 A1 AA 35
D5 A4 C1 6A 15
55 84 A1 BA 35
D5 A4 41 6A 35
D5 A4 C1 6A 15
D5 84 41 BA 35
55 84 A1 AA 35
D5 A4 C1 6A 15
55 84 A1 AA 35
D5 A4 C1 6A 15
D5 A4 41 6A 15
95 A4 C1 EA 15
D5 84 41 6A DA
D5 84 41 6A 35
55 84 41 BA 35
55 C4 A1 AA 35
55 84 41 AF 69 F8
55 84 A1 BA 35
D5 A4 C1 6A 15
D5 84 41 BA 35
55 84 A1 AA 35
D5 A4 C1 6A 15
D5 A4 C1 EA 15
D5 A4 41 6A 15
D5 84 41 AF 29 F8
D5 A4 C1 6A 15
D5 A4 41 6A 35
D5 A4 41 6A 15
D5 A4 41 6A 15


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 14:01 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6490
Откуда: Из тех... Из бывших...
Цитата:
а проходя через ST485EB эта посылка превращается вот в такие (каждый раз разные):

Буфер передатчика на 2 байта. Первый у вас выплевывается правильно, на его место подгружается второй и формируется запрос что буфер пуст. Но второй байт еще передается, а вы прерываете передачу в линию принудительным переводом ST485EB на прием.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 14:31 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
STT писал(а):
Цитата:
а проходя через ST485EB эта посылка превращается вот в такие (каждый раз разные):

Буфер передатчика на 2 байта. Первый у вас выплевывается правильно, на его место подгружается второй и формируется запрос что буфер пуст. Но второй байт еще передается, а вы прерываете передачу в линию принудительным переводом ST485EB на прием.


я вываливаю 7 байт подряд, если б было так как вы говорите, то потерялся бы только последний байт. передачу я прерываю только после всех 7 байт.

и кстати никаких запросов ST485EB не формирует. я начинаю подозревать что именно этот драйвер какой-то корявый. надо попробовать заменить на MAX485 и посмотреть что будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 14:52 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
интернет говорит что st485 бывают бракованные, я недавно в кетае заказал десяток max485, как раз должны прийти.
так что пока голову насиловать не буду, попробую детальку заменить.

p.s. только что перепаял одну st485 на другую такую же. никаких изменений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 15:48 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6490
Откуда: Из тех... Из бывших...
timsa писал(а):
я вываливаю 7 байт подряд, если б было так как вы говорите, то потерялся бы только последний байт. передачу я прерываю только после всех 7 байт.

Еще раз попробую.
Исходные данные. Сначала у вас стабильно проходил 1-й байт, остальные портились.
Почему. Помимо вашего программного буфера имеется аппаратный буфер ФИФО на 2 байта в самом УСАПП. В начале передачи (поскольку буфер на 2 байта) вы скармливаете в УСАПП 1-й байт и тут же получаете прерывание по UDRE, поскольку есть куда всунуть второй байт. Ваша программа это и делает. Буфер заполнился. При этом передача уже началась. Следующий запрос на прерывание по UDRE вы получите, когда второй байт из ФИФО поступит на передачу в сдвиговый регистр, т.е. первый байт уже уйдет адресату. Пока вы обрабатываете запрос, идет передача второго байта, но тут вы ее прекращаете волевым решением. По аналогии то же самое происходит с остальными байтами. Таким образом вы портите все байты, кроме первого.

Прерывание UDRE возникает тогда, когда в аппаратном буфере ФИФО есть место для очередной порции данных, в то время как TXC возникает после отправки последнего бита из самого передатчика. Т.о., вам необходимо в основном цикле отслеживать флаг занятости аппаратного буфера ФИФО, который будет сбрасываться в обработчике прерывания UDRE и устанавливаться подпрограммой загрузки данных в этот буфер, а переключать интерфейсную микросхему на прием по прерыванию TXC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 17:59 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2624
Откуда: Москва
Цитата:
отправка завершается или по символу 0D в исходящем буфере или по окончанию буфера. вы видите ошибку?

А у Вас это так или не так, как Вы описали? Ну так , если вдуматься.
Цитата:
Это прерывание! Мы туда заходим один раз за каждым байтом. Не понимаю о чем вы
Я Вам заменил это всё на одну единственную команду , в том же прерывании


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 18:06 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
STT писал(а):
Еще раз попробую.


Еще раз.

UART работает идеально. В нем нет никаких ошибок. Посылка выходит целиком и полностью. Направление передачи я переключаю в два этапа: в прервании UD_OK поднимаю флаг "ушел последний байт", в прерывании TX_OK я проверяю этот флаг и отключаю передатчик (прерывание TX_OK выскакивает когда все биты улетели в провод).

Если выбросить ST485EB всё работает идеально. Но когда я её добавляю, то прием работает идеально, а передача - зажёвывает.

Проблема или в чипе ST485EB или в моем понимании его работы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 18:11 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6490
Откуда: Из тех... Из бывших...
Чтобы не спорить, попробуйте переводить ST485EB на прием не по прерыванию, а по тайм- ауту, скажем, в 3 секунды. Заодно работоспособность микросхемы проверите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 18:14 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
ILYAUL писал(а):
Цитата:
отправка завершается или по символу 0D в исходящем буфере или по окончанию буфера. вы видите ошибку?

А у Вас это так или не так, как Вы описали? Ну так , если вдуматься.


У меня так как я описал и более того это работает в железе у меня перед носом.

ILYAUL писал(а):
Я Вам заменил это всё на одну единственную команду , в том же прерывании


Т.е. пофигу что регистр Z за пределами прерывания используется?
Вы показываете исправление блока, который у меня в чистом виде не присутствует. Я не понимаю вас.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 18:16 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
STT писал(а):
Чтобы не спорить, попробуйте переводить ST485EB на прием не по прерыванию, а по тайм- ауту, скажем, в 3 секунды. Заодно работоспособность микросхемы проверите.


Сделаю проще. Напишу отдельную прошивку которая будет тупо мяукать через st485 и узнаю что там передается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 18:20 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6490
Откуда: Из тех... Из бывших...
Цитата:
в прерывании TX_OK я проверяю этот флаг и отключаю передатчик

В приведенном вами коде нет такого обработчика. Выложите код полностью, начиная с векторов прерываний.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 12 фев 2016, 18:37 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2624
Откуда: Москва
Код:
LDS      R16, UARTOUTBUFPTR -берём какое-то число записанное ниже
      LDI      R17, MAXOUTBUF  - берём константу
      DEC      R17                  - и зачем-то вычитаем из нее единицу
      CP      R16, R17            - сравниваем вычитанную константу с каким-то числом
      BREQ   _ud_buffer_empty

      LDS      R16, UARTOUTBUFPTR За каким то хреном загружаем число которое уже находится в регистре R16 ещё раз
      INC      R16 
      STS      UARTOUTBUFPTR, R16

Разжевал?
Код:
Т.е. пофигу что регистр Z за пределами прерывания используется?

Извините, не оправдал надежд , ибо не капли ни экстрасенс. Но , если без дела "торчат" X и Y , то для них есть работа


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 13 фев 2016, 22:39 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
ILYAUL писал(а):
Разжевал?
Извините, не оправдал надежд , ибо не капли ни экстрасенс. Но , если без дела "торчат" X и Y , то для них есть работа


X и Y также используются в других прерываниях и основной программе.

Я правильно понимаю что вы настаиваете на "оптимизации" ради "оптимизации"? Меня ничуть не смущает лишний десяток команд если благодаря им исходник остается читаемым и стабильным. А в вашем случае не дай бог где то в другом месте забыть что Z у используется в прерывании без сохранения... Можно словить лютый глюк и полдня потратить на героическое устранение созданной себе проблемы.

И вопрос тут не в экстрасенсорике, а в желании поумничать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 13 фев 2016, 22:41 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
STT писал(а):
Цитата:
в прерывании TX_OK я проверяю этот флаг и отключаю передатчик

В приведенном вами коде нет такого обработчика. Выложите код полностью, начиная с векторов прерываний.


В первоначальном коде нет, т.к. эта идея возникла в процессе обсуждения. Когда эпопея закончится могу выложить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 13 фев 2016, 23:24 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2624
Откуда: Москва
Цитата:
Я правильно понимаю что вы настаиваете на "оптимизации" ради "оптимизации"? Меня ничуть не смущает лишний десяток команд если благодаря им исходник остается читаемым и стабильным.
Мне Вас жаль . Искренне.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 15 фев 2016, 12:08 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
ILYAUL писал(а):
Мне Вас жаль . Искренне.

Если человек умер - это надолго. Если идиот - навсегда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите найти ошибку (rs485)
СообщениеДобавлено: 15 фев 2016, 14:47 
Заглядывает иногда

Зарегистрирован: 25 янв 2011, 23:42
Сообщения: 186
Итак, выкинул из исходника все кроме передачи:
Код:
/*
* test485.asm вариант для tiny2313 на 8МГц
*
*/

.device ATtiny2313
.include "tn2313def.inc"
.include "macro.inc"

; Объявим переменные
      .equ    XTAL = 8000000
      .equ    BAUDRATE = 19200
      .equ    BAUDRATEDIVIDER = XTAL/(16*BAUDRATE)-1

      .equ   MAXINBUF   = 10

; RAM =====================================================
      .DSEG            ; Сегмент ОЗУ

UARTOUTBUF:               ; буфер для передачи
      .byte   MAXOUTBUF
UARTOUTBUFPTR:
      .byte   1


; FLASH ===================================================
      .CSEG            ; Кодовый сегмент
      .ORG   $000
      RJMP   Reset
      .ORG   OC1Aaddr
      RJMP   Timer1_COMPA
      .ORG   URXCaddr
      RJMP   RX_OK
      .ORG   UDREaddr
      RJMP   UD_OK
      .ORG   UTXCaddr
      RJMP   TX_OK
      .ORG   INT_VECTORS_SIZE
; Конец таблицы прерываний

; Обработчики прерывания

; Передача UART
TX_OK:
      RETI

; Прием UART
RX_OK:
      RETI

; Буфер UART пуст
UD_OK:
      PUSHF
      PUSH   R17
      PUSH   ZL
      PUSH   ZH

      LDI      ZL, Low(UARTOUTBUF)
      LDI      ZH, High(UARTOUTBUF)

      LDS      R16, UARTOUTBUFPTR

      ADD      ZL, R16
      CLR      R16
      ADC      ZH, R16

      LD      R16, Z

      OUT      UDR, R16

      CPI      R16, 0x0D
      BREQ   _ud_buffer_empty

      LDS      R16, UARTOUTBUFPTR
      LDI      R17, MAXOUTBUF
      DEC      R17
      CP      R16, R17
      BREQ   _ud_buffer_empty

      INC      R16
      STS      UARTOUTBUFPTR, R16

      RJMP   _ud_end

_ud_buffer_empty:
      OUTI   UCSRB, (0<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)      ; глушим передачу

      CLR      R16
      STS      UARTOUTBUFPTR, R16

_ud_end:


      POP      ZH
      POP      ZL
      POP      R17
      POPF
      RETI

; Таймер 0,5 Гц
Timer1_COMPA:
      PUSHF

      CLR      R16
      STS      UARTOUTBUFPTR, R16

      OUTI   UCSRB, (0<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)      ; запускаем передачу

      POPF
      RETI
; Конец таймера 0,5 Гц

; Конец обработчиков прерываний

; Чистим оперативку
Reset:
      LDI      ZL,Low(SRAM_START)   ; Адрес начала ОЗУ в индекс
      LDI      ZH,High(SRAM_START)
      CLR      R16               ; Очищаем R16
Flush:
      ST      Z+, R16            ; Сохраняем 0 в ячейку памяти
      CPI      ZH,High(RAMEND+1)   ; Достигли конца оперативки?
      BRNE   Flush            ; Нет? Крутимся дальше!
      CPI      ZL,Low(RAMEND+1)   ; А младший байт достиг конца?
      BRNE   Flush
      CLR      ZL               ; Очищаем индекс
      CLR      ZH
; Инициализация стека
      LDI      R16,Low(RAMEND)
      OUT      SPL,R16
; Чистим регистры
      LDI      ZL, 30            ; Адрес самого старшего регистра   
      CLR      ZH               ; А тут у нас будет ноль
      DEC      ZL               ; Уменьшая адрес
      ST      Z, ZH            ; Записываем в регистр 0
      BRNE   PC-2            ; Пока не перебрали все не успокоились

; Инициализация железа

      ; таймер1 общая частота 8МГц/256=31250Гц, Режим №4 CTC
      OUTI    TCCR1A,0<<WGM11|0<<WGM10
      OUTI   TCCR1B,1<<WGM12|1<<CS12|0<<CS11|0<<CS10
      OUTI   OCR1AH, 0xF4
      OUTI   OCR1AL, 0x24   ; 31250*2 = 0,5 Гц

      ; прерывание по совпадению
      OUTI   TIMSK, 1<<OCIE1A
      OUTI   SFIOR, 1<<PSR10

      ; настраиваем USART
      OUTI   UBRRL, Low(BAUDRATEDIVIDER)
      OUTI   UBRRH, High(BAUDRATEDIVIDER)
      OUTI   UCSRA, (0<<U2X)
      OUTI   UCSRB, (0<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(1<<TXCIE)|(0<<UDRIE)
      OUTI   UCSRC, (1<<UCSZ0)|(1<<UCSZ1)

      ; инициализируем буфера UART
      CLR      R16
      STS      UARTOUTBUFPTR, R16

      ; Выход на управление ST485EB
      SETB   DDRD,PD2,R16      ; Направление 0-прием, 1-передача
      SETB   PORTD, PD2, R16      ; Передача

      ; Включаем прерывания
      SEI

; Программа
Main:

      LDI      YL, Low(UARTOUTBUF)
      LDI      YH, High(UARTOUTBUF)
      LDI      R16, 'F'
      ST      Y+, R16
      LDI      R16, 'U'
      ST      Y+, R16
      LDI      R16, 'C'
      ST      Y+, R16
      LDI      R16, 'K'
      ST      Y+, R16
      LDI      R16, 0x0D
      ST      Y+, R16

      ; основной цикл
MainLoop:
      RJMP      MainLoop



И вот такое говно валится на выходе
86 B5 C8 CA C6 95 E8 CA A6 A5 D8 AA F8 86 B5 C8 DA C6 95 E8 CA 46 D5 A8 EA


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB