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 написана совместно с инженером Курбановым Д.С.