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

Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Mikhail Kurnosov
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
CEE-SEC(R)
 
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
NoNameCon
 

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 }