IDE-контроллер для CD-ROM

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Содержание

  • Введение
  • 1. Объект автоматизации
  • 1.1 Выбор микроконтроллера
  • 2. Принцип действия устройства
  • 2.1 Описание структурной схемы
  • 2.2 Выбор элементной базы
  • 2.3 Описание принципиальной схемы
  • 3. Разработка программного обеспечения МПС
  • 3.1 Описание алгоритма работы устройства
  • 3.1.1 Описание основных частей программы
  • 3.1.2 Описание алгоритма работы главной программы
  • 3. 2 Листинг программы
  • Заключение

Введение

Развитие микроэлектроники и широкое применение ее изделий в промышленном производстве, в устройствах и системах управления самыми разнообразными объектами и процессами является в настоящее время одним из основных направлений научно-технического прогресса.

Использование микроэлектронных средств в изделиях производственного и культурно-бытового назначения приводит не только к повышению технико-экономических показателей изделия (стоимости, потребляемой мощности, габаритных размеров) и позволяет многократно сократить сроки разработки и отодвинуть сроки «морального старения» изделий, но придает им принципиально новые потребительские качества (расширенные функциональные возможности, модифицируемость, адаптивность и т. д.).

За последние годы микроэлектроники бурное развитие получило направление, связанное с выпуском однокристальных микроконтроллеров (ОМК), которые предназначены для «интеллектуализации» оборудования различного назначения. ОМК представляют собой приборы, конструктивно выполненные в виде БИС, и включающие в себя все составные части «голой» микроЭВМ: микропроцессор, память программы, память данных, также программируемые интерфейсные схемы для связи с внешней средой. Использование микроконтроллеров в системах управления обеспечивает достижение исключительно высоких показателей эффективности при столь низкой стоимости (во многих применениях система может состоять только из одной БИС микроконтроллера), что микроконтроллерам, видимо, нет разумной альтернативной базы для построения управляющих и регулирующих систем. К настоящему времени более двух третей мирового рынка микропроцессорных средств составляют именно ОМК.

1. Объект автоматизации

В качестве объекта автоматизации был выбран IDE контроллер для CD ROM’a. Плеер представляет собой контроллер, подключающийся по шине IDE к практически любому CD/DVD-ROM-у и позволяющий полноценно проигрывать аудио-диски. В состав контроллера входят: сам контроллер, основой которого является микроконтроллер AT89S8252 (или AT89C52), индикатор (ЖКИ 2 строки по 16 символов), клавиатура.

1.1 Выбор микроконтроллера

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

— наличие достаточного количества портов ввода-вывода. К микроконтроллеру необходимо подключить клавиатуру, LCD-дисплей, датчики, блоки управления сигналами тревоги.

— наличие встроенного АЦП.

— наличие программного пакета для написания и отладки программы микроконтроллера Hi-Tech.

— достаточная изученность микроконтроллера.

В моей работе я решил использовать микроконтроллер AT89S8252.

БИС семейства MCS-51 — 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС).

Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр.

Цоколевка выводов имеет вид:

VCC — вывод питания (+Uпит и GND соответственно). АТ89S8252 работает в диапазоне питающих напряжений с напряжением питания 5В±20%. Вывод основного сброса RST обычно подключен к VDD (напрямую или через резистор), потому что микроконтроллер содержит надежную схему сброса при включении питания. Выводы XTAL1 и XTAL2 подключаются к генератору тактовой частоты и могут быть сконфигурированы для различных его типов, включая режимы кварца и RC-генератора.

Характеристика перефирийных модулей:

· Совместимость с приборами семейства MCS-51

· Емкость перепрограммируемой Flash памяти: 8 Кбайт

· Возможность внутрисистемного перепрограммирования и загрузки программы через последовательный SPI интерфейс, 1000 циклов стирание/запись

· Встроенное ЭСППЗУ емкостью 2 Кбайта, 100 000 циклов стирание/запись

· Версии приборов с напряжением питания 5±20% B и 2,7±10% В

· Полностью статический прибор — диапазон рабочих частот от 0 Гц до 12 МГц.

· Рабочие частоты: 12Мгц при напряжении питания 2,7±10% B и 24 МГц при напряжении питания 5±20% B

· Трехуровневая блокировка памяти программ

· СОЗУ емкостью 256 байтов

· Удвоенный указатель данных

· 32 программируемых линий ввода/вывода

· Три 16-разрядных таймера/счетчика событий

· Девять источников сигналов прерывания

· Программируемый последовательный канал UART

· Последовательный SPI интерфейс

· Программируемый сторожевой таймер

· Выход из стопового режима по прерыванию

· Пассивний (idle) и стоповый (power down) режимы

· Промышленный (-40°С. 85°C) и коммерческий (0°C. 70°C) диапазоны температур.

· 40 выводной корпус PDIP, 44 выводные корпуса TQFP и PQFP и 44-выводной носитель кристалла PLCC.

Описание:

КМОП микроконтроллер АТ89S8252, оснащенный Flash программируемым и стираемым ПЗУ, которое может быть загружено непосредственно в системе через последовательный SPI интерфейс, совместим по системе команд и по выводам со стандартными приборами семейства 80С51. Микроконтроллер содержит 8 Кбайт Flash ПЗУ, 2 Кбайта ЭСППЗУ, 256 байтов ОЗУ, удвоенный указатель данных, 32 программируемых линии ввода/вывода, три 16-разрядных таймера/счетчика событий, полнодуплексный последовательный порт (UART), программируемый сторожевой таймер, семь векторных двухуровневых прерываний, встроенные генератор и схему формирования тактовой последовательности.

Flash ПЗУ может загружаться по одному байту через последовательный SPI интерфейс. Содержимое Flash памяти программ может быть защищено от несанкционированной записи/считывания.

Микроконтроллер АТ89S8252 ориентирован на использование в качестве встроенного управляющего контроллера.

контроллер алгоритм программное обеспечение

2. Принцип действия устройства

2.1 Описание структурной схемы

Структурная схема устройства представлена на чертеже КП04. 2201. 20 108. Э1, она состоит из следующих блоков:

— микроконтроллер;

— клавиатура;

— LCD-дисплей;

Клавиатура предназначена для управления устройством. Нажатая клавиша обрабатывается микроконтроллером, который выполняет необходимые действия. Клавиатура состоит из 4-х кнопок: «Play/Stop», «Next track», «Previos track», «Pause». Кнопка «Eject» есть непосредственно на CD ROM’е, поэтому она и не осуществлялась в схеме.

LCD-дисплей — текстовый дисплей, 2 строки по 16 символов. Он необходим для отображения текущего состояния устройства.

2.2 Выбор элементной базы

При разработке устройства были использованы следующие электронные компоненты:

· Микроконтроллер AT89S8252 фирмы Atmel.

· 2-х строчечный текстовый жидкокристаллический дисплей AC-162E фирмы Ampire.

2.3 Описание принципиальной схемы

Схема электрическая принципиальная представлена на чертеже КП04. 2201. 20 108. Э1. Элемент Q1 представляет собой кварцевый резонатор. Так как для данного устройства не требуется высокая скорость обработки информации, то частота кварцевого резонатора выбрана равной 12 МГц для упрощения математических операций при программировании микроконтроллера.

Элемент DD1 представляет собой микроконтроллер AT89S8252 Элемент DD2 — буфер, DD3 — буферный регистр.

С2 и С3 — конденсаторы ёмкостью (33 мкФ), С1 — электролит, емкостью 10 мкФ.

На порт микроконтроллера RA5 подключена линия разрыва.

Элементы R1 представляет собой резистор с сопротивлением 10кОм.

Конденсаторы С2 и С3 включены по типовой схеме включения кварцевого резонатора Q1, обеспечивающего работу тактового генератора контроллера.

RC-цепочка формирует сигнал «сброс» при включении питания, это необходимо для установки микроконтроллера в исходное состояние. При включении питания напряжение на конденсаторе C1 равно нулю, и на вход микроконтроллера поступает сигнал сброса, через некоторое время конденсатор C1 зарядится до уровня лог.1 через резистор R1, и микроконтроллер начнёт работу.

Мы использовали ЖКИ на 2 строки по 16 символов AC-162E фирмы Ampire. Преимущества — невысокая цена, прошитый русский шрифт, подсветка и самое главное — высота символов 8 мм — надписи прекрасно читаются с 6−7 метров. Контроллер, стоящий в этом ЖКИ — KS0066U или аналогичный. В принципе, можно использовать любой подобный индикатор с этим или аналогичным контроллером.

Текстовый LCD-дисплей HG1 имеет размер экрана 2 строки по 16 символов, размер одного символа — 5×8. Обмен данными с дисплеем производится по 4-х разрядной шине данных, причём сначала передаются старшие 4 байта, а затем младшие, управление — по 3-м линиям: RS — отвечает за формат передаваемых сигналов (1 — данные, 0 — команда); RW — определяет направление передачи информации (0 — запись (от контроллера к дисплею), 1 — чтение (от дисплея к контроллеру); Е — сигнал активности дисплея, при Е=0 дисплей не воспринимает сигналы шин данных и управления, при Е=1 ведётся обмен информацией между дисплеем и контроллером. Резистором R1 производится регулировка контрастности изображения на LCD-дисплее.

Клавиатура S1, S2, S3, S4 подключена к порту P3.

3. Разработка программного обеспечения МПС

3.1 Описание алгоритма работы устройства

3.1.1 Описание основных частей программы

В программе можно выделить следующие логические блоки:

· Блок объявления переменных

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

· Блок инициализации программы

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

· Основной цикл программы

Осуществляется проверку управляющих флагов и на основе этой проверки вызывает соответствующие процедуры.

· Процедура обработки прерываний.

Осуществляет проверку источника прерывания (таймер или клавиатура), осуществляет контроль состояния датчиков и устанавливает соответствующие флаги управления, ежесекундно инкрементирует текущее время, следит за состоянием клавиатуры.

· Функция корректировки времени.

Осуществляет защиту переполнения ячейки памяти, хранящей текущее время.

· Процедура чтения данных из индикатора.

Последовательно считывает младшую и старшую тетрады с 4-х разрядной шины данных и конвертирует их в одну 8-ми битовую переменную.

· Функция записи данных в индикатор.

Последовательно передаёт в индикатор старшую и младшую тетрады 8-ми битовой переменной через 4-х разрядную шину данных.

· Процедура проверки готовности индикатора.

Осуществляет проверку готовности индикатора на возможность записи очередных данных.

· Функция записи в индикатор управляющих команд.

· Функция вывода данных на LCD-дисплей.

· Процедура, вызываемая при нажатии кнопки «Play/Stop».

· Процедура, вызываемая при нажатии кнопки «Pause».

· Процедура, вызываемая при нажатии кнопки «Next».

· Процедура, вызываемая при нажатии кнопки «Previos».

3.1.2 Описание алгоритма работы главной программы

При включении питания микроконтроллер начинает выполнение программы. В ней описаны команды инициализации ЖКИ, обработчик прерывания таймера, настройка LCD-дисплея (4-х разрядная шина данных, 2 сточки, последовательное перемещение курсора), конфигурация портов на ввод и на вывод.

3.2 Листинг программы

start: do;

$include (reg51. dcl)

declare

Ntr word,/*N read trek*/

kom_egekt (6) word constant (1,0,2,0,0,0),/* open CD*/

kom_Close (6) word constant (1,0,3,0,0,0),

kom_play (6) word constant (47,0,0,-1,255,0),

kom_pause (6) word constant (4Bh, 0,0,0,0,0),

kom_stop (6) word constant (4E, 0,0,0,0,0),

kom_nextTr (6) word constant (243,0,0,1,0,0),

kom_predTr (6) word constant (245,0,0,1,0,0),

str_sm byte,/*smehen str*/

str_gdite (10) byte constant (0a8h, 6fh, 0e3h, 6fh, 0b6h, 0e3h, 0b8h, 0bfh, 65h, 20h),

str_plaiTr (11) byte (0b8h, 0b4h, 61h, 65h, 0bfh, 20h, 0bfh, 70h, 65h, 0bah, 20h),

str_pause (5) byte (0a8h, 079h, 0c5h, 061h, 20h),

str_stop (5) byte (043h, 0bfh, 06fh, 0beh, 20h),

LCD_Ini (*) byte constant (08h, 02h, 0fh, 01h), /*команды инициализации ЖКИ*/

Ind (30) bute,/* содержимое индикатора */

(i, ip, jp, per, s, np, st, ks, k, pl) byte,/* переменные для работы */

(flag, fl_play, fl_key, fl_ind) byte,/*флаги определения режима работы */

(key, keyold byte, /*номер нажатой клавиши */

(sek, min) word; /*секунды, минуты и часы*/

/*пеpеименование pазpядов поpта */

declare rs literally 'P0. 4',/* RS линия связи с LCD*/

rw literally 'P0. 5',/*RW линия связи с LCD*/

e literally `P0. 6';

timer_int: procedure interrupt 1; /*---Обработчик прерывания таймера-------------*/

/*проверка нажатия клавиш*/

if (p3. 3=0b) and (keyold< >0) then do; fl_key=1; key=1; end; /*play previv*/

if (p3. 4=0b) and (keyold< >2) then do; fl_key=2; key=2;

fl_play=not (fl_play); keyold=key; end; /*play/ stop*/

if (p3. 5=0b) and (keyold< >3) then do; fl_key=3; key=3; end; /* pause*/

if (p3. 6=0b) and (keyold< >4) then do; fl_key=4; key=4; end; /* play next trek*/

per=per+1; /* увеличиваем счетчик переполнений */

if per> =15 then do; /*отсчет секунды*/

per=0; sek=sek+1; /*отсчет секунд*/

if sek> =60 then do; min=min+1; sek=0; /*минут*/

if min=60 then do; min=0; end;

/*флаг необходимости обновления изображения индикатора*/

end; fl_ind=1;

tf0=0; /* sbros flaga perepolneniya */

end timer_int;

str_ind: procedure; /* вывод заданной строки*/

i=0; j=0;

do while str_ gdite (i+str_sm) < >20h;

ind (j) =str_ gdite (I+str_sm);

i=i+1; j=j+1; end; ind (j) =20h; j=j+1;

end str_ind;

time_ind: procedure; /* time play*/

j=42; ind (j) = (ntr/10) +30h; ind (j+1) = (ntr mod 10) +30h;

ind (j+3) = (min/10) +30h; ind (j+4) = (min mod 10) +30h; ind (j+5) =0d0h;

ind (j+6) = (sek/10) +30h; ind (j+7) = (sek mod 10) +30h; j=j+7;

call out_ind;

end time_ind;

out_ind: procedure; /*вывод буфера на жки*/

call time (20); rs, rw=0; P0=1; /*очистка ЖКИ*/

do I=0 to 15;

rs=0; rw=0; e=1b; call time (20);

P0=1; p0. 3=1; call time (10); p3. 0=0;

rw=0; call time (10);

P0=ror ((Ind (i) and0f0h), 4); rs=1; e=0; p3. 0=1; call time (6); p3. 0=0;

P0=Ind (i) and 0fh; rs=1; e=1; p3. 0=1; call time (20); p3. 0=0;

end;

Do I=1 to 25; p3. 0=0; rw=0; call time (10); /*переход на вторую строку

P0=2h; rs=1; e=0; p3. 0=1; call time (10); p3. 0=0;

P0=0h; rs=1; e=0; p3. 0=1; call time (20); p3. 0=0;

end;

do I=15 to 29;

rs=0; rw=0; e=1b; call time (20);

P0=1; p0. 3=1; call time (10); p3. 0=0;

rw=0; call time (10);

P0=ror ((Ind (i) and0f0h), 4); rs=1; e=0; p3. 0=1; call time (6); p3. 0=0;

P0=Ind (i) and 0fh; rs=1; e=1; p3. 0=1; call time (20); p3. 0=0;

end;

Do I=0 to 30; ind (i) =20h; end; /*jочистка буфера индикатора*/

end out_ind;

out_komand: procedure;

do k=0 to 6;

p1. 1=1;

do while P1. 7=0; end; /* ждем готовности СД к приему след команды*/

P0=kom_egekt (ks+k) mod 0ffh; p1. 2=1;

P2=kom_egekt (ks+k) /0ffh; p1. 1=0; /*пишем байт команды*/

End; p1. 1=1;

end out_command;

init: procedure; /**************пpоцедуpа инициализации******************/

tmod=1 0001b; /*пеpвый pежим для 0 и 1 го таймеpа */

it0=1; /*пpеpывание по фpонту сигнала пеpеполнения*/

th0,tl0=0; tr0=1; /*обнул счетчики и pазpешаем pаботу 0 таймеpa*/

er1=0; /*запускаем таймеp 0 и 1*/

et0=1; /*pазpешаем пpеpывания Т0 T1*/

ea=1; /*pазpешаем все пpеpывания*/

P2=11 1111b; st=0; /* скан 1 столбца*/

n_key=0; k_old=0; fl_ind=1; fl_p=1;

flH=0; fl_r1=0; fl_r2=0; fl_r3=0; fl_r4=0; flN=0;

/*инициализация ЖКИ*/

do I=0 to 3;

rs=0; rw=1b; e=1b; call time (10);

do while (M and 80h) < >0; end;

e=0; rs=0; rw=0; call time (10);

PO=LCD_Ini (i);

end;

/*устанавливаем значения по умолчанию*/

min=0; sek=0; fl_ind

str_sm=0; call str_ind; out_ind;

p0=0; p2=0; p1. 0=1; call time (10); p1=0; /*сброс настроек CD*/

p3=1 111 1100b;

end init;

/*___________ Tело основной программы ______________*/

call init;

do while 1; P1. 1=0; /*strob zapisi*/

if (fl_ind=0) and (fl_play> 0) then do;

call time; /*Строка Время 12: 19: 33 */

fl_ind=0; end; /*вывод времени каждую секунду*/

if (key=1) and (keyold< >1) then do; /*посылка команды предшествующий трек*/

if Ntr>1 then do; Ntr=Ntr-1; ks=36; call out_komand; end;

keyold=1;

str_sm=10; call str_ind; call time_ind; /*начинаем отсчет времени*/

end;

if (key=4) and (keyold< >4) then do; /*посылка команды nextTrek*/

if Ntr< 30 then do; Ntr=Ntr+1; ks=30; call out_komand; end;

keyold=4;

str_sm=10; call str_ind; call time_ind; /*начинаем отсчет времени*/

end;

if (key=2) and (keyold< >2) then do;

if fl_play>0 then do;

Ntr=1; ks=12; call out_komand;

str_sm=10; call str_ind; call time_ind; /*end /*посылка команды play треk*/

Else do; fl_play=0; ks=24; /*посылка команды stop*/

call out_komand; str_sm=10; call str_ind; call time_ind; end;

keyold=2;

end;

if (key=3) and (keyold< >3) then do; /*посылка команды pause*/

ks=18; call out_komand;

keyold=3; fl_play=0;

str_sm=21; call str_ind; call time_ind;

end;

end;

end;

end start;

Заключение

При выполнении данного курсового проекта была изучена архитектура микроконтроллера AT89S8252 фирмы ATMEL и построена на его основе микропроцессорная система IDE контроллера для CD-ROM. При этом также был изучен текстовый жидкокристаллический дисплей AC-162E фирмы Ampire и встроенный в него контроллер KS0066U. Приобретены навыки программирования микропроцессорных систем и построения на их основе устройств сбора и обработки информации.

ПоказатьСвернуть
Заполнить форму текущей работой