![]() |
Осваиваем AVR! |
|
новости | с чего начать? | ссылки | учебник | примеры | программатор | отладчики | осциллограф | давно это было | download | сотрудничество | пишите мне
пример отладки | бегущие огни | Мигалка | Экономим ресурс ПЗУ | Работаем с USART | 555
Эти программы связывают МК и компьютер по RS232. С микроконтроллера передаются пакеты вида: 0x55,0xAA, R0,R1,........,R30,R32, контрсумма Первые два байта (0x55,0xAA) служат для синхронизации, определяя начало пакета. Потом идут 32 байта данных, представляющих собой содержимое регистров микроконтроллера. Завершает пакет контрольная сумма - дополнение до 0. Передача пакетов идет непрерывно, В случае ошибки приема на компьютере ( контрольная сумма не 0 ) принятые данные отображаются, но увеличивается счетчик ошибок. С компьютера передаются пакеты вида: 0x01,adres,data, контрсумма. Первый байт (0x01) - синхро, затем два байта, затем адрес куда писать и данные - что писать. Завершает пакет контрольная сумма. Адрес должен быть в пределах 0..31, если более 31 - то принятые данные никуда не пишутся. В случае ошибки (контрольная сумма не 0) запись также не производится. С протоколом определились, теперь попробую коротко описать работу программы МК. В начале программы вас могут насторожить таинственные переходы с векторов прерывания, адреса... Это трюк для экономии ресурса ПЗУ микроконтроллера. В сеттерах - ничего необычного, устанавливаем стек, настраиваем USART на скорость 9600 (для кварца 4 МГц!) и работу в прерываниях, затем отключаем аналоговый компаратор - ну не нужен он нам. Инициализируем переменные, разрешаем прерывания и входим в бесконечный основной цикл. В этом цикле - просто читаем порты и заносим прочитанные значения в R0 и R1. Сразу замечу, что входные линии портов к Vcc не подтянуты, поэтому считанные значения будут "плясать" от любого дуновения ветерка. При приеме байта с компьютера вызывается обработчик UARTReceiveComplete. Первое, что в нем делается - сохраняется в стеке регистр TMPL и регистр состояния МК, так как они будут изменяться. Для конкретно этой программы - сохранения можно бы и не делать, все равно в рабочем цикле на изменение TMPL и SREG нам глубоко наплевать. Но - давайте делать все так, как положено. Ведь эту программу можно развивать дальше... Итак, сделаны необходимые действия при входе в прерывание. После этого начинаем собственно работу - считываем принятый байт и в зависимости от флага режима приема:
Передача пакетов на компьютер также ведется в прерываниях, UARTDREmpty. В принципе, структура аналогичная, только вместо флагов используется номер (APER) - если от от 0 до 31 - передается соответствующий адрес памяти (он же - регистр), если 32 - контрольная сумма, если 33/34 - то синхробайты $55/$AA. Заметим, что при старте программы APER инициализируется числом 33. Ну вот вроде и все! Да, при старте мы заносим числа $10 в R10 и $11 в R11 - это просто чтобы проверить правильность работы. На "снимке" окна программы вы это видите. Вы можете изменять регистры МК с компьютера! Так, введите в левый edit число 10, в правый - что вам в голову придет, и нажмите кнопочку Send. Смотрим в принимаемые данные - так и есть, R10 теперь равен не $10, а введенному вами числу! Можно радоваться. Да, вот еще. Некоторые регистры вам не удастся поменять таким образом! Почему - разберитесь сами. |
||||
|
|
|
|
|
|
|
||||||||||||||||||||||
(с)nml 08-Dec-2006