Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Программы > MCS-51

реклама

 




Мероприятия:




Полное описание программы ADSim812

Введение в программу ADSim812

ADSim812 поставляется Analog Devices, чтобы помочь Вам в оценке микроконтроллера ADuC812 и, после оценки, чтобы помочь Вам в разработке и отладке кода для этого микроконтроллера.

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

Настройка Симулятора

ADSim812 был разработан для Analog Devices фирмой Vault Information Services в Littleton, Colorado , США. Vault Information Services поддерживает сайт в World Wide Web полностью посвященный 8052 и также распространяет версию общего пользования этого Симулятора в Интернете. VIS доступен, чтобы создавать 8052 кодирование на основе консультаций, или изменять версию общего пользования Cимулятора к вашим специфическим потребностям.

Для подробной информации, пожалуйста используйте следующие места Интернета:
    Симулятор Общего пользования: http://www.vaultbbs.com/~csteiner/sim8051.htm
    8052 Информационный сайт: http://www.vaultbbs.com/~csteiner/8051tut.htm
    Консультативные услуги: Email:webmaster@gaw.ru

Всплывающее меню File

Следующие опции доступны во всплывающем меню File:

Open Intel-Standard File
Import Map File
Open Simulation
Save Current Simulation
    Open XRAM Memory File
    Save XRAM Memory
Exit

    Open Intel-Standard File

Опция, используемая чтобы сначала загрузить 8051 программу в память Симулятора. После выбора этой опции, Вы будете способны выбрать файл Intel-стандарта, который Вы желаете загрузить. Открытие файла Intel-стандарта запишет поверх любую другую программу, которую Вы имеете в памяти, а также сотрет внешнюю память, внутреннюю память, и все SFRS. Все регистры будут сброшены к значениям по умолчанию для 8051 при включения питания.

Файл, который Вы открываете, должен быть сохранен в формате Intel Standard. Стандарт Intel - популярный формат, часто используемый, для прошивки ППЗУ. Большинство 8051 компиляторов / компоновщиков обеспечивает опцию, которая допускает, чтобы выходные файлы были сохранены как файл Intel-стандарта. Они также часто называются "Hex" файлы.

    Import Map File

Опция используется, чтобы импортировать информацию из карты памяти, созданной вашим компилятором или компоновщиком. Специфические адреса функций и-или меток из вашей программы будут загружены в память Симулятора. Затем, когда Вы выполняете дизассемблирование для вашей программы вместо того, чтобы видеть загадочное обращение типа:

LCALL 3412
Вы можете видеть что-нибудь вроде:
LCALL _printf

В результате ваша программа станет намного более читаемой окне дизассемблера.

Так как форматы файла карты отличны для каждого компилятора / компоновщика, Симулятор в настоящее время не распознает все файлы карты. В настоящее время обеспечивается только файлы карты из следующих программ:

1 Archimedes Universal Linker 4.44
2 Metalink Compiler 1.2

Если Вы имеете любую из этих программ, Вы можете импортировать файл карты в Симулятор. Если Вы используете другие программы и хотели бы чтобы будущие версии Симулятора поддерживали ваш файл карты, пожалуйста пошлите на Email:max@cec-mc полное имя и версию вашего компилятора / компоновщика, приложите пример HEX файла, и соответствующую карту, и-или файл листинга. Я не буду гарантировать, что файл карты из всех программ будут обеспечиваться, но будем стараться поддерживать столько, сколько возможно.

    Open Simulation

Опция Open Simulation допускает, чтобы Вы загрузили моделирования, которые предварительно были сохранены с опцией Save Current Simulation.

    Save Current Simulation

Опция Save Current Simulation дает возможность Вам сохранить ваше действующее моделирование так, чтобы Вы могли продолжить позже.

Опция Open Intel-Standard File полезна для первоначально загрузки вашей программы, но если ваша программа длинна, и ваша работа требует, чтобы Вы прервали моделирование на середине пути, Save Current Simulation обеспечивает способ сохранить ваше место в действующем моделировании и возвратиться к этому позже.

Когда Вы сохраняете моделирование, все 64Кб памяти программ, 64Кб внешней памяти, 256 байтов внутреннего ОЗУ, все SFRS, счетчик команд, порты, и все другие аспекты текущего моделирования сохраняются. Когда Вы впоследствии перезагружаете моделирование, выполнение может продолжаться, как будто оно никогда не было прервано.

Опции Open XRAM Memory File и Save XRAM Memory открывают и сохраняют файлы содержащие данные для заполнения внешней памяти данных.

Всплывающее меню Run

Следующие опции доступны на всплывающем меню Run:

Execute Program
Stop
Reset Program

    Execute Program

Опция меню Execute Program заставит Симулятор начать (или продолжить) выполнение загруженной программы с команды, указанной счетчиком команд. Если только выполнение программы начато (или продолжено), оно продолжится, пока не будет прервано в соответствии с предупреждающим сообщением, контрольной точкой, или в соответствии с пользователем, вручную прерывающим выполнение кнопкой Stop.

В то время как программа выполняется, изменения для SFRS на основном экране могут показываться или нет в зависимости от того, действительно ли Вы выбрали Refresh Screen After Every Instruction (Регенерация Экрана После Каждой Команды).

Поле дисплея Next Instruction ( Следующая Команда) отобразит Running ( Выполняется) когда программа выполняется.

    Stop

Опция Stop заставит Симулятор прекратить выполнять программу, которая в настоящее время выполняется. После того, как программа была остановлена, она может быть впоследствии продолжена, выбором опции Execute Program.

    Reset Program

Опция Reset Program моделирует полный "Сброс Системы" кристалла 8051. При сбросе программы:

  1. Инициализируется счетчик команд в 0 (выполнение впоследствии начнется с адреса 0000).
  2. Инициализируются все 256 ячеек внутреннего ОЗУ в 0.
  3. Инициализируются все 64КБ внешней ОЗУ в 0.
  4. Инициализируются все SFRS в 0, кроме указателя вершины стека, который устанавливается в 07 и порты SFRs, которые устанавливаются в FFH.
  5. Если Симулятор конфигурирован так чтобы пространства памяти программ и данных перекрывались и если загруженная программа была изменена во время выполнения, записываясь поверх с новыми данными, то будет восстановлена первоначально загруженная программа.

Всплывающее меню Debug

Следующие опции доступны на всплывающее меню Debug:

Single Step
Procedure Step
Skip Step
Toggle Breakpoint
Clear All Breakpoints
View/Edit Current Breakpoints

    Single Step (Одиночный Шаг)

Опция Single Step заставляет Симулятор выполнить только следующую команду (команда, отображаемая как Next Instruction внизу основного экрана) и затем остановиться. Все регистры на всех экранах будут немедленно модифицированы, чтобы отразить любые изменения, вызванные выполнением одиночной команды.

    Procedure Step (Шаг Процедуры)

Опция Procedure Step подобна опции Single Step. Однако, она отличается тем, что если следующая команда является вызовом процедуры CALL (или ACALL, или LCALL) будут также выполнены все команды внутри вызываемой подпрограммы (и любой вложенной подпрограммы) перед остановкой.

Это полезно для быстрого выполнения подпрограмм, которые работают правильно и перехода к коду, в отладке которого Вы действительно заинтересованы.

Примечание: Procedure Step устанавливает временную контрольную точку по адресу ЗУ после текущей команды. Это означает, что, если текущая команда, скажем, DJNZ R0,0FA4h, выполнение Procedure Step заставит этот цикл выполняться, пока R0 не достигнет 0. Когда R0 достигает 0, выполнение программы продолжается с следующей после DJNZ команды, в которой установлена временную контрольную точку и таким образом выполнение программы будет прервано. Также имейте в виду, что, если Вы выполняете : Procedure Step в AJMP, LJMP, RET, или RETI, шаг скорее всего не будет завершен, и выполнение программы не будет остановлено, так как команда, которая следует за каждой из вышеупомянутых команд, обычно не может быть выполнена.

    Skip Step (Пропуск Шага)

Опция Skip Step позволяет пользователю перейти к следующей команде в программе без того, чтобы выполнить текущую команду. Например, если текущая команда - "JZ CONTINUE" но Вы, ради тестирования не хотите чтобы Симулятор проверил это условие, Вы можете нажать на Skip Step и команда будет пропущена без выполнения.

Предупреждение: Убедитесь, что Вы знаете то, что Вы делаете, когда Вы пропускаете команды. Невинная на вид команда которая была пропущена, может часто иметь далеко идущие последствия для остальной части программы, особенно если Вы пропускаете некоторый вид команды выполняющей переход (JB, JZ, JBC, и т.д. LCALL, ACALL, LJMP, RET, и т.д.). Команды этого типа изменяют поток выполнения программы и пропуск их, иногда полезный для отладки, заставит программу вести себя по-другому чем, если бы они были выполнены.

    Toggle Breakpoint (Переключатель Контрольной точки)

Опция Toggle Breakpoint используется, чтобы или вставить или удалить "контрольную точку" из программы. "Контрольная точка" - отметка в памяти программы, достижение которой в течение нормального выполнения программы, заставит программу прекратить выполнение так, чтобы программист мог перейти на ручное управление системой или просмотреть текущие переменные, и т.д. Программа может быть затем продолжена, используя Execute Program.

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

Если текущая команда - не контрольная точка и Toggle Breakpoint выбрана, команда станет контрольной точкой и выполнение программы впоследствии остановится перед этой инструкцией.

Если текущая команда - контрольная точка, и Toggle Breakpoint выбрана, команда больше не будет контрольной точкой в будущем.

    Clear All Breakpoints (Очистить все контрольные точки)

Опция Clear All Breakpoints дает возможность пользователю быстро удалить все контрольные точки, которые были вставлены в программу. Часто, в ходе отладки, Вы найдете, что вы вставили много контрольных точек на всем протяжении программы. Вместо того чтобы удалять их " одну за другой ", Вы можете быстро удалять их все, выбирая Clear All Breakpoints.

    View/Edit Current Breakpoints (Просмотр / Редактирование текущих контрольных точек)

Опция View/Edit Current Breakpoints открывает простое окно. Окно отобразит список всех активных в настоящее время контрольных точек. В этом окне пользователь может или удалить контрольную точку, щелкая на адрес в списке и щелкая на Delete Breakpoint, или может добавлять новые контрольные точки, щелкая на Add Breakpoint и вводя шестнадцатеричный адрес места где контрольная точка желательна.

Дополнительно, пользователь может выбрать текущую контрольную точку и нажать на Toggle Breakpoint (или пользователь может дважды нажать на контрольной точке в списке). Если текущая контрольная точка переключается, текст Disabled будет добавлен после адреса контрольной точки. Переключение контрольной точки, обозначенной как Disabled заставит текст исчезнуть. Контрольная точка, которая заблокирована в списке контрольных точек, не будет заставлять программу останавливаться. По существу, "заблокированная" контрольная точка рассматривается Симулятором как не существующая, она существует только в списке так, чтобы пользователь мог легко использовать её заново. Это "переключение" контрольной точки облегчает тестирование кода, когда Вы желаете иметь группу контрольных точек, и даёт возможность отключать различные контрольные точки, без необходимости помнить, где контрольные точки были.

Это полезно для быстро добавления контрольных точек в вашу программу, без изменения PC.

Всплывающее меню View

Следующие опции доступны на Всплывающее меню View:

Terminal Window (Serial I/O)
I2C/SPI Emulation Window
Internal RAM (IRAM)
External RAM (XRAM)
Analog SFRs Window
Flash RAM Window
On-Chip SFR Window
Serial SFR Window
Timer SFR Window
Disassembly (Code Memory)
    Program Analysis

    Terminal Window (Окно Терминала)

Terminal Window - одно из отдельных окон, которое Вы можете открывать, и которое может помочь Вам в текущем контроле выполнения вашей программы.

Некоторые из 8051-ых среди специальных возможностей имеют встроенный последовательный порт, который допускает простой последовательный ввод и вывод 8- или 9-разрядных данных. Любые данные которые Вы записываете в регистр SBUF, записываются в последовательный порт, и любые данные прибывающие в последовательный порт, могут быть прочитаны, просто читая SBUF.

Таким образом, необходимо, чтобы Симулятор 8051 также моделировал эту возможность, и это делается через Окно Терминала.

Любые данные, которые ваша программа посылает последовательному порту, записывая в SBUF, будут отображаться в Окне Терминала. В то время как Окно Терминала - активное окно, что-нибудь, что Вы напечатаете, будет "послано" вашему 8051 приложению как если бы было получено через последовательный порт.

Окно Терминала будет также пытаться сообщать Вам, если возможно, виртуальную скорость в бодах, которую Вы конфигурировали для 8051. Это может быть очень полезно, так как проблемы конфигурации последовательного порта будут часто очевидны только, рассматривая скорость в бодах, которая используется в отчеты имитатора.

Примечание: Вместо того, чтобы использовать Окно Терминала, Вы можете выбрать, чтобы весь последовательный ввод -вывод, был направлен на последовательный порт вашего персонального компьютера. В многих случаях допускается, чтобы Вы соединили ваш персонального компьютер с тем последовательным оборудованием, с которым Вы планируете соединять ваш 8051 и проверять ваше программное обеспечение в "реальной" среде.

    I2C/SPI Emulation Window (Окно Эмуляции I2C/SPI)

I2C/SPI Emulation Window - одно из отдельных окон, которое Вы можете открывать, и которое может помочь Вам в текущем контроле выполнения вашей программы.

ADuC812 включает I2C и SPI интерфейс, который позволяет пользователю использовать для связи эти стандарты с выполнением микроконтроллером большей части работы.

Любые данные, которые ваша программа посылает I2C или SPI порту, будут отображаться в Окне Эмуляции I2C/SPI. В то время как Окно Эмуляции - активное окно, что - нибудь, что Вы напечатаете, будет "послано" вашему 8051 приложению как полученное через I2C или SPI порт.

    Internal RAM (IRAM) (Окно Внутреннего ОЗУ)

Internal RAM (IRAM) дает возможность Вам просмотреть (и редактировать) содержание любого из 256 байтов Internal RAM, которые являются доступными Вам под 8052 архитектурой. Пожалуйста, имейте в виду, что, если Вы работаете с 8051, доступны только первые 128 байтов Internal RAM.

Когда IRAM Окно открыто, оно будет постоянно модифицироваться в течение выполнения программы, если Вы конфигурировали имитатор, чтобы Refresh Screen After Each Instruction Batch.

Для редактирования значений в Internal RAM, просто нажимают на поле, которое содержит значение. Откроется окно редактирования, который даст возможность Вам изменить значение байта, непосредственно вводя новое шестнадцатеричное значение или выбирая индивидуальные биты которые Вы желаете включить.

Обратите внимание, что первые 32 байта (первые две строки в IRAM Окне) используются четырьмя банками регистров. В зависимости от набора регистров, который в настоящее время выбран, изменяя эти байты можно также изменять значение ваших регистров "R". Например, если Вы используете заданный по умолчанию набор регистров, байты от 00 - 07 Internal RAM соответствуют R0 - R7, соответственно. Таким образом если Вы изменяете значение байта 00 IRAM в "45" , Вы найдете, что также изменили значение R0 в "45". Это нормально.

Дополнительно помните что пользовательское "битовое поле " 00 - 7F постоянно находится в 20 байтах Internal RAM начиная с 2F (третья строка в IRAM Окне). Изменение значения этих байтов, изменит соответствующие значения разрядных полей.

В заключение, помните, что по умолчанию "стек" 8051 начинается в Internal RAM с адреса 8 и возрастастает вверх. Если Вы изменяете значение байта, который был помещен в стек, Вы можете легко вызвать непредвиденную операцию программы - особенно, если Вы случайно измените адрес возврата, который позже используется "RET" командой.

External RAM (XRAM) (Окно Внешнего ОЗУ)
External RAM (XRAM) дает Вам возможность просмотреть (и редактировать) содержание 64Кб External RAM которые являются доступными Вам под 8051 архитектурой.

Когда XRAM Окно открыто, оно будет постоянно модифицироваться в течение выполнения программы, если " Экран Регенерации После Каждого Пакета Команд " допускается. Если "Регенерация" не допускается, изменения для XRAM не будут видимы в окне, пока выполнение программы не прервано.

Для редактирования значения в XRAM, просто нажимают на поле, которое содержит значение. Откроется окно редактирования, который даст возможность Вам изменить значение байта, непосредственно вводя новое шестнадцатеричное значение или выбирая индивидуальные биты которые Вы желаете включить.

Внешнее ОЗУ используется для хранения переменных программы, и это использование управляется или компоновщиком (в случае компилируемых программ 'C' и переместимого ассемблерного кода) или непосредственно программистом (в случае полностью ассемблерного кода). В то время как изменение XRAM не столь чувствительно как изменение, например, содержимого стека, Вы должны все же делать это с осторожностью.

Также обратите внимание, что, если вы конфигурировали Симулятор, чтобы функционировать с Overlapped Code/Data Memory(Перекрытие памяти программ/данных), Вы найдете при просмотре содержания XRAM, что имеется большое количество странных значений в памяти. Они - не странные значения, они - ваша программа, и можно гарантировать, что, если Вы изменяете их, то Ваша программа не будет функционировать так, как Вы первоначально планировали. Однако, если Вы случайно изменили вашу программу, то Вы можете восстановить её в первоначальное состояние "Сбрасывая" программу.

    Analog SFRs (Окно Аналоговых SFRs)

Analog SFRs дает возможность просмотреть (и редактировать) содержание SFRs касающихся АЦП и ЦАП.

Любой из SFRS внутри окна может быть отредактирован, щелкая на текущее значение SFR и вводя новое значение. Пожалуйста, обратите внимание, что те функциональные регистры, которые содержат устанавливаемые биты, объединены в одиночные регистры на экране, чтобы оценить полное значение функционального регистра.

Вы можете также изменять моделируемую внешнюю температуру, изменяя External Temperature регистр. Это поле не является SFR, но изменение значения этого поля будет воздействовать на результаты A/D преобразований, которые используют канал считающий температуру. Температура может быть определена или в градусах Цельсия или градусах шкалы Фаренгейта, выбирая соответствующую опцию.

    Flash RAM (Окно Flash ОЗУ)

Flash RAM дает возможность просмотреть (и редактировать) содержимое SFRs связанных с Flash ОЗУ, а также Flash ОЗУ непосредственно.

Любой из SFRsвнутри окна может быть отредактирован, щелкая на текущее значение SFR и вводя новое значение. Вы можете также изменять содержание Flash ОЗУ, щелкая на ячейку Flash ОЗУ в прокручиваемом окне. Вы можете просматривать содержание Flash ОЗУ, перемещая полосу прокрутки, справа от сетки Flash ОЗУ.

Дополнительно, Вы можете переходить к данной странице Flash ОЗУ, щелкая на кнопку Goto Page. После нажатия кнопки Goto Page Вас будут просить ввести номер страницы. Эта страница будет немедленно отображаться в сетке Flash ОЗУ. Эта кнопка полезна, если Вы знаете точную страницу Flash ОЗУ, которую Вы хотите видеть и не желаете использовать полосу прокрутки, чтобы просмотреть её.

    SFR Window (Окно SFR)

SFR Window дает возможность просмотреть (и редактировать) содержимое ОЗУ связанного с SFR. Любой из SFRs внутри окна может быть отредактирован, щелкая на текущее значение SFR и вводя новое значение.

    On-Chip Monitors (Окно состояния кристалла)

Здесь Вы можете изменять SFRs, связанные со сторожевым таймером и функциями управления потреблением.

Вы можете также моделировать "условие малой мощности", проверяя соответствующий переключатель в этом окне. После проверки переключателя, Симулятор моделирует то, что ADUC812 делал бы в реальном маломощном режиме. Вы можете впоследствии изменить переключатель, чтобы указать, что маломощный режим закончен и моделировать восстановление из такого режима.

I2C/SPI SFRs (Окно SFR интерфейсов I2C и SPI)
I2C/SPI SFRs дает возможность просмотреть (и редактировать) содержание SFRs обеспечивающие связь через I2C и SPI стандарты.

Любой из SFRs внутри окна может быть отредактирован, щелкая на текущее значение SFR и вводя новое значение.

    Timers (Окно SFR Таймеров)

Timers дает возможность просмотреть (и редактировать) содержание SFRs таймеров. Эти SFRs - стандартные регистры таймера. А также содержимое счетчиков таймеров.

Любой из SFRs или счетчиков внутри окна может быть отредактирован, щелкая на текущее значение и вводя новое значение.

    I/O Ports (Окно портов)

Окно позволяет отслеживать состояние портов.

    Disassembly (Code Memory) (Окно Дизассемблера)

Окно Дизассемблера - мощное окно, доступное только зарегистрированным пользователям. Окно Дизассемблера допускает, чтобы Вы просмотрели и разобрали память кода "непрерывно", в то время как Вы выполняете вашу программу. Поскольку Вы шагаете через команды вашей программы, текущая команда будет высвечена в Окно Дизассемблера. Команды, которые являются контрольными точками, включают их адрес в скобках.

Имеется ряд опций, доступных Вам в Окне Дизассемблера.

Toggle Breakpoint. Опция Toggle Breakpoint переключит контрольную точку в адресе, в настоящее время выбранном в Окно Дизассемблера. Это позволяет Вам переключать контрольные точки непосредственно в программе, не нуждаясь в наборе адресов.

Go To Address. Когда Вы рассматриваете дизассемблер, Вы можете желать просмотреть дизассемблер области памяти, которая находится не в текущем окне демонтажа. Для выбора другой области щелкают на Go To Address и вводят адрес, с которого Вы желаете дизассемблировать. Окно Дизассемблера будет регенерироваться начиная с адреса, который Вы определяете.

Set Next Instruction. При нажатии на Set Next Instruction установит Счетчик команд Симулятора (PC) равным адресу памяти, который в настоящее время выбран в Окне Дизассемблера. Выполнение программы впоследствии продолжится с нового положения в памяти. Это - простой способ пересылки потока программы к различным разделам программы.

Back To Last Screen. Так как имеется возможность двигаться через память в Окне Дизассемблера, то возможно, что Вы следуя за кодом к некоторой отметке, затем желаете возвратиться к тому месту, где Вы начали. При нажатии на Back To Last Screen произойдёт "отмена" переходов, которые Вы выполняли, чтобы возвратить к началу. Это - по существу тоже самое что и " Back " в Web броузерах или в файле "Help", за исключением того, что Вы будете двигаться обратно в дисплеях памяти скорее чем по страницам в Web или Help cтраницам.

Double-Clicking. Вы можете также выполнить двойной щелчок на команде, которая отображается в Окне Дизассемблера. Это так заставит адрес ЗУ, вызванный в этой команде стать началом текущей дизассемблированной страницы. Таким образом, если Вы дважды нажимаете на команде, которая читается "JZ 545h", Окно Дизассемблера автоматически выведет на дисплей страницу начинающуюся в 545-ом адресе. Конечно, Вы можете возвратиться к тому месту, где Вы были, щелкая на Back To Last Screen.

    Keypad 4x5 (Окно клавиатуры)

Нажимая на кнопку в этом окне можно выдавать сигналы на линии портов ввода-вывода.

    Program Analysis (Анализ Программы)

Окно Program Analysis обеспечивает разработчика / отладчика программы рядом полезных фрагментов информации:

Instructions: Указывает, сколько команд было выполнены, начиная с последнего "сброса" (или с начала выполнения, если никакого "сброса" не было).

Cycles: Указывает, сколько циклов ЦЕНТРАЛЬНОГО ПРОЦЕССОРА были использованы, чтобы выполнить команды. В зависимости от команд, которые выполнялись, это значение будет равно значению Instructions или больше.

CPU Time: Указывает, фактически, как долго ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР работал бы, чтобы выполнить команды. Время выражено в часах, минутах, секундах, и долях секунд. Это значение вычисляется основываясь на Cycles и пункте CPU Clock Speed который может быть конфигурирован в Опциях Проекта.

Stack Initialized To: Указывает значение, к которому программа инициализировала стек. Во многих простых программах, стек никогда специально не инициализируется. Однако в более сложных программах часто полезно инициализировать стек к некоторому предварительно установленному значению - часто, чтобы защитить банки регистров и-или поля битов. Это поле модифицируется всякий раз, когда выполняется команда (кроме того PUSH и POP) которая изменяет значение SP в SFR. Если больше чем одна команда изменяют SP, только самое современное изменение будет отражено в этом поле.

Max Stack Size: Указывает самое большое значение, к которому стек вырос. Стек - динамический список, который увеличивается и сокращается в течение нормального выполнения программы. Часто (особенно в более сложных программах и программах, использующих прерывания) для программиста необходимо удостовериться, что стек не исчерпает память. Это поле может использоваться, чтобы понять то, как большой стек получается в течение выполнения программы. Обратите внимание, что только команда PUSH будет воздействовать на это значение. Ручная загрузка Указателя вершины стека каким-либо значением не будет изменять Max Stack Size (хотя это изменит Stack Initialized To).

XRAM Read/Write Ops: Эти два поля указывают, сколько раз XRAM было обращений для операций чтения или записи. Так как XRAM имедленнее чем IRAM, часто логично попробовать уменьшить количество действий для чтения - записи с XRAM. Эти два поля будут точно отображать, сколько обращений к XRAM делает ваша программа. Конечно, использование XRAM не обязательно плохо - однако, если Вы можете уменьшить ваше использование XRAM в пользу IRAM, ваша программа выполнится более быстро.

Unresolved Function Calls: Это подокно покажет все в настоящее время нерешенные обращения к функции. Это полезно для определения "как Вы попали в ошибочную ситуацию" . Каждый раз когда Симулятор выполняет ACALL, LCALL, или начинает выполнять Прерывание, запись об этом помещается в это окно, в котором остаётся до выполнения соответствующего RET или RETI - когда удаляется из окна. Например, Ваша основная программа вызывает подпрограмму A которая вызывает подпрограмму B, которая вызывает подпрограмму C, которая терпит крах. Когда программа терпит крах, Вы можете посмотреть это окно и сразу поймёте, что возможно проблема находится не в подпрограмме C, но возможно на одном из параметров, которые подпрограмма B передала ей, и т.д.

Execution History: Это подокно покажет 500 последних выполненных команд. Самая старая команда находится наверху списка, а последняя выполненная команда - внизу списка.

Всплывающее меню Configuration

Следующие опции доступны на всплывающее меню Configuration:

Simulator Configuration
Project Options
ADC/DAC Configuration

    Simulator Configuration

Refresh Screen After Every Execution Batch: основной экран содержит много полезных и интересных регистров (Аккумулятор, R0-R7, B, DPTR, Таймеры, и т.д.). Однако в Windows очень трудоемко постоянно модифицировать этих регистры. Если Вы можете работать без того, чтобы видеть постоянные изменения каждой одиночной переменной на экране, Вы можете достигнуть большего быстродействия программы отключая регенерацию изображения после каждого выполненного пакета. Обратите внимание: регистры порта (P0, P1, P2, и P3) всегда модифицируются немедленно, независимо от того, действительно ли пользователь допускает регенерацию изображения. Это потому что абсолютно необходимо чтобы значения порта, отображаемые на экране, отражали их истинные значения.

Instructions Per Execution Batch: это значение может находиться в пределах от 1 до 99999, и указывает, сколько команд Имитатор выполнит перед предоставлением возможности выполнения для других программ Windows. Чем больше значение, тем быстрее Имитатор работает (и медленнее выполняются другие программы Windows). Вы можете значительно повысить быстродействие Имитатора, увеличивая это значение. Пожалуйста, обратитесь к следующей таблице, чтобы оптимизировать ваш Имитатор (эталонное тестирование выполнялось на Pentium-100 с 16Мб ОЗУ, с выключенной регенерацией изображения).

Пакет 1: 6000 Команд/с
Пакет 10: 47000 Команд/с
Пакет 100: 215000 Команд/с
Пакет 1000: 310000 Команд/с
Пакет 10000: 329000 Команд/с
Пакет 99999: 330000 Команд/с

Поскольку Вы можете видеть, закон увеличения команд входит в насыщение по мере увеличения номера. Лично, я рекомендую установить Instructions Per Execution Batch в 1000, поскольку это приведёт к производительности Симулятора почти столь же хороший как при 99999, но дает другим программам Windows больше возможностей выполниться. Таким образом производительность Windows повысится, по сравнению использованием 99999.

Обратите внимание: если даже Instructions Per Execution Batch установлен к очень большому значению, некоторые события будут завершать Пакет Команд преждевременно. Эти " события завершающие пакет " должны быть учтены, при оптимизации производительности Симулятора.

    "События завершающие пакет"

"Пакет команд" является набором команд, которые выполняются без прерывания. Ни Симулятор, ни другая программа Windows, ни сама Windows не может прерывать выполнение пакета. Симулятор выполнит все команды в пакете перед уступающим управлением.

Однако, некоторые события завершат пакет команд преждевременно, независимо от того, сколько команд были в пакете. Следующие события заставят пакет завершаться немедленно:

  • Выполнение команды, которая пытается манипулировать недопустимым битом.
  • Выполнение команды, которая пытается манипулировать недопустимым SFR.
  • Если это конфигурировано в Опциях Проекта, выполнение NOP команды.
  • Если это конфигурировано в Опциях Проекта, выполнение неопределенной команды (A5h)
  • Выполнение RET команды, которая возвращается к адресу, который Имитатор определяет как неправильный. Эта опция конфигурируется в Опциях Проекта так, что эти предупреждения могут или не могут отображаться, однако, даже если предупреждение не отображается, пакет всегда завершается.
  • Выполнение RET команды, когда Имитатор определяет что никакой RET не должен быть выполнен. Снова, как в предыдущем случае, эта опция с перестраиваемой конфигурацией в Опциях Проекта, но она будет всегда завершать пакет, даже если опция не допускается.
  • Выполнение достигло контрольной точки.
  • Стек достиг уровня, определенного в Опциях Проекта как максимальный размер стека.
  • Имитатор определяет, что программа обработки прерывания не правильно сохранила регистры. Даже если опция не допускается в Опциях Проекта, пакет будет завершен.
  • Любой порт (P0, P1, P2, или P3) изменяется.
  • Байт передан 8052 программой через 8052 последовательный порт.

Вообще пользователь не должен волноваться относительно событий, которые завершают пакет. Однако если пользователь по некоторым причинам должен оптимизировать производительность Имитатора, он должен избегать действий, которые вызвали бы одно или большее количество вышеупомянутых событий.

Use Simulator Terminal Emulation Window: Когда эта опция выбрана, весь 8051 последовательный ввод - вывод, который выполняется, будет обработан окном Эмуляции Терминала Имитатора.

Use PC's Comm/Serial Port: Когда эта опция выбрана весь 8051 последовательный ввод-вывод, который выполняется, будет обработан последовательным портом персонального компьютера. То есть любой последовательный вывод, сгенерированный 8051 программой будет выпущен через последовательный порт персонального компьютера, и любые данные, полученные последовательным портом персонального компьютера, будут поставлены 8051 программе, как будто это было получено через 8051 последовательный порт.

Когда эта опция выбрана, пользователь должен также выбрать для использования порт COM (1-4) и скорость в бодах (300-19200). Выбранная скорость в бодах будет всегда использоваться, независимо от того, как 8051 программа конфигурирует последовательный порт.

    Project Options (Опции Проекта)

Окно Project Options позволяет Вам конфигурировать ряд параметров моделирования для ваших специфических потребностей.

Симулятор поддерживает две копии каждой из следующих установок. Имеется набор параметров для Current Project ( Текущего Проекта) (то есть, моделирование, которое выполняется в настоящее время) и другой набор параметров, которые являются Simulator Defaults (Значениями по умолчанию Симулятора). Если Вы делаете изменения для параметров Текущего Проекта и впоследствии загружаете новый HEX файл, параметры будут восстановлены к значениям, содержащимся в " Значения по умолчанию Симулятора. "Параметры" Текущего Проекта будут сохранены и загружены при сохранении и загрузке SIM файла.

Если Вы изменяете значения Значений по умолчанию Симулятора, изменения, которые Вы делаете, не будут учтены в текущем моделировании, если Вы специально не сделаете те же самые изменения для параметров Текущего Проекта.

Stack Overflow Warning (Предупреждение о переполнении стека): Это поле может быть оставлено пустым или может быть введено шестнадцатеричное значение. Если значение введено, выполнение программы будет прервано, и предупреждающее сообщение будет отображаться, когда стек достигает указанного значения. Вообще, 80 (Hex) - хорошее значение, чтобы в установить это поле, так как оно указывает, что стек вырос за 128 байтов IRAM, доступной на 8051. Если Вы используете 8052, Вы можете установить это значение к FF. Вы можете ввести некоторое другое значение - особенно, если Вы желаете "защитить" некоторую область IRAM, и т.д. Если поле оставлено пустым, Вы не получите никаких предупреждающих сообщений о переполнении стека.

Interrupt Register Protection (Защита Регистра Прерываний): Благодаря основным принципам работы с 8051, если Вы выбираете использование прерываний, Вы должны гарантировать, когда Вы заканчиваете подпрограмму прерывания, что Вы не изменили значение любого регистра. Вы должны убедиться, что не оставляете Аккумулятор, DPTR, или любой из регистров "R" со значением, которое они не содержали, когда ваша подпрограмма прерывания начала выполняться. Общая практика требует поместить все регистры, которые Вы собираетесь изменять в стек, и выталкивать их, когда прерывание завершено. Если Interrupt Register Protection допускается, Симулятор автоматически проверит, чтобы значения всех регистров до и после вашего прерывания были равны. Если они не равны Симулятор, будет посылать Вам предупреждающее сообщение, которое указывает, что подпрограмма прерывания не правильно защищала регистры - и Вы получите резюме начального значения каждого регистра (перед выполнением прерывания) и окончательное значение каждого регистра (после того, как прерывание закончено). Если Interrupt Register Protection не допускается, эта проверка не будет происходить, и прерывание может иметь неприятности с защитой регистров без того, чтобы вызвать предупреждающее сообщение.

Subroutine/Interrupt Return Address Checking (Проверка Адреса возврата подпрограммы / прерывания): эта опция, когда установлена, инструктирует Симулятор предупреждать Вас всякий раз, когда выполненный возврат не попадает в точку откуда произошло обращение CALL. Например, если команда по адресу 0100 - " LCALL 0300 ", и команда по адресу 0300 - "RET", поток программы должен возвратиться к адресу 0103 (команда после обращения). Однако, если выполнение "RET" передаёт управление адресу отличному от ожидаемого 0103, это может представлять ошибку - например, это может означать, что ваша подпрограмма не правильно oчищала стек перед возвратом. Например, рассмотрите следующее:

0100 LCALL 0300
0300 PUSH ACC
0301 RET

Это определенно ошибка: Вы называете подпрограмму в адресе 0300, помещая Аккумулятор в стек, и затем возвращаетесь. Но так как Вы не извлекаете значение Аккумулятора из стека, Вы возвращаете управление непредвиденному адресу. Если Subroutine/Interrupt Return Address Checking включен, этот тип ошибки будет захвачен, как только "RET" будет выполнен. Если опция выключена, Симулятор не будет сообщать Вам относительно таких подозрительных возвратов.

Полезно помнить, что много продвинутых программ - и особенно компиляторы 'C' - передают параметры через стек. Они вызывают процедуру, помещают дополнительные значения в стек, помещают новый "адрес возврата" в стек, и управляют прохождением данных к этому новому адресу " возврата". Такие программы заставят Симулятор выдавать ошибку, но можно не тревожиться: эти программы делают так нарочно и Вы можете вообще выключить эту опцию.

Break After X Consecutive NOPs: Если значение введено в это поле, Симулятор автоматически остановится и сообщит Вам после выполнения последовательности из "X" команд NOP. Например, если это поле содержит 15, Симулятор автоматически остановится, если когда-либо выполнит 15 NOP команд подряд. Это полезно начиная с выполнения большого количества NOPs, часто означает, что поток программы так или иначе окончился, и Вы только выполняете коды 00, которые заполняют память программы. Если это поле - "0" или пробел, Имитатор только продолжит выполнять NOPs, пока выполнение не будет вручную прервано.

Undefined Instruction Handling: 8051 Система команд назначает каждой команде возможный рабочий код кроме кода операции A5h (165 десятичное число). Симулятор предлагает три опции для выбора того, что будет выполнено, если Симулятор пытается выполнять неопределенную команду. Если опция Execute выбрана, Симулятор выполнит неопределенную команду, точно также как истинный 8051 и не будет предупреждать Вас относительно ошибки. Если опции Execute и Warn выбрана, Симулятор выполнит неопределенную команду, но также прервет выполнение программы и сообщит Вам, что неопределенная команда была выполнена. В заключение, если выбрана опция Benchmark/SFR Dump, Симулятор не будет выполнять неопределенную команду (то есть, команда будет полностью игнорироваться, это не заставит ни команду, ни счетчик периодов быть увеличенными), а будет сформирован тестовый дамп и SFR информаця в Окне Терминала (или передано на порт COM PC если так конфигурировано). Выводимая информация включает адрес ЗУ, где обнаружена неопределенная команда, число команд, выполненных до этой отметки, число циклов, выполненных до этой отметки, и последние значения Аккумулятора, регистра B, PSW, SP, и регистров R0-R7. Это - простой способ выполнить эталонное тестирование и эксплуатационные испытания. Просто поместите 'A5' код операции в начале раздела кода, который Вы желаете протестировать и поместите второй 'A5' код операции в конце раздела кода; различие между двумя дампами покажет, сколько команд и циклов выполнено в этом сегменте кода.

CPU Type: эта опция позволяет Вам выбрать специфический тип процессора, который Вы используете. Главные два процессора, обеспечиваемые в настоящее время - 8051 и 8052. Единственное различие между обоими - то, что 8051 не поддерживает Таймер 2 (и связанные SFRS/прерывания) и имеет только 128 байт IRAM. Дополнительно доступны два дополнительных варианта названных 8051 Variant " и " 8052 Variant ". Эти варианты - точно такие же, как 8051 и 8052, соответственно, за исключением того, что все адреса SFR (80h-FFh) рассматриваются допустимыми, также как все разрядные адреса 80h-FFh также рассматриваются допустимыми. Эти два варианта полезны, если Вы пытаетесь моделировать программу, которая была написана для варианта 8051/8052. Нормальные типы кристаллов 8051/8052 нашли бы много ошибок, когда сталкивались с ненормативными SFRs, битами, и т.д. При выборе " Variant " типов допускается, чтобы Вы полностью моделировали различные кристаллы, так как дополнительные SFRs не будут иметь никакого эффекта при моделировании, это допускает, чтобы Вы проверили ваш код без выдачи сообщений относительно недопустимых SFRs/BITs.

8052 Clock Speed: эта опция позволяет Вам выбрать частоту синхронизации, которую Вы желаете моделировать. По умолчанию, Вы можете выбирать 11.059 или 12.000 МГц. Вы можете также ввести вашу собственную частоту, выбирая Other Speed. Если Вы вводите ваше собственное значение, Вы должны ввести его в МГц.

Overlapped/Distinct XRAM/Code Memory: имеются две общих архитектуры памяти, используемые с 8051. В первой архитектуре имеется 64Кб Памяти Программ и 64Кб Памяти Данных, и оба пространства разделены. В другой архитектуре имеется 64Кб Памяти Данных, и программа непосредственно загружается и выполняется из Памяти Данных. "Различная" модель более общая для конечных продуктов, в то время как "перекрытая" модель часто используется для разработки и испытания систем. Важно, что бы была выбрана модель, которая правильно отражает используемые аппаратные средства, и что программа компилирована и связана с этой моделью памяти - иначе она не будет выполняться так, как предполагалось.

    Keypad Configuration ( Конфигурация клавиатуры )

Это окно позволяет конфигурировать Симулятор сканируемой клавиатуры. В блоке Line Select выбирается подключение линий клавиш к линиям портов. Уровень сигнала выбирающего (сканирующего) линию задаётся в пункте Selected When ( Line High - высокий уровень, Line Low - низкий). Подключение столбцов клавиатуры задаётся в блоке Column Return Values. Уровень сигнала, генерируемый клавиатурой при нажатии клавиши, задаётся в пункте Keypress Generates.

    ADC/DAC Configuration (Конфигурация АЦП/ЦАП)

ADC/DAC Configuration окно допускает, чтобы Вы определили входной и выходной файлы, используемые в АЦП/ЦАП операциях.

В ADC Input File должно быть указано полное имя файла, который Вы желаете использовать как выходные данные АЦП. Входной файл должен содержать входные данные в шестнадцатеричных числах с 4 цифрами. В качестве альтернативы, Вы можете нажать на кнопку ADC Input file и выбрать файл, используя стандартный диалог выбора файла Windows.

В DAC Output File должно быть указано полное имя файла, который Вы желаете использовать как входные данные для ЦАП. Выходной файл будет создан ADSim812, когда ЦАП выводит данные.

Загрузка 8052 Программ

8051 Симулятор для Windows допускает, чтобы Вы загрузили 8051 программы, которые были сохранены в стандартном формате Intel.

Стандартный формат Intel - популярный формат, используемый, прожигания программируемых ПЗУ и большинство (если не все) 8051 компиляторы / компоновщики имеют опцию, чтобы сохранить выходной файл стандартном формате Intel. Вообще, процесс обычно выглядит так: создайте вашу программу, компилируйте 8051 компилятором, который создает файл в стандартном формате Intel (часто с расширением ".HEX"), затем загрузите файл "HEX" в программу, которая фактически прожигает ПЗУ.

При использовании Симулятора, вместо того, чтобы прожигать ПЗУ Вы просто загружаете файл HEX в Симулятор и тестируете / отлаживаете вашу программу в Симуляторе. Как только все окажется работающим, Вы можете закончить процесс, прожигая ПЗУ, которое, в этой стадии процесса, должны быть в основном свободны от ошибок, так как отладка имеет место в стадии моделирования.

Чтобы загрузить 8051 программу в стандартном формате Intel в Симулятор, просто открывают меню File и выбирают Open Intel-Standard File.

Изменение значений байтов

Вы можете, в любое время, изменять значение любой переменной ("SFR") или ячейки памяти, которые Вы видите на основном экране, внутри окна внутреннего ОЗУ (IRAM), или внутри окна внешнего ОЗУ (XRAM) просто указывая на значение, которое Вы желаете изменить и нажимая левую кнопку мыши.

Появится одно из двух окон позволяющих Вам изменить значение.

Если Вы щелкнули на слово (2-байтовое значение типа DPTR, PC, Timer0 или Timer1), откроется окно, который просто допускает, чтобы Вы ввели новое 2-байтовое значение (4 шестнадцатеричные цифры). Значение, которое Вы вводите, должно иметь 1-4 шестнадцатеричных значащих цифр. Нажатие кнопки Cancel отменит изменение, при нажатии кнопки Ok немедленно применит изменение для моделирования.

Если Вы щелкнули на что-нибудь еще, Вы выбрали, чтобы изменить 1-байтовое значение. Таким образом, появится другое окно, который допускает, чтобы Вы ввели новое 1-байтовое значение в шестнадцатеричном виде, или Вы можете включить индивидуальные биты байта. Снова, Вы можете нажать Cancel, чтобы отменить ваши изменения или Ok, чтобы принять изменения, которые Вы сделали.

Выполнение Программы останавливается, в то время как Вы изменяете значение байта (или слова), и изменения которые Вы делаете, действуют немедленно после нажатия на Ok.

Степень точности моделирования

Следующие моменты в настоящее время не моделируются 100 % по отношению к техническим данным 8051/8052:

  1. Одновременные Прерывания. Когда два прерывания происходят одновременно, 8051 выравнивает их порядке приоритета сначала уровень 1 в порядке Внешнее 0, Таймер 0, Внешнее 1, Таймер 1, Последовательный порт, и затем уровень 0 в том же самом порядке. Таким образом, если уровень 1 Таймер 0 прерывания происходит в то же самое время что и уровень 0 Внешнее 0 прерывания, прерывание Таймера 0 обслужилось бы сначала, потому что имеет самый высокий приоритет. Симулятор проверяет прерывания в правильном порядке, но не принимает во внимание относительный приоритет двух или больше прерываний, которые случаются одновременно. Таким образом, Симулятор сначала бы обслужил Внешнее 0 прерывание и затем Таймер 0 прерывание, даже если прерывание Таймер 0 имеет более высокий приоритет. Симулятор правильно моделирует приоритеты прерывания так, что если Таймер 0 прерывания выполняется, прерывание более низкого уровня не будет прерывать его. Симулятор испытывает недостаток точности, только когда два или больше прерывания с различными приоритетами происходят в тот же самый момент времени.
  2. Защелки Выхода. Если Вы, например, выполняете MOV P1,#05h, и значение P1.4 впоследствии установлено внешним источником энергии (таким образом P1, действительно содержит 15h), и Вы выполняете INC P1, значение, которое 8051 выведет в P1, будет 06h а не 16h. Это потому что 8051 принимает во внимание последнее значение, которое записано в порт, не текущее входное значение порта. Симулятор в настоящее время моделирует это не правильно - в вышеупомянутом случае, Симулятор вывел бы неправильное значение, а не 06h. Вообще это не является главной проблемой, потому что хорошая практика программирования должна будет использовать ячейку внутреннего ОЗУ, чтобы сохранить значение и затем копировать его в P1, каждый раз, когда Вы хотите вывести его. Использование порта, как ячейки памяти - довольно грязная практика программирования.
  3. PCON Режимы не поддерживаются. Следующие режимы, которые могут быть выбраны, изменяя биты внутри PCON байта, в настоящее время не обеспечиваются: Power Down Mode( Режим выключения), Idle Mode (Неактивный Режим).
  4. 9-разрядная операции Последовательного порта. Симулятор в настоящее время не поддерживает 9-разрядные операции Последовательного порта. Все данные обрабатываются как 8-разрядные данные. Если Вы переводите Симулятор в 9-разрядный Последовательный Режим, все данные будут по прежнему обрабатываться как 8-разрядные данные и любые данные, который получены, будут вызывать Receive Interrupt (Прерывание по получению) независимо от состояния 9-го бита.
  5. Активация флажка TI. Когда байт послан Последовательному порту в реальной 8052 среде, флажок "TI" не установлен, пока байт не полностью вывелся через последовательный порт - которому может потребоваться много машинных циклов в зависимости от скорости в бодах. Симулятор активизирует "TI" в тот момент, когда байт послан последовательному порту. Передача "одновременной" по отношению к программе. Программы, учитывающие наличие ряда машинных циклов после посылки байта прежде, чем флажок "TI" установлен, не будут функционировать правильно. Это, также, не должно быть проблемой, так как хорошо написанная программа не должна зависеть от процессора, работающего медленно.

Переведено: Шереметьев А.В., ЮУрГУ.

Замечания направлять: E-mail: scherem@susu.ac.ru






 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники