И правильно, что не работает Я же еще раньше протелепатил и сказал тебе, что RESTART у тебя не
вызывается, а в лоб
исполняется из строчки .include "ReStart.asm". А еще раньше то же самое происходит и с .include "Init.asm".
Запомни - директива
.include в ассемблерах просто вставляет весь текст из указанного файла в то место, где находится сама. В итоге ты получаешь следующий код (опускаю вектора и .include "init.asm" для краткости):
RESET:
CLI
ldi TMP_1, high(RAMEND-1)
out SPH, TMP_1
ldi TMP_1, low(RAMEND-1)
out SPL, TMP_1
ldi TMP_1,0xAA
sts LAST_ADDR,TMP_1
; .include "ReStart.asm"
RESTART:
lds TMP_1,MCUSR
sbrc TMP_1,3 ;WDRF
rcall OLD_NASTROIKI
sbrc TMP_1,2 ;BORF
rcall OLD_NASTROIKI
sbrc TMP_1,1 ;EXTRF
rcall OLD_NASTROIKI
ret ; <---- в никуда, т.к. не было rcall RESTART. Тут стек и выворачивается.
OLD_NASTROIKI:
ret
Как видишь, до main код даже не успевает дойти. Не знаю, чем кончается у тебя init.asm - если не ret, то можешь оставить его на месте, а вот остальные
твои .include следует расположить
после main: rjmp main, да и init.asm лучше завершить ret'ом и вызывать как подпрограмму - получится стройный код:
.org 0x00067 ; <--- а это еще зачем?? Уберинах.
// Точка входа в программу
RESET:
CLI ; <--- лишнее, они и так выключены аппаратным reset'ом
ldi TMP_1, high(RAMEND-1)
out SPH, TMP_1
ldi TMP_1, low(RAMEND-1)
out SPL, TMP_1
ldi TMP_1,0xAA
sts LAST_ADDR,TMP_1
//******************************************************************************
// MAIN
//******************************************************************************
//******************************************************************************
rcall INIT ; <--- разумеется, INIT должен завершаться ret'ом
sei ; <--- подразумеваю, что прерывания должны разрешаться ПОСЛЕ init
rcall RESTART
rcall CONECT_PROV
rjmp MAIN
MAIN:
rjmp MAIN
//--------------------------------------------------------------------
//******************************************************************************
// Подгрузка файлов
//******************************************************************************
.include "Init.asm" ; <--- заверши его ret'ом
.include "ReStart.asm"
.include "Interapt.asm"
.include "Connect.asm"
.include "Delay.asm"
Таким образом у тебя код, содержащийся в инклудах, сможет получить управление только при явном вызове (rcall/call), т.к. дальше
rjmp main прямого исполнения нет.