Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil C, AT89S8253, содержимое ячеек внутренней EEPROM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
black_priest
Товарищи, не подскажите, есть ли способ в тексте программы на С задать начальные значания ячеек EEPROM, которые потом соответственно перекочуют в hex и оттуда в контроллер при прошивке?
Палыч
Имхо, Keil "заточен" под классические МК51, в которых EEPROM для хранения данных отсутствует, поэтому и такая "фича" в нём не предусмотрена. Однако, ничто не мешает Вам завести проект, который выдаст Вам нужный Вам hex-файл. Состоять он будет из одного файла на ассемблере, в котором определены нужные адреса и байты (слова) с нужными Вам значениями. Ещё, как вариант, в прикладной программе при включении МК предусмотреть проверку EEPROM на чистоту, и если записей нет - прописать "заводские" установки.
black_priest
Спасибо за ответ. Видимо действительно нет способа. Задача вызвана необходимостью сгрузить часть таблиц из кода в EEPROM, так как память может вскоре окончитсья. Придетеся действовать указанным Палычем способом, неудобно правда проект для прошивки в виде двух хексов иметь.
Rimid
Например в Ride'е можно написать
Код
org 2000h
db 01h, 02h, 03h

или на С
Код
char xdata Array[3] = {0x03, 0x56, 0x03};


Будет создан соответствующий bin или hex файл.
В данном случае уже должен программатор уметь работать с таким файлом, т.к. некоторым для флеш и EEPROM нужно указывать файлы отдельно.

Может и в Keil'е так можно. unsure.gif
an_ga
Код
void ram_eeprom(void data*,void xdata*,unsigned char);
void eeprom_ram(void xdata*,void data*,unsigned char);

unsigned int xdata KeyClock_ee;
.
.
.
ram_eeprom(&KeyClock,&KeyClock_ee,sizeof(KeyClock));
.
.
.
eeprom_ram(&KeyClock_ee,&KeyClock,sizeof(KeyClock));
Это основная программа на С.

А это функции на ассемблере:


NAME EEPROM_MODULE

EEPROM_MODULE SEGMENT CODE
PUBLIC _eeprom_ram,_ram_eeprom

sfr EECON   = 0x96; Memory Control Register

    rseg eeprom_module

;---------------------------------------------------------------
;Перенос данных из EEPROM в ОЗУ
;В R0 адрес в ОЗУ, куда переносим
;В DPTR адрес в EEPROM, откуда берем
;В R3 сколько байт
;---------------------------------------------------------------
_eeprom_ram:
    mov    dph,r6;откуда из EEPROM
    mov    dpl,r7
    mov    a,r5;куда в RAM
    mov    r0,a

    orl    EECON,#00001000b;включаем EEPROM
rd_eeprom:
    movx    a,@dptr
    mov    @r0,a
    inc    dptr
    inc    r0
    djnz    r3,rd_eeprom
    anl    EECON,#11110111b;выключаем EEPROM
    ret
;--------------------------------------
;Перенос данных из ОЗУ в EEPROM
;В R0 адрес в ОЗУ, откуда берем
;В DPTR адрес в EEPROM, куда переносим
;В R3 сколько байт
;--------------------------------------
_ram_eeprom:
    mov    a,r7;откуда из RAM
    mov    r0,a
    mov    dph,r4;куда в EEPROM
    mov    dpl,r5

    orl    EECON,#00011000b;включаем EEPROM, разрешаем запись
ram_ee:
    mov    a,EECON
    jnb    acc.1,ram_ee;ждем готовности EEPROM (RDY/BSY=1)

    mov    a,@r0
    movx    @dptr,a
    inc    dptr
    inc    r0
wwr2:
    mov    a,EECON
    jnb    acc.1,wwr2;ждем готовности EEPROM (RDY/BSY=1)

    djnz    r3,ram_ee
    anl    EECON,#11100111b;выключаем EEPROM, запрещаем запись

    ret

    END


Писал в Keil.
valser2007
Добрый день. Люди помогите! В Keil на С51 при отладке программы симулятором игнорируются некоторые строки. Соответственно программа неправильно работает и дальнейшее написание программы не имеет смысл. Пробовал разные программы и разные проекты. До определенного момента все нормально, но в какой то момент все повторяется (при добавлении новых строк). Размер кода программы до 2Кб. Да и программа простая. Привожу пример на рисунке. Видно как часть строк игнорируются симуляторомю.
AndreyS
Цитата(valser2007 @ Oct 12 2009, 00:32) *
Добрый день. Люди помогите! В Keil на С51 при отладке программы симулятором игнорируются некоторые строки. Соответственно программа неправильно работает и дальнейшее написание программы не имеет смысл. Пробовал разные программы и разные проекты. До определенного момента все нормально, но в какой то момент все повторяется (при добавлении новых строк). Размер кода программы до 2Кб. Да и программа простая. Привожу пример на рисунке. Видно как часть строк игнорируются симуляторомю.



Добрый день.

Попытаюсь предположить. Он их не игнорирует, он их оптимизирует. Попробуйте в настройках проекта (закладка C51), поиграть с Code Optimization (level). И Emphasis выставить в Favor speed.
valser2007
Добрый день.
Спасибо AndreyS. Написал программу на ассемблере и проверил результаты как на С51, так и на ASM51. Результат вычисления контрольной суммы (именно это было в программе) идентичен. Похоже симулятор их все же оптимизирует. Попробую поизменять настройки, чтобы все строки можно было пройти симулятором.
Еще раз огромное спасибо AndreyS.
valser2007
Добрый день.
Опять проблемы с Keil. Не пойму, или я что-то не догоняю или версия такая? При отладке прерывания последовательного порта значения байта приема указываю в SBUF. На симуляторе при подводе курсора к надписи SBUF появляется его значение. Это значение хочу передать во временный файл (для дальнейшей обработки). Но этого не происходит. Как был байт temp_sbuf равен нулю, так он и остается. Все это видно на рисунках.
Подскажите, если кто знает. Pleeease.
Палыч
Цитата(valser2007 @ Oct 24 2009, 12:17) *
При отладке прерывания последовательного порта значения байта приема указываю в SBUF. На симуляторе при подводе курсора к надписи SBUF появляется его значение. Это значение хочу передать во временный файл (для дальнейшей обработки). Но этого не происходит.
В МК51 два разных регистра обозваны разработчиками одним именем - это два регистра UART: это регистр в который помещается принятый байт, и регистр в который помещается передаваемый байт. Отсюда все проблемы. Изменяя в симуляторе регистр SBUF Вы меняете тот самый регистр с байтом для передачи из МК, а считываете из своей программы тот регистр что для принятых данных, который для изменения из симулятора недоступен.
В Keil есть окошечко Serial Window - вот через него и можно (нужно) передавать данные, якобы через UART.
В отладчике (в симуляторе тоже) доступны такие команды как ASSIGN и МОDE - советую обратить на них внимание. А, если Вы на своём компьютере поставите программу, которая позволяет создавать виртуальные СОМ-порты и соединять их между собой, то передать в прикладную программу, отлаживаемую в Keil байт (или некую последоватьность) не представиться большого труда. При использовании названных выше средств очень удобно отлаживать на одной РС интерфейс между МК и РС.
valser2007
Спасибо Палыч.
Не знаешь где взять описание как пользоваться окошком Serial Window или ссылку на описание. Еще раз огромное СПАСИБО.
Палыч
Цитата(valser2007 @ Oct 25 2009, 12:16) *
Не знаешь где взять описание как пользоваться окошком Serial Window
Ну, какое тут может быть описание. Это окно - самый примитивный терминал: что выдается из МК - отображается в окне; что набирается на клавиатуре - передается в МК. Из-за примитивности это окно и не использую. Лучше, все-таки, поставить на РС виртуальные СОМ-порты и присоединить их симулятору, соединить их между собой. Тогда можно воспользоваться любой терминалкой (той, что больше нравится/подходит для отладки). Терминалка легко привязывается к UART МК с отлаживаемой прикладной программой в симуляторе Keil.
valser2007
В том то и дело, что ничего не набирается. Ни цифры, ни буквы , ни другие символы.
Палыч
Цитата(valser2007 @ Oct 25 2009, 19:36) *
В том то и дело, что ничего не набирается. Ни цифры, ни буквы , ни другие символы.
А - и не должно само набираться (отображаться). Я ведь писал - самый примитивный терминал: отображаются только те символы (байты), что приходят от МК. Т.е. если в прикладной программе есть вывод принятых байтов (эхо), то набираемые символы будут отображаться. Ещё раз повторяю: лучше поставить Serial Port Bridge (я брал вот от сюда); соединить пару виртуальных портов между собой; прицепить к одному порту UART отлаживаемого МК (командами Keil: ASSIGN и МОDE) , а к другому терминалку, которая Вам нравиться, и - работайте/отлаживайте. Гораздо удобнее, чем Serial Window Keil'а...
valser2007
Спасибо Палыч.
Разобрался с прогами и сделал как советовал. ВСЕ ЗАРАБОТАЛО!

БОЛЬШОЕ СПАСИБО!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.