SlideShare a Scribd company logo
1 of 22
Разработка микроконтроллерных
систем управления
«Сердце»

«Мозг»
Исполнительные
механизмы

Датчики
010101010000100101
101010101000010010
010101010000100101
101010101000010010
0xAF 0x10 0x21 0x18
0xBA 0x10 0x21
0x18
Arduino
C:
#include <avr/io.h>
#include <compat/ina90.h>
void waitd()
{
register unsigned short int t = 0;
while(++t) _NOP();
}
int main()
int led = 13;
{
void setup() {
DDRC |= 0x20;
pinMode(led, OUTPUT);
while(1)
}
{
PORTC |= 0x20;
void loop() {
waitd();
digitalWrite(led, HIGH);
PORTC &= 0x5F;
delay(1000);
waitd();
digitalWrite(led, LOW);
}
delay(1000);
return 1; }
}
#ifndef mt10t7_h
#define mt10t7_h
#include "WProgram.h"
class mt10t7
{
public: mt10t7();
void Strob_WR1(); //Стробирование линии WR1
void WriteNumber(int Pos,int Num); //Запись одной цыфры
void WriteSymbol(int Pos,int Num); //Запись одного символа
void WriteNumberComma(int Pos,int Num); //Запись одной
цифры с точкой
void WriteNumbers(double Num); //Запись числа
void ClearDisplay(); //Очистка дисплея
void InitDisplay(); //Разблокировка экрана
void Strob_ADR(); //Стробирование адреса
};
#endif // #ifndef mt10t7_h
#ifndef mt10t7_cpp
#define mt10t7_cpp
#define A0 8 //8 нога
#define WR1 9 //9 нога
#define DB0 10 // 10 нога
#define DataBus 2 //смещение в порту для вывода данных
static int
array[]={0xEE,0x06,0xF2,0xD6,0x1E,0xDC,0xFC,0x86,0xFE,0xD
E,0x01}; //Создаем массив с цифрами от 0 до 9 и .
static int
array1[]={0xBE,0x7C,0xE8,0x76,0xF8,0xB8,0xEC,0x3E,0x06,0x4
6,0x68,0xEE,0xBA,0x9E,0x30,0xDC,0x6E}; //Создаем массив
с символами A,b,C,d,E,F,G,H,I,J,L,O,P,q,r,S,U
int Data; //
int DataMask; //
#include "mt10t7.h"
//
//Конструктор - вызывается всегда при создании экземпляра
класса ье10е7
//
mt10t7::mt10t7()
{
DDRB=B00111111; // Порт к которому подключен монитор - его
настройка //-кроме 7 и 8 все ноги порта ставим на выход
//см Cheatcheet PB0-7
pinMode(A0, OUTPUT); //настраиваем ноги на вывод
pinMode(WR1, OUTPUT); //настраиваем ноги на вывод
InitDisplay(); //Разблокироваем экран
ClearDisplay(); //Очищаем дисплей
}
void mt10t7::WriteNumber(int Pos,int Num)
{
Data=Pos;
PORTB=Data<<DataBus; //Записываем номер знакоместа
Strob_ADR();
//Стробируем адрес
Data=array[Num]>>4; //
PORTB=Data<<DataBus; //Записываем данные в нижний тетрайду
Strob_WR1();
//Стробируем линию WR1
Data=array[Num]&0x0F; //
PORTB=Data<<DataBus; //Записываем данные в верхний тетрайду
Strob_WR1();
//Стробируем линию WR1
}
void mt10t7::WriteSymbol(int Pos,int Num)
{
Data=Pos;
PORTB=Data<<DataBus; //Записываем номер знакоместа
Strob_ADR();
//Стробируем адрес
Data=array1[Num]>>4; //
PORTB=Data<<DataBus; //Записываем данные в нижний тетрайду
Strob_WR1();
//Стробируем линию WR1
Data=array1[Num]&0x0F; //
PORTB=Data<<DataBus; //Записываем данные в верхний тетрайду
Strob_WR1();
//Стробируем линию WR1
}

More Related Content

Similar to Microcontroller

Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...Mikhail Kurnosov
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаAndrey Karpov
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3. Mikhail Shcherbakov
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksMikhail Kurnosov
 
Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»MskDotNet Community
 
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...CEE-SEC(R)
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)Smolensk Computer Science Club
 
Ievgen Kulyk - Advanced reverse engineering techniques in unpacking
Ievgen Kulyk - Advanced reverse engineering techniques in unpackingIevgen Kulyk - Advanced reverse engineering techniques in unpacking
Ievgen Kulyk - Advanced reverse engineering techniques in unpackingNoNameCon
 
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoЛабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoAnton Moiseev
 
Nedospasov defcon russia 23
Nedospasov defcon russia 23Nedospasov defcon russia 23
Nedospasov defcon russia 23DefconRussia
 
пять стратегий R&D
пять стратегий R&Dпять стратегий R&D
пять стратегий R&DDmitry Karpov
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 
Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...
Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...
Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...ООО "Прософт-Системы"
 

Similar to Microcontroller (20)

Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3.
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»
 
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
Ievgen Kulyk - Advanced reverse engineering techniques in unpacking
Ievgen Kulyk - Advanced reverse engineering techniques in unpackingIevgen Kulyk - Advanced reverse engineering techniques in unpacking
Ievgen Kulyk - Advanced reverse engineering techniques in unpacking
 
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде ArduinoЛабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino
 
Nedospasov defcon russia 23
Nedospasov defcon russia 23Nedospasov defcon russia 23
Nedospasov defcon russia 23
 
лаб 6 7
лаб 6 7лаб 6 7
лаб 6 7
 
пять стратегий R&D
пять стратегий R&Dпять стратегий R&D
пять стратегий R&D
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...
Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...
Контроллер ARIS C304 – инструмент для реализации цифровых подстанций 6-35 кВ ...
 
Bpsk
BpskBpsk
Bpsk
 

Microcontroller

  • 4.
  • 5.
  • 8.
  • 9.
  • 10. C: #include <avr/io.h> #include <compat/ina90.h> void waitd() { register unsigned short int t = 0; while(++t) _NOP(); } int main() int led = 13; { void setup() { DDRC |= 0x20; pinMode(led, OUTPUT); while(1) } { PORTC |= 0x20; void loop() { waitd(); digitalWrite(led, HIGH); PORTC &= 0x5F; delay(1000); waitd(); digitalWrite(led, LOW); } delay(1000); return 1; } }
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19. #ifndef mt10t7_h #define mt10t7_h #include "WProgram.h" class mt10t7 { public: mt10t7(); void Strob_WR1(); //Стробирование линии WR1 void WriteNumber(int Pos,int Num); //Запись одной цыфры void WriteSymbol(int Pos,int Num); //Запись одного символа void WriteNumberComma(int Pos,int Num); //Запись одной цифры с точкой void WriteNumbers(double Num); //Запись числа void ClearDisplay(); //Очистка дисплея void InitDisplay(); //Разблокировка экрана void Strob_ADR(); //Стробирование адреса }; #endif // #ifndef mt10t7_h
  • 20. #ifndef mt10t7_cpp #define mt10t7_cpp #define A0 8 //8 нога #define WR1 9 //9 нога #define DB0 10 // 10 нога #define DataBus 2 //смещение в порту для вывода данных static int array[]={0xEE,0x06,0xF2,0xD6,0x1E,0xDC,0xFC,0x86,0xFE,0xD E,0x01}; //Создаем массив с цифрами от 0 до 9 и . static int array1[]={0xBE,0x7C,0xE8,0x76,0xF8,0xB8,0xEC,0x3E,0x06,0x4 6,0x68,0xEE,0xBA,0x9E,0x30,0xDC,0x6E}; //Создаем массив с символами A,b,C,d,E,F,G,H,I,J,L,O,P,q,r,S,U int Data; // int DataMask; // #include "mt10t7.h"
  • 21. // //Конструктор - вызывается всегда при создании экземпляра класса ье10е7 // mt10t7::mt10t7() { DDRB=B00111111; // Порт к которому подключен монитор - его настройка //-кроме 7 и 8 все ноги порта ставим на выход //см Cheatcheet PB0-7 pinMode(A0, OUTPUT); //настраиваем ноги на вывод pinMode(WR1, OUTPUT); //настраиваем ноги на вывод InitDisplay(); //Разблокироваем экран ClearDisplay(); //Очищаем дисплей }
  • 22. void mt10t7::WriteNumber(int Pos,int Num) { Data=Pos; PORTB=Data<<DataBus; //Записываем номер знакоместа Strob_ADR(); //Стробируем адрес Data=array[Num]>>4; // PORTB=Data<<DataBus; //Записываем данные в нижний тетрайду Strob_WR1(); //Стробируем линию WR1 Data=array[Num]&0x0F; // PORTB=Data<<DataBus; //Записываем данные в верхний тетрайду Strob_WR1(); //Стробируем линию WR1 } void mt10t7::WriteSymbol(int Pos,int Num) { Data=Pos; PORTB=Data<<DataBus; //Записываем номер знакоместа Strob_ADR(); //Стробируем адрес Data=array1[Num]>>4; // PORTB=Data<<DataBus; //Записываем данные в нижний тетрайду Strob_WR1(); //Стробируем линию WR1 Data=array1[Num]&0x0F; // PORTB=Data<<DataBus; //Записываем данные в верхний тетрайду Strob_WR1(); //Стробируем линию WR1 }