Embedded C - самый популярный язык программирования в области программного обеспечения для разработки электронных устройств. Каждый процессор связан со встроенным программным обеспечением. Встроенное программирование на C играет важную роль в выполнении процессором определенных функций. В нашей повседневной жизни мы часто используем многие электронные устройства, такие как стиральные машины, мобильные телефоны, цифровые камеры и т. Д., Которые будут работать на основе микроконтроллеров, которые программируются встроенным C.
Встроенное системное программирование
Написанный код на C более надежен, переносим, масштабируем и, по сути, намного проще для понимания. Первым и главным инструментом является встроенное программное обеспечение, которое определяет работу встроенной системы. Встроенный язык программирования C наиболее часто используется для программирования микроконтроллеров.
Учебник по встроенному программированию на C (8051)
Для написания программы разработчики встраиваемых систем должны иметь достаточные знания об аппаратном обеспечении конкретных процессоров или контроллеров, поскольку встроенное программирование на C - это метод программирования, полностью связанный с аппаратным обеспечением.
Учебник по программированию
Ранее многие встроенные приложения были разработаны с использованием программирования на уровне сборки. Однако они не обеспечили переносимости для решения этой проблемы с появлением различных языков высокого уровня, таких как C, COBOL и Pascal. Однако именно язык C получил широкое признание для разработка приложений для встроенных систем , и продолжает это делать.
Встроенная система
Встроенная система определяется как комбинация встроенного программного обеспечения для программирования на C и аппаратной части, в основном состоящей из микроконтроллеров, и предназначена для выполнения конкретной задачи. Эти типы встроенных систем используются в нашей повседневной жизни, такие как стиральные машины и видеомагнитофоны, холодильники и так далее. Встроенная система была впервые представлена микроконтроллерами 8051.
Встроенная система
Введение в микроконтроллер 8051
Микроконтроллер 8051 - это базовый микроконтроллер, он впервые представлен Intel Corporation с 1970 года. Он разработан на основе архитектуры процессора 8086. 8051 - это семейство микроконтроллеров, разработанных различными производителями, такими как Philips, Atmel, dalls и т. Д. Микроконтроллеры 8051 используется во многих встраиваемых продуктах, от маленьких детских игрушек до крупных автомобильных систем.
8051 микроконтроллер
Микроконтроллер 8051 8-битный Архитектура «CISC» . Он состоит из памяти, последовательной связи, прерываний, портов ввода / вывода и таймеров / счетчиков, встроенных в одну интегрированную микросхему, которая запрограммирована для управления периферийными устройствами, которые связаны с ней. Программа хранится в ОЗУ микроконтроллера, но перед написанием программы мы должны знать об ОЗУ. организация микроконтроллера.
Встроенное системное программирование: декларация основ
Каждая функция - это набор операторов, выполняющих определенную задачу, а набор из одной или нескольких функций называется языком программирования. Каждый язык состоит из некоторых основных элементов и грамматических правил. Программирование на языке C предназначено для работы с набором символов, переменными, типами данных, константами, ключевыми словами, выражениями и т. Д., Используемыми для написания программы C. Все они рассматриваются в заголовочном файле или файле библиотеки и представлены как
#включают
Разработка встроенного программирования на C
Расширение языка C называется встроенным языком программирования C. По сравнению с вышеупомянутым, встроенное программирование на языке C имеет некоторые дополнительные функции, такие как типы данных и ключевые слова, а файл заголовка или файл библиотеки представлен как
#включают
Встроенные дополнительные ключевые слова C
- sbit
- кусочек
- SFR
- летучий
- макросы определяют
«Sbit» используется для объявления единственного PIN-кода микроконтроллера. Например, светодиод подключен к выводу P0.1, не рекомендуется отправлять значение на вывод порта напрямую, сначала мы должны объявить вывод с другой переменной, а затем мы сможем использовать в любом месте программы.
Синтаксис: sbit a = P0 ^ 1 // объявляет соответствующий вывод с переменной //
a = 0x01 // отправляем значение на вывод порта //
«Бит» используется для проверки состояния переменной.
Синтаксис: бит c // объявляет битовую переменную //
c = a // переменной c присваивается значение //
if (c == 1) // проверяем условие истинно или ложно //
{
… ..
……
}
Ключевое слово «SFR» используется для доступа к регистрам SFR под другим именем. Регистр SFR, определенный как регистр специальных функций , он содержит все регистры, относящиеся к периферии, с указанием адреса. Регистр SFR объявляется ключевым словом SFR. Ключевое слово SFR должно быть заглавными буквами.
Синтаксис: SFR port = 0x00 // 0x00 - это адрес порта 0, он объявлен переменной порта //
Port = 0x01 // затем отправляем значение на port0 //
задерживать()
порт = 0x00
задерживать()
Ключевое слово volatile является наиболее важным при разработке встроенных систем. Переменная, которая объявляется со значением ключевого слова volatile, не может быть изменена неожиданно. Его можно использовать в периферийных регистрах с отображением в память, глобальных переменных, изменяемых ISR. Без использования ключевого слова volatile для передачи и приема данных произойдет ошибка кода или ошибка оптимизации.
Синтаксис: volatile int k
Макрос - это имя, которое используется для объявления блока инструкций как директивы препроцессора. Каждый раз, когда используется имя, оно заменяется содержимым макроса. Макросы представляют собой #define. Все выводы порта определяются макросами.
Синтаксис: #define dat Po // весь порт объявляется переменной //
dat = 0x01 // данные отправляются на порт0 //
Базовые встроенные программы на C
Программирование микроконтроллера будет отличаться для каждого тип операционной системы . Несмотря на то, что существует множество операционных систем, таких как Linux, Windows, RTOS и так далее. Однако RTOS имеет несколько преимуществ для разработки встроенных систем. В этой статье обсуждается базовое встроенное программирование на C для разработки встроенного программирования на C с использованием микроконтроллера 8051.
Встроенные шаги программирования на C
- Светодиод мигает при использовании микроконтроллера 8051
- Отображение числа на 7-сегментном дисплее с помощью микроконтроллера 8051
- Расчеты таймера / счетчика и программирование с использованием микроконтроллера 8051
- Расчеты и программа последовательной связи с использованием микроконтроллера 8051
- Программы прерывания с использованием микроконтроллера 8051
- Программирование клавиатуры с использованием микроконтроллера 8051
- Программирование ЖК-дисплея с помощью микроконтроллера 8051
Светодиод мигает с использованием микроконтроллера 8051
Светодиод - это полупроводниковое устройство, которое используется во многих приложениях, в основном для индикации. Он находит огромное количество приложений в качестве индикаторов во время тестирования для проверки достоверности результатов на разных этапах. Они очень дешевы и легко доступны в различных формах, цветах и размерах. Светодиоды используются для проектирования доски объявлений и сигнальные огни управления движением и т. д. Здесь светодиоды соединены с PORT0 микроконтроллеров 8051.
Светодиод мигает с использованием микроконтроллера 8051
1. 01010101
10101010
#include // заголовочный файл //
void main () // точка статистики выполнения программы //
{
unsigned int i // тип данных //
while (1) // для непрерывного цикла //
{
P0 = 0x55 // отправляем шестнадцатеричное значение на порт0 //
для (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // отправляем шестнадцатеричное значение на порт0 //
для (i = 0i<30000i++) //normal delay//
}
}
2. 00000001
00000010
00000100
.
.
10 000 000
#включают
пустая функция()
{
unsignedint я
беззнаковый символ j, b
пока (1)
{
P0 = 0x01
б = P0
для (j-0j<3000j++)
для (j = 0j<8j++)
{
б = б<<1
P0 = b
для (j-0j<3000j++)
}
}
}
3. 00001111
11110000
#включают
пустая функция()
{
unsignedint я
пока (1)
{
P0 = 0x0F
для (j-0j<3000j++)
P0 = 0xF0
для (j-0j<3000j++)
}
}
4. 00000001
00000011
00000111
.
.
11111111
#включают
пустая функция()
{
unsignedint я
беззнаковый символ j, b
пока (1)
{
P0 = 0x01
б = P0
для (j-0j<3000j++)
для (j = 0j<8j++)
0x01
P0 = b
для (j-0j<3000j++)
}
}
Отображение чисел на 7-сегментном дисплее с использованием микроконтроллера 8051
В 7-сегментные дисплеи это базовые электронные дисплеи, которые используются во многих системах для отображения числовой информации. Он состоит из восьми светодиодов, которые подключены последовательно, чтобы отображать цифры от 0 до 9, когда включены соответствующие комбинации светодиодов. Они могут отображать только одну цифру за раз.
Отображение чисел на 7-сегментном дисплее с использованием микроконтроллера 8051
1. WAP для отображения чисел от «0 до F» на четырех 7-сегментных дисплеях?
#включают
сбит а = P3 ^ 0
сбит b = P3 ^ 1
сбит c = P3 ^ 2
сбит d = P3 ^ 3
пустая функция()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
без подписи вы, j
а = б = с = д = 1
пока (1)
{
для (i = 0i<10i++)
{
P2 = n [i]
для (j = 0j<60000j++)
}
}
}
2. WAP для отображения чисел от '00 до 10 'на 7-сегментных дисплеях?
#включают
сбит а = P3 ^ 0
сбит b = P3 ^ 1
пусто display1 ()
пусто display2 ()
недействительная задержка ()
пустая функция()
{
unsignedchar n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
без подписи вы, j
ds1 = ds2 = 0
пока (1)
{
для (i = 0, i<20i++)
display1 ()
дисплей2 ()
}
}
пусто display1 ()
{
а = 1
б = 0
P2 = s [ds1]
задерживать()
а = 1
б = 0
P2 = s [ds1]
задерживать()
}
пусто display2 ()
{
ds1 ++
если (ds1> = 10)
{
ds1 = 0
ds2 ++
если (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
недействительная задержка ()
{
unsignedint k
для (k = 0k<30000k++)
}
Вычисления таймера / счетчика и программа с использованием микроконтроллера 8051
Задержка - один из важных факторов в разработке прикладного программного обеспечения. Однако обычная задержка не даст желаемого результата для решения этой проблемы, связанной с реализацией задержки таймера. В таймеры и счетчики являются аппаратными компонентами микроконтроллера, который используется во многих приложениях для обеспечения драгоценной временной задержки с счетными импульсами. Обе задачи реализуются программно.
Задержка таймера
WAP для генерации задержки времени 500 мкс с использованием T1M2 (timer1 и mode2)?
#включают
пустая функция()
{
беззнаковый символ i
TMOD = 0x20 // установить режим таймера //
для (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // устанавливаем задержку //
TH1 = 0x00
TR1 = 1 // таймер включен //
While (TF1 == 0) // проверяем бит флага //
TF1 = 0
}
TR1 = 0 // таймер выключен //
}
Нормальная задержка петли
недействительная задержка ()
{
unsignedint k
для (k = 0k<30000k++)
}
Расчеты и программа последовательной связи с использованием микроконтроллера 8051
Последовательная связь обычно используется для передачи и приема сигнала. Микроконтроллер 8051 состоит из Последовательная связь UART сигналы, передаваемые и принимаемые выводами Rx и Tx. UART принимает байты данных и последовательно отправляет отдельные биты. Регистры - это способ сбора и хранения данных в памяти. UART - это полудуплексный протокол. Полудуплекс означает передачу и получение данных, но не одновременно.
Расчеты и программа последовательной связи с использованием микроконтроллера 8051
1. WAP для передачи символа «S» в последовательное окно использовать 9600 в качестве скорости передачи?
28800 - максимальная скорость микроконтроллера 8051 в бодах.
28800/9600 = 3
Эта скорость передачи «3» сохраняется в таймерах.
#включают
пустая функция()
{
SCON = 0x50 // запускаем последовательную связь //
TNOD = 0x20 // выбран режим таймера //
TH1 = 3 // загружаем скорость передачи //
TR1 = 1 // Таймер ВКЛ //
SBUF = ’S’ // сохраняем символ в регистре //
while (TI == 0) // проверяем регистр прерывания //
TI = 0
TR1 = 0 // ВЫКЛ таймер //
while (1) // непрерывный цикл //
}
2. WAP для получения данных с гипертерминала и отправки этих данных в ПОРТ 0 микроконтроллера со скоростью 9600 бод?
28800 - максимальная скорость микроконтроллера 8051 в бодах.
28800/9600 = 3
Эта скорость передачи «3» сохраняется в таймерах.
#включают
пустая функция()
{
SCON = 0x50 // запускаем последовательную связь //
TMOD = 0x20 // выбран режим таймера //
TH1 = 3 // загружаем скорость передачи //
TR1 = 1 // Таймер ВКЛ //
PORT0 = SBUF // отправляем данные из SBUF в port0 //
while (RI == 0) // проверяем регистр прерывания //
RI = 0
TR1 = 0 // ВЫКЛ таймер //
while (1) // останавливаем программу при получении символа //
}
Программы прерывания с использованием микроконтроллера 8051
Прерывание - это сигнал, который заставляет остановить текущую программу и немедленно выполнить другую программу. Микроконтроллер 8051 обеспечивает 6 прерываний, которые бывают внутренними и внешними. источники прерываний . Когда происходит прерывание, микроконтроллер приостанавливает выполнение текущей задачи и обрабатывает прерывание, выполняя ISR, после чего микроконтроллер возвращается к предыдущей задаче.
WAP для выполнения операции сдвига влево, когда происходит прерывание от таймера 0, а затем выполняет операцию прерывания для P0 в основной функции?
#включают
беззнаковый символ b
void timer0 () interrupt 2 // выбрано прерывание timer0 //
{
b = 0x10
P1 = b<<2
}
пустая функция()
{
беззнаковый символ a, я
IE = 0x82 // разрешить прерывание timer0 //
TMOD = 0x01
TLo = 0xFC // таймер прерывания //
TH1 = 0xFB
TR0 = 1
а = 0x00
пока (1)
{
для (i = 0i<255i++)
{
а ++
Po = a
}
}
}
Программирование клавиатуры с использованием микроконтроллера 8051
Матричная клавиатура представляет собой аналоговое коммутационное устройство, которое используется во многих встроенных приложениях, чтобы позволить пользователю выполнять необходимые задачи. А матричная клавиатура состоит из расположения переключателей в матричном формате в строках и столбцах. Строки и столбцы подключаются к микроконтроллеру таким образом, что ряд переключателей подключается к одному выводу, а переключатели в каждом столбце подключаются к другому выводу, а затем выполняют операции.
Программирование клавиатуры с использованием микроконтроллера 8051
1. WAP для переключения светодиода нажатием переключателя.
#включают
сбит а = P3 ^ 0
сбит b = P3 ^ 1
сбит c = P3 ^ 2
сбит d = P3 ^ 3
недействительная задержка ()
пустая функция()
{
пока (1)
{
а = 0
b = 1
с = 1
d = 1
задерживать()
а = 1
б = 0
с = 1
d = 1
недействительная задержка ()
{
беззнаковый символ i
TMOD = 0x20 // установить режим таймера //
для (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // устанавливаем задержку //
TH1 = 0x00
TR1 = 1 // таймер включен //
While (TF1 == 0) // проверяем бит флага //
TF1 = 0
}
TR1 = 0 // таймер выключен //
}
2. WAP для включения светодиода нажатием клавиши «1» на клавиатуре?
#включают
sbit r1=P2^0
sbit c1=P3^0
сбит светодиод = P0 ^ 1
пустая функция()
{
r1 = 0
если (c1 == 0)
{
Светодиод = 0xff
}
}
3. WAP для отображения числа 0,1,2,3,4,5 в сегменте семи, нажав соответствующую клавишу на клавиатуре?
#включают
sbit r1=P2^0
sbit c1=P3^0
sbit r2=P2^0
sbit c2=P3^0
сбит a = P0 ^ 1
пустая функция()
{
г1 = 0 а = 1
если (c1 == 0)
{
а = 0xFC
}
Если (c2 == 0)
{
а = 0x60
}
если (c3 == 0)
{
а = 0xDA
}
Если (c4 == 0)
{
а = 0xF2
}
}
Программирование ЖК-дисплея с помощью микроконтроллера 8051
В ЖК дисплей представляет собой электронное устройство, которое часто используется во многих приложениях для отображения информации в текстовом или графическом формате. ЖК-дисплей - это дисплей, который может легко отображать символы на своем экране. ЖК-дисплей состоит из 8 строк данных и 3 строк управления, которые используются для взаимодействия с микроконтроллером.
Программирование ЖК-дисплея с помощью микроконтроллера 8051
WAP для отображения «НАБОРЫ EDGEFX» на светодиодном дисплее?
#включают
#define kam P0
voidlcd_initi ()
voidlcd_dat (символ без знака)
voidlcd_cmd (символ без знака)
недействительная задержка ()
пустое отображение (символы без знака * s, символы без знака r)
сбитс = P2 ^ 0
sbitrw = P2 ^ 1
сбит при = P2 ^ 2
пустая функция()
{
lcd_initi ()
lcd_cmd (0x80)
задержка (100)
lcd_cmd (0xc0)
дисплей («комплекты edgefx», 11)
пока (1)
}
пустое отображение (символы без знака * s, символы без знака r)
{
unsignedint w
для (w = 0w
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
задержка (100)
lcd_cmd (0 × 38)
задержка (100)
lcd_cmd (0 × 06)
задержка (100)
lcd_cmd (0x0c)
задержка (100)
}
voidlcd_dat (символ без знака)
{
гребешок = это
rs = 1
rw = 0
в = 1
задержка (100)
в = 0
}
}
voidlcd_cmd (cmd без знака)
{
пришел = cmd
rs = 0
rw = 0
в = 1
задержка (100)
в = 0
}
недействительная задержка (unsigned int n)
{
unsignedint a
для (a = 0a
Надеюсь, что эта статья дает основную информацию о программировании встроенных систем с использованием микроконтроллера 8051 с несколькими примерами программ. Чтобы получить подробное руководство по встроенному программированию на C, оставьте свои комментарии и вопросы в разделе комментариев ниже.