Цитата(Vlad219i @ May 5 2008, 20:22)

Думается мне - это косяк вот этой конкретной программы. )
Посмотрите, пожалуйста. Возможно что-то я делаю не так? Косяки очень возможны. Спасибо.
===================================================
.include "c:\asm\AvrAssembler2\Appnotes\m8def.inc"
ldi xh, high(sram_size) ;очистка памяти (SRAM)
ldi xl, low(sram_size)
ldi zh, high(sram_start)
ldi zl, low(sram_start)
clr r16
clr_ram:st z+, r16
sbiw xh:xl, 1
brne clr_ram
clr zh
clr zl
clr r16
init: ; Начало программы
; Включаем и инициализируем АЦП
ldi r20,0b11100100
out adcsra,r20
ldi r20,0b11100000
out admux,r20
; Запись консанты начала ОЗУ
ldi r24,$0060
; Загрузка таблицы чисел семисегментного индикатора в ОЗУ
ldi r29,0b11111100
sts $0060,r29
ldi r29,0b01100000
sts $0061,r29
ldi r29,0b11011010
sts $0062,r29
ldi r29,0b11110010
sts $0063,r29
ldi r29,0b01100110
sts $0064,r29
ldi r29,0b10110110
sts $0065,r29
ldi r29,0b10111110
sts $0066,r29
ldi r29,0b11100000
sts $0067,r29
ldi r29,0b11111110
sts $0068,r29
ldi r29,0b11110110
sts $0069,r29
; Перемещаем данные АЦП в регистр r16
in r16,adch
; Если - перебор, то выводим E
ldi r29,255
cp r16,r29
in r28,sreg
sbrc r28,1
rjmp error
; Переводим регистр r16 в двоично-десятичный код
ldi r17,164
mul r16,r17
clr r18
lsl r0
rol r1
rol r18
lsl r0
rol r1
rol r18
inc r1
ldi r16,10
mul r1,r16
mov r17,r1
mul r0,r16
mov r16,r1
; Прибавляем единицу для коррекного инкремента
subi r16,-1
subi r17,-1
subi r18,-1
; Находим и устанавливам разряд 1 в регистр r25
ldi zl,0
nrav1:
inc zl
cp r16,zl
in r20,sreg
sbrs r20,1
rjmp nrav1
subi zl,1
add zl,r24
ld r25,z
; Находим и устанавливам разряд 2 в регистр r26
ldi zl,0
nrav2:
inc zl
cp r17,zl
in r20,sreg
sbrs r20,1
rjmp nrav2
subi zl,1
add zl,r24
ld r26,z
; Находим и устанавливам разряд 3 в регистр r27
ldi zl,0
nrav3:
inc zl
cp r18,zl
in r20,sreg
sbrs r20,1
rjmp nrav3
subi zl,1
add zl,r24
ld r27,z
; Инициализируем порты B и D
ldi r16,0b11111111
out ddrb,r16
out ddrd,r16
; Выводим информацию последовательно в порт: R25 R26 R27
ldi r22,0
ldi r23,0
ldi r24,128
zad:
inc r23
cp r23,r24
in r22,sreg
sbrc r22,1
rjmp init
; Младший разряд
ldi r20,0b11111011
out portd,r20
out portb,r25
; Задержка
ldi r16,255
ldi r17,0
init1:
inc r17
cp r16,r17
in r18,sreg
sbrs r18,1
rjmp init1
; Средний разряд
ldi r20,0b11111101
out portd,r20
out portb,r26
sbi portb,0 ; Точка дробного остатка
; Задержка
ldi r16,255
ldi r17,0
init2:
inc r17
cp r16,r17
in r18,sreg
sbrs r18,1
rjmp init2
; Старший разряд
ldi r20,0b11111110
out portd,r20
out portb,r27
; Задержка
ldi r16,255
ldi r17,0
init3:
inc r17
cp r16,r17
in r18,sreg
sbrs r18,1
rjmp init3
rjmp zad
error:
ldi r20,0b11111000
out portd,r20
ldi r27,0b10011110
out portb,r27
sbi portb,1
===========================================
Цитата(galjoen @ May 5 2008, 20:08)

А ватчдог?
Нет, не зависает. Видно по скорости обновления индикатора, что так и должно быть (т.е она работает, только данные из ОЗУ читаются неверно, и неверно же выдаются на индикатор.