Учебник по встроенному программированию на C с использованием языка Keil

Попробуйте наш инструмент устранения неполадок





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 микроконтроллер

Микроконтроллер 8051 8-битный Архитектура «CISC» . Он состоит из памяти, последовательной связи, прерываний, портов ввода / вывода и таймеров / счетчиков, встроенных в одну интегрированную микросхему, которая запрограммирована для управления периферийными устройствами, которые связаны с ней. Программа хранится в ОЗУ микроконтроллера, но перед написанием программы мы должны знать об ОЗУ. организация микроконтроллера.

Встроенное системное программирование: декларация основ

Каждая функция - это набор операторов, выполняющих определенную задачу, а набор из одной или нескольких функций называется языком программирования. Каждый язык состоит из некоторых основных элементов и грамматических правил. Программирование на языке C предназначено для работы с набором символов, переменными, типами данных, константами, ключевыми словами, выражениями и т. Д., Используемыми для написания программы 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

Встроенные шаги программирования на C

  • Светодиод мигает при использовании микроконтроллера 8051
  • Отображение числа на 7-сегментном дисплее с помощью микроконтроллера 8051
  • Расчеты таймера / счетчика и программирование с использованием микроконтроллера 8051
  • Расчеты и программа последовательной связи с использованием микроконтроллера 8051
  • Программы прерывания с использованием микроконтроллера 8051
  • Программирование клавиатуры с использованием микроконтроллера 8051
  • Программирование ЖК-дисплея с помощью микроконтроллера 8051

Светодиод мигает с использованием микроконтроллера 8051

Светодиод - это полупроводниковое устройство, которое используется во многих приложениях, в основном для индикации. Он находит огромное количество приложений в качестве индикаторов во время тестирования для проверки достоверности результатов на разных этапах. Они очень дешевы и легко доступны в различных формах, цветах и ​​размерах. Светодиоды используются для проектирования доски объявлений и сигнальные огни управления движением и т. д. Здесь светодиоды соединены с PORT0 микроконтроллеров 8051.

Светодиод мигает с использованием микроконтроллера 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

Отображение чисел на 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

Расчеты и программа последовательной связи с использованием микроконтроллера 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

Программирование клавиатуры с использованием микроконтроллера 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

Программирование ЖК-дисплея с помощью микроконтроллера 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, оставьте свои комментарии и вопросы в разделе комментариев ниже.