Автор: Пользователь скрыл имя, 28 Октября 2012 в 20:42, курсовая работа
Цель работы: Необходимо отсортировать по возрастанию массив из 20 шестнадцатеричных чисел. Чтобы это сделать надо найти максимальный элемент и поместить в конец массива, потом второй по величине и поставить его на предпоследнее место массива и т.д.
Введение            4
Основная часть           5
Блок-схема алгоритма работы программы      7
Алгоритм работы программы         8
Листинг программы          9
Результаты выполнения программы              12
Заключение                           13
Список литературы
Федеральное 
  государственное бюджетное  высшего профессионального образования"Московский 
  государственный технический 
   | |
Факультет Кибернетики  | |
КУРСОВОЙ ПРОЕКТ  | |
по дисциплине  | |
«Микропроцессорные устройства управления роботов и их программное обеспечение»  | |
Тема курсового проекта «Сортировка массива чисел по возрастанию»                                 | |
  | 
  |
Руководитель курсового проекта доцент, к.т.н.  | 
  Герасимов В. В.  | 
Рецензент  | 
  |
Работа представлена к защите  | 
  «12» мая 2012 г.  | 
  
   
  | 
«Допущен к защите»  | 
  «14» мая 2012 г.  | 
  
   
  | 
Москва 2012
 
Федеральное государственное бюджетное образовательное учреждениевысшего профессионального образования"Московский 
  государственный технический 
   | |||||
Факультет Кибернетики  | |||||
Утверждаю  | |||||
«____» __________201___ г.  | |||||
| 
   
 ЗАДАНИЕ  | |||||
на выполнение курсового проекта  | |||||
по дисциплине «Микропроцессорные устройства управления роботов и их программное обеспечение»  | |||||
Студент  | |||||
  
  | |||||
  | |||||
13h, 11h, 01h, 17h, 07h, 03h, 21h, 32h, 32h, 12h, 42h, 34h, 22h, 14h, 55h, 11h, 17h, 77h, 31h, 12h.  | |||||
  | |||||
алгоритм (рис 1), программа, блок-схема алгоритма  | |||||
  | |||||
Задание на курсовой проект, выдал  | 
  «12» апреля 2012г.  | 
  ||||
Задание на курсовой проект, получил  | 
  «12» апреля 2012г.  | 
  ||||
Введение 4
Основная часть 5
Блок-схема алгоритма работы программы 7
Алгоритм работы программы 8
Листинг программы 9
Результаты выполнения программы 12
Заключение                    
Список литературы             
 
Программы можно писать не только для 
x86 компьютеров. Более того, большая 
часть процессоров в мире - НЕ 
x86. Основная часть микропроцессоров сейчас - это 
микроконтроллеры. В большинстве учебных 
заведений бывшего СССР изучение микроконтроллеров 
начинается с легендарного Intel 8051 (официальное 
название - MCS 51, также он известен как i8051 
и MCS-51). У этого микроконтроллера есть 
assembler, очень похожий на ассемблер привычных 
нам процессоров x86 архитектуры. Этот контроллер 
применялся в старых клавиатурах, да и 
вообще много где он применялся. Будем 
называть этот микропроцессор Intel 8051 или 
MCS 51, потому что во всем мире он известен 
именно под этим названием.
Цель работы:
Необходимо отсортировать по возрастанию массив из 20 шестнадцатеричных чисел. Чтобы это сделать надо найти максимальный элемент и поместить в конец массива, потом второй по величине и поставить его на предпоследнее место массива и т.д.
 
Intel 8051 — это 8 разрядный однокристальный микроконтроллер 
гардвардской архитектуры, впервые произведенный 
компанией Intel в 1980 году и предназначенный 
для использования во встраиваемых (embedded) 
системах. Он состоит из процессорного 
ядра (CPU), ОЗУ, ПЗУ, последовательного и 
параллельного порта, и еще небольшого 
количества дополнительных элементов. 
Программы для него можно писать на специализированном 
ассемблере, который очень напоминает 
ассемблер для x86-процессоров, или на языке 
С. Но, конечно, есть ограничения. У нас 
в распоряжении всего 128 байт ОЗУ (называется 
память DATA), 4 кбайта встроенного ПЗУ для 
хранения самой программы (память программ), 
и 64 кбайта в ПЗУ (называется XDATA - external 
data, или память данных). Зато есть прерывания.
Основная часть
Восьмиразрядные высокопроизводительные однокристальные микроЭВМ (ОМЭВМ) семейства МК51 выполнены по высококачественной n-МОП технологий (серия 1816) и КМОП технологии (серия 1830) .
Семейство МК51 включает пять модификаций ОМЭВМ (имеющих идентичные основные характеристики), основное различие, между которыми состоит в реализации памяти программ и мощности потребления.
ОМЭВМ КР1816ВЕ51 и КР1830ВЕ51 содержат масочно-программируемое в процессе изготовления кристалла ПЗУ памяти программ емкостью 4096 байт и рассчитаны на применение в массовой продукции. За счет использования внешних микросхем памяти общий объем памяти программ может быть расширен до 64 Кбайт.
ОМЭВМ КМ1816ВЕ751 содержит ППЗУ емкостью 4096 байт со стиранием ультрафиолетовым излучением и удобна на этапе разработки системы при отладке программ, а также при производстве небольшими партиями или при создании систем, требующих в процессе эксплуатации периодической подстройки. За счет использования внешних микросхем памяти общий объем памяти программ может быть расширен до 64 Кбайт.
ОМЭВМ КР1816ВЕ31 и КР183ОВЕ31 не содержат встроенной памяти программ, однако могут использовать до 64 Кбайт внешней постоянной или перепрограммируемой памяти программ и эффективно использоваться в системах, требующих существенно большего по объему (чем 4 Кбайт на кристалле) ПЗУ памяти программ.
Каждая из перечисленных выше микросхем является соответственно аналогом БИС 8051, 80С51, 8751, 8031, 80С31 семейства MCS-51 фирмы Intel (США).
Каждая ОМЭВМ рассматриваемого семейства содержит встроенное ОЗУ памяти данных емкостью 128 байт с возможностью расширения общего объема оперативной памяти данных до 64 Кбайт за счет использования внешних микросхем ЗУПВ.
Общий объем памяти ОМЭВМ семейства МК51 может достигать 128 Кбайт: 64 Кбайт памяти программ и 64 Кбайт памяти данных.
При разработке на базе ОМЭВМ более сложных систем могут быть использованы стандартные ИС с байтовой организацией, например, серии КР580. В дальнейшем обозначение "МК51" будет общим для всех моделей семейства, за исключением случаев, которые будут оговорены особо. ОМЭВМ содержат все узлы, необходимые для автономной работы:
1) центральный восьмиразрядный процессор;
2) память программ объемом 4 Кбайт (только КМ1816ВЕ751, КР1816ВЕ51 и КР1830ВЕ51);
3) память данных объемом 128 байт;
4) четыре восьмиразрядных 
5) два 16-битовых многорежимных таймера/счетчика;
6) систему прерываний с пятью векторами и двумя уровнями;
7) последовательный интерфейс;
8) тактовый генератор.
Аккумулятор. АСС — регистр аккумулятора. Команды, предназначенные для работы с аккумулятором, используют мнемонику "А", например, MOV А, Р2.Мнемоника "АСС" используется, к примеру, при побитовой адресации аккумулятора. Так, символическое имя пятого бита аккумулятора при использовании ассемблера ASM51 будет следующим: АСС.5.
Регистр В. Используется во время операций умножения и деления. Для других инструкций регистр В может рассматриваться как дополнительный сверхоперативный регистр.
Регистр состояния программы. Регистр PSW содержит информацию о состоянии программы.
Указатель стека SP. 8-битовый регистр, содержимое которого инкрементируется перед записью данных в стек при выполнении команд PUSH и CALL. При начальном сбросе указатель стека устанавливается в 07Н, а область стека в ОЗУ данных начинается с адреса 08Н. При необходимости путем переопределения указателя стека область стека может быть расположена в любом месте внутреннего ОЗУ данных микроЭВМ.
Указатель данных. Указатель данных (DPTR) состоит из старшего байта (DPH) и младшего байта (DPL). Содержит 16-битовый адрес при обращении к внешней памяти. Может использоваться как 16-битовый регистр или как два независимых восьмибитовых регистра.
Порт0—ПортЗ. Регистрами специальных функций Р0, Р1, Р2, РЗ являются регистры-"защелки" соответственно портов Р0, Р1, Р2, РЗ.
Буфер последовательного 
порта. SBUF представляет собой два отдельных 
регистра: буфер передатчика и буфер приемника. 
Когда данные записываются в SBUF, они поступают 
в буфер передатчика, причем запись байта 
в SBUF 
автоматически инициирует его передачу 
через последовательный порт. Когда данные 
читаются из SBUF, они выбираются из буфера 
приемника.
Регистры таймера. Регистровые пары (TH0.TL0) и (TH1.TL1) образуют 16- битовые счетные регистры соответственно таймера/счетчика 0 и таймера/счетчика 1.
Регистры управления. Регистры специальных функций IP, IE, TMOD, TCON, SCON и PCON содержат биты управления и биты состояния системы прерываний, таймеров/счетчиков и последовательного порта. ОМЭВМ при функционировании обеспечивает:
— минимальное время 
выполнения команд сложения — 1 мкс;  
— аппаратное умножение и деление с минимальным 
временем выполнения команд умножения/деления — 4 мкс
Блок-схема алгоритма работы программы
Сначала программа записывает данные во внешнюю память. После этого она считывает исходные числа из внешней памяти во внутреннюю и одновременно сортирует их.
Процесс сортировки происходит во время считывания данных из внешней памяти и выглядит следующим образом.
Программа просматривает 
все исходные числа во внешней 
памяти и выбирает самое большое 
число. После этого она записывает 
это число в ячейку во внутренней 
памяти с самым большим запланированны
После этого снова производится поиск самого большого из оставшихся чисел, это число записывается в следующую ячейку во внешней памяти.
Процесс продолжается до использования всех чисел из внешней памяти.
После этого отсортированные элементы переписываются обратно во внешнюю память.
Использование памяти
Участки памяти:
Xdata: 0000h…0019h – область сортируемых чисел
data: 40h…53h - область, используемая для промежуточного хранения и сортировки чисел
Регистры:
DPTR: хранит адрес байта в XDATA (0000h..0019h).
A: используется как 
буфер для передачи данных 
из XDATA в DATA и для копирования 
данных из одного участка 
R0: хранит адрес обрабатываемого элемента в DATA (40h..53h)
R1: используется как локальный счетчик цикла.
R2: хранит данные из 
DPL для запоминания адреса 
Участок 36h: хранит текущее самое большое число.
Рис 1. 
Листинг программы
org 00h ;смещение от начала
jmp start ;переход к началу
org 50h ;память данных
Start:
; ИНИЦИАЛИЗАЦИЯ
module_create_data:  ;Модуль 
устанавливает начальные 
mov DPTR, #0000h ;адрес
mov A, #13h ; 1-e число
movx @DPTR, A ; занести число по адресу
inc DPTR ;увеличить адрес на 1
mov A, #11h ; 2-e число
movx @DPTR, A
inc DPTR
mov A, #01h ; 3-e число
movx @DPTR, A
inc DPTR
mov A, #17h ; 4-e число
movx @DPTR, A
inc DPTR
mov A, #07h ; 5-e число
movx @DPTR, A
inc DPTR
mov A, #03h ; 6-e число
movx @DPTR, A
inc DPTR
mov A, #21h ; 7-e число
movx @DPTR, A
inc DPTR
mov A, #32h ; 8-e число
movx @DPTR, A
inc DPTR
mov A, #32h ; 9-e число
movx @DPTR, A
inc DPTR
mov A, #12h ; 10-e число
movx @DPTR, A
mov A, #42h ; 11-e число
movx @DPTR, A
inc DPTR
mov A, #34h ; 12-e число
movx @DPTR, A
inc DPTR
mov A, #22h ; 13-e число
movx @DPTR, A
inc DPTR
mov A, #14h ; 14-e число
movx @DPTR, A
inc DPTR
mov A, #55h ; 15-e число
movx @DPTR, A
inc DPTR
mov A, #11h ; 16-e число
movx @DPTR, A
inc DPTR
mov A, #17h ; 17-e число
movx @DPTR, A
inc DPTR
mov A, #77h ; 18-e число
movx @DPTR, A
inc DPTR
mov A, #31h ; 19-e число
movx @DPTR, A
inc DPTR
mov A, #12h ; 20-e число
movx @DPTR, A
;СОРТИРОВКА 
 
module_sort_massiv: метка начала сортировки 
 
mov R0, #53h 
metka1: метка главного цикла сортировки 
mov 54h, #00h 
mov R2, DPL 
jmp module_search_massiv переход на метку поиска 
макс 
 
metka_vozvrata1: метка возврата из поиска макс 
эл. 
 
mov DPL, R2 
mov A, #00h 
dec DPL 
movx @DPTR, A 
 
mov @R0, 54h 
dec R0 
cjne R0, #3Fh, metka1 
jmp module_data_to_xdata переход на метку вывода 
данных 
 
;ДОПОЛНИТЕЛЬНЫЕ МОДУЛИ 
 
module_search_massiv: начало кода поска макс эл 
массива 
mov DPTR, #0000h 
metka2: главный цикл поиска  
movx A, @DPTR 
inc DPTR 
mov R1, DPL 
cjne A, 54h, metka3  
 
metka_vozvrata2: перед возвратом 
cjne R1, #14h, metka2 переход на метку вложенного 
цикла 
jmp metka_vozvrata1 переход на возврат из поиска 
metka3: 
jc metka_vozvrata2 продолжаем сканировать 
mov 54h, A 
mov R2, DPL 
jmp metka_vozvrata2 пока все не переберем программа 
в цикле 
 
 
;ПЕРЕМЕЩЕНИЕ ОТСОРТИРОВАННЫХ ЧИСЕЛ ОБРАТНО 
ВО ВНЕШНЮЮ ПАМЯТЬ