Перейти к содержанию
    

вопрос по ADuC

Вопрос очень прост. Записываю программу, всё работает пока не нажму Reset, либо не отключу питание.

Почему не переходит на программу? В чём дело? после Reset, как я думаю контроллер переходит на 0000 адресс в котором должен хранится jmp на точьку входа. Но почему на работает то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос очень прост. Записываю программу, всё работает пока не нажму Reset, либо не отключу питание.

Почему не переходит на программу? В чём дело? после Reset, как я думаю контроллер переходит на 0000 адресс в котором должен хранится jmp на точьку входа. Но почему на работает то?

В вопросе есть ответ скорее всего неправильно сделана таблица векторов.Лучше бы посмотреть на исходник или на мемори мап.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как не работат переход на точку входа я могу понять, но почему? Некоторое время назад всё было ОК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как не работат переход на точку входа я могу понять, но почему? Некоторое время назад всё было ОК.

По разному бывает,например если злоупотреблять директивами типа ORG можно разбомбить все что угодно включаю точку входа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если работаете в Keil-e, запустите симулятор и увидете куда программа выходит после Reset

1. если все правильно - смотрим что делается на EA & PSEN в момент окончания RESET

(а на EA и во время выполнения программы)

2. если в симуляторе выполняется неправильно - ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое спасибо за советы. Я даже начал что-то понимать :blink:

А ЕЩЁ ВОПРОС - ЧТО такое "БУТЛОАДЕР"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотри осцилографом что творитьбся на ножке сброса, они критично относятся к форме импульса зброса, даже микрухи специальные для них выпускают.........., форму в даташите глянь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вообщем вроде понял в чём дело. Reset вроде ничё пашет. Проблемма с точкой входа. не могу понять как првильно использовать org.????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.ORG 0000h

lJMP MAIN ; jump to main program

 

.ORG 0100h

MAIN:

 

Работать должно????

Если нет то как нужно???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вообщем вроде понял в чём дело. 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 итд.В зависимости от компилятора директивы могут менятся но суть одна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

блиииин. Чёта сильно уж мутно.... :(

Нее, я понимаю всё это, но неужели это нужно прописывать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

блиииин. Чёта сильно уж мутно.... :(

Нее, я понимаю всё это, но неужели это нужно прописывать?

Да ничего немутно.Нужно же обьяснить компилятору и линкеру где размещать данные,код,константы и стек.Если не ты то кто же это сделает ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по тому, что прога исполняется после загрузки, но после ресета не прет - ты не убираешь с PSEN нагрузочный резистор на землю. Во время ресета если на PSENe висит нагрузка то ADUC8xx после окончания ресета переходит в режим программирования (те запускается внутренний код для записи памяти программ содержимым, получаемым с последовательного порта - тн бутлоадер). Если ты после загрузки не убрал с PSENа, то кристалл после очередного ресета опять ждет программирования. Итог - убери нагрузку с PSEN, после ресета должен исполнятся код с адреса 0000h

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...