[uquote="akl",url="/forum/viewtopic.php?p=3301166#p3301166"]Может переменные объявлены, но не установлены?
Код: Выделить всё
.equ ReadOffset=$70
.equ ArrCtrOffset=$71
.equ BuffSize=32
CLR R0
STS ArrCtrOffset,R0
STS ReadOffset,R0
TTT:
lds R21,ArrCtrOffset
inc R21 ; Увеличиваем ArrayCounterOffset
cpi R21,6
BRLO Exit
; brne Exit
clr R21
lds R25,ReadOffset
inc R25 ; Увеличиваем ReadOffset
cpi R25,BuffSize
brne Exit
; brne Exit
clr R25
Exit: sts ArrCtrOffset,R21
sts ReadOffset,R25
RJMP TTT
[/uquote]
У меня начало вот так выглядит:
Код: Выделить всё
*************** Константы *****************************************
.equ BuffSize = 32
*************** ОЗУ ***********************************************
.dseg
IN_buff: .byte 32 ; Буфер приема
Read: .byte 1 ; Указатель точки чтения из буфера
ReadOffset: .byte 1 ; Смещение точки чтения
ArrCtrOffset: .byte 1 ; Смещение счётчика чтения массива
Write: .byte 1 ; Указатель точки записи в буфер
;************** Макросы *******************************************
.macro PUSHF
push R16
in R16,SREG
push R16
.endmacro
.macro POPF
pop R16
out SREG,R16
pop R16
.endmacro
*******************************************************************
.cseg
.org 0
Дальше идёт таблица векторов прерывания и затем начинается программа.
Может, я макросы не там разместил? Наверное, их надо размещать после
.cseg ?
Добавлено after 6 minutes 16 seconds:
[uquote="АСУ",url="/forum/viewtopic.php?p=3301171#p3301171"]Тебе нужно взять в привычку при любом прерывании сохранять в стек значения регистров r16, r17 и SREG, а при выходе из прерывания возвращать из стека сохраненные значения этих регистров. Небольшой нюанс при сохранении заключается в следующем: всегда первым сохраняется регистр r16 все последующие не имеют упорядоченного значения. Извлекаются значения из стека строго в обратной последовательности (r16 последним). Таким же образом поступают и с теми регистрами, которые используются как в основном теле программы, так и задействованы в теле прерывания.[/uquote]
В стек всё сохраняю. Начинаю с R16, затем SREG (написал макросы PUSHF и POPF)
Добавлено after 5 minutes 9 seconds:
[uquote="Demiurg",url="/forum/viewtopic.php?p=3301150#p3301150"]Пользуйтесь симулятором в студии для отладки программ.[/uquote] Кстати да, я симулятором ни разу не пользовался. Надо попробовать) Как думаете, лучше Proteus или AVR Studio?