Написання програми для мікроконтролеру
Основи програмування мікроконтролерів. Розробка алгоритму переведення числа з однієї системи до іншої. Розгляд механізму зчитування і передачі даних через порти мікроконтролеру. Реалізація дешифратора десятинного числа в код семисегментного індикатору.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 23.04.2014 |
Размер файла | 330,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Зміст
Вступ
1. Розробка програмної схеми
2. Розробка програмного забезпечення
Висновки
Вступ
Поставлена задача: необхідно реалізувати програму для мікроконтролеру, яка приймає число у двійковому виді на певний порт, переводить це число у шістнадцятирічну систему, вивести результат на 2 семисегментні індикатори, та передати результат в COM-порт. Для цього завдання було використано мікроконтролер фірми ATMEL. Розробку ПЗ легше виконати на мові програмування С.
Тема - написання програми для реалізації поставленої задачі.
Мета - закріпити навички і знання з роботою з мікроконтролерами.
Кінцевий продукт: реалізована схема з прошитим мікроконтролером. Під прошивкою розуміють скомпільована програма з розширенням .hex.
1. Розробка програмної схеми
Для реалізації поставленої задачі спочатку необхідно продумати яким чином буде задане і передане двійкове число. З огляду на те, що дані з мікроконтролеру будуть зчитуватися з одного порту, то число буде мати не більше 8 розрядів(так як кожен порт налічує не більше 8 пінів, а це пов'язано з тим, що більшість регістрів у ОМК 8-бітні), отже для передачі такого числа було використано 8 перемикачів, які під'єднанні до джерела постійного живлення(5 В, 5 оскільки для ОМК дана напруга символізує логічну 1) (рис. 1.2), і отже коли один з перемикачів замкнути, то на вхід мікроконтролеру поступить логічна 1, а це буде відповідний розряд двійкового числа.
В схемі представлений мікроконтролер фірми ATMEL 90s8535 (рис. 1.3).
Окрім цього, для того щоб показати конвертовані дані на схемі присутні два семи сегментні індикатори, один для молодшого розряду, один для старшого. Результат виводиться у десятинному вигляду, а тому максимальне значення, яке можна відобразити - 99 (рис. 1.4). Отже створена схема зображена на рис. 1.1.
Рис. 1. Реалізація схеми
Рис. 1.2. Перемикачі(8 розрядів)
Рис. 1.3. Мікроконтролер 90s8535
Рис. 1.4. Семи сегментні індикатори в схемі.
2. Розробка програмного забезпечення
Для програмування було обрано мікроконтролер ATMEL 90s83535, за своїми характеристиками він повністю відповідає можливості реалізації поставленої задачі. Для реалізації програми було обрано мову С, і середу розробки CodeVision.
Алгоритм програми:
1. Зчитати дані з відповідного порту мікроконтролеру (отримуємо двійкове число).
2. Зберігаємо це число у відповідному регістрі.
3. Викликаємо функцію, яка конвертує двійкове число у десяткове(це необхідно для виводу інформації на семи сегментні індикатори).
4. Викликаємо дешифратор, який перетворює десяткове число у код семи сегментного індикатора(так як у нас 2 індикатори, один з яких інформує про молодший розряд, один про старший, і кожен з індикаторів під'єднаний до окремого порту то):
4.1. Розбиваємо отримане десяткове число по розрядам
4.2. Передаємо молодший розряд на перший індикатор
4.3. Передаємо старший розряд на другий індикатор
5. Переводимо десяткове число у шістнадцяткове.
6. Налагоджуємо UART мікроконтролеру на передачу даних.
7. Прописуємо швидкість передачі даних.
8. Дозволяємо глобальні переривання, прописуємо в регістр UCR.
9. Оброблюємо переривання "Регістр даних порожній", записуємо у регістр UDR шістнадцядкове число, одразу після цього відбувається передача даних на COM порт.
Алгоритм дешифратора для семи сегментного індикатору:
1. Отримуємо вхідну цифру(від 0 до 9, оскільки індикатор не в змозі відобразити більше значення).
2. Аналізуємо, яку отримали цифру.
3. Якщо отримали 0, то на індикатор посилаємо комбінацію 00111111.
4. Якщо отримали 1, то на індикатор посилаємо комбінацію 00000110.
5. Якщо отримали 2, то на індикатор посилаємо комбінацію 01011011.
6. Якщо отримали 3, то на індикатор посилаємо комбінацію 01001111.
7. Якщо отримали 4, то на індикатор посилаємо комбінацію 01100110.
8. Якщо отримали 5, то на індикатор посилаємо комбінацію 01101101.
9. Якщо отримали 6, то на індикатор посилаємо комбінацію01111101.
10. Якщо отримали 7, то на індикатор посилаємо комбінацію 00000111.
11. Якщо отримали 8, то на індикатор посилаємо комбінацію 01111111.
12. Якщо отримали 9, то на індикатор посилаємо комбінацію 01101111.
Алгоритм відправки даних на COM-порт.
1. Для передачі даних необхідно налаштувати UART. В регістр UBRR прописуємо швидкість передачі даних.
2. В регістр UCR прописуємо маску, де дозволяємо переривання, а також дозволяємо передачу даних.
3. Прописуємо переривання, згідно вектору переривання : "Регістр даних порожній"
4. В перериванні в регістр UDR записуємо число, яке необхідно передати.
Блок схема зображена на рис.2.1.
Рис. 2.1. Блок схема програми
Код програми, реалізований на мові програмування С, відлагоджений у CodeVision (рис.2.2).
мікроконтролер число порт дешифратор
#include<90s8535.h>
#include<delay.h>
#include<stdlib.h>
#include<stdio.h>
unsignedint hex=0x00;
interrupt[13] voidDataRegisterInt(void)
{
UDR=hex;
}
unsignedintret_literal(unsigned intnum)
{
unsignedint res=0x00;
if(num<10)res=num;
if(num==10)res=0xA;
if(num==11)res=0xB;
if(num==12)res=0xC;
if(num==13)res=0xD;
if(num==14)res=0xE;
if(num==15)res=0xF;
returnres;
}
unsignedintret_hex(unsignedintpin)
{
unsignedint res=0;
if(pin==1)//если передана 1, то читаемпервые 4 пина
{
res+=PINB.0*1;
res+=PINB.1*2;
res+=PINB.2*4;
res+=PINB.3*8;
}
if(pin==2)//если передана 2, то читаемвторые 4 пина
{
res+=PINB.4*1;
res+=PINB.5*2;
res+=PINB.6*4;
res+=PINB.7*8;
}
returnres;
}
unsignedintret_dec()
{
unsignedint res=0;
res+=PINB.0*1;
res+=PINB.1*2;
res+=PINB.2*4;
res+=PINB.3*8;
res+=PINB.4*16;
res+=PINB.5*32;
res+=PINB.6*64;
res+=PINB.7*128;
returnres;
}
void Indicator1(unsignedintnum)
{
if(num==0x00)
{
PORTA=0b00111111;
}
if(num==0x01)
{
PORTA=0b00000110;
}
if(num==0x02)
{
PORTA=0b01011011;
}
if(num==0x03)
{
PORTA=0b01001111;
}
if(num==0x04)
{
PORTA=0b01100110;
}
if(num==0x05)
{
PORTA=0b01101101;
}
if(num==0x06)
{
PORTA=0b01111101;
}
if(num==0x07)
{
PORTA=0b00000111;
}
if(num==0x08)
{
PORTA=0b01111111;
}
if(num==0x09)
{
PORTA=0b01101111;
}
}
void Indicator2(unsignedintnum)
{
if(num==0)
{
PORTC=0b00111111;
}
if(num==1)
{
PORTC=0b00000110;
}
if(num==2)
{
PORTC=0b01011011;
}
if(num==3)
{
PORTC=0b01001111;
}
if(num==4)
{
PORTC=0b01100110;
}
if(num==5)
{
PORTC=0b01101101;
}
if(num==6)
{
PORTC=0b01111101;
}
if(num==7)
{
PORTC=0b00000111;
}
if(num==8)
{
PORTC=0b01111111;
}
if(num==9)
{
PORTC=0b01101111;
}
}
voidmain(void)
{
unsignedintdec;
unsignedint res=0;
unsignedint hex1, hex2;
charbuf[10];
DDRB=0xFF;
DDRA=0xFF;
DDRC=0xFF;
UBRR=100;
UCR=0b11101000;
#asm ("sei")
while(1)
{
res=ret_hex(1);//первые 4 пина в 16 систему
hex1=ret_literal(res);
res=ret_hex(2);
hex2=ret_literal(res); //вторые 4 пина в 16 систему
dec=ret_dec();
sprintf(buf,"%X",dec);
hex=atoi(buf);
Indicator1(dec%10);
Indicator2(dec/10);
}
}
Висновки
Під час виконання курсової роботи, було розглянуто і поглиблено знання з програмування мікроконтролерів, реалізація переривань, передача і прийом даних, організація оптимального коду, тощо. Розроблений власний алгоритм для поставленої задачі. Знайдено оптимальне рішення для переведення числа з однієї системи числення до іншої. Розглянуто механізм відправки даних через UART.
Засвоєна можливість зчитування і передача даних через порти мікроконтролеру. Був реалізований власний дешифратор десятинного числа в код семи сегментного індикатору.
Размещено на Allbest.ru
Подобные документы
Функціональні вузли мікроконтролеру, його технічні характеристики і загальна структура. Генератор тактових імпульсів та пристрої пам'яті. Розробка структурної схеми, енергозберігаючі режими роботи, програмні середовища для програмування мікроконтролеру.
курсовая работа [1,1 M], добавлен 30.06.2009Написання програми для мобільного приладу, яка буде переводити числа з однієї системи числення в іншу. Розробка графічного інтерфейсу, яким зручно буде користуватись. Опис процедур, обробників та мови програмування. Дослідження логічних частин програми.
курсовая работа [1,2 M], добавлен 27.08.2014Методи алгоритмiчного описаня задач, програмування на основi стандартних мовних засобiв. Переклад з однієї системи числення в іншу при програмуванні. Системи числення. Двійкові системи числення. Числа з фіксованою і плаваючою комою. Програмна реалізація.
курсовая работа [164,1 K], добавлен 07.12.2008Розробка програми транслітерації україномовних текстів латинськими літерами. Сутність транслітерації - механічної передачі тексту, який записаний однією графічною системою засобами іншої графічної системи, тобто передачі однієї писемності літерами іншої.
курсовая работа [193,9 K], добавлен 05.03.2011Характеристика формування навичок розробки додатків із використанням кнопкових компонентів у середовищі програмування Visual Studio. Створення програми, що переводить числа з однієї системи числення до іншої. Особливість застосування додатку Converter.
практическая работа [249,7 K], добавлен 01.12.2022Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.
курсовая работа [69,4 K], добавлен 14.03.2013Розробка принципової електричної схеми системи управління конвеєрною лінією, яка складається з трьох послідовних конвеєрів. Реалізація алгоритму роботи на мові сходинкових діаграм LD. Розробка керуючої програми для мікроконтролерів Zelio Logic та ОВЕН.
курсовая работа [230,2 K], добавлен 15.06.2015Опис інтерфейсу паралельного порту Centronics, який має 25-контактний 2-рядний роз'єм DB-25-female. Швидкість передачі даних, фірмові розширення. Розгляд BIOS для LPT-порту. Опис програмного середовища. Приклад виконання програми, блок-схема алгоритму.
курсовая работа [1,2 M], добавлен 23.04.2014Опис мови програмування PHP. Стратегія Open Source. Мова розмітки гіпертекстових документів HTML. Бази даних MySQL. Обґрунтування потреби віддаленого доступу до БД. Веб-сервер Apache. Реалізація системи. Інструкція користувача і введення в експлуатацію.
курсовая работа [42,9 K], добавлен 21.12.2012Розробка програми, яка вираховує з введених чисел парні та непарні та додає парні числа. Особливості синтаксису й семантики операторів мови С++. Перевірка коректності введення кількості чисел. Написання коду програми, проведення її тестування на прикладі.
лабораторная работа [860,5 K], добавлен 20.12.2012