Viktor_ 0 17 апреля, 2006 Опубликовано 17 апреля, 2006 · Жалоба Вопрос очень прост. Записываю программу, всё работает пока не нажму Reset, либо не отключу питание. Почему не переходит на программу? В чём дело? после Reset, как я думаю контроллер переходит на 0000 адресс в котором должен хранится jmp на точьку входа. Но почему на работает то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ipc 0 17 апреля, 2006 Опубликовано 17 апреля, 2006 · Жалоба Вопрос очень прост. Записываю программу, всё работает пока не нажму Reset, либо не отключу питание. Почему не переходит на программу? В чём дело? после Reset, как я думаю контроллер переходит на 0000 адресс в котором должен хранится jmp на точьку входа. Но почему на работает то? В вопросе есть ответ скорее всего неправильно сделана таблица векторов.Лучше бы посмотреть на исходник или на мемори мап. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktor_ 0 17 апреля, 2006 Опубликовано 17 апреля, 2006 · Жалоба Как не работат переход на точку входа я могу понять, но почему? Некоторое время назад всё было ОК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ipc 0 17 апреля, 2006 Опубликовано 17 апреля, 2006 · Жалоба Как не работат переход на точку входа я могу понять, но почему? Некоторое время назад всё было ОК. По разному бывает,например если злоупотреблять директивами типа ORG можно разбомбить все что угодно включаю точку входа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 17 апреля, 2006 Опубликовано 17 апреля, 2006 · Жалоба А может у вас просто бутлоадер все время активируется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
volkanaft 0 17 апреля, 2006 Опубликовано 17 апреля, 2006 · Жалоба Если работаете в Keil-e, запустите симулятор и увидете куда программа выходит после Reset 1. если все правильно - смотрим что делается на EA & PSEN в момент окончания RESET (а на EA и во время выполнения программы) 2. если в симуляторе выполняется неправильно - ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktor_ 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба Большое спасибо за советы. Я даже начал что-то понимать :blink: А ЕЩЁ ВОПРОС - ЧТО такое "БУТЛОАДЕР"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
*SERG 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба Посмотри осцилографом что творитьбся на ножке сброса, они критично относятся к форме импульса зброса, даже микрухи специальные для них выпускают.........., форму в даташите глянь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktor_ 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба вообщем вроде понял в чём дело. Reset вроде ничё пашет. Проблемма с точкой входа. не могу понять как првильно использовать org.???? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktor_ 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба .ORG 0000h lJMP MAIN ; jump to main program .ORG 0100h MAIN: Работать должно???? Если нет то как нужно??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ipc 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба вообщем вроде понял в чём дело. Reset вроде ничё пашет. Проблемма с точкой входа. не могу понять как првильно использовать org.???? Нужно бы конечно про директивы почитать а то врятли что путное получится.Вот небольшой пример использования директив(надергал из одного своего проекта). $INCLUDE (MOD52) VERSION EQU 5700 ;*************************************************************** ;Описание сегментов программы ;*************************************************************** PROG SEGMENT CODE CONST SEGMENT CODE STACK SEGMENT IDATA VAR SEGMENT DATA ;**************************************************************** ;Область обьявлений и присваиваний ;***************************************************************** HLD1 BIT P1.2 HLD2 BIT P1.3 system EQU R6 ;****************************************************************** ; Область изменяемых параметров ;****************************************************************** QUARZ EQU 16 IF VERSION=5600 ChanON EQU 21 TimeON EQU 900 ENDIF IF VERSION=5700 ChanON EQU 28 TimeON EQU 001 ENDIF PWR EQU 0dfh FRQ EQU 0fah ;*************************************************************** ;Область констант ;*************************************************************** RSEG CONST Mas1Address: DB 01 ,03 ,04 ,05 ,10 ,12 ,12 ,13 ,13 ,14 ,12 ,14 ,14 ,15 ,15 ,16 ,16 ,17 Mas2Address: DB 01 ,03 ,04 ,05 ,11 ,14 ,15 ,14 ,15 ,15 ,13 ,16 ,17 ,16 ,17 ,18 ,19 ,18 ;****************************************************************** ;Область переменных ;****************************************************************** RSEG VAR BitArray: DS 4 RollToggle: DS 1 ;****************************************************************** ;Область стека ;****************************************************************** RSEG STACK ;Сегмент стека DS 20H ; RSEG PROG ;****************************************************************** ;Область векторов прерываний ;******************************************************************* ORG 00h ;Вектор ресета JMP START ;Переход на начало программы ORG 01BH ;Вектор таймера JMP T1_INTERRUPT ;Переход на обработчик переполнения таймера ;******************************************************************** ;Главный цикл программы ;******************************************************************** START: MOV SP, #STACK-1 ;Определить стек итд Особое внимание рекомендую обратить на определение сегментов разных типов(RSEG) и присвоение стека.А также на возможность использования препроцессора IF EQU DS DB итд.В зависимости от компилятора директивы могут менятся но суть одна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktor_ 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба блиииин. Чёта сильно уж мутно.... :( Нее, я понимаю всё это, но неужели это нужно прописывать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ipc 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба блиииин. Чёта сильно уж мутно.... :( Нее, я понимаю всё это, но неужели это нужно прописывать? Да ничего немутно.Нужно же обьяснить компилятору и линкеру где размещать данные,код,константы и стек.Если не ты то кто же это сделает ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktor_ 0 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба всё. Буду читать, читать, читать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stas 1 18 апреля, 2006 Опубликовано 18 апреля, 2006 · Жалоба Судя по тому, что прога исполняется после загрузки, но после ресета не прет - ты не убираешь с PSEN нагрузочный резистор на землю. Во время ресета если на PSENe висит нагрузка то ADUC8xx после окончания ресета переходит в режим программирования (те запускается внутренний код для записи памяти программ содержимым, получаемым с последовательного порта - тн бутлоадер). Если ты после загрузки не убрал с PSENа, то кристалл после очередного ресета опять ждет программирования. Итог - убери нагрузку с PSEN, после ресета должен исполнятся код с адреса 0000h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться