учусь писать на асьме.
тут вопрос возник по PIC16F873A может кто подскажет как его аппаратный стек сбросить?
а то у меня он че то переполнился еще до сохранения в нем данных.
вызов подпрограммы(CALL)-возвращение RETURN тут мой отладчик пишет что произошло оно...переполнение стека
Скорее всего неверная конфигурация проекта...
Попробуй воспользоваться стандартными шаблонами MPLABa:
"диск":\Program Files\Microchip\MPASM Suite\Template
"диск":\Program Files\Microchip\MPASM Suite\Template\Code -- 16F873ATEMP.asm
или для относительной адресации
"диск":\Program Files\Microchip\MPASM Suite\Template\Object -- 16F873ATMPO.asm
только не позатирай и не утащи исходные файлы из их каталогов (лучше "копировать-вставить") !!!
Ежли чего - насчет ассемблера позлодействуем... ( http://radiokot.ru/forum/viewtopic.php? ... 0%BA%D0%B8)
Спасибо что откликнулись бум мучить.
так то если не использовать стек-программа будет в 3 раза больше...жесть .
это я дисплей 1602 инициализировать пытаюсь.
писал простую программку для PIC16F629(другой проект) в ней все пучком-стек не переполняется.
а тут грабли с 873
У среднемалых пиков баловаться с аппаратным стеком есть садомазохизмо однако...
Другое дело ежли программно-организованный стек (или более корректное применение регистров СОЗУ) или на крайний случай верхушка стека у 18-х.
А самый муррр - у MCS51 или у AVR.
Вы здесь какие то страсти описываете . Какие еще махинации . Стек аппаратный, софтово НЕДОСТУПЕН.
У ТС банальное не понятие структуры программы . Код выкладывайте.
Так и код банален-сконфигурирован процессор-организуем любую подпрограмму с вызовом call и возвратом return.
ошибка на моменте возврата из подпрограммы. отладчик(PIC simulator IDE) пишет дойдя до стоки return= hardware stack underflow.
и останавливает работу.
и в протеусе не вылазит из подпрограммы.
пс. если что- компилятор не ругается.
код во вложении. для примера=подпрограмма записывает из акамулятора в порт. Спойлер#include P16F873A.inc ; подключение фаила для 16F873A
__config B'11111000001' ; КОНФИГУРИРОВАНИЕ контрллера.
org 0
goto START
;------------------------------
Похоже, программа составлена из кусков других программ. Уберите return в конце и все перестанут ругаться на stack (может будут ругаться на что-то еще). return нужет для возврата из подпрограмм а у Вас никакие подпрограммы не вызываются.
BOB51 писал(а):
растущий в геометрической прогрессии RETurn...
Да уж ..короче пробовал даже убирать вообще "гото".
убрал команду вызова подпрограммы (call)
все равно залазит в подпрограмму ..
не должно быть такого.... Спойлер#include P16F873A.inc ; подключение фаила для 16F873A
__config B'11111000001' ; КОНФИГУРИРОВАНИЕ контрллера.
org 0
;------------------------------
;--------------------------------------------------------------
clrf STATUS ;очистка регистра статус
clrf INTCON ;очиска регистра прерывания
call pause1; вызов нашей подпрограммы
; вот этот тип странной наружности ;)--
pause1
movwf TRISB
return
После вызова подпрограммы pause1 в стеке будет адрес возврата, а управление передастся на метку pause1. Оператор movwf TRISB проработает, затем return вынет адрес возврата из стека и передаст управление на команду, следующую за инструкцией call pause1, т.е. опять на метку pause1. Это только Вы знаете, что это должна быть подпрограмма. Процессору это все равно, он и не знает, что такое подпрограммы вообще. Короче, тело подпрограммы выполнится опять и при выполнении команды return процессор полезет в стек за адресом возврата. А там ничего нет. Поэтому и Stack Underflow.