курсовая(1). Курсовая работа по дисциплине Методы моделирования цифровых устройств на тему Моделирование микропроцессорного управляющего устройства
Скачать 1.77 Mb.
|
Содержание
Введение EdSim51 - это самый популярный и простой симулятор, доступный для микроконтроллера 8051. EdSim - это фактически виртуальный 8051 с клавиатурой, АЦП, ЦАП, 7-сегментным дисплеем и другими внешними периферийными устройствами. EdSim специально создан для студентов и их образовательных целей. Изюминкой этого симулятора является "простота и удобство использования". Любой новичок может изучить это программное обеспечение довольно быстро. 1 Постановка и реализация задачи 1.1 Моделирование комбинационных схем на ПЭВМ Таблица 1 — Исходные данные для функции 4 переменных
Код программы: #include bool equal(bool a, bool b){ return (!a&&!b) || (a&&b); } int main() { bool a = 0, b = 0, c = 0, d = 0, f; printf("Source 1 task:\n"); printf("a b f\n"); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { f = equal((a||(!a&&b)),(a||b)); printf("%i %i %i \n", a, b, f); b = !b; } a = !a; } a = 0; b = 0; printf("Minimized 1 task:\n"); printf("a b f\n"); for (int a = 0; a < 2; a++) { for (int b = 0; b < 2; b++) { f = 1; printf("%i %i %i\n", a, b, f); } } printf("\nSource 2 task:\n"); printf("a b c d f\n"); for (int a = 0; a < 2; a++) { for (int b = 0; b < 2; b++) { for (int c = 0; c < 2; c++) { for (int d = 0; d < 2; d++) { //correct function f = (!a && !b && !c && d) || (!a && b && c && !d) || (!a && b && c && d) || (a && !b && !c && d) || (a && b && !c && !d) || (a && b && !c && d) || (a && b && !c && d) || (a && b && c &&!d) || (a && b && c && d); printf("%i %i %i %i %i\n", a, b, c, d, f); } } } } printf("\nMinimize 2 task:\n"); printf("a b c d f\n"); for (int a=0;a<2;a++){ for (int b=0;b<2;b++){ for (int c=0;c<2;c++){ for(int d=0;d<2;d++){ f = (a && b) || (b&&c) || (!b&&!c&&d); printf("%i %i %i %i %i\n", a, b, c, d, f); } } } } return 0; } Результаты: Рис. 1 — Результат работы программы 1.2 Моделирование сложных комбинационных схем на ПЭВМ ((с→b) → (d ↓ b)) ↓ ((a → d) | (a → c)) = ((c ∨ d) | (c d)) | ((a+b) → (a - b)) Программа должна выводить минимизированную и не минимизированную СДНФ. Код программы: #include using namespace std; bool impl(bool a, bool b) { return (!a || b); } bool zapr(bool a, bool b) { return (a && !b); } bool equal(bool a, bool b) { return ((a&&b) || (!a&&!b)); } bool pirs(bool a, bool b) { return !(a || b); } bool shaffer(bool a, bool b) { return !(a && b); } int main(){ int x,y,f1,m,n,f2; cout<<"Source"< cout<<"a"<<"|"<<"b"<<"|"<<"c"<<"|"<<"d"<<"|"<<"f"< for (int a=0; a<2; a++){ for (int b=0; b<2; b++){ for (int c=0;c<2;c++){ for (int d=0;d<2;d++){ x = impl( impl(!c,b), pirs(d,b) ); y = shaffer( (impl(a,d)),(impl(a,c)) ); f1 = pirs(x,y); cout< } } } } cout<<"Minimized with function:"< cout<<"a"<<"|"<<"b"<<"|"<<"c"<<"|"<<"d"<<"|"<<"f"< for (int a=0; a<2; a++){ for (int b=0; b<2; b++){ for (int c=0;c<2;c++){ for (int d=0;d<2;d++){ x = impl( impl(!c,b), pirs(d,b) ); y = shaffer( (impl(a,d)),(impl(a,c)) ); f1 = pirs(x,y); m = ( shaffer( (c||d), (equal(c,d)) ) ); n = impl( (!a^!b), zapr(a,b) ); f2 = shaffer(m,n); if (f1!=f2) { cout<<"Error"; return 1; } cout< } } } } cout<<"Source:"< cout<<"a"<<"|"<<"b"<<"|"<<"c"<<"|"<<"d"<<"|"<<"f"< for (int a=0; a<2; a++){ for (int b=0; b<2; b++){ for (int c=0;c<2;c++){ for (int d=0;d<2;d++){ x = (!(!!c or b)) or (!(d or b)); y = !((!a or d) and (!a or c)); f1 = !(x or y); cout< } } } } cout<<"Minimized:"< cout<<"a"<<"|"<<"b"<<"|"<<"c"<<"|"<<"d"<<"|"<<"f"< for (int a=0; a<2; a++){ for (int b=0; b<2; b++){ for (int c=0;c<2;c++){ for (int d=0;d<2;d++){ x = (!(!!c or b)) or (!(d or b)); y = !((!a or d) and (!a or c)); f1 = !(x or y); /*m = (c or d) and ( (!c and !d) or (c and d) ); n = ( (!!a and !b) or (!a and !!b) ) or (a and !b); f2 = !(!m and n); */ m = ( !( (c||d) and ((!c and !d) or (c and d)) ) ); n = (!(!a^!b)) or (a&&!b); f2 = !(m and n); if (f1!=f2) { cout<<"Error"; return 1; } cout< } } } } cout<<"Minimized 1:"< cout<<"a"<<"|"<<"b"<<"|"<<"c"<<"|"<<"d"<<"|"<<"f"< for (int a=0; a<2; a++){ for (int b=0; b<2; b++){ for (int c=0;c<2;c++){ for (int d=0;d<2;d++){ x = (!(!!c or b)) or (!(d or b)); y = !((!a or d) and (!a or c)); f1 = !(x or y); f2 = (!a and b) or (c and d); if (f1!=f2) { cout<<"Error"; return 1; } cout< } } } } cout<<"Minimized 2:"< cout<<"a"<<"|"<<"b"<<"|"<<"c"<<"|"<<"d"<<"|"<<"f"< for (int a=0; a<2; a++){ for (int b=0; b<2; b++){ for (int c=0;c<2;c++){ for (int d=0;d<2;d++){ x = ( !( (c||d) and ((!c and !d) or (c and d)) ) ); y = (!(!a^!b)) or (a&&!b); f1 = !(x and y); f2 = (!a and b) or (c and d); if (f1!=f2) { cout<<"Error"; return 1; } cout< } } } } return 0; } Результаты: Рис. 2 — Результаты работы программы Рис. 3 — Результат работы использованием функций программы используя функцию в базисе И, ИЛИ, НЕ Рис. 4 — Результат работы программы используя минимизированная функцию 1.3 Моделирование и реализация на языке C/C++ управляющей программы, заданной граф-схемой алгоритма (ГСА) Реализовать блок-схему. Блок-схема представлена в приложении А. Код программы: #include using namespace std; int main() { bool x1,x2,x3,x4; cout << "Начало"< point1: cout << "Введите x1: "; cin >> x1; if (!x1){ cout<<"A1"< goto point1; } cout << "Введите x2: "; cin >> x2; if (!x2){ goto point1; } cout << "Введите x3: "; cin >> x3; if (!x3){ cout<<"A2"< goto end; } cout << "Введите x4: "; cin >> x4; if (!x4) goto point1; cout<<"A3"< end: cout<<"Конец"< getchar(); return 0; } Результаты: Рис. 5 — Результат работы программы Граф-схемы алгоритмов: Рис. 6 — Исходная ГСА Р ис. 7 — Автомат жесткой логики Р ис. 8 — Реализация на D триггерах 1.4 Использование побитовых операций на микроконтроллере MCS-51 Реализовать логическую функцию X&(¬Y∨Z) на микроконтроллере MCS-51. Таблица 2 — Таблица истинности логической функции
Код программы: JMP BEGIN; BEGIN: MOV P1, #00000111b ;P1.2=,1.1=Y, P1.0=Z – ввод значений X,Y,Z MOV C, P1.0; C = Z ANL C, P1.1; C = Z^Y=Y^Z ORL C,P1.2; C=(Y^Z)VX CPL C ; C = !C MOV P1.7, C ;вывод C в P1.7 Результаты: Рис. 9 — Результат работы программы Рис. 10 — Результат работы программы 1.5 Моделирование функции заданной СДНФ на микроконтроллере MCS-51 Реализовать функцию СДНФ на микроконтроллере MCS-51. Код программы: jmp begin begin: mov P1,#00001111b ;1 (¬P1.3 & ¬P1.2 & ¬P1.1 & P1.0) mov C,P1.3 cpl C; P1.1=!P1.3 anl C, /P1.2; C = !P1.3 & !P1.2 anl C, /P1.1; C = (!P1.3 & !P1.2) & !P1.1 anl C, P1.0; C = !P1.3 & !P1.2 & !P1.1 & P1.0 jc print ;2 (¬P1.3 & P1.2 & P1.1 & ¬P1.0) mov C, P1.3; C = P1.3 cpl C; C = !P1.3 anl C, P1.2; C = !P1.3 & P1.2 anl C, P1.1 ; C = !P1.3 & P1.2 & P1.1 anl C, /P1.0; C = !P1.3 &P1.2 &P1.1 & !P1.0 jc print ;3 (¬P1.3 & P1.2 & P1.1 & P1.0) mov C, P1.3; C = P1.3 cpl C; C = !P1.3 anl C, P1.2; C = !P1.3 & P1.2 anl C, P1.1; C = !P1.3 & P1.2 & P1.1 anl C, P1.0; C = !P1.3 & P1.2 & P1.1 & P1.0 jc print ;4 (P1.3 & ¬P1.2 & ¬P1.1 & P1.0) mov C, P1.3; C = P1.3 anl C, /P1.2; C = P1.3 & !P1.2 anl C, /P1.1; C = P1.3 & !P1.2 & !P1.1 anl C, P1.0; C = P1.3 & !P1.2 & !P1.1 & P1.0 jc print ; 5 (P1.3 & P1.2 & ¬P1.1 & ¬P1.0) mov C, P1.3; C = P1.3 anl C, P1.2; C = P1.3 & P1.2 anl C, /P1.1; C = P1.3 & P1.2 & !P1.1 anl C, /P1.0; C = P1.3 & P1.2 & !P1.1 & !P1.0 jc print ; 6 (P1.3 & P1.2 & ¬P1.1 & P1.0) mov C, P1.3; C = P1.3 anl C, P1.2; C = P1.3 & P1.2 anl C, /P1.1; C = P1.3 & P1.2 & !P1.1 anl C, P1.0; C = P1.3 & P1.2 & !P1.1 & P1.0 jc print ; 7 (P1.3 & P1.2 & P1.1 & ¬P1.0) mov C, P1.3; C = P1.3 anl C, P1.2; C = P1.3 & P1.2 anl C, P1.1; C = P1.3 & P1.2 & P1.1 anl C, /P1.0; C = P1.3 & P1.2 & P1.1 & !P1.0 jc print ; 8 (P1.3 & P1.2 & P1.1 & P1.0) mov C, P1.3; C = P1.3 anl C, P1.2; C = P1.3 & P1.2 anl C, P1.1; C = P1.3 & P1.2 & P1.1 anl C, P1.0; C = P1.3 & P1.2 & P1.1 & P1.0 jc print print: mov P1.7, C Результаты: Рис. 11 — Результаты работы программы Рис. 12 — Результаты работы программы 1.6 Моделирование управляющего алгоритма на языке ассемблера для микроконтроллера MCS-51 Реализовать сложную неструктурную граф-схему алгоритма (ГСА) на языке Ассемблера для микроконтроллера MCS-51. Исходная блок-схема: Рис. 13 — Исходная ГСА Код программы: jmp begin; begin: mov p1, #00000000b ;P2.0 - x1 ;P2.1 - x2 ;P2.2 - x3 ;P2.3 - x4 mov p2, #00001111b A1:mov p1,#00000001b; A1 point1: mov C, p2.0;Ввод х1 jnc A1 ;if(!x1) goto A1 jnc point1; if(!x1) goto point1 mov C, p2.1 ;Ввод x2 jnc point1 mov C, p2.2;Ввод х3 a2: mov p1,#00000010b; A2 jnc a2 ;if(!x3) jnc AK ; goto end mov C,p2.3;Ввод х4 jnc point1 ; if(!x4) goto point1 mov p1,#00000011b; A3 AK:jmp begin Результаты: Рис. 14 — Результаты работы программы Рис. 15 — Результаты работы программы Рис. 16 — Результаты работы программы 2 Описание моделирующей среды Прoграммные cредства изучения и прoектирования микрокoнтроллерных систем на оснoве МК 8051 предназначeны для освoения прoграммирования микроконтроллеров семейства МК 8051 и для программирования и отладки совместной работы микроконтроллера с основными компонентами микропpoцессорных систем управления (СУ). EdSim51 - это самый популярный и простой симулятор, доступный для микроконтроллера 8051. EdSim - это фактически виртуальный 8051 с клавиатурой, АЦП, ЦАП, 7-сегментным дисплеем и другими внешними периферийными устройствами. EdSim специально создан для студентов и их образовательных целей. Изюминкой этого симулятора является "простота и удобство использования". Любой новичок может изучить это программное обеспечение довольно быстро. Стенд включает в себя следующие основные компоненты: микрокoнтроллер 8051 схему подключения блока светодиодов, цифроаналогового преобразователя и дисплея; схему подключения блока светодиодов, ЦАП и жидкокристаллического индикатора; схему подключения блока механических переключателей и аналого- цифрового преобразователя; схему подключения компаратора и ЦАП; cхему подключения электродвигателя и универсального асинхронного приёмопередатчика; схему подключения клавиатуры. Кроме того, стенд включает источник постоянного напряжения и осциллограф. Рисунок 17 - Функциональная схема модели лабораторного стенда EdSim51 На рисунке 18 приведен внешний вид EdSim51. Рассмотрим основные компоненты пользовательского интерфейса, их функции и связь с элементами функциональной схемы EdSim51. На рисунке 18 можно выделить четыре основных панели: - панель микроконтроллера; - панель ассемблерного кода; - панель периферийного оборудования; - панель отображения состояния линий портов ввода/вывода. Рисунок 18 - Внешний вид модели лабораторного стенда EdSim51 Список используемых источников: 1) https://www.edsim51.com/introduction.html - официальный сайт 2) https://pue8.ru/protsessory/708-mikrokontrollery-mcs-51-programmnaya- model-struktura-komand-chast-5.html - пособие по микроконтроллерам MCS-51 3) Каспер Эрни - Программирование на языке Ассемблера для микроконтроллеров семейства i8051 — Гор.линия-Телеком, 2004 - 191с. Приложение А (обязательное) |