Системний аналіз електронно-механічних систем

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2011
Тип роботи:
Практична робота
Предмет:
Інші
Група:
КН

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Практична робота №2 на тему: Системний аналіз електронно-механічних систем Мета: За допомогою мікроконтроллера типу ST7FLITE29, запрограмувати рух двох моторів. Теоретичні відомості Для аналізу функцій перш за все треба скласти їх список. Для кожної функції треба сформулювати мету, тобто, для чого необхідна дана функція в приладі чи програмі і чи можна її замінити на інші так, щоб поставлена мета досягалася більш ефективно. Після складання списку функцій їх необхідно впорядкувати так, щоб спочатку стояли найбільш важливі функції. Реалізацію необхідно починати з найбільш важливих Виконання роботи: N Текст програми: ST7/ ;************************************************************************ ; TITLE: ; AUTHOR: ; DESCRIPTION: ;************************************************************************ TITLE "ex_spi.ASM" MOTOROLA #include "ST7Lite2.INC" ; Suppress the comment if you want use the Max7219.inc #include "MAX7219.INC" ; Suppress the comment if you want use the timer ;#include "TIMER.INC" ;************************************************************************ ; ; DECLARATION SYMBOLES ; ;************************************************************************ ;off_time DS.B 1 ;************************************************************************ ; ; Ended DECLARATION SYMBOLES ZONE ; ;************************************************************************ BYTES segment byte 'ram0' ;************************************************************************ ; ; VARIABLES DECLARATION ZONE ; ;************************************************************************ ; Variable for SPI data send (MASTER MODE) SPI_data ds.b 1 var ds.b 1 delay_h ds.b 1 delay_l ds.b 1 ;************************************************************************ ; ; Ended DECLARATION VARIABLES ZONE ; ;************************************************************************ WORDS segment byte 'rom' ;************************************************************************ ; ; CONSTANTES DECLARATION ZONE ; ; Value unit digit (Voltage goes from 0 up to 5 Volts) table1 table1 dc.b 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 dc.b 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2 dc.b 2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3 dc.b 3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5 ; Value dot unit digit (Voltage goes from 0.1 up to 0.9 Volts) table2 table2 dc.b 0,1,2,3,4,4,5,6,7,8,8,9,0,1,1,2 dc.b 3,4,5,5,6,7,8,8,9,0,1,2,2,3,4,5 dc.b 5,6,7,8,9,9,0,1,2,3,3,4,5,6,6,7 dc.b 8,9,0,0,1,2,3,3,4,5,6,7,7,8,9,0 ;************************************************************************ ; ; Ended CONSTANTES DECLARATION ZONE ; ;************************************************************************ ;------------------------------------------------------------------------ ;************************************************************************ ; ; SUBROUTINE PROGRAM DECLARATION ZONE ; ;************************************************************************ init_ST7: clr MCCSR ; normal mode ret init_ports: ld A,#%10011011 ; Init port A with this value ld PADDR,A ; init port A (PWM0 is in PA2) ld PAOR,A ld A,#%01110100 bset PBDR,#2 ; Set PB2 pin in level logic “1” load data into SPI ld PBDDR,A ; init port B SPI clock (SCK = PB1 pin ) ld PBOR,A ; MOSI is PB3 and PB0 is for analog input ret ;************************************************************************ ; Ended Subroutine program declaration ZONE; ;************************************************************************ ;------------------------------------------------------------------------- ; SUBROUTINE NAME: init_IO ; DESCRIPTION: ;------------------------------------------------------------------------- init_IO: ldA,#%10011011 ldPADDR,A ldPAOR,A ldA,#%01110100 bset PBDR,#2 ; Set the PB2 pin in level logic “1” load data into SPI ldPBDDR,A ldPBOR,A ret ; - Program for ADC: Initializing the ADCSR register select_CH: ld A,#%00000000 ; The CH0=CH1=CH2 = 0 means AIN0 (PB0) ; is selecting because the potentiometer (analog input ; signal) is connecting to this PB0 pin, this I/O must be ; configuring in High impedance ld ADCCSR,A ; configuring the ADCCSR register with %00000000 ret ;************************************************************************ ; GET DATA FROM ADC ;************************************************************************ ; - Launch the conversion of the input analog signal process_adc: bset ADCCSR,#5 ; Launch the ADC for one conversion cont: ld A,ADCCSR ; load the content of the ADCCSR in the “A” register and A,#$80 ; the “And” allows verifying the end conversion of ADC jreq cont ; if not, this means the bit « OEC » is not yet equal 1 ; This bit7 “OEC” of the ADCCSR register bres ADCCSR,#5 ; Stop the ADC by setting the bit 5 of the ADCCSR ; bit5 = ADON in the ADCCSR register ; begin reading the conversion result of conversion ld A,ADCDRH ; Load the MSB of the ADC in the A register ; “var” is a variable reserved at the begin in RAM0 ld var,A ; var content now the ADC conversion result ; mean the conversion result is storing in the “var” ret ;************************************************************************ ; INIT SPI ;************************************************************************ init_SPI: ldA,#$03 ;INIT SPISR ldSPISR,A ldA,#%01011100 ;INIT SPICR ld SPICR,A ret ;************************************************************************ ; INIT SPI ;************************************************************************ delay: push x push y ld x, delay_l ld y, delay_h dec_2: dec x JRNE dec_2 ld x,delay_l dec y JRNE dec_2 pop y pop x ret ;************************************************************************ ; ; MAIN PROGRAM ; ;************************************************************************ main: rsp ld a, #%01111100 ld $04, a ld $05, a ld a, #%00110000 ld $03, a ; stop motor 1 ld a, #%00011111 ld $01, a ld $02, a ld a, #%00000000 ld $00, a ; stop motor 2 ;======================================================= clr $80 LD A,#%00010000 ; завантажити маску джерела таймеру LD $0D,A ; джерело таймеру CNTR1 від так тової частоти LD A,#%00001111 ;1000 LD $10,A ; ATR1 high LD $1b,A ; DCR2 high (pa4) LD A,#%00010000 ; завантажити маску вибору ШИМ на PA3 LD $12,A ; вибір ШИМ LD A,#%10000000 LD $11,A ; ATR1 low (0..255) LD A,#%10000001 ; значення = 1 LD $1C,A ; DCR2 low (pa4) LD A,#1 ; завантажити маску дозволу зміни ширини LD $21,A ; дати дозвіл на зміну ширини імпульсу ;============================================================================ ;jp MOTOR2 MOTOR1: ;============================================================================ call Read_Signal cp A, #10 ;Еталонне значення ;============================================================================ ;==============================our kroks============================ ld a, #10 CALL VVERH1 ld a, #10 CALL DIA1 ;VERH-NIZ ld a, #10 CALL VVERH1 ld a, #10 CALL VNIZ1 ld a, #10 CALL DIA2 ;NIZ-VERH ld a, #10 CALL VNIZ1 jp MOTOR1 ;============================================= ;============================================== VLIVO1: push a ld a, #%01110100 ;song ld $03, a call PAUSE_S ld a, #%00100100 ld $03, a call PAUSE_S ld a, #%01100000 ;song ld $03, a call PAUSE_S ld a, #%00000000 ld $03, a call PAUSE_S ld a, #%00010000 ld $03, a call PAUSE_S ld a, #%00011000 ld $03, a call PAUSE_S ld a, #%00111000 ld $03, a call PAUSE_S ld a, #%00111100 ld $03, a call PAUSE_S pop a dec a jrne VLIVO1 ld a, #%00110000 ld $03, a ; stop motor 1 RET ;============================================== VPRAVO1: push a ;8 ld a, #%00111100 ld $03, a call PAUSE_S ;7 ld a, #%00111000 ld $03, a call PAUSE_S ;6 ld a, #%00011000 ld $03, a call PAUSE_S ;5 ld a, #%00010000 ld $03, a call PAUSE_S ;4 ld a, #%00000000 ld $03, a call PAUSE_S ;3 ld a, #%00100000 ld $03, a call PAUSE_S ;2 ld a, #%00100100 ld $03, a call PAUSE_S ;1 ld a, #%00110100 ld $03, a call PAUSE_S pop a dec a jrne VPRAVO1 ld a, #%00110000 ld $03, a ; stop motor 1 RET ;============================================== VNIZ1: push A ld a, #%00000001 ;1 ld $00, a call PAUSE_S ld a, #%00000011 ;1-2 ld $00, a call PAUSE_S ld a, #%00000010 ;2 ld $00, a call PAUSE_S ld a, #%00000110 ;2-3 ld $00, a call PAUSE_S ld a, #%00000100 ;3 ld $00, a call PAUSE_S ld a, #%00001100 ;3-4 ld $00, a call PAUSE_S ld a, #%00001000 ;4 ld $00, a call PAUSE_S ld a, #%00001001 ;4-1 ld $00, a call PAUSE_S pop A dec A jrne VNIZ1 ld A,#%00000000 ld $00,A ; stop motor 2 RET ;============================================== VVERH1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; push A ld a, #%00001000 ;4 ld $00, a call PAUSE_S ld a, #%00001100 ;3-4 ld $00, a call PAUSE_S ld a, #%00000100 ;3 ld $00, a call PAUSE_S ld a, #%00000110 ;2-3 ld $00, a call PAUSE_S ld a, #%00000010 ;2 ld $00, a call PAUSE_S ld a, #%00000011 ;1-2 ld $00, a call PAUSE_S ld a, #%00000001 ;1 ld $00, a call PAUSE_S ld a, #%00001001 ;4-1 ld $00, a call PAUSE_S pop A dec A jrne VVERH1 ld A,#%00000000 ld $00,A ; stop motor 2 RET ;============================================= DIA1: push A ld a, #%00000001 ;1 ld $00, a ;8 ld a, #%00111100 ld $03, a call PAUSE_S ld a, #%00000011 ;1-2 ld $00, a ;7 ld a, #%00111000 ld $03, a call PAUSE_S ld a, #%00000010 ;2 ld $00, a ;6 ld a, #%00011000 ld $03, a call PAUSE_S ld a, #%00000110 ;2-3 ld $00, a ;5 ld a, #%00010000 ld $03, a call PAUSE_S ld a, #%00000100 ;3 ld $00, a ;4 ld a, #%00000000 ld $03, a call PAUSE_S ld a, #%00001100 ;3-4 ld $00, a ;3 ld a, #%00100000 ld $03, a call PAUSE_S ld a, #%00001000 ;4 ld $00, a ;2 ld a, #%00100100 ld $03, a call PAUSE_S ld a, #%00001001 ;4-1 ld $00, a ;1 ld a, #%00110100 ld $03, a call PAUSE_S pop A dec A jrne DIA1 ld a, #%00110000 ld $03, a ; stop motor 1 ld A,#%00000000 ld $00,A ; stop motor 2 RET ;============================================== DIA2: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; push a ld a, #%01110100 ;song ld $03, a ld a, #%00001000 ;4 ld $00, a call PAUSE_S ld a, #%00100100 ld $03, a ld a, #%00001100 ;3-4 ld $00, a call PAUSE_S ld a, #%01100000 ;song ld $03, a ld a, #%00000100 ;3 ld $00, a call PAUSE_S ld a, #%00000000 ld $03, a ld a, #%00000110 ;2-3 ld $00, a call PAUSE_S ld a, #%00010000 ld $03, a ld a, #%00000010 ;2 ld $00, a call PAUSE_S ld a, #%00011000 ld $03, a ld a, #%00000011 ;1-2 ld $00, a call PAUSE_S ld a, #%00111000 ld $03, a ld a, #%00000001 ;1 ld $00, a call PAUSE_S ld a, #%00111100 ld $03, a ld a, #%00001001 ;4-1 ld $00, a call PAUSE_S pop a dec a jrne DIA2 ld a, #%00110000 ld $03, a ; stop motor 1 ld A,#%00000000 ld $00,A ; stop motor 2 RET ;============================================== ;============================================== PAUSE_S: ld a, #6 l_pause: push a ld a, #255 l_pa: bset $2e, #6 dec a jrne l_pa pop a dec a jrne l_pause ret Read_Signal: LD A,#%01100001 ; Завантажити в A маску настройки АЦП для PB0 LD $34,A ; Записати її в регістр ADCCSR, що дає дозвіл аналогового вводу ; з ніжки PB0. M1: BTJF $34,#7,M1 ; Переписати біт EOC в CF і перейти на M1, якщо він нульовий. LD A,$35 ; Зчитати в регістр A отримане значення. ret dummy_rt:IRET ; Empty Procedure : Mean return to Main program. ;************************************************************************ ; VECTORS D’INTERRUPTION DECLARATION ;************************************************************************ segment 'vectit' DC.W dummy_rt ; Adresse FFE0-FFE1h SPI_it DC.W dummy_rt ; Adresse FFE2-FFE3h lt_RTC1_it DC.W dummy_rt ; Adresse FFE4-FFE5h lt_IC_it DC.W dummy_rt ; Adresse FFE6-FFE7h at_timerover_it DC.W dummy_rt ; Adresse FFE8-FFE9h at_timerOC_it DC.W dummy_rt ; Adresse FFEA-FFEBh AVD_it DC.W dummy_rt ; Adresse FFEC-FFEDh DC.W dummy_rt ; Adresse FFEE-FFEFh lt_RTC2_it DC.W dummy_rt ; Adresse FFF0-FFF1h ext3_it DC.W dummy_rt ; Adresse FFF2-FFF3h ext2_it DC.W dummy_rt ; Adresse FFF4-FFF5h ext1_it DC.W dummy_rt ; Adresse FFF6-FFF7h ext0_it DC.W dummy_rt ; Adresse FFF8-FFF9h AWU_it DC.W dummy_rt ; Adresse FFFA-FFFBh softit DC.W dummy_rt ; Adresse FFFC-FFFDh reset DC.W main ; Adresse FFFE-FFFFh END Висновок: На даній лабораторній роботі, ми вдосконалили свої вміння у програмуванні мікроконтроллера типу ST7FLITE29. А також на цій лабораторній ми за допомогою мікроконтроллера запрограмували два мотори за допомогою яких я намалював вибраний символ. На основі цієї лабораторної роботи можна сконстроювати і інші прилади, наприклад, систему, яка полегшує домашнє прибирання (в певному розумінні), тобто, робота обладнаного датчиками і механізмами системного керування, які можуть забезпечити пересування по поверхні, а саме запрограмований механізм може виконувати його основне призначення – миття підлоги чи полірування поверхні. Але головним “механізмом” в такому випадку буде сама система, яка забезпечить “інтелектуальне”, а точніше – правильне і раціональне пересування. А запрограмований на практичній роботі механізм, забезпечить своїми рухами обробку поверхні.
Антиботан аватар за замовчуванням

29.11.2012 17:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!