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

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

контроллер AT90S2313, Тип выбранного микроконтроллера должен соответствовать файлу *def.inc, включаемому директивой .include в программу. Поэтому в нашу профамму включен файл 2313def.inc.

В окошке Frequency таким же образом выберите частоту тактового генератора микроконтроллера из списка или введите ее вручную. Для нашего устройства эта частота равна 4 МГц и соответствует резонансной частоте кварцевого резонатора, подключенного к микроконтроллеру.

Значение частоты может быть дробным, например, 7.37 МГц, причем поддерживается лишь два знака после десятичной точки. Введенное вручную значение частоты тактового генератора автоматически ограничивается снизу частотой 0.01 МГц. Если введенная частота окажется выше допустимой для выбранного устройства, сообщение об этом появится в окне Output после нажатия кнопки ОК.

О файлах * def.inc

Мы начали отладку в окне профаммы желтая стрелка указателя отладчика установлена против первой команды: rjmp RESET. Теперь можно просмотреть содержимое файла 2313def.inc. На Рис.9 демонстрируется, как открыть файл *def.inc для просмотра.

Work, расе

•rt к Alarm

Create new Fife

: Handler nnn r:3»)Ti ItiRT VlW. imB Eiant.ir H,=

I I /Im. Г..I. IM M. I in.

« » » « K««lt « к X» « л« W » к № я К

•АР Р L I С А Т t О » П о

« Hiimber AVROOO

* F:ile Мам» 2311def

* Title Register"Bit

* Date 98 05 22

* Version .1 22 Support: telepiione i-? ?

* Support fsk +47 72 88 , » Support E-Mail avrfetiel

Target MCD .AT90S2313

* DESCRIPTION

* 4hen including this tile in

1 .

1С: : ,;n.l5lir;

Puc. 9. Открытие файла *def.inc

Для того, чтобы открыть файл *def.inc для просмотра, добавим его в список файлов в окне Workspace, для этого щелкнем правой клавишей мышки по списку Assembler, в открывшемся окне щелкнем по строке Add Existing File, в появившемся окне Открытие файла найдем и откроем файл c:\AVR\def\2313def.inc (для поиска в окошке Тип файла надо заменить



«*.asm» на «Все файлы»). Двойным щелчком откройте добавившийся к списку Assembler файл 2313def.inc?\, на экране поверх окна программы появится окно с содержимым интересующего нас файла. Большую часть ] файла составляют директивы .equ, позволяющие присваивать имена константам, например .equ PORTB = $18.

Конечно, можно использовать в программе вместо имени ЮКТВ константу $18, но удачно подобранные имена значительно облегчают чтение и понимание программ. Это же касается и директивы .def. Отличие состоит в том, что она позволяет назначить имена регистрам.

Замечу, что одним и тем же константам или регистрам можно присвоить несколько имен в зависимости от их назначения в том или ином блоке программы. Например, в файле 23l3def.inc константе 2 назначено несколько имен: PD2, РВ2, CS02. В нашей программе директива .equ door = PD2 назначает константе 2 имя door, но константа представлена не явно, а одним из своих имен. I

В связи с ограниченным количеством регистров в микроконтроллере i одни регистры в разных блоках программы могут использоваться для раз- ных целей под разными именами. Так, в одном месте регистр г 18 может ис- ! пользоваться как счетчик циклов (counter), в другом - как регистр вре- ; менного хранения (store), поэтому удобно для этого регистра назначить соответствующие имена: .def store = г18 VLm .def cntr = rl8. В окне Program Output после ассемблирования программы появится предупреждение (warning) о том, что регистру уже назначено имя.

Поскольку обращение какк.5/оге, так и к cntr-это обращение к регистру : г18, надо избегать конфликтов при их совместном использовании, ведь изменение содержимого store автоматически изменяет содержимое cntr :

Блок ссылок на обработчики прерываний

Обработчики прерываний входят в состав программы микроконтроллера и могут размещаться в любой ее части. Поэтому для обнаружения начала обработчика конкретного прерывания в программе его адрес заносится в фиксированную ячейку памяти программ.

В предложенном варианте программы только одно прерывание - RESET. Адрес подпрограммы, обрабатывающей прерывание RESET, всегда хранится в ячейке памяти программ с адресом 0x0000.

Обработчик этого прерывания выполняется после изменения уровня с НИЗКОГО на ВЫСОКИЙ на контакте RESET микроконтроллера. В нашей схеме это происходит после подачи питания на микроконтроллер или после отпускания кнопки SA4 с некоторой задержкой (см. описание схемы).

Чтобы обозначить начало обработчика, в программе ставится метка (в нашей программе это метка RESET:), а ее адрес надо записать в нулевую



ячейку памяти программ. В программе это записывается в нулевой ячейке памяти так: rjmp RESET. Директива .ceg указывает компилятору что код программы должен быть помещен в кодовый сегмент памяти (память программ); директива .org О сообщает что код следует размещать, начиная с нулевого адреса указанного сегмента памяти.

Каждый тип микроконтроллеров AVR имеет индивидуальный набор прерываний (для микроконтроллера AT90S2313 их одиннадцать).

Итак, в нулевой ячейке хранится адрес начала обработчика RESET:, в следующих десяти ячейках в строгой последовательности должны храниться адреса оставшихся десяти прерываний микроконтроллера AT90S2313. Так как мы не используем эти прерывания, вместо адресов помещаются пустые команды пор. Однако в тексте приведенной программы за каждой командой пор следует закомментированная ссьшка (перед ней ставится точка с запятой) на подпрограмму обработки прерывания. Так, если понадобится использовать прерывание от аналогового компаратора, следует убрать последний оператор пор и точку с запятой за ним, тогда в этой строке окажется команда rjmp ANACOMP. В программу понадобится добавить метку ANACOMP:, которая обозначит начало подпрограммы обработки прерывания от аналогового компаратора. Завершить подпрограмму обработки прерывания надо командой reti.

Как узнать, в какой последовательности и сколько прерываний должно быть в блоке?

Такой блок можно найти в полном техническом описании соответствующего микроконтроллера в разделе /Interrupts/Interrupt Vectors/ или /Architectural Overview/Reset and Interrupt Handling либо в конце файла *def. inc.

Можно скопировать блок из раздела /Interrupts/Interrupt \fectors/ или /Architectural Overview/Reset and Interrupt Handling полного технического описания микроконтроллера (файл pdl) и вставить его в программу, убрав затем адреса, стоящие в начале каждой строки (Sxxx). Вместо не используемых в программе прерываний надо вставить команды пор.

S000

rjmp

RESET

Reset Handler

$001

rjmp

EXT INTO

IRQO Handler

$002

rjmp

EXT INT1

IRQl Handler

$003

rjmp

TIM CAPT1

Timerl Capture Handler

S004

rjmp

TIM C0MP1

Timerl Compare Handler

$005

rjmp

TIM 0VF1

Timerl Overflow Handler

$006

rjmp

TIMOVFO

TimerO Overflow Handler

$007

rjmp

UART RXC

UART RX Complete Handler

$008

rjmp

UART DRE

UDR Empty Handler

S009

rjmp

UART TXC

UART TX Complete Handler

$00а

rjmp

ANA COMP

Analog Comparator Handler



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.0099