|
ridbiord
|
||||||
странная логика программы при работе с USART25.09.2010, 19:52. Показов 10614. Ответов 21
Метки нет (Все метки)
Доброго времени суток!
Человеки, подсобите, будьте ласковы. Вообразил себя космонавтом и накропал такое :
Подскажите, пожалуйста, чего я не понял. Заранее спасибо. |
||||||
| 25.09.2010, 19:52 | |
|
Ответы с готовыми решениями:
21
VS2019 странная логика при создании проекта через меню Неужели STM8S > STM8L при работе с USART? Странная ошибка при работе с Excel |
|
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
|
|
| 25.09.2010, 19:58 | |
|
Код я пока не смотрел, однако имейте в виду, что флаги готовности часто плохо реализованы в симуляторах. Стоит прогнать на самом МК. При отладке в симуляторе ожидания флагов частенько приходится убирать.
0
|
|
|
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
|
|
| 25.09.2010, 20:08 | |
|
У передатчика в уарте аппаратный буфер на 2 байта - один байт непосредственно сдвиговый регистр передатчика, из которого данные идут на ногу, а второй байт - ожидающий отправки.
Когда ты пихаешь в пустой уарт первый байт, он сразу идет на передачу, а когда пихаешь второй байт - он встает в очередь и пойдет на отправку как только закончится первый байт. В такой программе, как у тебя, в передатчике всегда будет 2 байта - один сейчас отправляющийся и один ожидающий, потому как флаг UDRE показывает, что свободен именно второй байт буфера. Если хочешь конкретно отправлять по одному байту, ожидать надо флага TXC.
0
|
|
|
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
|
|
| 25.09.2010, 20:17 | |
|
Ногу TX этого USORT надо назначить выходом.
Ожидание именно DRE в данном случае вполне корректно, да и в большинстве других тоже. Использование флага окончания передачи это скорее экзотика, нужная к примеру для полудуплекса. В данном случае передача не происходит, поскольку не установлен режим работы ноги, которая используется как TX. Соответственно первый раз код отрабатывает с пустым буфером UART, второй раз после того как помещенный в прошлый раз байт защелкнулся в регистре вывода, освободив буфер, а на третий раз флаг DRE уже не устанавливается, поскольку в буфере лежит второй байт, а в регистре вывода все еще ждет отправки первый.
0
|
|
|
ridbiord
|
||
| 26.09.2010, 19:32 | ||
DDRD = 2; PORTD = 2; // Используется Miko88, PD1 Не помогло. Чего не хватает ? |
||
|
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
|
|
| 26.09.2010, 19:50 | |
|
У тебя уарт инициализирован в синхронном режиме... Давай ему частоту на PD4 или выключи синхронный режим.
p.s. ногу на выход можно не переключать, уарт это сам делает.
0
|
|
|
ridbiord
|
||
| 26.09.2010, 20:17 | ||
|
||
|
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
|
|
| 26.09.2010, 20:21 | |
|
Без UMSEL код из первого поста нормально работает и в студии и в протеусе.
0
|
|
|
ridbiord
|
||
| 26.09.2010, 20:42 | ||
Какая версия студии и протеуса? моя студия - 4.18 Build 684, протеусом пока не пользуюсь. |
||
|
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
|
|
| 26.09.2010, 20:46 | |
|
4.18 buyld 700
WinAVR 20100110 -Os Чтобы проще было трейсить, вставил после дефайнов: void USORT_init(unsykned int ubrr) __attribute__((noinline)); void USORT_send(unsykned char byte) __attribute__((noinline)); С этим трейсить можно по сишному коду (внутри функции можно, в главном цикле все равно нельзя :). Без этого трейсил по ассемблерному.
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2010
Сообщений: 74
|
||
| 26.09.2010, 20:55 | ||
0
|
||
|
ridbiord
|
||
| 26.09.2010, 20:56 | ||
Спасибо, но что изменилось-то ? Как бы заставить студию работать человекообразно ? |
||
|
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
|
|
| 26.09.2010, 21:04 | |
|
Ээ... Никак :) При включенной оптимизации код сильно преображается, по-этому трейсить по сишному не получится. Можно попробовать отключить оптимизацию, но лучше от этого станет не на много, особенно с инлайновыми функциями типа _delay_ms.
0
|
|
|
ridbiord
|
||
| 26.09.2010, 21:10 | ||
|
||
|
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
|
|
| 26.09.2010, 21:14 | |
|
Лучше вообще не пытаться отлаживать периферию на симуляторах... Иаровский, к примеру, может часами ждать, пока стартует кварц :))
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2010
Сообщений: 74
|
||
| 26.09.2010, 21:16 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,379
|
|
| 26.09.2010, 21:28 | |
|
На mega88 вообще нет JTAG. Скорее всего просто перепутана полярность или пин.
0
|
|
|
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
|
||
| 26.09.2010, 21:48 | ||
0
|
||
|
ridbiord
|
||
| 27.09.2010, 07:02 | ||
Похоже, оптимизатор просто сует в PORTC 0, ибо ему так кажется, что будет лучше. :) |
||
|
ridbiord
|
||
| 27.09.2010, 07:03 | ||
Как говорил один известный дедушка, premature optimizotion is the root of all evil. Как я понимаю, именно это и происходит. |
||
| 27.09.2010, 07:03 | |
|
Помогаю со студенческими работами здесь
20
Логика маткада при работе оператора условия if.
Логика программы при if \ else Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|