Далі запустимо програму і
переконаємося у тому що вона працює. На рисунку 5.2 показано що при на тисканні
кнопки 1 світлодіод засвітився. На рисунку 5.3 третій, отже все працює.
Рисунок 5.1 - Результат моделювання
мікропроцесорного пристрою керування лінійкою світло діодів
Рисунок 5.2 - Результат моделювання
мікропроцесорного пристрою керування лінійкою світло діодів
Висновки
В даній роботі було розглянуто теоретичні основи щодо будови мікроконтролера на прикладі ATmega8 та основні принципи по його програмуванню.
В другій частині даної роботи ми розробили структурну схему пристрою, який забезпечував керування лінійки світлодіодів відповідно зовнішнього керування. За допомогою даної структурної схеми, була створена принципова схема пристрою, основною частиною якої став програмований мікроконтролера.
Задля порівняння було створено дві
програми, які мали однакову структуру роботи, також наведеної як схеми, але
написані в різних середовищах, таких як AVR Studio та CodeVision AVR. В
результаті при проведені емуляції вони себе показали однаково. Але для
виконання такої простої функції пристрою краще буде використати програму на
мові, оскільки компільований в машинний кодовий файл займає менший об’єм. Це
пов’язано з тим, що є надлишковість скомпільованого кодового файла на мові С в
машинний файл. Але код на мові С простіший для розуміння, та потребує менше
часу для написання програм.
Перелік посилань
. Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, програмы. - М.: Издательский дом "Додэка ХХІ", 2004. - 288 с.: ил. (серия "Мировая электроника") ISBN 5-94120-075-7
. Мортон Дж. Микроконтроллеры AVR. Вводный курс / Дж. Мортон./Пер. С англ. - М.: Издательский дом "Додэка-ХХІ", 2006.-272 с. - ISBN 5-94120-096-Х
. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://www.radioelectronika.ru/?mod=cxemi&sub_mod =full_cxema&id=596 - Назва з екрану.
. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://pic.rkniga.ru/shemotehnika/svetovye-effekty/188-novogodnyaya-elochka-na-mikrokontrollere-pic12f675.htm - Назва з екрану.
. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://guarda.ru/guarda/data/automation_system/txt_46.php -Назва з екрану.
. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://decada.org.ru/project/electronic/avtomat_svet_eff/ - Назва екрану.
. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://radioelectronika.ru/?mod=cxemi&sub_mod=full_ cxema&id=537 - Назва з екрану.
. Автомат световых эффектов [Електронний ресурс]: Web-сайт. -Режим доступу: http://cxema.my1.ru/publ/konstrukcii_dlja_doma_i_dachi/ konstrukcii_dlja_doma/avtomat_perekljuchatel_girljand/35-1-0-2961 - Назва з екрану.
. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя / А.В. Евстифеев - М.: Издательский дом "Додэка-XXI", 2007. - 592 с: ил. (Серия "Программируемые системы"). ISBN 978-5-94120-090-0 mm
. Гребнев В.В. Микроконтроллеры семейства AVR фипмы Atmel / В.В. Гребнев - М.: ИП Радиософт, 2002 - 176 с.: ил. ISBN 5-93037-091-5
. Ревич Ю.В. "Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера" - Видання "БХВ-Петербург" 2011 р. - мова російська - 354 ст.
. Рудольф Марек "Ассемблер на примерах" (Ucime se Programovat v Iazyce Assembler pro PC) - Видання "Наука и техника" 2005 р. - російська - 240 ст.
14. Александр Крупник "Ассемблер. Самоучитель" - Видання "Питер" 2005 р. - мова російська - 240 ст.
15. Зубков С.В. "Assembler. Язык неограниченных возможностей" - Видання "ДМК" 1999 р. - мова російська - 640 ст
. Шпак Ю.А. "Программирование на языке С для AVR и PIC микроконтроллеров. 1-е издание" - Видання "МК-Пресс" 2006 р. - мова російська - 487 ст.
. Шпак Ю.А. "Программирование на языке С для AVR и PIC микроконтроллеров. 2-е издание" - Видання "Корона-Век, МК-Пресс" 2011 р. - мова російська - 544 ст.
18. Лебедев М.Б. CodeVision AVR. Пособие для начинающих / М.Б. Лебедев - М.: Додэка XXI, 2010 - 450с. ISBN 978-5-94120-248-5
Додаток А. Програма на мові
Assembler
.include "m8def.inc"r16,0b11111111ddrb,r16r16,0b00000000ddrd,r16r16,low(RAMEND) spl,r16r16,high(RAMEND)sph,r16r16,0b11111111portb,r16fffr16,0b00000000portb,r16:r16,0b00000000portb,r16r17,pindr17,0kn1r17,pindr17,1kn2loop:r18,0b11111111portb,r18fffr18,0b11111110portb,r18fffr18,0b11111100portb,r18fffr18,0b11111000portb,r18fffr18,0b11110000portb,r18fffr18,0b11100000portb,r18fffr18,0b11000000portb,r18fffr18,0b10000000portb,r18fffr18,0b00000000portb,r18fffloop:r18,0b11111111portb,r18fffr18,0b01111110portb,r18fffr18,0b00111100portb,r18fffr18,0b00011000portb,r18fffr18,0b00000000portb,r18fffr18,0b00011000portb,r18fffr18,0b00111100portb,r18fffr18,0b01111110portb,r18fffr18,0b11111111portb,r18fffloop:r17,pindr17,0kn1r17,pindr17,1kn2r20, 50r17,pindr17,0kn1r17,pindr17,1kn2r21, 50r17,pindr17,0kn1r17,pindr17,1kn2
Додаток Б. Програма на мові С
/***************************************************** program was produced by theV2.04.8b EvaluationProgram Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Chip type : AT90S2313
AVR Core Clock frequency: 4,000000 MHz
Memory model : TinyRAM size : 0Stack size : 32
*****************************************************/
#include <mega8.h>
#include <delay.h>main(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T =0xFF;=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T =0x00;=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 =0x00;=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped=0x00;=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: OffA=0x00;B=0x00;H=0x00;L=0x00;H=0x00;L=0x00;AH=0x00;AL=0x00;BH=0x00;BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected=0x00;=0x00;=0x00;=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization=0x00;
// USART initialization
// USART disabled=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off=0x80;=0x00;
// ADC initialization
// ADC disabled=0x00;
// SPI initialization
// SPI disabled=0x00;
// TWI initialization
{ (PIND.0==1)
{while (1)
{:=0b01111111;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00111111;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2) goto label2;=0b00011111;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00001111;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00000111;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00000011;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00000001;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00000000;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;
}
}(PIND.1==1)
{while (1)
{ :=0b01111110;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00111100;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00011000;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00000000;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00011000;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b00111100;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b01111110;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;=0b11111111;(zatr_perev_kn() == 1)goto label1;if (zatr_perev_kn() == 2)goto label2;
}