[img][img]http://img.radiokot.ru/files/96849/thumbnail/blyvtzk9b.jpg[/img][/img]
Что нужно дописать в коде, чтобы инициализировать стек?
Запуск производил в AVR Simulator пошагово, а ошибка возникла в строчке:
Код: Выделить всё
; опрос уровня заряда конденсатора
rcall adcnКод: Выделить всё
.include "tn26def.inc"
; Микроконтроллер: AVR tiny26
; Тактовая частота: 8 МГц
; Питание: нестабилизированное 3,8 В
.list
.def tmp = r16
.def tmp2 = r17
.def tmp3 = r18
.def tempo = r19
.def pir = r22
.def pur = r23
.def par = r20
.def Xa = r21
.def adr = r0
.def prg1 = r24
.def prg2 = r25
.cseg
.org 0
rjmp RESET
nop ;rjmp EXT_INT0 - прерывание по входному сигналу
nop ;rjmp EXT_PIN - прерывание не используется
nop ;rjmp TIME_CMPA - прерывание от таймера
nop ;rjmp TIME_CMPB - прерывание от таймера
nop ;rjmp TIME_OVF1 - прерывание от таймера
nop ;rjmp TIME_OVF0 - прерывание от таймера
nop ;rjmp USI_STRT - прерывание от USI
nop ;rjmp USI_OVR - прерывание от USI
nop ;rjmp EE_RDY - прерывание от таймера
nop ;rjmp ANA_COMP - прерывание от компаратора
nop ;rjmp ADC - прерывание от АЦП
.org 20
; настройка портов
RESET: nop
clr tmp
out DDRA, tmp
out PORTA, tmp ; обнулить порт А
clr tmp
ldi tmp, $FC ; РА0, РА1, - входы
out DDRA, tmp
clr tmp
out DDRB, tmp
out PORTB, tmp ; обнулить порт В
clr tmp
ldi tmp, $BF ; РВ6-вход
out DDRB, tmp
;Начало программы
nStart: nop
;сброс всех значений
clr pir
clr pur
clr prg1
clr prg2
clr adr
;вход в подпрограмму опроса АЦП1
nop
ldi tmp3, $80 ;источник питания, ADC2, ADMUX
ldi tmp2, $C6 ; одиночное, запуск, 1/64, ADCSR
; опрос уровня заряда конденсатора
rcall adcn
mov r30, tmp2 ;загрузка младшего разряда
mov r31, tmp3 ;загрузка старшего разряда
nop
ldi tmp2, $B5 ;значение младшего разряда порога
ldi tmp3, $01 ;значение старшего разряда порога
;вычитание значения АЦП и порога
sub r30, tmp2
;проверка на ноль старшего байта
clr tmp
rol tmp
sub r31, tmp3 ;вычитание старшего байта с заемом
sub r31, tmp ;вычитание заема
loki: nop
brmi nStart ;переход, если результат < 0
nop
;опрос DIP1
DIP: nop
in tmp, PORTA
nop
sbis PINA, 1 ;пропустить если не нажат DIP1.1
rjmp qq0
s1: nop
sbis PINB, 6 ;пропустить если не нажат DIP1.2
rjmp qq1
nop
rjmp qq2
; DIP1.1
qq0: nop
sbis PINB,6 ;пропустить если не нажат DIP1.2
rjmp qq3
nop
rjmp nStart
qq3: nop
clr pir
cvb: nop
inc pir
rcall zader
nop
rcall opros
nop
cls
cpi pir, $0B
brlt cvb
nop
rjmp nStart
; DIP1.2
qq1: nop
sbis PINB, 1 ;пропустить если не нажат DIP1.1
rjmp qq4
nop
rjmp nStart
qq4: nop
clr pir
cvbn: nop
inc pir
rcall zader
nop
rcall opron
nop
cls
cpi pir, $0B
brlt cvbn
nop
rjmp nStart
; DIP1
qq2: nop
nop
cvbm: nop
inc pir
rcall zader
nop
rcall oprom
nop
cls
cpi pir, $14
brlt cvbn
nop
rjmp nStart
;Настройка АЦП
adcn: nop
nop
nop
nop
nop
nop
nop
clr tmp
awe: nop
cpi tmp, $04
brsh ass
clr tmp3
ldi tmp3, $83 ;внутренний источник, вход ADC3
out ADMUX, tmp3 ;коммутация входов АЦП
clr tmp2
clr tmp3
ldi tmp2, $C4 ;одиночное, запуск, 1/16
out ADCSR, tmp2 ;запуск АЦП на преобразование
;Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
;среднее арифметическое действие
ass: nop
clr r8
clc
add tmp2, r2
adc r9, r8
add tmp2, r6
adc r9, r8
add tmp2, r6
adc r9, r8
clc
lsr r9
ror tmp2
lsr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
lsr r9
ror tmp3
lsr r9
ror tmp3
lsr r9
ror tmp3
nop
ret
; Подпрограмма задержки включения светодиодов
zader: nop
wdr
clr r26
clr r29
ldi r29, $AF
cpi tmp3, $00
brne goo
ldi r26, $01
add r26, tmp3
nop
goo: nop
mov r26, tmp3
dm: nop
cpi tmp2, $00
brne goq
ldi Xa, $01
add Xa, tmp2
nop
goq: nop
mov Xa, tmp2
dv: nop
wdr
nop
dx: dec r29
brpl dx
cln
dec Xa
brpl dv
cln
dec r26
brne dm
ret
;Подпрограмма опроса светодиодов программа1
opros: nop
ldi ZH, high(2*prog1A)
ldi ZL, Low(2*prog1A)
Add ZL, pir
LPM
mov prg1, adr
out PORTB, prg1
nop
ldi ZH, high(2*prog1B)
ldi ZL, Low(2*prog1B)
Add ZL, pir
LPM
mov prg2, adr
out PORTB, prg2
ret
;Подпрограмма опроса светодиодов программа2
opron: nop
ldi ZH, high(2*prog2A)
ldi ZL, Low(2*prog2A)
Add ZL, pir
LPM
mov prg1, adr
out PORTB, prg1
nop
ldi ZH, high(2*prog2B)
ldi ZL, Low(2*prog2B)
Add ZL, pir
LPM
mov prg2, adr
out PORTB, prg2
ret
;Подпрограмма опроса светодиодов программа3
oprom: nop
ldi ZH, high(2*prog3A)
ldi ZL, Low(2*prog3A)
Add ZL, pir
LPM
mov prg1, adr
out PORTB, prg1
nop
ldi ZH, high(2*prog3B)
ldi ZL, Low(2*prog3B)
Add ZL, pir
LPM
mov prg2, adr
out PORTB, prg2
ret
.org $200
prog1A:
.DB $00, $00, $00, $00, $80, $40, $20, $10
.DB $08, $04
prog1B:
.DB $08, $04, $02, $01, $00, $00, $00, $00
.DB $00, $00
prog2A:
.DB $00, $00, $00, $00, $80, $C0, $E0, $F0
.DB $F8, $FC
prog2B:
.DB $08, $0C, $0E, $0F, $0F, $0F, $0F, $0F
.DB $0F, $0F
prog3A:
.DB $0C, $18, $30, $60, $C0, $80, $00, $00
.DB $0C, $08
prog3B:
.DB $00, $00, $00, $00, $00, $01, $03, $06
.DB $0C, $08
.EXIT


