ORG - Установить положение в сегменте
Директива ORG устанавливает счётчик положения равным заданной величине, которая передаётся как параметр. Для сегмента данных она устанавливает счётчик положения в SRAM (ОЗУ), для сегмента программ это программный счётчик, а для сегмента EEPROM это положение в EEPROM. Если директиве предшествует метка (в той же строке) то метка размещается по адресу указанному в параметре директивы. Перед началом компиляции программный счётчик и счётчик EEPROM равны нулю, а счётчик ОЗУ равен 32 (поскольку адреса 0-31 заняты регистрами). Обратите внимание что для ОЗУ и EEPROM используются побайтные счётчики а для программного сегмента - пословный.
Синтаксис:
.ORG выражение
Пример:
.DSEG ; Начало сегмента данных
.ORG 0x37 ; Установить адрес SRAM равным 0x37
variable: .BYTE 1 ; Зарезервировать байт по адресу 0x37H
.CSEG
.ORG 0x10 ; Установить программный счётчик равным 0x10
mov r0,r1 ; Данная команда будет размещена по адресу 0x10
SET - Установить переменный символический эквивалент выражения.
Директива SET присваивает имени некоторое значение. Это имя позднее может быть использовано в выражениях. Причем в отличии от директивы EQU значение имени может быть изменено другой директивой SET.
Синтаксис:
.SET имя = выражение
Пример:
.SET io_offset = 0x23
.SET porta = io_offset + 2
.CSEG ; Начало кодового сегмента
clr r2 ; Очистить регистр r2
out porta,r2 ; Записать в порт A
Выражения
Компилятор позволяет использовать в программе выражения, которые могут состоять операндов, операторов и функций. Все выражения являются 32-битными.
Операнды
Могут быть использованы следующие операнды:
· Метки определённые пользователем (дают значение своего положения).
· Переменные определённые директивой SET
· Константы определённые директивой EQU
· Числа заданные в формате:
o Десятичном (принят по умолчанию): 10, 255
o Шестнадцатеричном (два варианта записи): 0x0a, $0a, 0xff, $ff
o Двоичном: 0b00001010, 0b11111111
o Восьмеричном (начинаются с нуля): 010, 077
· PC - текущее значение программного счётчика (Programm Counter)
Набор инструкций
Мнемокод | Операнды | Описание | Действие | Флаги | Количество машинных циклов | |
Арифметические и логические инструкции | ||||||
ADD1 | Rd, Rr | Сложить два регистра | Rd =Rd + Rr | Z,C,N,V,H | ||
ADC | Rd, Rr | Сложить два регистра с переносом | Rd = Rd + Rr + C | Z,C,N,V,H | ||
ADIW | Rdl,K | Сложить слово с константой | Rdh:Rdl = Rdh:Rdl + K | Z,C,N,V,S | ||
SUB | Rd, Rr | Вычесть два регистра | Rd=Rd - Rr | Z,C,N,V,H | ||
SUBI | Rd, K | Вычесть константу из регистра | Rd=Rd - K | Z,C,N,V,H | ||
SBC | Rd, Rr | Вычесть два регистра с учетом переноса | Rd=Rd - Rr - C | Z,C,N,V,H | ||
SBCI | Rd, K | Вычесть константу из регистра с учетом переноса | Rd=Rd - K - C | Z,C,N,V,H | ||
SBIW | Rdl,K | Вычесть константу из слова | Rdh:Rdl= Rdh:Rdl-K | Z,C,N,V,S | ||
AND | Rd, Rr | Логическое И между регистрами | Rd=Rd&Rr | Z,N,V | ||
ANDI | Rd, K | Логическое И между регистром и константой | Rd=Rd&K | Z,N,V | ||
OR | Rd, Rr | Логическое ИЛИ между регистрами | Rd=Rd v Rr | Z,N,V | ||
ORI | Rd, K | Логическое ИЛИ между регистром и константой | Rd=Rd v K | Z,N,V | ||
EOR | Rd, Rr | Искл. ИЛИ между регистрами | Rd=Rd Rr | Z,N,V | ||
COM | Rd | Дополнение до 0b11111111 ($FF), инверсия | Rd=$FF - Rd | Z,C,N,V | ||
NEG | Rd | Дополнение до 0b00000000 ($00) | Rd=$00 - Rd | Z,C,N,V,H | ||
SBR | Rd, K | Установка бит (бита) в регистре | Rd=Rd v K | Z,N,V | ||
CBR | Rd, K | Сброс бит (бита) в регистре | Rd=Rd · ($FF - K) | Z,N,V | ||
INC | Rd | Инкремент | Rd=Rd + 1 | Z,N,V | ||
DEC | Rd | Декремент | Rd=Rd - 1 | Z,N,V | ||
TST | Rd | Проверка на ноль или минус | Rd=Rd . Rd | Z,N,V | ||
CLR | Rd | Сброс регистра | Rd=Rd-Rd | Z,N,V | ||
SER | Rd | Установка регистра | Rd=$FF | Нет | ||
MUL | Rd, Rr | Умножение без знака | R1:R0=RdxRr | Z, C | ||
MULS | Rd, Rr | Умножение со знаком | R1:R0=RdxRr | Z, C | ||
MULSU | Rd, Rr | Умножение знакового с беззнаковым числом | R1:R0=Rd x Rr | Z, C | ||
FMUL | Rd. Rr | Дробное умножение без знака | R1:R0= (RdxRr) << 1 | Z, C | ||
FMULS | Rd, Rr | Дробное умножение со знаком | R1:R0= (RdxRr) << 1 | Z, C | ||
FMULSU | Rd, Rr | Дробное умножение знакового с беззнаковым числом | R1:R0= (RdxRr) << 1 | Z, C | ||
Инструкции перехода | ||||||
RJMP | k | Относительный переход | PC=PC + k +1 | Нет | ||
IJMP | Косвенный переход по указателю (Z) | PC=Z | Нет | |||
JMP | k | Безусловный переход | PC=k | Нет | ||
RCALL | k | Относительный вызов процедуры | PC=PC + k + 1 | Нет | ||
ICALL | Косвенный вызов процедуры по указателю (Z) | PC=Z | Нет | |||
CALL | k | Безусловный вызов процедуры | PC=k | Нет | ||
RET | Возврат из подпрограммы | PC=STACK | Нет | |||
RETI | Возврат из прерывания | PC=STACK | I | |||
CPSE | Rd,Rr | Сравнение и пропуск, если равно if (Rd = Rr) | PC=PC + 2 или 3 | Нет | 1/2/3 | |
CP | Rd,Rr | Сравнение | Rd-Rr | Z, N,V,C,H | ||
CPC | Rd,Rr | Сравнение с учетом переноса | Rd - Rr-C | Z, N,V,C,H | ||
CPI | Rd,K | Сравнение регистра с константой | Rd-K | Z, N,V,C,H | ||
SBRC | Rr,b | Пропуск, если бит в регистре сброшен | if(Rr(b)=O) PC=PC+2 или 3 | Нет | 1 /2/3 | |
SBRS | Rr, b | Пропуск, если бит в регистре установлен | if (Rr(b)=1) PC=PC+ 2 или 3 | Нет | 1/2/3 | |
SBIC | P, b | Пропуск, если бит в регистре ввода-вывода сброшен | if (P(b)=O) PC=PC + 2 или 3 | Нет | 1 /2/3 | |
SBIS | P, b | Пропуск, если бит в регистре ввода-вывода установлен | if (P(b)=1) PC=PC + 2 или 3 | Нет | 1 /2/3 | |
BRBS | s, k | Переход, если флаг состояния установлен | if(SREG(s)=1) then PC=PC+k + 1 | Нет | 1/2 | |
BRBC | s, k | Переход, если флаг состояния сброшен | if(SREG(s)=0) then PC=PC+k + 1 | Нет | 1 /2 | |
BREQ | k | Переход, если равно | if(Z=1) then PC=PC + k + 1 | Нет | 1 /2 | |
BRNE | k | Переход, если не равно | if(Z=0) then PC=PC + k + 1 | Нет | 1 /2 | |
BRCS | k | Переход, если перенос установлен | if(C=1)then PC=PC+k+ 1 | Нет | 1 /2 | |
BRCC | k | Переход, если перенос сброшен | if(C=0) then PC=PC +k+ 1 | Нет | 1 /2 | |
BRSH | k | Переход, если больше или равно | if(C=0) then PC=PC+k+ | Нет | 1 /2 | |
BRLO | k | Переход, если меньше | if(C=1) then PC=PC+k+1 | Нет | 1 /2 | |
BRMI | k | Переход, если минус | if(N=1) then PC=PC+k + 1 | Нет | 1 /2 | |
BRPL | k | Переход, если плюс | if(N=0) then PC=PC + k + 1 | Нет | 1 /2 | |
BRGE | k | Переход, если больше или равно с учетом знака | if(NeV=0) then PC=PC+k+1 | Нет | 1 /2 | |
BRLT | k | Переход, если меньше нуля с учетом знака | if(NeV=1) then PC=PC+k+ | Нет | 1 /2 | |
BRHS | k | Переход, если флаг Н установлен | if(H=1) then PC=PC+k+1 | Нет | 1 /2 | |
BRHC | k | Переход, если флаг Н сброшен | if (H=0) then PC=PC+k + 1 | Нет | 1 /2 | |
BRTS | k | Переход, если флаг Т установлен | if (T=1) then PC=PC + k +1 | Нет | 1 /2 | |
BRTC | k | Переход, если флаг Т сброшен | if (T=0) then PC=PC+k+1 | Нет | 1 /2 | |
BRVS | k | Переход, если флаг V установлен | if (V= ) then PC=PC+k+1 | Нет | 1 /2 | |
BRVC | k | Переход, если флаг V сброшен | if (V=0) then PC=PC + k+1 | Нет | 1 /2 | |
BRIE | k | Переход, если прерывания разрешены | if (I = 1)then PC=PC+ k+ 1 | Нет | 1 /2 | |
BRID | k | Переход, если прерывания запрещены | if (I =0) then PC=PC +k +1 | Нет | 1 /2 | |
Инструкции передачи данных | ||||||
MOV | Rd, Rr | Запись из регистра в регистр | Rd=Rr | Нет | ||
MOVW | Rd, Rr | Перезапись слова между регистрами | Rd+1:Rd=Rr+1:Rr | Нет | ||
LDI | Rd, K | Запись константы в регистр | Rd=K | Нет | ||
LD | Rd, X | Косвенное считывание из памяти в регистр | Rd=(X) | Нет | ||
LD | Rd, X+ | Косвенное считывание из памяти в регистр и инкр. | Rd=(X), X=X + 1 | Нет | ||
LD | Rd,-X | Предварительный декремент, а затем косвенное считывание из памяти в регистр | X=X - 1, Rd=(X) | Нет | ||
LD | Rd,Y | Косвенное считывание из памяти в регистр | Rd=(Y) | Нет | ||
LD | Rd, Y+ | Косвенное считывание из памяти в регистр и инкр. | Rd=(Y), Y=Y + 1 | Нет | ||
LD | Rd,-Y | Предварительный декремент, а затем косвенное считывание из памяти в регистр | Y=Y - 1, Rd=(Y) | Нет | ||
LDD | Rd,Y+q | Косвенное считывание из памяти в регистр со смещением | Rd=(Y + q) | Нет | ||
LD | Rd, Z | Косвенное считывание из памяти в регистр | Rd=(Z) | Нет | ||
LD | Rd, Z+ | Косвенное считывание из памяти в регистр и инкр. | Rd=(Z),Z=Z+1 | Нет | ||
LD | Rd.-Z | Предварительный декремент, а затем косвенное считывание из памяти в регистр | Z=Z - 1, Rd=(Z) | Нет | ||
LDD | Rd, Z+q | Косвенное считывание из памяти в регистр со смещением | Rd=(Z + q) | Нет | ||
LDS | Rd, k | Непосредственное чтение из ОЗУ в регистр | Rd=(k) | Нет | ||
ST | X, Rr | Косвенная запись | (X)=Rr | Нет | ||
ST | X+, Rr | Косвенная запись и послед. инкремент | (X)=Rr, X=X + 1 | Нет | ||
ST | -X, Rr | Предв. декремент и косвенная запись | X=X - 1, (X)=Rr | Нет | ||
ST | Y, Rr | Косвенная запись | (Y)=Rr | Нет | ||
ST | Y+, Rr | Косвенная запись и послед. инкремент | (Y)=Rr, Y=Y + 1 | Нет | ||
ST | -Y, Rr | Предв. декремент и косвенная запись | Y=Y - 1, (Y)=Rr | Нет | ||
STD | Y+q,Rr | Косвенная запись со смещением | (Y + q)=Rr | Нет | ||
ST | Z, Rr | Косвенная запись | (Z)=Rr | Нет | ||
ST | Z+, Rr | Косвенная запись и послед. инкремент | (Z)=Rr, Z=Z + 1 | Нет | ||
ST | -Z. Rr | Предв. декремент и косвенная запись | Z=Z - 1, (Z)=Rr | Нет | ||
STD | Z+q,Rr | Косвенная запись со смещением | (Z + q)=Rr | Нет | ||
STS | k, Rr | Непосредственная запись в ОЗУ | (k)=Rr | Нет | ||
LPM | Чтение из памяти программ | R0=(Z) | Нет | |||
LPM | Rd, Z | Чтение из памяти программ | Rd=(Z) | Нет | ||
LPM | Rd, Z+ | Чтение из памяти программ и последующий инкремент | Rd=(Z), Z=Z+1 | Нет | ||
ELPM | Расширенное чтение из памяти программ | R0=(RAMPZ:Z) | Нет | |||
ELPM | Rd, Z | Расширенное чтение из памяти программ | Rd=(RAMPZ:Z) | Нет | ||
ELPM | Rd, Z+ | Расширенное чтение из памяти программ и последующие инкремент | Rd=(RAMPZ:Z), RAMPZ:Z=RAMPZ:Z+1 | Нет | ||
SPM | Запись в память программ | (Z)=R1 :R0 | Нет | - | ||
IN | Rd, P | Считывание из порта ввода-вывода в регистр | Rd=P | Нет | ||
OUT | P, Rr | Запись из регистра в порт ввода-вывода | P=Rd | Нет | ||
PUSH | Rr | Помещение содержимого регистра в стек | STACK=Rr | Нет | ||
POP | Rd | Извлечение из стека в регистр | Rd=STACK | Нет | ||
Битовые инструкции и инструкции тестирования бит | ||||||
SBI | P,b | Установка бита в регистре ввода-вывода | l/O(P,b)=1 | Нет | ||
CBI | P,b | Сброс бита в регистре ввода-вывода | l/O(P,b)=0 | Нет | ||
LSL | Rd | Логический сдвиг влево | Rd(n+1)=Rd(n), Rd(0)=0 | Z,C,N,V | ||
LSR | Rd | Логический сдвиг вправо | Rd(n)=Rd(n+1), Rd(7)=0 | Z,C,N,V | ||
ROL | Rd | Вращение влево через перенос | Rd(0)= C, Rd(n+1)=Rd(n), C=Rd(7) | Z,C,N,V | ||
ROR | Rd | Вращение вправо через перенос | Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) | Z,C,N,V | ||
ASR | Rd | Арифметический сдвиг вправо | Rd(n)= Rd(n+1), n=0..6 | Z,C,N,V | ||
SWAP | Rd | Обмен тетрадами | Rd(3..0)=Rd(7..4), Rd(7..4)=Rd(3..0) | Нет | ||
BSET | s | Установка флага регистра SREG | SREG(s)=1 | SREG(s) | ||
BCLR | s | Сброс флага регистра SREG | SREG(s)=0 | SREG(s) | ||
BST | Rr, b | Запись бита регистра в T | T=Rr(b) | T | ||
BLD | Rd, b | Чтение из T в бит регистра | Rd(b)=T | Нет | ||
SEC | Установка переноса | C=1 | C | |||
CLC | Сброс переноса | C=0 | C | |||
SEN | Установка флага N | N=1 | N | |||
CLN | Сброс флага N | N=0 | N | |||
SEZ | Установка флага нуля Z | Z=1 | Z | |||
CLZ | Сброс флага нуля Z | Z=0 | Z | |||
SEI | Общее разрешение прерываний | L= 1 | I | |||
CLI | Общий запрет прерываний | l=0 | I | |||
SES | Установка флага S | S=1 | S | |||
CLS | Сброс флага S | S=0 | S | |||
SEV | Установка флага V в регистре SREG | V=1 | V | |||
CLV | Сброс флага V в регистре SREG | V=0 | V | |||
SET | Установка флага T в регистре SREG | T=1 | T | |||
CLT | Сброс флага T в регистре SREG | T=0 | T | |||
SEH | Установка флага Н в регистре SREG | H=1 | H | |||
CLH | Сброс флага Н в регистре SREG | H=0 | H | |||
Инструкции управления микроконтроллером | ||||||
NOP | Нет операции | Нет | ||||
SLEEP | Перевод в режим сна | (см. подробное описание режима сна) | Нет | |||
WDR | Сброс сторожевого таймера | (см. подробное описание сторожевого таймера) | Нет | |||
BREAK | Прерывание | Только для встроенной отладки | Нет | - | ||
Приложение 3
Таблица П5. Сводная таблица регистров микроконтроллеров
Семейства AVR
Наименование и адрес регистра | Разряд 7 | Разряд 6 | Разряд 5 | Разряд | Разряд 3 | Разряд 2 | Разряд 1 | Разряд 0 |
($FF)-Резерв | - | - | - | - | - | - | - | - |
($9E)-Резерв | - | - | - | - | - | - | - | - |
($9D)-UCSR1C Регистр C управления и статуса УСАПП1 | - | UMSEL1 | UPM11 | UPM10 | USBS1 | UCSZ11 | UCSZ10 | UCPOL1 |
($9C)-UDR1 | Регистр данных УСАПП 1 | |||||||
($9B)-UCSR1A Регистр А управления и статуса УСАПП1 | RXC1 | TXC1 | UDRE1 | FE1 | DOR1 | UPE1 | U2X1 | MPCM1 |
($9A)-UCSR1B Регистр B управления и статуса УСАПП1 | RXCIE1 | TXCIE1 | UDRIE1 | RXEN1 | TXEN1 | UCSZ12 | RXB81 | TXB81 |
($99)-UBRR1L | Младший байт регистра скорости связи УСАПП1 | |||||||
($98)-UBRR1H | - | - | - | - | Старший байт регистра скорости связи УСАПП1 | |||
($97)-Резерв | - | - | - | - | - | - | - | - |
($96)-Резерв | - | - | - | - | - | - | - | - |
($95)-UCSR0C. Регистр C управления и статуса УСАПП0 | - | UMSEL0 | UPM01 | UPM00 | USBS0 | UCSZ01 | UCSZ00 | UCPOL0 |
($94)-Резерв | - | - | - | - | - | - | - | - |
($93)-Резерв | - | - | - | - | - | - | - | - |
($92)-Резерв | - | - | - | - | - | - | - | - |
($91)-Резерв | - | - | - | - | - | - | - | - |
($90)-UBRR0H | - | - | - | - | Ст. байт регистра скорости связи УСАПП0 | |||
($8F)-Резерв | - | - | - | - | - | - | - | - |
($8E)-Резерв | - | - | - | - | - | - | - | - |
($8D)-Резерв | - | - | - | - | - | - | - | - |
($8C)-TCCR3C | FOC3A | FOC3B | FOC3C | - | - | - | - | - |
($8B)-TCCR3A | COM3A1 | COM3A0 | COM3B1 | COM3B0 | COM3C1 | COM3C0 | WGM31 | WGM30 |
($8A)-TCCR3B | ICNC3 | ICES3 | - | WGM33 | WGM32 | CS32 | CS31 | CS30 |
($89)-TCNT3H | Таймер-счетчик 3 - Старший байт регистра счетчика | |||||||
($88)-TCNT3L | Таймер-счетчик 3 - Младший байт регистра счетчика | |||||||
($87)-OCR3AH | Таймер-счетчик 3 - Старший байт регистра А порога сравнения | |||||||
($86)-OCR3AL | Таймер-счетчик 3 - Младший байт регистра А порога сравнения | |||||||
($85)-OCR3BH | Таймер-счетчик 3 - Старший байт регистра В порога сравнения | |||||||
($84)-OCR3BL | Таймер-счетчик 3 - Младший байт регистра В порога сравнения | |||||||
($83)-OCR3CH | Таймер-счетчик 3 - Старший байт регистра С порога сравнения | |||||||
($82)-OCR3CL | Таймер-счетчик 3 - Младший байт регистра С порога сравнения | |||||||
($81)-ICR3H | Таймер-счетчик 3 - Старший байт регистра захвата | |||||||
($80)-ICR3L | Таймер-счетчик 3 - Младший байт регистра захвата | |||||||
($7F)-Резерв | - | - | - | - | - | - | - | - |
($7E)-Резерв | - | - | - | - | - | - | - | - |
($7D)-ETIMSK | - | - | TICIE3 | OCIE3A | OCIE3B | TOIE3 | OCIE3C | OCIE1C |
($7C)-ETIFR | - | - | ICF3 | OCF3A | OCF3B | TOV3 | OCF3C | OCF1C |
($7B)-Резерв | - | - | - | - | - | - | - | - |
($7A)-TCCR1C | FOC1A | FOC1B | FOC1C | - | - | - | - | - |
($79)-OCR1CH | Таймер-счетчик 1 - Старший байт регистра С порога сравнения | |||||||
($78)-OCR1CL | Таймер-счетчик 1 - Младший байт регистра С порога сравнения | |||||||
($77)-Резерв | - | - | - | - | - | - | - | - |
($76)-Резерв | - | - | - | - | - | - | - | - |
($75)-Резерв | - | - | - | - | - | - | - | - |
($74)-TWCR. Регистр управления шиной TWI | TWINT | TWEA | TWSTA | TWSTO | TWWC | TWEN | - | TWIE |
($73)-TWDR. Регистр данных шины TWI | Регистр данных двухпроводного последовательного интерфейса | |||||||
($72)-TWAR. Регистр подчиненного адреса шины TWI | TWA6 | TWA5 | TWA4 | TWA3 | TWA2 | TWA1 | TWA0 | TWGCE |
($71)-TWSR. Регистр состояния TWI | TWS7 | TWS6 | TWS5 | TWS4 | TWS3 | - | TWPS1 | TWPS0 |
($70)-TWBR | Регистр задания скорости связи двухпроводного последовательного интерфейса | |||||||
($6F)-OSCCAL | Регистр калибровки генератора | |||||||
($6E)-Резерв | - | - | - | - | - | - | - | - |
($6D)-XMCRA | - | SRL2 | SRL1 | SRL0 | SRW01 | SRW00 | SRW11 | - |
($6C)-XMCRB | - | - | - | - | - | XMM2 | XMM1 | XMM0 |
($6B)-Резерв | - | - | - | - | - | - | - | - |
($6A)-EICRA | ISC31 | ISC30 | ISC21 | ISC20 | ISC11 | ISC10 | ISC01 | ISC00 |
($69)-Резерв | - | - | - | - | - | - | - | - |
($68)-SPMCSR | SPMIE | RWWSB | - | RWWSRE | BLBSET | PGWRT | PGERS | SPMEN |
($67)-Резерв | - | - | - | - | - | - | - | - |
($66)-Резерв | - | - | - | - | - | - | - | - |
($65)-PORTG | - | - | - | PORTG4 | PORTG3 | PORTG2 | PORTG1 | PORTG0 |
($64)-DDRG. Регистр управления направлением порта G | - | - | - | DDG4 | DDG3 | DDG2 | DDG1 | DDG0 |
($63)-PING | - | - | - | PING4 | PING3 | PING2 | PING1 | PING0 |
($62)-PORTF | PORTF7 | PORTF6 | PORTF5 | PORTF4 | PORTF3 | PORTF2 | PORTF1 | PORTF0 |
($61)-DDRF. Регистр управления направлением порта F | DDF7 | DDF6 | DDF5 | DDF4 | DDF3 | DDF2 | DDF1 | DDF0 |
($60)-Резерв | - | - | - | - | - | - | - | - |
$3F($5F)-SREG. Регистр управления и статуса МК | I | T | H | S | V | N | Z | C |
$3E($5E)-SPH. Указатель стека (ст. байт) | SP15 | SP14 | SP13 | SP12 | SP11 | SP10 | SP9 | SP8 |
$3D($5D)-SPL Указатель стека (мл. байт) | SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0 |
$3C($5C)-XDIV | XDIVEN | XDIV6 | XDIV5 | XDIV4 | XDIV3 | XDIV2 | XDIV1 | XDIV0 |
Примечания:
1. Для совместимости с последующими версиями микроконтроллеров рекомендуется в резервные разряды записывать лог. 0. В резервные ячейки памяти не рекомендуется выполнять запись.
2.Некоторые флаги состояния сбрасываются путем записи в них лог. 1. Обратите внимание, что инструкции CBI и SBI работают со всеми разрядами регистра ввода-вывода (чтение-модификация-запись). Инструкции CBI и SBI работают только с регистрами $00…$1F.
Приложение 4
Таблица П6. Векторы сброса и прерываний МК ATmega128
№ вектора | Адрес памяти программ | Источник | Условие возникновения прерывания |
$0000 | RESET | Внешний сброс, сброс при подаче питания, сброс при недопустимом снижении питания, сброс сторожевым таймером и сброс через JTAG-интерфейс | |
$0002 | INT0 | Запрос на внешнее прерывание 0 | |
$0004 | INT1 | Запрос на внешнее прерывание 1 | |
$0006 | INT2 | Запрос на внешнее прерывание 2 | |
$0008 | INT3 | Запрос на внешнее прерывание 3 | |
$000A | INT4 | Запрос на внешнее прерывание 4 | |
$000C | INT5 | Запрос на внешнее прерывание 5 | |
$000E | INT6 | Запрос на внешнее прерывание 6 | |
$0010 | INT7 | Запрос на внешнее прерывание 7 | |
$0012 | TIMER2 COMP | Срабатывание компаратора таймера-счетчика 2 | |
$0014 | TIMER2 OVF | Переполнение таймера-счетчика 2 | |
$0016 | TIMER1 CAPT | Захват фронта таймером-счетчиком 1 | |
$0018 | TIMER1 COMPA | Срабатывание компаратора А таймера-счетчика 1 | |
$001A | TIMER1 COMPB | Срабатывание компаратора В таймера-счетчика 1 | |
$001C | TIMER1 OVF | Переполнение таймера-счетчика 1 | |
$001E | TIMER0 COMP | Срабатывание компаратора таймера-счетчика 0 | |
$0020 | TIMER0 OVF | Переполнение таймера-счетчика 0 | |
$0022 | SPI, STC | Завершение последовательной передачи интерфейсом SPI | |
$0024 | USART0, RX | Завершение приема УСАПП 0 | |
$0026 | USART0, UDRE | Регистр данных УСАПП0 свободен | |
$0028 | USART0, TX | Завершение передачи УСАПП 0 | |
$002A | ADC | Завершение преобразования АЦП | |
$002C | EE READY | Готовность EEPROM | |
$002E | ANALOG COMP | Аналоговый компаратор | |
$0030(3) | TIMER1 COMPC | Срабатывание компаратора С таймера-счетчика 1 | |
$0032(3) | TIMER3 CAPT | Захват фронта таймером счетчиком 3 | |
$0034(3) | TIMER3 COMPA | Срабатывание компаратора А таймера-счетчика 3 | |
$0036(3) | TIMER3 COMPB | Срабатывание компаратора В таймера-счетчика 3 | |
$0038(3) | TIMER3 COMPC | Срабатывание компаратора С таймера-счетчика 3 | |
$003A(3) | TIMER3 OVF | Переполнение таймера счетчика 3 | |
$003C(3) | USART1, RX | Завершение приема УСАПП 1 | |
$003E(3) | USART1, UDRE | Регистр данных УСАПП1 свободен | |
$0040(3) | USART1, TX | Завершение передачи УСАПП1 | |
$0042(3) | TWI | Двухпроводной последовательный интерфейс | |
$0044(3) | SPM READY | Готовность записи в память программ |
Примечания.
1. Если конфигурационный бит BOOTRST запрограммирован, то микроконтроллер выполняет переход на адрес сброса в загрузочном секторе.
2. Если установлен бит IVSEL в регистре MCUCR, то векторы прерываний перемещаются в начало загрузочного сектор флэш-памяти. В этом случае к адресу каждого вектора прерывания из таблицы прибавляется стартовый адрес загрузочного сектора флэш-памяти.
3. Прерывания по адресам $0030 - $0044 не существуют в режиме совместимости с ATmega103.
Приложение 5
Нумерация выводов и типы корпусов микроконтроллеров
семейства AVR
ATmega8(L)
ATmega128
ATmega64
ATmega32
ATmega16
|
ATmega169
ATmega8535
ATmega163
ATtiny15L
ATtiny26
ATtiny28
AT90S2313
[1] При написании данного раздела использован материал сайта http://logic-bratsk.ru/radio/micro/atmega128/index.htm
[2] Программная модель процессора - эта совокупность программно-доступных регистров, а функционирование процессора заключается в пересылке данных из одного регистра в другой регистр с преобразованием или без преобразования.
[3] Если векторы прерываний помещаются в загрузочный сектор и бит защиты загрузочного сектора BLB02 запрограммирован, то прерывания будут отключены при выполнении программы в секторе прикладной программы. Если векторы прерываний размещены в прикладном секторе и бит защиты BLB12 запрограммирован, то прерывания становятся отключенными при выполнении программы в загрузочном секторе.
[4] Выход аналогового компаратора (ACO) только у таймера-счетчика 1 может выступать в качестве сигнала захвата. У таймера-счетчика 3 эта возможность отсутствует.
[5] Терминология интерфейса TWI.
Ведущий -устройство, которое инициирует и прекращает сеанс связи. Сигнал синхронизации SCL всегда генерируется ведущим устройством;
Подчиненный – устройство, которое адресуется ведущим устройством;
Передатчик - устройство, размещающее данные на шине;
Приемник -устройство, считывающее данные с шины.
[6] Глава 3 написана совместно с инженером Курбановым Д.С.