КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Порядок выполнения работы. Лабораторное задание
Лабораторное задание Нужно создать новый пустой проект без файла исходного текста программы. 2.1. Также требуется создать файл исходного текста программы по примеру с ошибками. Это можно сделать с помощью программы «Блокнот» или встроенным редактором MPLAB. 2.2. Нужно присоединить файл исходного текста к проекту. 2.3. Дальше я пытался построить проект компиляцией и компоновкой (программа выдала ошибку и я был вынужден её исправить). 2.4. Попытался разобрать все команды программы, исправить ошибки и написать алгоритм программы - примера. 2.5. Построил проект компиляцией и компоновкой. 2.6. Потом от меня требовалось в пошаговом режиме отладчика проверить правильность выполнения команд, контролируя порядок выполнения команд и результат с помощью пункта View пакета MPLAB.
3.1. Создал новый проект (как его создавать было описано в предыдущей лабораторной работе). 3.2. Вместо исходного текста программы написал в «блокноте» образец с ошибками (Рис. 1.). Поменял расширение с.txt на.asm, для того чтобы MPLAB мог распознать текст программы (место программы «блокнот» можно было использовать встроенный редактор MPLAB).
Рис. 1.
3.3. Дальше присоединил файл исходного текста к проекту. Как его присоединять было описано в лабораторной работе №1. 3.4. После попытки построения проекта компиляцией и компоновкой окно OUTPUT мне выдало BUILD FAILED (Рис. 2.).
Рис. 2.
3.5. Устранил ошибки в исходном тексте программы: правильно распределил слова программы и исправил в 17 строке «bug» на «start», разделил текст программы на 3 поля: метки, мнемоники и операнды.
Попытаемся написать алгоритм программы. Введем переменную n – содержащаяся информация в регистре с1. Определяем переменную с1 по адресу, например 21. Затем мы устанавливаем начальное значение счетчика с1, например 9. Потом с каждым разом мы увеличиваем это значение на единицу. Дальше приравниваем переменную n к нулю. Если это так, то мы попадаем в место, где устанавливали начальное значение счетчика, а если n не равно 0, то попадаем в то место где увеличиваем значение с1 на единицу. Получается, что наш алгоритм бесконечный.
Получил текст, изображенный на Рис.3.
Рис. 3.
3.6. Построил заново проект. На этот раз компилятор пишет, что всё верно(Рис.4).
Рис.4.
3.7. В пошаговом режиме отладчика проверил правильность выполнения команд. Теперь может показаться, что программа работает верно, но это не так. Так как мы пишем программу двоичного счетчика до десяти, то необходимо перебрать десять двоичных кодов. Это можно сделать с помощью команды INCFSZ. Смысл этой команды заключается в том, что она увеличивает значение кода лежащего в регистре С1 на единицу и после чего сравнивает увеличенный на единицу код с нулевым результатом эта операция будет повторяться до тех пор пока значение регистра С1 не будет равно нулю т. е. мы получаем цикл. Как только С1 = 0 мы переходим на начало программы. А в этой программе значение инкремента регистра С1 увеличивается не на единицу, а на F. Но здесь еще одна ошибка. Она заключается в том, что начальное размещение программы соответствует вектору прерываний т. е. по этому адресу 0x04 размещен вектор прерываний. Поэтому, исходя из организации памяти программ для семейства микроконтроллеров PIC, программы могут размещаться только с адреса 0x05. Поэтому в нашей программе заменяем начальный адрес на 0x05. Это преобразования показано на Рис. 5. Рис. 5.
Но даже и после этих изменений программа работает неверно т. к. она теперь нам перебирает пятнадцать двоичных чисел это числа от 192 до 207. Ошибка в этой программе заключается в том, что все операции со значением регистра С1 происходят по адресу 0x0c, а по этому адресу располагается регистр специального назначения PIR1. Регистры специального назначения используются только по своему назначению, а не в качестве статической ОЗУ общего назначения, в которую можно записывать, что угодно. Регистр С1 зададим по адресу 0x21. На самом деле он может быть любым лишь бы этот адрес соответствовал регистру общего назначения. Это преобразования показано на Рис. 6. Рис. 6.
Как видно из рисунка в окне File Registers по адресу 0x21 располагается шестнадцатиричное число 0xF6 и имя 21 – го регистра С1. Теперь наша программа в 21 регистре С1 с помощью операции инкремента перебирает двоичные коды начиная с 246 до 256 т. к. 256 в двоичном коде это 00000000 то программа выходит из цикла там где она десять раз прокрутилась и переходит на начало программы на метку старт и программа начинает выполняться заново. Вывод: В ходе данной работы была изучена система команд восьмиразрядных однокристальных микроконтроллеров фирмы MICROCHIP семейства PIC16. В среде MPLAB была отлажена программа, содержащая ошибки, был составлен алгоритм данной программы, в пошаговом режиме отладчика проверена правильность выполнения команд.
Дата добавления: 2014-01-15; Просмотров: 349; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |