Зміст
ВСТУП 3
ЗАВДАННЯ ДО КУРСОВОЇ РОБОТИ 4
СПИСОК СКОРОЧЕНЬ 5
1. Синтез цифрових пристроїв на логічних елементах 6
1.1. Синтез перетворювача коду N в код М 6
1.2. Синтез лічильника імпульсів 13
2. Розробка мікропроцесорної системи на базі МК MCS-51 17
ВИСНОВКИ 27
ВИКОРИТСТАНА ЛІТЕРАТУРА 28
Вступ
На даній курсовій роботі ми повторимо отримані нами знання на попередніх курсах з цифрової техніки, та реалізуємо пристрій на мікроконтролері і8051.
Мікропроцесор - процесор (пристрій, що відповідає за виконання арифметичних, логічних операцій і операцій управління, записаних в машинному коді), реалізований у вигляді однієї мікросхеми або комплекту з декількох спеціалізованих мікросхем (на відміну від реалізації процесора у вигляді електричної схеми на елементній базі загального призначення або у вигляді програмної моделі).
Контролер HD44780 фірми Hitachi фактично є промисловим стандартом і щироко застосовується при виробництві алфавітно-цифрових РКІ-модулів. Аналоги цього контролера або сумісні з ним по інтерфейсу і командній мові мікросхеми, випускають безліч фірм, серед яких: Epson, Toshiba, Sanyo, Samsung, Philips. Ще більше число фірм виробляють РКІ-модулі на базі даних контролерів. Ці модулі можна зустріти в самих різноманітних пристроях: вимірювальних приладах, медичному обладнанні,промисловому і технологічному обладнанні, офісної техніки - принтерах,телефонах, факсимільних і копіювальних апаратах.
Алфавітно-цифрові РК-модулі -цє недороге і зручне рішення, що дозволяє заощадити час і ресурси при розробці нових виробів, при цьому забезпечують відображення великого обсягу інформації при нормальному розрізненні та низькому енергоспоживанні. Можливість оснащення РКІ-модулів задньою підсвіткою дозволяє експлуатувати їх в умовах поганої або нульової освітленості, а виконання з розширеним діапазоном температур (-20 ° С. .. +70 ° С) в складних експлуатаційних умовах, у тому числі в переносний, польовий і навіть, іноді, в бортовій апаратурі.
Контролер HD44780 потенційно може управляти 2-ма рядками по 40 символів в кожному (для модулів з 4-ма рядками по 40 символів використовуються два однотипних контролера), при матриці символу 5 х 7 точок. Контролер також підтримує символи з матрицею 5 х 10 точок, але в останні роки РКІ-модулі з такою матрицею практично не зустрічаються, тому можна вважати, що фактично бувають тільки символи 5 х 7 точок.Існує декілька різних більш-менш стандартних форматів РКІ-модулів (символів х рядків): 8 х 2, 16 х 1, 16 х 2, 16 х 4, 20 х 1, 20 х 2, 20 х 4, 24 х 2, 40х 2, 40 х 4. Зустрічаються і менш поширені формати: 8 х 1, 12 х 2, 32 х 2 тощо, - принципових обмежень на комбінації і кількість відображуваних символів контролер не накладає - модуль може мати будь-яку кількість символів від 1 до 80, хоча в деяких комбінаціях програмна адресація символів може виявитися не дуже зручною. В рамках одного формату можуть вироблятися РКІ-модулі декількох конструктивів, що відрізняються як габаритами РКІ (і, як наслідок, розмірами символів), так і розмірами плати і посадки. Наприклад, фірма Powertip пропонує алфавітно-цифрові РК-модулі 11-ти форматів (від 8 х 2 до 40 х 4) у 37-ми різних конструктивах, 16 х 1 у 6-ти, а модулі формату 16 х 2 у 11-ти [2].
СИНТЕЗ ЦИФРОВИХ ПРИСТРОЇВ НА ЛОГІЧНИХ ЕЛЕМЕНТАХ
Синтез перетворювача коду N в код М
Складаємо повну таблицю істинності перетворювача коду N=1 в код М=2.
№
Х3
Х2
Х1
Х0
Y3
Y2
Y1
Y0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
1
2
0
0
1
0
0
0
1
1
3
0
0
1
1
0
1
0
1
4
0
1
0
0
~
~
~
~
5
0
1
0
1
~
~
~
~
6
0
1
1
0
0
1
1
1
7
0
1
1
1
~
~
~
~
8
1
0
0
0
1
0
0
0
9
1
0
0
1
1
0
0
1
10
1
0
1
0
1
0
1
1
11
1
0
1
1
1
1
0
1
12
1
1
0
0
~
~
~
~
13
1
1
0
1
~
~
~
~
14
1
1
1
0
~
~
~
~
15
1
1
1
1
1
1
1
1
2. Записуємо функції перетворення в удосконаленій диз'юнктивній нормальній формі (УДНФ) і удосконаленій кон'юктивній нормальній формі (УКНФ).
УДНФ:
УКНФ:
3. Мінімізуємо функції перетворення методом карт Карно.
00
01
11
10
00
0
~
~
1
01
0
~
~
1
11
0
~
~
1
10
0
0
1
1
00
01
11
10
00
0
~
~
0
01
0
~
~
0
11
1
~
~
1
10
0
1
1
0
МДНФ: Y3=x3 МДНФ:
МКНФ: Y3=x3 МКНФ:
00
01
11
10
00
0
~
~
0
01
0
~
~
0
11
0
~
~
0
10
1
1
1
1
00
01
11
10
00
0
~
~
0
01
1
~
~
1
11
1
~
~
1
10
1
1
1
1
МДНФ: МДНФ:
МКНФ: МКНФ:
4. Записуємо функції перетворення в базисах функції І-НЕ (Шефера), АБО-НЕ (Вебба).
5. Cхема перетворювача кодів в базисах І-НЕ, АБО-НЕ.
6. Реалізуємо перетворювач кодів на заданому у табл.2 типі ПЗП
7. Реалізація перетворювача кодів на базі мікросхеми ЛА3 (2І-НЕ).
8. Часові діаграми роботи лічильника імпульсів.
Q3
Q2
Q1
Q0
0
0
0
0
0
1
0
0
0
1
2
0
0
1
0
3
0
0
1
1
4
0
1
1
0
5
1
0
0
0
6
1
0
0
1
7
1
0
1
0
8
1
0
1
1
9
1
1
1
0
9. Мінімізовуємо за допомогою карт Карно.
00
01
11
10
00
0001
0010
0110
0011
01
~
~
~
1000
11
~
~
~
0000
10
1001
1010
1110
1011
00
01
11
10
00
0
0
0
0
01
~
~
~
1
11
~
~
~
0
10
1
1
1
1
00
01
11
10
00
0
0
1
0
01
~
~
~
0
11
~
~
~
0
10
0
0
1
0
00
01
11
10
00
0
1
1
1
01
~
~
~
0
11
~
~
~
0
10
0
1
1
1
00
01
11
10
00
1
0
0
1
01
~
~
~
0
11
~
~
~
0
10
1
0
0
1
10. Схема лічильника імпульсів на D тригерах.
Програмна реалізація функції
Розробити і описати функціональну схему мікропроцесорної системи на базі МК51.
2. Скласти блок-схему алгоритмів цифрового пристрою
Розробити програму на мові Асемблер з необхідними коментарями.
LCD_E equ P2.0
LCD_RS equ P2.1
LCD_RW equ P2.2
SPI_CS equ P2.6
SPI_SDO equ P2.5
SPI_SCLK equ P2.7
;#######################################################
DSEG
ORG 20h
; ...
ORG 30h
ResL: ds 1
ResH: ds 1
Tmp: ds 1
divider: ds 1
buff: ds 8
; ...
ORG 60h
Stack: DS 20h
;##########################################################
CSEG
ORG 0000h
jmp start
ORG 0003h
reti
ORG 000Bh
reti
ORG 0013h
reti
ORG 001Bh
reti
ORG 0023h
reti
; -------------------------------------------------------
ORG 0030h
Start:
mov sp, #(stack-1)
mov p0, #11111111B
mov p1, #11111111B
mov p2, #11111111B
mov p3, #11111111B
clr SPI_SCLK
call LCD_Init
mov DPTR, #S_hello
call LCD_Print
call LCD_Print_u
;##############################################
;## Main Loop ##
;##############################################
MAIN:
call ADC_Get
call LCD_Print_U
call LCD_Busy
mov A, #88h
call LCD_Cmd
call ScanKey
mov B, #10
div AB
anl A, #0Fh
add A, #30h
call LCD_Busy
call LCD_Data
mov A, B
anl A, #0Fh
add A, #30h
call LCD_Busy
call LCD_Data
call Delay
jmp MAIN
;--------------------------------------------------------------------
; Procedures
;--------------------------------------------------------------------
ScanKey:
push 5
push 6
mov R6, #0EFh
mov B, #0
sk_m2:
mov P0, R6
nop
nop
mov R5, #4
mov A, P0
sk_m1:
rrc A
jnc sk_end
inc B
djnz R5, sk_m1
mov A, R6
rl A
mov R6, A
jb ACC.7, sk_m2
sk_end:
mov P0, #0EFh
mov A, B
call DecodeKey
pop 6
pop 5
ret
;--------------------------------------------------------------------
DecodeKey:
inc A
movc A, @A+PC
ret
db 01h, 04h, 07h, 0Ah, 02h, 05h, 08h, 0, 03h, 06h, 09h, 0Bh, 0Fh
;--------------------------------------------------------------------
LCD_Cmd:
clr LCD_RW
clr LCD_RS
mov P1, A
setb LCD_E
clr LCD_E
ret
;---------------------------------------------------------------------
LCD_Data:
clr LCD_RW
setb LCD_RS
mov P1, A
setb LCD_E
clr LCD_E
ret
;----------------------------------------------------------------------
LCD_Init:
clr LCD_E
clr LCD_RW
clr LCD_RS
call LCD_Delay
mov A, #30h
call LCD_Cmd
mov B, #10
lcdi_m1:
call LCD_Delay
djnz B, lcdi_m1
mov A, #30h
call LCD_Cmd
mov B, #5
lcdi_m2:
call LCD_Delay
djnz B, lcdi_m2
mov A, #30h
call LCD_Cmd
mov B, #5
lcdi_m3:
call LCD_Delay
djnz B, lcdi_m3
mov A, #38h
call LCD_Cmd
call LCD_Delay
mov A, #0Ch
call LCD_Cmd
call LCD_Delay
mov A, #06h
call LCD_Cmd
call LCD_Delay
ret
;-------------------------------------------------------------
LCD_Busy:
push ACC;
mov P1, #0FFh
setb LCD_RW
clr LCD_RS
lcdbc_m1:
setb LCD_E
nop
nop
mov A, P1
clr LCD_E
jb ACC.7, lcdbc_m1
pop ACC
ret
;-------------------------------------------------------------
LCD_Print:
clr A
movc A, @A+DPTR
jz lcdpr_end
mov B, A
call LCD_Busy
mov A, B
call LCD_Data
inc DPTR
jmp LCD_Print
lcdpr_end:
ret
;-------------------------------------------------------------
LCD_Delay:
push 2
mov R2, #255
djnz R2, $
pop 2
ret
;-------------------------------------------------------------
ADC_Get:
push B
clr SPI_CS
clr A
nop
nop
nop
mov B, #8
adc_loop:
setb SPI_SCLK
nop
mov C, SPI_SDO
clr SPI_SCLK
rlc A
djnz B, adc_loop
setb SPI_CS
pop B
ret
;-------------------------------------------------------------
LCD_Print_U:
mov B, #2
mul AB
mov resH, B
mov resL, A
mov divider, #10
mov R0, #buff
mov B, #3
call DivW
call DivW
mov @R0, tmp
inc R0
mov @R0, resL
call LCD_Busy
mov A, #0C0h
call LCD_Cmd
mov DPTR, #S_u
call LCD_Print
mov A, @R0
add A, #30h
call LCD_Busy
call LCD_Data
mov A, #'.'
call LCD_Busy
call LCD_Data
dec R0
mov A, @R0
add A, #30h
call LCD_Busy
call LCD_Data
mov A, #' '
call LCD_Busy
call LCD_Data
mov A, #'V'
call LCD_Busy
call LCD_Data
ret
;-------------------------------------------------------------
DivW:
push B
push ACC
mov Tmp,#0
mov B,#16
dv_loop:
clr C
mov A, ResL
rlc A
mov ResL, A
mov A, ResH
rlc A
mov ResH, A
mov A, Tmp
rlc A
mov Tmp,A
clr C
subb A, divider
jc dv_next
mov tmp, A
inc ResL
dv_next:
djnz B, dv_loop
pop ACC
pop B
ret
;-------------------------------------------------------------
Delay:
mov r3,#0ffh
d_m2:
mov r2,#0ffh
d_m1:
djnz r2,d_m1
djnz r3,d_m2
ret
;-------------------------------------------------------------
S_hello:
db 'Hello!',0
S_u:
db 'U= ',0
end
Висновок
Мова асемблера- машинно-орієнтована мова низького рівня, команди якого зазвичай знаходяться у відповідності «один до одного» з командами машини і який може забезпечити такі можливості, як використання макрокоманд; автокод, розширений такими засобами мов програмування високого рівня , як вираження, макрокоманди, засоби, що забезпечують модульність програм. Автокод - мова програмування, пропозиції якого за своєю структурою в основному подібні до команд і оброблюваних даними конкретного машинного мови.
Мова асемблера - система позначень, що використовується для подання в зрозумілій формі програм, записаних в машинному коді. Мова асемблера дозволяє програмісту користуватися алфавітними мнемонічними кодами операцій, на свій розсуд присвоювати символічні імена регістрів ЕОМ і пам'яті, а також задавати зручні для себе схеми адресації (наприклад, індексний або непряму). Крім того, він дозволяє використовувати різні системи числення (наприклад, десяткову або шістнадцяткову) для представлення числових констант і дає можливість позначати рядки програми мітками із символічними іменами з тим, щоб до них можна було звертатися (за іменами, а не по адресам) з інших частин програми (наприклад, для передачі керування).
Переклад програми на мові асемблера в здійснимих машинний код (обчислення виразів, розкриття макрокоманд, заміна мнемонік власне машинними кодами і символьних адрес на абсолютні або відносні адреси) проводиться асемблером - програмою-транслятором, яка і дала мови асемблера його назву.
Переваги:
Мова асемблера дозволяє писати найшвидший і компактний код, який взагалі можливий для даного процесора.
Якщо код програми досить великий, - дані, якими він оперує, не поміщаються повністю в регістрах процесора, тобто частково або повністю перебувають в оперативній пам'яті, то майстерний програміст, як правило, здатний значно оптимізувати програму в порівнянні з транслятором з мови високого рівня по одному або декільком параметрам:
швидкість роботи - за рахунок оптимізації обчислювального алгоритму і / або більш раціонального звернення до ОП, перерозподілу даних;
обсяг коду (у тому числі за рахунок ефективного використання проміжних результатів). (Скорочення обсягу коду також нерідко підвищує швидкість виконання програми.)
Забезпечення максимального використання специфічних можливостей конкретної платформи, що також дозволяє створювати більш ефективні програми, - в тому числі менш ресурсомісткі.
При програмуванні на мові асемблера можливий безпосередній доступ до апаратури, і, зокрема, портів вводу-виводу, регістрів процесора та ін
Мова асемблера часто застосовується для створення драйверів устаткування і ядра операційної системи (або машинно підсистем ядра ОС).
Мова асемблера використовується для створення «прошивок» BIOS.
За допомогою мови асемблера часто створюються машинно підпрограми компіляторів і інтерпретатори мов високого рівня, а також реалізується сумісність платформ.
За допомогою дизассемблера можливо дослідити існуючі програми при відсутності вихідного коду.
Недоліки:
В силу машинної орієнтації («низького» рівня) мови асемблера людині складніше читати і розуміти програму на ньому в порівнянні з мовами програмування високого рівня; програма складається з дуже «дрібних» елементів - машинних команд, відповідно, ускладнюються програмування і налагодження, ростуть трудомісткість і ймовірність внесення помилок.
Потрібна підвищена кваліфікація програміста для отримання якісного коду: код, написаний середнім програмістом на мові асемблера, звичайно виявляється не краще або навіть гірше коду, породжуваного оптимизирующим компілятором для порівнянних програм, написаних мовою високого рівня.
Програма на мові високого рівня може бути перекомпілювати з автоматичною оптимізацією під особливості нової цільової платформи, програма ж на мові асемблера на новій платформі може втратити свою перевагу в швидкості без ручного переписування коду.
Як правило, менша кількість доступних бібліотек в порівнянні з сучасними індустріальними мовами програмування.
Відсутня переносимість програм на комп'ютери з іншого архітектурою і системою команд.
Список використаної літератури
Застосування мікроконтролерів AVR: схеми, алгоритми, програми. Автор: Баранов В.М. Видавництво: Додека, 2004 рік.
Довідник з PIC-мікроконтролерів Майкл Предко PICmicro Microcontroller Видавництва: ДМК, Додека, 2004 р.
Каспер Ерні. Програмування на мові асемблера для мікроконтролерів сімейства І8051. М.: Гаряча лінія - Телеком, 2004. - 191 с.: Іл.
Мікроконтролери серії 8051: практичний підхід. Магда Ю. С.