Розробка програми сортування масиву однобайтних даних
Розробити та відлагодити програму на мові асемблеру для Intel 8051, що реалізує підрахунок кількості натискань на клавішу переривання INT0 або INT1 та її індикацію та статичний індикатор, виведення на які організовано через комірку зовнішньої пам’яті МК. Число натискань необхідно також дублювати за допомогою семисегментного індикатору, шляхом підсвічення сегментів D, G, A після перевищення… Читати ще >
Розробка програми сортування масиву однобайтних даних (реферат, курсова, диплом, контрольна)
Міністерство освіти і науки, молоді та спорту України Національний авіаційний університет
Інститут інформаційно-діагностичних систем КУРСОВА РОБОТА з дисципліни Цифрові пристрої та мікропроцесори Київ — 2010
ЗАВДАННЯ
на курсову роботу
1. За методом карт Карно виконати мінімізацію функції заданою таблицею істинності, розробити та відлагодити програму на мові асемблеру для Intel 8051, що реалізує отриманий логічний вираз; створити у середовищі Electronics Workbench схему, що реалізує отриманий логічний вираз. Змінні, , та знаходяться у комірках зовнішньої пам’яті даних.
x1=85 h, x2= 41h, x3= 36h, x4= 06h.
X1 | X2 | X3 | X4 | № 4 | |
2. Розробити програму для формування послідовності прямокутних імпульсів з вказаними частотою та коефіцієнтом заповнення. У якості виходу використовувати сигнальну лінію одного із портів паралельного вводу-виводу мікроконтролера.
Тактова частота 6,9465 МГц, частота сигналу 2,857 Гц, вихід P0.7 коефіцієнт заповнення 23,46%.
3. Розробити програму, що виконує сортування масиву однобайтних даних, що знаходиться у зовнішній пам’яті. Мінімальне і максимальне значення масиву повинні бути виведені на статичні індикатори, виведення на які організовано через комірки зовнішньої пам’яті МК. Відображення чисел на індикаторі повинно бути реалізовано за допомогою інструменту «Окружение» середовища MCStudio.
Кількість байт 29, зсув першого елементу масиву A1EF.
4. Розробити та відлагодити програму на мові асемблеру для Intel 8051, що реалізує підрахунок кількості натискань на клавішу переривання INT0 або INT1 та її індикацію та статичний індикатор, виведення на які організовано через комірку зовнішньої пам’яті МК. Число натискань необхідно також дублювати за допомогою семисегментного індикатору, шляхом підсвічення сегментів D, G, A після перевищення певного рівня. Відображення чисел на індикаторі повинно бути реалізовано за допомогою інструменту «Окружение» середовища MCStudio.
Сигнал переривання INT1, межі D 9, G 14, A 26.
1. За методом карт Карно виконати мінімізацію функції заданою таблицею істинності, розробити та відлагодити програму на мові асемблеру для Intel 8051, що реалізує отриманий логічний вираз. Змінні x1, x2, x3 та x4 знаходяться у комірках зовнішньої пам’яті даних.
Адреси: x1=85 h, x2= 41h, x3= 36h, x4= 06h.
X1 | X2 | X3 | X4 | № 4 | |
Базис: І-Ні.
1.1 Заповнюємо Карту Карно відповідно до таблиці істинності:
1.2 Будуємо ЗДНФ:
Перетворимо її по де Моргану для того щоб використовувати функціонально повний базис і отримаємо: Отримаємо:
1.3 Блок-схема програми
1.4 Розробити та відлагодити програму на мові асемблеру для Intel 8051, що реалізує отриманий логічний вираз
org 0000h; визначення стартового коду та таблиці векторів
mov dptr,#85h
movx A,@dptr; запис змінної х1 у комірку внут. пам'яті
mov 85h, A
mov A, 85h
cpl A; інвертуємо х1 і заносимо його в R1
mov R1, A
mov dptr,#41h
movx A,@dptr; запис змінної х2 у комірку внут. пам'яті
mov 41h, A
mov A, 41h
cpl A; інвертуємо х2 і заносимо його в R2
mov R2, A
mov dptr,#36h
movx A,@dptr; запис змінної х3 у комірку внут. пам'яті
mov 36h, A
mov A, 36h
cpl A; інвертуємо х3 і заносимо його в R3
mov R3, A
mov dptr,#06h
movx A,@dptr; запис змінної х4 у комірку внут. пам'яті
mov 06h, A
mov A, 06h
cpl A; інвертуємо х4 і заносимо його в R4
mov R4, A
mov A, 85h; ложимо в акумулятор значення х1
orl A, R2; OR регістра і акумулятора
orl A, R4; OR регістра і акумулятора
cpl A; інверсія акумулятора
mov R7, A; (R7) =
mov A, 36h; ложимо в акумулятор значення х3
orl A, R4; OR регістра і акумулятора
orl A, R2; OR регістра і акумулятора
cpl A; інверсія акумулятора
orl A, R7; OR регістра і акумулятора
mov R7, A; (R7) =
mov A, 85h; ложимо в акумулятор значення х1
orl A, 41h; OR комрки і акумулятора
orl A, 06h; OR комірки і акумулятора
cpl A; інверсія акумулятора
orl A, R7; OR регістра і акумулятора
cpl A; інверсія акумулятора
mov R7, A; (R7) =
st: jmp st;цикл
2. Розробити програму для формування послідовності прямокутних імпульсів з вказаними частотою та коефіцієнтом заповнення. У якості виходу використовувати сигнальну лінію одного із портів паралельного вводу-виводу мікроконтролера.
Варіант | Частота, МГц | Частота сигналу, Гц | Лінія | Коефіцієнт заповнення, % | |
6,9456 | 2,857 | Р0.7 | 23,46 | ||
2.1 Період імпульсу:
.
2.2 Тривалість імпульсу:
2.3 Тривалість паузи:
2.4 Знаходимо частоту імпульсів, яку буде підраховувати кожен з лічильників:
2.5 Знаходимо кількість імпульсів, яку повинен підрахувати лічильник щоб забезпечити та :
2.6 Знайдемо перед установки лічильників:
2.7 Блок-схема програми:
2.8 Лістинг програми на мові асемблеру:
org 0000h;визначення стартового коду і таблиці векторів
jmp p07;перехід на мітку p07
org 000Bh;вектор переривання таймера 0
jmp m0;перехід на мітку m0
org 001Bh;вектор переривань таймера 1
jmp m1;перехід на мітку m1
p07:;мітка p07
mov IE,#1 000 1010b;встановлення стану регістру керування, дозвіл
переривань від таймерів 0 і 1
mov TMOD,#1 001 1001b;встановлення регістру режиму TMOD,
встановлення необхідного режиму лічильника
mov TCON,#1 0000b;встановлення регістру управління TCON,
запуск лічильника 0
mov R0,#7
mov TH0,#100 1011b;початковий стан лічильника 0 молодших розрядів
mov TL0,#101 1110b;початковий стан лічильника 0 старших розрядів
mov TH1,#110 0001b;початковий стан лічильника 1 молодших розрядів
mov TL1,#1 010 0101b;початковий стан лічильника 1 старших розрядів
setb 87h;вивід на порт P0.7
s1: jmp s1;безкінечний цикл
m0:;мітка mo
clr 87h;очистка значення P0.7
mov TCON,#00b;встановлення регістру управління TCON,
зупинка лічильника 0
mov TH0,# 100 1011b;початковий стан лічильника 0 молодших
розрядів
mov TL0,# 101 1110b;початковий стан лічильника 0 старших розрядів
mov TCON,#100 0000b;встановлення регістру управління TCON,
запуск 1-го лічильника
reti;вихід з переривання
m1:
djnz R0, m3
m3:;мітка m1
setb 87h;вивід на порт P0.7
mov TCON,#00b;встановлення регістру управління TCON,
зупинка лічильника 1
mov TH1,# 110 0001b;початковий стан лічильника 1 молодших
розрядів
mov TL1,# 1 010 0101b;початковий стан лічильника 1 старших розрядів
mov TCON,#1 0000b;встановлення регістру управління TCON,
запуск 0-го лічильника
reti;вихід з переривання мінімізація програма сортування імпульс
3. Розробити програму, що виконує сортування масиву однобайтних даних, що знаходиться у зовнішній пам’яті. Мінімальне і максимальне значення масиву повинні бути виведені на статичні індикатори, виведення на які організовано через комірки зовнішньої пам’яті МК. Відображення чисел на індикаторі повинно бути реалізовано за допомогою інструменту «Окружение» середовища MCStudio.
3.1 Блок-схема програми
3.2 Лістинг програми на мові асемблеру:
org 0000h; визначення стартового коду і таблиці векторів
mov R0,#0;обнулили регістр R0
mov R5,#29; обсяг масиву
mov R0,#10h; початкова адреса масиву
mov dptr,#0A1EFh; в зовнішню пам’ять поклали значення комірки
A1EF
m1:;мітка
movx A,@dptr; число з комірки A1EFh переносимо у внутрішню
пам’ять
mov @R0,A; значення з акумулятора переносимо в масив R0
INC dptr; інкремент покажчика даних
INC R0; інкремент регістру
djnz R5, m1; поки R5 не буде =0, то m1
mov 60h,#0; для проміжного зберігання числа
mov 61h,#0; для проміжного зберігання числа
mov 62h,#29; зберігання к-ті елементів для поточної ітерації
mov R0,#0; обнулили регістр R0
mov R0, #10h; початкова адреса масиву
mov R1, #11h; початкова адреса масиву +1
mov R2, 62h; обсяг масиву (поточної ітерації)
mov R3, 62h; обсяг масиву (ітерацій)
start:
clr c; очищення флагу переносу
mov A, @R0; заносимо значення з регістру R0 до акумулятора
subb A, @R1;порівняння значення в акумуляторі та в регістрі R1
jc max
m2:; мітка
inc R0; інкрементування регістру R0
inc R1; інкрементування регістру R1
djnz R2, start; декремент регістру R2 і перехід на мітку start, якщо він
не дорівнює нулю
mov R0, #10h; заносимо значення 10 до регістру R0
mov R1, #11h; заносимо значення 11 до регістру R1
dec 62h; декрементування комірки 62
mov R2, 62h; заносимо комірку 62 в регістр R2
djnz R3, start; декремент регістру R3і перехід на мітку start, якщо він не
дорівнює нулю
mov dptr,#0A000h
mov A, 10h ;виведення на лівий індикатор
movx @dptr, A
mov dptr,#0B000h
mov A, 39h ;виведення на правий індикатор
movx @dptr, A
s1: jmp s1; нескінченний цикл
max:
mov 60h, @R0; обмін значеннями поточних комірок
mov 61h, @R1; більше значення іде «вверх»
mov @R0, 61h
mov @R1, 60h
jmp m2; перехід на мітку
4. Розробити та відлагодити програму на мові асемблеру для Intel 8051, що реалізує підрахунок кількості натискань на клавішу переривання INT0 або INT1 та її індикацію та статичний індикатор, виведення на які організовано через комірку зовнішньої пам’яті МК. Число натискань необхідно також дублювати за допомогою семисегментного індикатору, шляхом підсвічення сегментів D, G, A після перевищення певного рівня. Відображення чисел на індикаторі повинно бути реалізовано за допомогою інструменту «Окружение» середовища MCStudio.
4.1 Лістинг програми на мові асемблеру:
org 0000h; визначення стартового коду і таблиці векторів
jmp 0100h; перхід за адресою 100h
org 0003h; перехід на обробник переривання INT0
jmp 0040h; перхід за адресою 40h
org 0100h; визначення стартового коду і таблиці векторів
mov IE, #1 000 0001b; дозвіл переривань INT0
mov TCON,#01b; встановлення активного сигналу «перехід 1−0»
mov IP,#01b; встановлення найвищого пріоритету для INT0
mov R0, #0; обнулили регістр R0
mov dptr, #8003h
mov A, #1 000 0000b; Дозволяємо роботу ПП
movx @dptr, A
mov dptr,#8002h
mov A, #1 111 1100b; Вибір індикатора для виводу інформації
movx @dptr, A
mov 20h,#9h; заносимо число 9 до комірки 20h
mov 21h,#14h;заносимо число 14 до комірки 21h
mov 22h,#26h ;заносимо число 26 до комірки 22h
mov 2Ah,#00b
m1:; мітка
cjne A, 20h, m1; порівнюємо значення акумулятора з 20h
jmp vivod1; перехід на підпрограму vivod1
m2:; мітка
m3:; мітка
cjne A, 21h, m3; порівнюємо значення акумулятора з 21h
jmp vivod2; перехід на підпрограму vivod2
m5:; мітка
m4:; мітка
cjne A, 22h, m4; порівнюємо значення акумулятора з 22h
jmp vivod3; перехід на підпрограму vivod3
m6:; мітка
st: jmp st; нескінченний цикл
org 0040h
Inc R0; інкрементування регістру R0
mov DPTR, #0B000h
mov A, R0; виведення на правий індикатор
movx @DPTR, A
reti; вихід з підпрограми
vivod1:
setb 53h; встановлення біту
mov DPTR, #8000h
mov A, 2Ah; вивід на індикатор
movx @DPTR, A
jmp m2; перехід на мітку
vivod2:
setb 56h; встановлення біту
mov DPTR, #8000h
mov A, 2Ah; вивід на індикатор
movx @DPTR, A
jmp m5; перехід на мітку
vivod3:
setb 50h; встановлення біту
mov DPTR, #8000h
mov A, 2Ah; вивід на індикатор
movx @DPTR, A
jmp m6; перехід на мітку
4.2 Блок-схема програми:
Висновок
В ході курсової роботи:
· за методом карт Карно виконав мінімізацію функції заданою таблицею істинності, розробив та відлагодив програму на мові асемблеру для Intel 8051, що реалізує отриманий логічний вираз; створив у середовищі Multisim, схему, що реалізує отриманий логічний вираз;
· розробив програму для формування послідовності прямокутних імпульсів з вказаними частотою та коефіцієнтом заповнення. У якості виходу використав сигнальну лінію одного із портів паралельного вводу-виводу мікроконтролера;
· розробив програму, що виконує сортування масиву однобайтних даних, що знаходиться у зовнішній пам’яті. Мінімальне і максимальне значення масиву виведені на статичні індикатори, виведення на які організовано через комірки зовнішньої пам’яті МК. Відображення чисел на індикаторі повинно було реалізовано за допомогою інструменту «Окружение» середовища MCStudio.
· розробив та відлагодив програму на мові асемблеру для Intel 8051, що реалізує підрахунок кількості натискань на клавішу переривання INT1 та її індикацію та статичний індикатор, виведення організовано через комірку зовнішньої пам’яті МК. Число натискань також дублювалося за допомогою семисегментного індикатору, шляхом підсвічення сегментів D, G, A після перевищення певного рівня. Відображення чисел на індикаторі було реалізовано за допомогою інструменту «Окружение» середовища MCStudio.