МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Лабораторна робота № 3
на тему:
«Робота з переферією LED-індикатора»
«Робота з панеллю кнопок»
Мета роботи: ознайомитися із командами мови програмування Assembler та принципами керування мікроконтролерами.
Основні теоретичні відомості
Асемблер (assembler) — система програмування, яка включає мову асемблера та транслятор з цієї мови. Є мовою програмування низького рівня. Чим нижчий рівень мови програмування, тим ближча специфіка роботи програми до самого процесора, для якого вона й була написана. Вважається, що мови низького рівня складніші й потребують більш вузької спеціалізації програміста, оскільки програма написана на асемблері для одного типу процесорів виявиться не завжди придатною для роботи з іншими процесорами. З іншого боку програми написані на асемблері компактні та швидкі.
Асемблер підтримує безліч директив. Директиви не транслюються безпосередньо в коди операції. Навпаки, вони використовуються, щоб коригувати місце розташування програми в пам'яті, визначати макрокоманди, ініцілізувати пам'ять і так далі. Тобто це вказівки самому ассемблеру, а не команди мікроконтролера. Всі директиви асемблера наведені в табл. 1.2.
Таблиця 1.2. Директиви асемблера
Директива
Опис
BYTE
Зарезервувати байт під змінну
CSEG
Сегмент кодів
DB
Задати постійним (и) байт (и) в пам'яті
DEF
Задати символічне ім'я регістру
DEVICE
Задати для якого типу мікроконтролера компілювати
DSEG
Сегмент даних
DW
Задати постійне (і) слово (а) в пам'яті
EQU
Встановіть символ рівний вираженню
ESEG
Сегмент EEPROM
EXIT
Вихід з файлу
INCLUDE
Включити вихідний код з іншого файлу
LIST
Включити генерацію .lst - файлу
NOLIST
Вимкнути генерацію .lst - файлу
ORG
Початкова адреса програми
SET
Встановіть символ рівний виразу
Синтаксис всіх директив наступний: . [Директива] Тобто перед директивою повинна стояти крапка. Інакше асемблер сприймає це як мітку. Дамо кілька пояснень найбільш важливим директивам асемблера
Код програми:
;-----------------— test program —----------DSEG ; створюємо сегмент даних;зарезервуємо в SRAM початкові адреси програми 20H, 30H, 60HORG 20H ; ...ORG 30h; ; ...ORG 60H Stack: DS 20H ; встановлюємо стек на адресі 20HCSEG ; початок сегменту кодів;декларація адресORG 0000H jmp start ORG 0003Hreti ORG 000BHreti ORG 0013Hreti ORG 001BHreti ORG 0023Hreti ORG 0030H;----------------------------------------------------Start:mov sp, #(stack-1)mov p0, #11111111Bmov p1, #11111111Bmov p2, #11111111Bmov p3, #11111111Bmov DPTR, #0A006hmov A, #00000001B;#####################################;## Main ##;#####################################MAIN:movx @DPTR, A ; вводимо в регістр DPTR адресу індикаціїcall knopka1 ; запуск функції для першої кнопкиrl A ; рух світла діодів в ліву сторонуcall knopka2 ; запуск функції другої кнопкиjmp m4 ; стрибок до мітки 4m4:call Delay ; викликаємо функцію затримкиjmp MAIN ; стрибок до мітки MAIN;-------------------------------------------------------; Procedures;-------------------------------------------------------knopka1: ; функція натискання кнопки 1jb p3.2,m1 ; перевірка натискання кнопки 1, якщо кнопка натиснута - перехід до мітки 1m1:rr A ; рух світла діодів вправоknopka2: ; функція натискання кнопки 2jb p3.3,m3 ; перевірка чи натиснута перша кнопка 2, якщо вірно - перехід на мітку 3mov r3,#033h ; записуємо в r3 значення 33m3:mov r3,#066h ; записуємо в r3 значення 66Delay: ; функція затримкиpush 2 ; вставляємо в стек значення з регістру 2 (поміщається першим)push 3 ; вставляємо в стек значення з регістру 3 (поміщається першим)d_m2:mov r2,#0ffh ; записуємо в r3 значення 0ffd_m1:djnz r2,d_m1 ; декремент і перехід, якщо значення рівне 0, містить 2 циклиdjnz r3,d_m2 ; цикл затримки іпульсу за рахунок регістра зсувуpop 3 ; виймаємо зі стеку значення, і поміщаємо в регістр 3pop 2 ; виймаємо зі стеку значення, і поміщаємо в регістр 2
ret ; кінець роботи програми
Висновок:На цій лабораторній роботі я досліджував Комутаційний блок типу "ЧАС-ПРСТІР" з двома різними принципами побудови: це з розбиттям вх./вих. трактів на групи та без розбиття їх на групи. Я мав змогу за допомогою програми спостерігати за кожним кроком комутації кодового слова двох різних комутаційних блоків. Порівнюючи їх в роботі та по економічності очевидно, що КБ без розбиття ГТ на групи є дешевшою. Але швидкодія такої схеми повинна бути дуже високою, тому що в ІЗП на протязі одного циклу повинні записатися і зчитатися всі канальні інтервали всіх групових трактів. Щодо КБ з розбиттям ГТ на групи, то вимога до швидкодії таких схем буде в [g] разів менша Проте к-сть АЗП та ІЗП зростає, що призводить до подорожання такого КБ. Тому використання такої схеми буде доцільніше і необхідним при великій к-сті КІ та ГТ!!
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Лабораторна робота № 4
на тему:
«Табулювання функції sin2x»
«Вивід табульованої функції на осцилограф»
Виконав:Студент групи ТК-33Романьчук О.О.ПеревіривЯремко О.М.
Мета роботи: ознайомитися із командами мови програмування Assembler та принципами керування мікроконтролерами.
Основні теоретичні відомості
Асемблер (assembler) — система програмування, яка включає мову асемблера та транслятор з цієї мови. Є мовою програмування низького рівня. Чим нижчий рівень мови програмування, тим ближча специфіка роботи програми до самого процесора, для якого вона й була написана. Вважається, що мови низького рівня складніші й потребують більш вузької спеціалізації програміста, оскільки програма написана на асемблері для одного типу процесорів виявиться не завжди придатною для роботи з іншими процесорами. З іншого боку програми написані на асемблері компактні та швидкі.
Асемблер підтримує безліч директив. Директиви не транслюються безпосередньо в коди операції. Навпаки, вони використовуються, щоб коригувати місце розташування програми в пам'яті, визначати макрокоманди, ініцілізувати пам'ять і так далі. Тобто це вказівки самому ассемблеру, а не команди мікроконтролера. Всі директиви асемблера наведені в табл. 1.2.
Таблиця 1.2. Директиви асемблера
Директива
Опис
BYTE
Зарезервувати байт під змінну
CSEG
Сегмент кодів
DB
Задати постійним (и) байт (и) в пам'яті
DEF
Задати символічне ім'я регістру
DEVICE
Задати для якого типу мікроконтролера компілювати
DSEG
Сегмент даних
DW
Задати постійне (і) слово (а) в пам'яті
EQU
Встановіть символ рівний вираженню
ESEG
Сегмент EEPROM
EXIT
Вихід з файлу
INCLUDE
Включити вихідний код з іншого файлу
LIST
Включити генерацію .lst - файлу
NOLIST
Вимкнути генерацію .lst - файлу
ORG
Початкова адреса програми
SET
Встановіть символ рівний виразу
Синтаксис всіх директив наступний: . [Директива] Тобто перед директивою повинна стояти крапка. Інакше асемблер сприймає це як мітку. Дамо кілька пояснень найбільш важливим директивам асемблера
/
Блок-схема роботи програми
;------------------- test program ------------
DSEG
ORG 20H
; ...
ORG 30h
; ...
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
mov A, #00000001B
mov DPTR, #0f000h
;#####################################
;## Main ##
;#####################################
MAIN:
mov A, #0
m_loop1:
push ACC
call LoadSin
call LoadSinmod
movx @DPTR, A
pop ACC
inc A
cjne A, #128,m_loop1
jmp MAIN
;-------------------------------------------------------
; Procedures
;-------------------------------------------------------
Delay:
push 2
push 3
mov r3,#003h
d_m2:
mov r2,#0ffh
d_m1:
djnz r2,d_m1
djnz r3,d_m2
pop 3
pop 2
ret
;-------------------------------------------------------
;----------------------------------------------------
;функції виводу sin на екран осцилографа
LoadSin:
inc A
movc A,@A+PC
ret
sin:
; тут табульована функція sin2x у форматі «db x»
LoadSinmod:
inc A
movc A,@A+PC
ret
sin:
; тут табульована функція |sinx| у форматі «db x»
end
Висновок: у ході роботи я ознайомився з принципами роботи мікроконтроллера та навчився створювати прості програми його роботи