Главная  Радио и связь 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 [ 59 ] 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

Программа может использоваться в микроконтроллере ATmega8535, хотя написана она для AT90S8535. Поэтому следует выбрать AT90S8535 в качестве целевого устройства (Debug/Select Platform and Device.../AVR Simulator/AT90S8535). Этим же объясняется включение директивой .include файла 8535def.inc (а не m8535def.inc, связанного с микроконтроллером ATmega8535) а также использование наименования UART (для АТ-mega8535 эта функция именуется USART, а число и наименования регистров несколько отличаются).

Найдите в окне программы метку cycle: и выполните часть программы до этой метки (CtrH- F10). Выполните 5...7 шагов отладки (F11) - программа все время возвращается на метку cycle:, с которой начинается бесконечный цикл.

Откройте окно Ю (меню View/New 10 View), разверните UART/Status Register и UART/Controi Register так, чтобы видеть наименования разрядов. Щелкните правой клавишей мышки по строке Data Register и в открывшемся окне выберите режим Check Box.

Имитируем окончание приема символа UART, установив в Status Register разряд RXC. Следующий шаг отладки вызовет переход на вектор прерывания окончания приема символа UART, по которому расположена команда rjmp UART RXC. Ее выполнение переместит указатель отладчика на начало обработчика прерывания. Выполните часть обработчика до команды in datrs, UDR.

Имитируем прием первого байта команды $5А или в двоичном коде 01011010. Для этого установим разряды 6, 4, 3 и 1 в Data Register (окно lO/UART/Data Register). Выполним один шаг отладки, введенные данные должны оказаться в переменной datrs, проверьте ее состояние, вызвав окно Watches.

Так как в принятом байте четное число единиц, то бит четности должен равняться единице (при проверке на нечетность общее число единиц в 9-разрядном символе нечетно). Поэтому в Control Register установим разряд RXB8, хранящий последний бит символа.

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

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

Для приема отдельных символов вызывается подпрограмма RxCh.

При ее отладке надо повторить действия, описанные для обработчика прерывания UART RXC: выполнить несколько шагов отладки (это будет приводить к возврату на метку mrxl:), установить в Status Register разряд



rXC ввести в Data Register значение очередного байта команды, а в Control Register изменить состояние разряда RXB8 в соответствии с тем, каким должен быть бит четности для записанного байта.

Вызовите окно Memory, чтобы увидеть отображение поступающей команды в ОЗУ микроконтроллера.

При необходимости отладить подпрограмму распознавания команд перед меткой cycle: установите команду rjmp RcgCmd.

При этом в соответствующие ячейки окна Memory введите байты команды. Напомню, что первый байт $5А не записывается в ОЗУ, а байты команды «Записать блок 128 байт в контроллер» разнесены: только один байт, представляющий код команды, записывается в ячейку по адресу aCMD, остальные 132 байта помещаются в область ОЗУ, адрес которой aNumBlk (Ох007Е).

5.3. Канал RS-232: программное обеспечение для компьютера

При разработке приложения в Delphi для управления СОМ-портом компьютера можно использовать обращение к портам ввода/вывода, вызывать функции операционной системы (Windows API) или использовать готовый компонент, который можно найти в сети Internet для среды разработки, в которой выполняется приложение.

Предлагаемое в качестве примера программное обеспечение выполнено в среде разработки Borland Delphi 4.

Программы проверялись в Delphi 5 и в Delphi 6. Для этого в Delphi устанавливались компоненты VaComm, соответствующие версии Delphi.

Других доработок для Delphi 5 не потребовалось.

Для Delphi 6 у компонента VaComm в окне Object Inspector оказалось меньше свойств, поэтому если вы используете Delphi 6, свойства ReadTimeOut, WriteTimeOut, DTRControl, ReadBufSize, WriteBufSize не определяются.

Поскольку в Delphi не предусмотрены функции обращения к портам ввода/вывода компьютера, их придется писать самостоятельно на ассемблере. Программа получится громоздкой и неудобной. А при создании приложений под операционную систему Windows NT/2000/XP такой вариант потребует дополнительных мер для обхода запрета, налагаемого операционной системой на прямые обращения к портам ввода/вывода. Поэтому непосредственное обращение к портам ввода/вывода, без которого нельзя было обойтись на компьютерах с DOS, использовать в приложениях под операционные системы Wmdows 9х, 2000 или NT нецелесообразно.



При отсутствии компонентов можно пользоваться функциями Windows API, для этого необходимо наличие описания этих функций и их параметров, их можно разыскать в сети. Преимуществом функций Windows API является то, что обращение к ним остается одинаковым независимо от того, пишете вы приложение в Delphi или в С.

Наиболее удобным шляется использование готовых компонентов для работы с СОМ-портом, поэтому в рассматриваемых программах используется компонент VaConun из набора компонентов Varian Async32, предлагаемый компанией Varian Software. Этот компонент с файлами помощи и рекомендациями по установке для разных версий Delphi можно найти в сети.

О том, как добавить страницу с компонентом, поддерживающим обращение к СОМ-порту, в палитру компонентов Delphi описывается в Delphi Help и здесь не рассматривается.

5.3.1. Минимальные сведения о Delphi

показаны окна, появляющиеся при запуске

На Рис.30

Delphi 4.

Кнопки сохранения

Панели инструментов


я О Delphi

., „

Страницы палитры компонентов Ш

Label Memo Burton RadioGrotip Н

4.. Наимонование активного компонента в окне Object inspector

Окно формы (форма)


Под формой - окно программы

Рис. 30. Окна Delphi 4



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 [ 59 ] 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93


0.0062