2. Функція уведення числа й паралельного його відображення з можливістю підтвердження уведення.
Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.
Для фіксації значень у кожному з доступних регістрів використається зовнішнє переривання INT0(перехід з 1 в 0), в оброблювачі переривання якого й записаний код збереження значення.
Алгоритм роботи програми:
Текст програми:
cseg | ||
org 2000h | ||
jmp main | ||
org 2003h | ;початок переривання по INT0 | |
mov DPTR,#0fff2h | ;опитування перемикачів | |
movx A,@DPTR | ||
mov DPTR, #0fff1h | ;вивід значень перемикачів | |
movx @DPTR,A | ||
call 0230h | ;затримка 50млС | |
mov IE,#0 | ;для закінчення програми | |
reti | ||
main: | mov IE, #10000001b | ;дозволу переривання |
loop: | mov DPTR,#0fff2h | ;опитування перемикачів |
movx A,@DPTR | ||
mov DPTR, #0fff1h | ;вивід значень перемикачів | |
movx @DPTR,A | ||
sjmp loop | ;нескінченний цикл сканування до переривання |
3. Просуммировать два уведених значення й суму записати в DPTR.
Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.
Текст програми:
cseg | ||
org 2000h | ||
jmp main | ||
org 2003h | ||
clr EX0 | ||
jmp INT_0 | ||
main: | mov IE, #10000001b | ;дозволу переривання |
mov R7,#0 | ;лічильник операндов | |
setb IT1 | ||
loop: | mov DPTR,#0fff2h | ;опитування перемикачів |
movx A,@DPTR | ||
mov DPTR, #0fff1h | ;вивід значень перемикачів | |
movx @DPTR,A | ||
sjmp loop | ;нескінченний цикл сканування до переривання | |
INT_0: | clr IT1 | ;змінити фронт спрацьовування переривання |
mov DPTR,#0fff2h | ;опитування перемикачів | |
movx A,@DPTR | ||
mov DPTR, #0fff1h | ;вивід значень перемикачів | |
movx @DPTR,A | ||
mov R6,A | ;запам'ятовування поточних значень перемикачів | |
mov A,R7 | ;для перевірки на кількість уведених операндов | |
jz nul | ;уведено два операнда? | |
mov A,R6 | ;да | |
mov R1,A | ;додавання операндов | |
add A,R0 | ||
mov R0,A | ;для виводу за допомогою процедури SSI_W | |
call 0940 | ;вивід | |
mov DPL,A | ;запис значення в DPTR | |
jmp exit | ;кінець програми | |
nul: | mov A,R6 | ;немає |
mov R0,A | ;збереження першого операнда | |
inc R7 | ;наступний буде вводитися другий операнд | |
setb EX0 | ;дозволу переривання | |
jmp ex | ;вихід із процедури уведення | |
exit: | mov R7,#0 | ;для закінчення програми |
ex: | reti |
4. Секундомір. Програма використає апаратні засоби відліку тимчасових інтервалів - таймер 0 (200Bh). Час виводиться на ССИ за допомогою стандартної процедури 0940 (для цього потрібне значення потрібно помістити в регістр R0). Програма виконується в зацикленому стані.
Алгоритм роботи програми:
Текст програми:
cseg | ||
org 2000h | ||
jmp main | ;перехід до виконання головної програми | |
org 200Bh | ||
jmp timer | ;перехід до виконання програми обробки переривання | |
main: | mov TMOD,#01h | ;включаємо 16 – розрядний таймер |
mov IE,#10000010b | ;дозволяємо переривання від таймера | |
mov TL0,#LOW(555) | ;завантаження значення для відліку – 50мС | |
mov TH0,#HIGH(555) | ||
mov R0,#1 | ;початку з 1 секунди | |
call 0940h | ;візуалізація секунд | |
setb TR0 | ;старт таймера | |
loop: | sjmp loop | ;нескінченний цикл |
timer: | clr TR0 | ;зупинка таймера |
inc R7 | ;20*50мС=1С | |
cjne R7,#20,out | ;пройшла 1С? | |
mov R7,#0 | ;так – обнуління лічильника циклів по 50мС | |
inc R0 | ;пройшла 1С – инкремент показника секунд | |
cjne R0,#60,out1 | ;пройшла 1 хвилина? | |
mov R0,#1 | ;так - секунди = 1 | |
out1: | call 0940h | ;показати секунди |
out: | mov TL0,#LOW(555) | ;завантаження значення для відліку – 50мС |
mov TH0,#HIGH(555) | ||
setb TR0 | ;старт таймера | |
reti | ;кінець підпрограми обробки переривання |
5. Стан перемикача INT0. Завдяки цій програмі можна обробляти переривання від INT0 без використання переходів на програма-оброблювач переривань і сканувати стан цього виводу порту P3 як скануються перемикачі. Принцип програми складається зі сканування всього порту й виділення із цього значення потрібного біта(другого). У судячи із цього біта визначається сигнал на INT0. Програма циклічно сканує порт і відповідно до зазначеного біта видає значення на лінійку светодиодов. Два значення - усі запалені - INT0=1; Половина запалена - INT0=0
Текст програми:
cseg | ||
org 2000h | ||
jmp main | ;перехід до виконання головної програми | |
org 2003h | ||
jmp ent | ;перехід до виконання програми обробки переривання | |
main: | mov IE,#10000001b | ;дозволяємо переривання від INT0 |
loop: | mov A,P3 | ;сканування значень на порту P3 (INT0 – P3.2) |
jb Acc.2,true | ;INT0=1? | |
jmp false | ;немає | |
true: | mov DPTR,#0FFF1h | ;так – візуалізація |
mov A,#255 | ;запалити всі светодиоды – INT0=1 | |
movx @DPTR,A | ||
jmp loop | ;нескінченне сканування | |
false: | mov DPTR,#0FFF1h | ;немає - візуалізація |
mov A,#11110000b | ;запалити половину светодиодов – INT0=0 | |
movx @DPTR,A | ||
jmp loop | ;нескінченне сканування | |
ent: | clr EX0 | ;прийшов сигнал INT0 |
mov DPTR,#0FFF2h | ;вивід значень перемикачів на лінійку светодиодов | |
movx A,@DPTR | ||
mov DPTR,#0FFF1h | ||
movx @DPTR,A | ||
call 0230h | ;затримка для фіксації візуалізації | |
setb EX0 | ;дозвіл переривання від INT0 | |
reti | ;кінець підпрограми обробки переривання |
7 ІНДИВІДУАЛЬНЕ ЗАВДАННЯ
Постановка завдання
Темою індивідуального завдання є розроблення пристрою для регістрації подій. Для регістрації подій треба використати 8 дискретних датчиків які скануються з інтервалом 50 мС. По перериванню таймера 1 виконується підпрограма сканування датчиків та запису інформації про подію в зовнішню пам`ять (кількість подій – 8). При записі інформації про подію добавляється і час події, який відраховує таймер 0.
Розробка схеми алгоритму програми
Першим блоком програми повинен бути блок завантаження потрібних значень до регістрів таймерів та обнуління регістрів, які потрібні для зберігання інформацій про час, різні лічильники та для ін.
Запуск таймерів (0 та 1) важлива функція, яка дозволяє почати відлік часу та відлік інтервалів для сканування датчиків.
Щоб забезпечити паралельне реагування на події від таймерів та виводу INT0, який дає змогу користувачу проглянути записи про події в резидентній пам’яті програм, треба зациклити основну програму й надати змогу підпрограмам обробки переривань виконуватися після приходу керуючого сигналу.
Отже, для кожного пристрою – таймерів 0 та 1, вивід INT0, треба написати свою підпрограму. На схемі алгоритму такі підпрограми зображені в блоках 8, 10 та 11.
Схема алгоритма представлена на ПН5.091504.15.04.00Д
Розробка схеми електричної принципової
Так як даний пристрій базується на УНМС-2, то доцільним було б розробити схему електричну принципову керуючись готовою схемою УНМС-2, тобто відібрати потрібні елементи, а інші не враховувати.
Виходячи із завдання можна припустити, що центральним елементом схеми буде МК Atmel AT89S8252, який буде здійснювати управління над усіма іншими пристроями. Також в схеми слід включити і елементи індикації такі як семисегментний індикатор, рідкокристалічний дисплей на лінійку світо діодів. Судячи з цього треба додати до схеми буферні елементи, які б розвантажили порти МК. Схема представлена на креслені ПН5.091504.15.04.Е3
Програма на мові assembler
cseg | ||
org 2000h | ||
jmp main | ;початок головной програми | |
org 2003h | ||
jmp select | ;перехід по перериванню від INT0 | |
org 200Bh | ||
jmp timer | ;перехід по перериванню від таймера 0 | |
org 201bh | ||
jmp scan | ;перехід по перериванню від таймера 1 | |
main: | mov TMOD,#17 | ;конфігурування таймерів як 16 розрядних |
mov IE,#138 | ;дозвіл перериванням | |
setb EX0 | ;дозвіл переривання від INT0 | |
setb PT0 | ;встановлення найвищого пріоритета таймеру 0 | |
mov TL0,#LOW(555) | ;завантаження у таймерт значення 50 мС | |
mov TH0,#HIGH(555) | ||
mov TL1,#LOW(555) | ||
mov TH1,#HIGH(555) | ||
mov R0,#0 | ;обнулення всіх регістрів | |
mov R1,#0 | ||
mov R2,#0 | ||
mov R3,#0 | ||
mov R7,#0 | ||
call tvis | ;визов процедури візуалізації часу | |
setb TR0 | ;запуск таймерів | |
setb TR1 | ||
loop: | sjmp loop | ;бескінечний цикл |
timer: | clr TR0 | ;початок процедури обробки перивання від таймеру 0 |
inc R7 | ;лічильник переривань | |
cjne R7,#180,out | ;переривань було 180? | |
mov R7,#0 | :так обнулення лікильника переривань | |
inc R0 | ;зафіксувати 10 сек. У регістрі секунд | |
cjne R0,#6,out | ;перевірка на те, що пройшла хвилина чи ні | |
mov R0,#1 | ;пройшла – 60 сек = 1 сек | |
inc R1 | ;фіксування 1 хв. У регістрі хвилин | |
cjne R1,#60,out | ;пройшла година? | |
mov R1,#1 | Так | |
inc R2 | ;фіксація часу | |
cjne R2,#24,out | ;пройшов день | |
mov R2,#0 | ||
inc R3 | ||
cjne R3,#32,out | ;пройшов місяць | |
mov R3,#1 | ||
out: | call tvis | ;візуалізація часу кожні 10 сек. |
mov TL0,#LOW(555) | ||
mov TH0,#HIGH(555) | ||
setb TR0 | ||
reti | ||
scan: | clr TR1 | ;програмне сканування датчиків |
mov DPTR,#0FFF2h | ;адреса датчиків | |
movx A,@DPTR | ;зняти значення датчиків | |
jz not_al | ;хоча б один датчик спрацював? Якщо ні– у кінець | |
jnb Acc.0,n1 | ;так – побітна перевірка слова від датчиків | |
mov R7,#1 | ;перевірка 1 датчика і якщо він спрацював, то записати | |
call alarm | ;інформацію про подвю | |
n1: | jnb Acc.1,n2 | ;2-ий |
mov R7,#2 | ||
call alarm | ||
n2: | jnb Acc.2,n3 | ;3-ій |
mov R7,#2 | ||
call alarm | ||
n3: | jnb Acc.3,n4 | ;4-ий |
mov R7,#3 | ||
call alarm | ||
n4: | jnb Acc.4,n5 | ;5-ий |
mov R7,#4 | ||
call alarm | ||
n5: | jnb Acc.5,n6 | ;6-ий |
mov R7,#5 | ||
call alarm | ||
n6: | jnb Acc.6,n7 | ;7-ий |
mov R7,#6 | ||
call alarm | ||
n7: | jnb Acc.7,not_al | ;8-и1 |
mov R7,#7 | ||
call alarm | ||
not_al: | mov TL1,#LOW(555) | |
mov TH1,#HIGH(555) | ||
setb TR1 | ||
reti | ||
select: | clr EX0 | ;підпрограма перегляду записаних подій |
clr TR1 | :зупинка сканування датчиків | |
li: | mov DPTR,#0FFF2h | ;сканування перемикачів для уводу номера події |
movx A,@DPTR | ||
anl A,#7 | ;маскування не поьрібних розрядів | |
inc A | ;для правильної візуалізації | |
call get_num | ;переведення 2 значення да коду ССІ | |
mov DPTR,#0FFF7h | ;відображення введеної цифри | |
movx @DPTR,A | ||
call view | ;виклик процедури, яка запише до DPTR адресу плдії | |
jnb P3.2,li | ;зациклювання до підтвердження ввіоду | |
movx A,@DPTR | ;відображення інформації про подійю відновідно до | |
mov DPTR,#0FFF7h | ; введеної цифри – номера події | |
call get_num | ||
movx @DPTR,A | ||
setb EX0 | ||
setb TR1 | ||
reti | ||
view: | mov B,#20h | ;процедура запису до DPTR адреси події |
mul AB | ;так як запис має розмір 20h біт | |
mov DPTR,#4000h | ;перший адрес першої події | |
mov R5,A | ;мл | |
mov R6,B | ;ст | |
mov A,DPL | ;додаймо до DPTR результат множення і отримаємо | |
add A,R5 | ;адрес, за яким записана потрібна користувачу подія | |
mov DPL,A | ||
mov A,DPH | ||
add A,R6 | ||
mov DPH,A | ||
ret | ||
alarm: | inc R4 | ;підрограма запису події у РПД |
cjne R4,#9,norm | ||
mov R4,#0 | ;виклик процедури виводу повідомлення об помилки - переповнення | |
norm: | mov A,R4 | |
mov B,#20h | ||
mul AB | ||
mov DPTR,#4000h | ||
mov R5,A | ;мл | |
mov R6,B | ;ст | |
mov A,DPL | ||
add A,R5 | ||
mov DPL,A | ||
mov A,DPH | ||
add A,R6 | ||
mov DPH,A | ||
mov A,R7 | ||
mov B,R0 | ||
mov R0,#18h | ||
rec: | movx @DPTR,A | |
inc DPTR | ||
inc DPTR | ||
inc DPTR | ||
inc DPTR | ||
inc DPTR | ||
inc DPTR | ||
inc DPTR | ||
inc DPTR | ||
mov A,@R0 | ||
dec R0 | ||
dec R0 | ||
dec R0 | ||
dec R0 | ||
dec R0 | ||
dec R0 | ||
dec R0 | ||
nop | ||
djnz R0,rec | ||
mov A,B | ||
movx @DPTR,A | ||
ret | ||
tvis: | mov A,R0 | |
mov DPTR,#0FFF1h | ||
movx @DPTR,A | ||
mov A,R1 | ||
anl A,#0Fh | ||
cjne A,#9,prov | ||
nplus: | call get_num | |
mov DPTR,#0FFF7h | ||
movx @DPTR,A | ||
jmp st | ||
prov: | jnc plus | |
jmp nplus | ||
plus: | call get_num | |
mov DPTR,#0FFF7h | ||
movx @DPTR,A | ||
mov A,R1 | ||
swap A | ||
anl A,#0Fh | ||
inc A | ||
jmp e1 | ||
st: | mov A,R1 | |
swap A | ||
anl A,#0Fh | ||
e: | call get_num | |
inc DPTR | ||
movx @DPTR,A | ||
mov A,R2 | ||
anl A,#0Fh | ||
cjne A,#9,prov1 | ||
nplus1: | call get_num | |
mov DPTR,#0FFF9h | ||
movx @DPTR,A | ||
jmp st1 | ||
prov1: | jnc plus1 | |
jmp nplus1 | ||
plus1: | call get_num | |
mov DPTR,#0FFF9h | ||
movx @DPTR,A | ||
mov A,R1 | ||
swap A | ||
anl A,#0Fh | ||
inc A | ||
jmp e1 | ||
st1: | mov A,R1 | |
swap A | ||
anl A,#0Fh | ||
e1: | call get_num | |
inc DPTR | ||
movx @DPTR,A | ||
ret | ||
get_num: | inc A | |
movc A,@A+PC | ||
ret | ||
db 00111111b ;0 | ||
db 00000110b ;1 | ||
db 01011011b ;2 | ||
db 01001111b ;3 | ||
db 01100110b ;4 | ||
db 01101101b ;5 | ||
db 01111101b ;6 | ||
db 00000111b ;7 | ||
db 01111111b ;8 | ||
db 01101111b ;9 | ||
db 00111111b ;0 | ||
db 00000110b ;1 | ||
db 01011011b ;2 | ||
db 01001111b ;3 | ||
db 01100110b ;4 | ||
db 01101101b ;5 |
ВИСНОВКИ
В результаті виконання практики я набув практичні навички програмування і вирішення різноманітних задач. Також в ході практики були виконані всі вимоги технічного завдання і звіт включає в себе такі розділи, як – охорона праці, структура, призначення та взаємодія програмного забезпечення УНМС-2, технічне описання стенду УНМС-2, програми типових процедур, тестові програми та індивідуальне завдання.В результаті проходження практики було вивчено:
- архітектуру сучасних мікроконтролерів;
- методи тактування, режими зниженого енергоспоживання й скидання типових мікроконтролерів ;
- роботу системи переривань мікроконтролерів;
- організацію та методи програмування портів уводу-виводу й таймерів;
- призначення та функціонування компаратора;
- організацію, режими роботи та функціонування аналого-цифрового перетворювача;
- організацію, режими роботи, функціонування та методи програмування сучасних послідовних периферійних інтерфейсів;
- системи команд мови програмування Аssembleг для АVR та МСS-51сумісних мікроконтролерів;
- правила написання програм на мові програмування Аssembler;- технічні характеристики сучасної цифрової елементної;
- склад лабораторного стенда на основі УНМС-2;
- структуру, технічні характеристики, конструкцію та призначення органів керування УНМС-2;
- склад та функціональне призначення програмного забезпечення
ПЕРЕЛІК ПОСИЛАНЬ
1. Бродін В.Б., Калінін А.В. Системи на мікроконтролерах і БІС програмувальної логіки. - М.: Видавництво ЭКОМ, 2002. - 400 с.
2. Евстифеев А. В. Мікроконтролери AVR сімейств Tiny й Mega фірми "ATMEL". - М.: Видавничий будинок "Додека-XXI", 2004. - 560 з.
3. Самофалів К.Г. й ін. Мікропроцесори: Довідник - К.: Техніка, 1986. - 278с.
4. Микроконтролерні системи: структури й практичне застосування. Частина 1. / В.Г. Джулгаков й ін. - Учеб. посібник. - Харків: Нац. аерокосмічний ун-т "Харьк. авиац. ин-т", 2003. - 126 с.
С.В. Якубовский, Л.И. Ниссельсон Цифрові й аналогові ІМС 1996-530c
5. www.atmel.ru
6. Житецький В.Ц., Джиги рей В.С., Мельников О.В. Основи охорони праці
7. Житецький В.Ц. Охорона праці користувачів комп’ютерів
8. www.mikrokontrolers.ru
9. www.chipinfo.ru
... 4. Як графічно позначаються польові транзистори? Інструкційна картка №9 для самостійного опрацювання навчального матеріалу з дисципліни «Основи електроніки та мікропроцесорної техніки» І. Тема: 2 Електронні прилади 2.4 Електровакуумні та іонні прилади Мета: Формування потреби безперервного, самостійного поповнення знань; розвиток творчих здібностей та активізації розумово ...
... ії контурів управління Автоматична система управління дозування формаліна передбачає контролювання таких параметрів як Fстр. кількості постачаємої стружки в дифузійний апарат, є головним чинником який впливає на час подачі формаліна в дифузійну установку, рН дифузійного соку та Т температура середовища протікання процесу, ці показники відображають розвиток мікрофлори в дифузійному апараті та є ...
... для розв'язання особливо складних науково-технічних задач, оброблення великих обсягів даних у реальному масштабі часу, моделювання складних систем, автоматизованого проектування складних об'єктів, а також у системах керування (промислових і військових). Макет найпотужнішого суперкомп'ютера ES (Earth Simulator) Центра моделювання Землі (Earth Simulator Center) у Йокогамі (Японія) показаний рис. ...
... дзеркала над демонстраційною плитою протягом багатьох років з успіхом використовуються в кулінарних училищах. 2.2 Експериментальна перевірка ефективності застосування технічних засобів навчання у навчально-виховному процесі при вивченні дисципліни «Кулінарія» Для перевірки результативності засвоєння знань студентами Чернігівського комерційного технікуму з використанням на заняттях технічних ...
0 комментариев