Розробка схем структурної,принципової та алгоритму програми 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Розробка схем структурної,принципової та алгоритму програми



Структурна схема

Структу́рна схе́ма — схема, яка визначає основні функціональні частини виробу, їх взаємозв'язки та призначення. Під функціональною частиною розуміють складову частину схеми: елемент, пристрій, функціональну групу, функціональну ланку.

Структурна схема призначена для відображення загальної структури пристрою, тобто його основних блоків, вузлів, частин та головних зв'язків між ними. Із структурної схеми повинно бути зрозуміло, навіщо потрібний даний пристрій і як він працює в основних режимах роботи, як взаємодіють його частини. Позначення елементів структурної схеми можуть обиратись довільно, хоча загальноприйнятих правил виконання схем слід дотримуватись.

Рисунок2.1 - Структурна схема мікроконтролераAT90S2313

 


Схема електрична принципова

Електри́чна принципо́ва cхе́ма є видом електричної схемивиробу, що дає найповніше уявлення про склад і принцип його роботи. Цей вид креслення не враховує габаритних розмірів і реального розташування деталей об'єкта. За рівнем абстракції принципові електричні схеми займають середню позицію між функціональними і монтажними схемами і позначаються у шифрі основного напису символами Е3.

Рисунок2.2 - Схема електрична принципова МК AT90S2313

 

Алгоритм роботи програми

Алгор́итм — послідовність, система, набір систематизованих правил виконання обчислювального процесу, що обов'язково приводить до розв'язання певного класу задач після скінченного числа операцій. При написанні комп'ютерних програм алгоритм описує логічну послідовність операцій.

Рисунок2.3 - Алгоритм роботи програми

 

РОЗРОБКА ПРОГРАМИ НА МОВІ ПРОГРАМУВАННЯ ASSEMBLER

Задаємо бібліотеку мікроконтролера та ініціалізацію портів.Задаємо спочатку на PORTD кнопки, а на PORTВ світлодіоди.

ser temp;

out DDRB,temp;

out PORTD,temp;

out PIND,temp;

ldi temp, 0x80

out ACSR,temp;

ldi speed,2;

clr temp;

У вхідному блоці запускаємо програму для цього використовуємо функцію main.

main:

sbis PIND,PD0;

rjmp Line;

rjmp main;

У даному болі задаємо програму мигаючого світлодіода,для цього задаємо початковий світлодіод і задаємо перший біт m1.

Line:

cpi temp,0;

brne m1;

ldi temp,0b00000001;

m1:

out PORTB,temp;

rcall wt;

lsl temp;

brcc PC+2;

ldi temp,0b00000001;

sbis PIND, PD1;

rcall Down;

rjmp m1;

Далі створюємо підпрограму,яка зменшує швидкість в 1,8 раз. Для цього використовуємо функцію mov,яка копіює кількість бітів і створюємо цикл мітка.

Down:

mov count1,speed;

mov count,speed;

j1:

inc speed;

dec count;

cpi count,0;

brne j1;

j2:

dec speed;

dec count1;

cpi count1,0;

breq Downr;

dec count1;

cpi count1,0;

brne j2;

Downr:

sbis PIND,PD1;

rjmp Downr

rjmp wt;

У даному блоці створюємо програму затримки часу,для цього використовуємо стек loop. Спочатку задаємо його швидкість,потім зменшуємо швидкість змінюючи loop на 1.

wt:

push loop1;

push loop2;

push loop3;

mov loop3, speed;

wt1:

dec loop3;

breq wt4;

ldi loop2,100;

wt2:

dec loop2;

breq wt1;якщо loop2=0,

ldi loop1,100;

wt3:

dec loop1;

brne wt3;

rjmp wt2;

wt4:

pop loop1;

pop loop2;

pop loop3;

ret;

Після чого повертаємося з підпрограми,за допомогою ret.

Повний зміст програми наведено у додатку А.

РОЗРОБКА ПРОГРАМИ НА МОВІ ПРОГРАМУВАННЯ С

Спочатку задаємо бібліотеку затримок за допомогою delay_h. Після чого задаємо PORTB=0x00 і цим самим запалюємо всі свіотодіоди. Потім задаємо PORTD=0xff і цим самим задаємо 1 на вхід кнопок.

Далі напишемо цикл роботи програми(while(!0)), в якому спочатку задамо початкові умови роботи:

{while(!0)

{ temp=0b00000001;

for(i=0;i<8;i++)

{

PORTB=temp;

 

Після цього за допомогою в циклdelay затримку.

 

delay_ms (count);

 

Потім зсуваємо біт вліво за допомогою регістра зсуву temp=temp<<1;

 

temp=temp<<1;

 

Перевіряємо значення кнопки 2.

 

if(PIND.1==0)

 

Потім задаємо в цикл затримки перевірку прижка.

 

{if (count!=0)

{count=count*1.8;}

}

}

}}

};

}

 

Якщо count!=0 то швидкість зменшується в 1,8 раз,і виконується умова поставленої задачі.

 

Повний зміст програми наведено у додатку А.

МОДЕЛЮВАННЯ В PROTEUSVSM

Після написання програми у програмному середовищі, моделюємо об’єкт нашої розробки у програмному середовищі ProteusVSM. Він являє собою систему схемотехнічного моделювання, що базується на основі моделей електронних компонентів прийнятих в PSpice. Відмінною рисою пакета PROTEUS VSM є можливість моделювання роботи програмованих пристроїв: мікроконтролерів, мікропроцесорів, DSPі інші. Бібліотека компонентів містить довідкові дані. Додатково в пакет PROTEUS VSM входить система проектування друкованих плат. Пакет Proteus складається з двох частин, двох підпрограм: ISIS-програма синтезу та моделювання безпосередньо електронних схем і ARES – програма розробки друкованих плат. Разом з програмою встановлюється набір демонстраційних проектів для ознайомлення.

Рисунок. 5.1 Моделювання програми у ProteusVSM

ВИСНОВКИ

Під час виконання курсової роботи,ми дослідили роботу,будову та принцип дії мікроконтролера AT90S2313. Розробили програму для поставленої задачі на двох мовах програмування,та провівши моделювання роботи мікроконтролера у програмному середовищі ProteusVSM, переконалися у правильності написання програм на мовах програмування. Отже,написання програми для роботи мікроконтролера зручніше користуватися мовою програмування С,тому що там більша бібліотека і обсяг програми значно менший ніж на Assembler,але і у Assemblerа є свої переваги:це менше функцій, внаслідок чого легше розібратися у даному програмному середовищі чим у CodeVisionAvr


ПЕРЕЛІК ПОСИЛАНЬ

1. Пильщыков В. Н. «Assembler. Програмирование на языке ассемблера IBMPC»-Видання «Диалог -МИФИ» 1999 р. – мова російська – 288 ст.

2. Ревич Ю. В.«Практическое програмирование микроконтролеров AtmelAVRна языке ассемблера» – Видання «БХВ - Перербург» 2011 р. – мова російська – 354 ст.

3. Рудольф Марек «Ассемблер на примерах»(UcineseProgramovatvIazyceAssemblerproPC)- Видання «Наука и техника» 2005 р. – російська – 240 ст.

4. Александр Крупник «Ассемблер. Самоучитель»- Видання «Питер» 2005 р. – мова російська – 240 ст.

5. Зубков С. В. «Assembler. Язык неограниченных возможностей» - Видання «ДМК» 1999 р. – мова російська – 640 ст.

6. Шпак Ю. А. «Програмирование на языке Сдля AVR іPIC микроконтролеров. 1-е издание» - Видання «МК-Пресс» 2006 р. – мова російська – 487 ст.

7. Шпак Ю. А. «Програмирование на языке Сдля AVR іPIC микроконтролеров. 2-е издание» - Видання «Корона-Век,МК-Пресс» 2011р. – мова російська – 544 ст.


8.

Додаток А

Розробка програми на мові програмування Assembler

.include "2313def.inc";підключення бібліотеки МК

.list;генерація лістинга

.def temp=r16;іменуємо головний робочий регістр

.def loop1=r17;іменуємо регістр першого циклу затримки

.def loop2=r18;іменуємо регістр другог циклу затримки

.def loop3=r19;іменуємо регістр третього циклу затримки

.def speed=r20;іменуємо регістр зміни швидкості

.def count=r21;іменуємо регістр змінної для швидкості

.def count1=r22;іменуємо додатковий регістр

.cseg;вибір сегменту програмного коду

.org 0;встановлення даного адреса в 0

;---------------------------------------------------------------------

;Ініціалізація програми

rjmp Init

Init:

ldi temp,low(RAMEND);вибір вершини стека

out SPL,temp;запис регістр стека

clr temp;очищуємо temp

out DDRD,temp;порт для кнопок

ser temp;temp=0xff

out DDRB,temp;порт для светодиодов

out PORTD,temp;подаємо 1 на виводи порта D

out PIND,temp;заповнюємо порт D

ldi temp, 0x80

out ACSR,temp;включаємо компаратор

ldi speed,2;початкова швидкість

clr temp;очищуємо temp

;---------Запуск програми

main:

sbis PIND,PD0;перевіряємо стан кнопки, тобто коли нажмуть

rjmp Line;переходимо до Line

rjmp main;інакше назад на main

;---------Підпрограма бігаючого вогника

Line:

cpi temp,0;перевіряємо чи рівне temp 0

brne m1;якщо ні то преходимо на m1

ldi temp,0b00000001;інакше задаємо перший світодіод

m1:

out PORTB,temp;виводимо стан temp в порт В

rcall wt;преходимо до затримки

lsl temp;двигаємо біт вліво

brcc PC+2;якщо відбувся перехід

ldi temp,0b00000001;то задаємо перший світодіод

sbis PIND, PD1;перевіряємо кнопку тормозу

rcall Down;якщо нажата то переходимо до Down

rjmp m1;інакше переходимо на m1

;---------Підпрограма зменьшення швидкості в 1,8(1,75) раз

Down:

mov count1,speed;копіюємо значення швидкості в count1

mov count,speed;та count

j1:

inc speed;збільшуємо speed на 1

dec count;зменшуємо count на 1

cpi count,0;чи count=0, якщо ні

brne j1;то преходимо на мітку j1, тобто продовжуємо збільшувати speed

j2:

dec speed;зменьшуємо speed на 1

dec count1;зменшуємо count1 на 1

cpi count1,0;чи count=0, якщо так

breq Downr;то преходимо на мітку Downr

dec count1;інакше ще зменшуємо count1 на 1

cpi count1,0;чи count=0, якщо ні

brne j2;то преходимо на мітку j2, тобто зменьшуємо speed на 1/4

Downr:

sbis PIND,PD1;чекаємо доки відіжмуть кнопку

rjmp Downr

rjmp wt;преходимо до затримки

;--------Підпрограма затримки

wt:

push loop1;встановлюємо в стек loop1

push loop2;встановлюємо в стек loop2

push loop3;встановлюємо в стек loop3

mov loop3, speed;встановлюємо швидкість

wt1:

dec loop3;зменьшуємо loop3 на 1

breq wt4;якщо loop3=0, то преходимо на wt4

ldi loop2,100;інакше задаємо loop2

wt2:

dec loop2;зменьшуємо loop2 на 1

breq wt1;якщо loop2=0, то преходимо на wt1

ldi loop1,100;інакше задаємо loop1

wt3:

dec loop1;зменьшуємо loop2 на 1

brne wt3;якщо loop1=0, то преходимо на wt3

rjmp wt2;інакше преходимо на wt2

wt4:

pop loop1;зчитуємо з стека в loop1

pop loop2;зчитуємо з стека в loop2

pop loop3;зчитуємо з стека в loop3

ret;повертаємося із підпрограми


Додаток Б

Розробка програми на мові програмування С

/*****************************************************

This program was produced by the

CodeWizardAVR V1.25.8 Standard

Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project: speeddownld

Version:

Date: 5.11.2012

Author: F4CG

Company: F4CG

Comments:

Chip type: AT90S2313

Clock frequency: 2,000000 MHz

Memory model: Tiny

External SRAM size: 0

Data Stack size: 32

*****************************************************/

#include <90s2313.h> //-бібліотека МК

#include <delay.h> //-бібліотека затримок

// Declare your global variables here

void main(void)

{

// Declare your local variables here

unsigned char temp; //-головна робоча змінна

unsigned int i; //-змінна для циклів

unsigned int count=80; //-змінна швидкості

// 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

PORTB=0x00; //-запалюємо всі свіотодіоди

DDRB=0xff; //-порт В вихід

// Port D 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

PORTD=0xff; //-задаємо 1 на вхід кнопок

DDRD=0x00; //-порт D вхід

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=0x00;

TCNT0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1 output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

OCR1H=0x00;

OCR1L=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

GIMSK=0x00;

MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80; //-ініціалізація аналового компаратора

//---------------------------------------------------------

//------Нескіньчений цикл програми мигання світодіодів-----

//-в циклі виконується програма, що збільшує тривалість світіння світодіода в 1,8 рази

while (1)

{

if(PIND.0==0) //-якщо кнопка нажата, то починається програма мигання

{while(!0)

{ temp=0b00000001; //-задаємо біт першого світодіода

for(i=0;i<8;i++) //-цикл двиганя вогню

{

PORTB=temp; //-запалюємо перший світодіод

delay_ms (count); //-затримка на count мс

temp=temp<<1; //-двигаємо біт на 1 вліво

if(PIND.1==0) //-якщо кнопка тормозу нажата

{if (count!=0) //-якщо count не =0

{count=count*1.8;} //-збільшуємо затримку в 1.8 рази

}

}

}}

};

}



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 353; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.30.162 (0.084 с.)