Новости
Новости
Самое удачное научно-популярное изложение киновселенной Marvel
2022-03-16 529

MCU — это микроконтроллер. В китайском языке аббревиатура от microcontroller (микроконтроллер) обычно обозначает однокристальный микрокомпьютер. Он представляет собой устройство, в котором частота и характеристики центрального процессора (ЦП) соответствующим образом снижены, а периферийные интерфейсы, такие как память, счетчик, USB, АЦП, UART, ПЛК, DMA и даже схемы управления ЖК-дисплеем, объединены на одном чипе для создания компьютера на уровне микросхемы. Он может выполнять различные комбинации функций управления для разных приложений, таких как мобильные телефоны, периферийные устройства ПК, пульты дистанционного управления, автомобильная электроника, промышленные шаговые двигатели и управление манипуляторами роботов. MCU показан на рисунке.



one
Краткая история развития микроконтроллеров



История микроконтроллеров недолгая, но их развитие было очень стремительным. Их производство и разработка, как правило, синхронизированы с производством и разработкой микропроцессоров (ЦП). С момента первого выпуска 4-битного микропроцессора американской корпорацией Intel в 1971 году, его развитие до настоящего времени можно условно разделить на пять этапов. Ниже представлен обзор развития микроконтроллеров от корпорации Intel.


1971 ~ 1976


Начальный этап развития микроконтроллеров. В ноябре 1971 года компания Intel впервые разработала Intel 4004, 4-разрядный микропроцессор с интеграцией 2,000 транзисторов на чипе, оснащенный ОЗУ, ПЗУ и сдвиговым регистром, сформировав первый микропроцессор MCS-4. Затем она выпустила 8-разрядный микропроцессор Intel 8008, а также другие 8-разрядные микропроцессоры, выпущенные другими компаниями.


1976 ~ 1980


Микроконтроллеры с низкой производительностью. Представленные серией MCS-48, выпущенной компанией Intel в 1976 году, они используют монолитную структуру, объединяющую 8-битный процессор, 8-битный параллельный интерфейс ввода-вывода, 8-битный таймер/счетчик, ОЗУ и ПЗУ на полупроводниковом чипе. Несмотря на ограниченный диапазон адресации (не более 4 КБ), отсутствие последовательного ввода-вывода, небольшой объем ОЗУ и ПЗУ и относительно простую систему прерываний, их функциональные возможности удовлетворяют потребности общего промышленного управления, а также интеллектуальных приборов и измерительных устройств.


1980 ~ 1983


Этап высокопроизводительных микроконтроллеров. Высокопроизводительные 8-битные микроконтроллеры, выпускаемые на этом этапе, как правило, имеют последовательные порты, многоуровневые системы обработки прерываний и несколько 16-битных таймеров/счетчиков. Увеличивается объем встроенной оперативной и постоянной памяти, а диапазон адресации может достигать 64 КБ. Некоторые микросхемы также имеют интерфейс аналого-цифрового преобразования.


1983 — конец 1980-х


Этап 16-битных микроконтроллеров. В 1983 году компания Intel выпустила высокопроизводительную серию 16-битных микроконтроллеров MCS-96. Благодаря использованию новейших технологий производства, уровень интеграции микросхем достигает 120 000 транзисторов на чип.


1990s


Микроконтроллеры развиваются на более высокий уровень во всех аспектах интеграции, функциональности, скорости, надежности и областях применения.



две
Классификация и применение однокристальных микрокомпьютеров



Микроконтроллеры можно разделить на два типа в зависимости от типа памяти: без встроенной ПЗУ и с встроенной ПЗУ. Для микросхем без встроенной ПЗУ перед использованием необходимо подключить внешнюю EPROM (обычно 8031); микросхемы со встроенной ПЗУ делятся на типы: с встроенной EPROM (типичная микросхема — 87C51), с встроенной маской ПЗУ (типичная микросхема — 8051), с встроенной Flash-памятью (типичная микросхема — 89C51) и другие.


В зависимости от назначения их можно разделить на универсальные и специализированные; по ширине шины данных и длине обрабатываемых за один раз байтов данных — на 8-, 16- и 32-битные микроконтроллеры.


В настоящее время наиболее обширный внутренний рынок применения микроконтроллеров приходится на сферу потребительской электроники, за которой следуют промышленная и автомобильная электроника. Потребительская электроника включает бытовую технику, телевизоры, игровые приставки, аудио- и видеосистемы и т. д. Промышленные области включают «умные дома», автоматизацию, медицинские приложения, а также производство и распределение возобновляемой энергии. Автомобильная отрасль включает системы управления силовыми агрегатами и системы безопасности автомобилей.



три
Основные функции микроконтроллера



Для большинства микроконтроллеров следующие функции являются наиболее распространенными и основными. Для разных микроконтроллеров способ их описания может отличаться, но по сути они одинаковы:


1. Таймер: Хотя существует множество типов таймеров, их можно разделить на две категории: один тип — это таймеры с фиксированными временными интервалами, то есть время отсчета устанавливается системой и не может контролироваться пользовательской программой. Система предоставляет пользовательской программе лишь несколько фиксированных временных интервалов на выбор, таких как 32 Гц, 16 Гц, 8 Гц и т. д. Этот тип таймеров чаще встречается в 4-битных микроконтроллерах, поэтому его можно использовать для реализации тактирования, синхронизации и других связанных функций.


Другой тип — программируемый таймер. Как следует из названия, время работы этого типа таймера может контролироваться программой пользователя. Методы управления включают: выбор источника тактового сигнала, выбор деления частоты (предделитель) и установку предустановленного значения. Некоторые микроконтроллеры имеют все три параметра одновременно, в то время как другие могут иметь один или два из них. Применение этого типа таймеров очень гибкое, и его фактическое использование также постоянно меняется. Одно из наиболее распространенных применений — использование его для реализации ШИМ-выхода.


Поскольку источник тактового сигнала можно свободно выбирать, этот тип таймера обычно комбинируется со счетчиком событий.


2. Порты ввода-вывода: Любой микроконтроллер имеет определенное количество портов ввода-вывода. Без портов ввода-вывода микроконтроллер теряет канал связи с внешним миром. В зависимости от возможности настройки портов ввода-вывода их можно разделить на следующие типы:


Порт ввода или вывода: этот тип порта ввода-вывода определяется аппаратной конфигурацией микроконтроллера. Он может быть только входным или только выходным, и программное обеспечение не может использоваться для настроек в реальном времени.


Порты ввода-вывода с прямым чтением и записью: Например, порт ввода-вывода MCS-51 относится к этому типу. При выполнении инструкции чтения порт ввода-вывода становится входным портом; при выполнении инструкции записи порт ввода-вывода он автоматически становится выходным портом.


Программирование для установки направления ввода и вывода: ввод или вывод данного типа порта ввода-вывода осуществляется программой в соответствии с фактическими потребностями. Приложение достаточно гибкое и может реализовывать некоторые приложения на уровне шины, такие как шина I2C, различные шины управления ЖК-дисплеями, светодиодами и т. д.


При использовании портов ввода-вывода необходимо учитывать следующие важные моменты: для входного порта должен быть обеспечен чистый уровень сигнала, исключающий его «плавающий» (этого можно добиться добавлением подтягивающего или отключающего резистора); для выходного порта уровень выходного сигнала должен учитывать условия его внешнего подключения, и должно быть обеспечено отсутствие тока «подтягивания» или «слива» в режиме ожидания или статическом состоянии.


3. Внешнее прерывание: Внешнее прерывание также является базовой функцией большинства микроконтроллеров. Оно обычно используется для запуска сигналов в реальном времени, сбора данных и определения состояния. Методы прерывания включают запуск по восходящему фронту, запуск по нисходящему фронту и запуск по уровню. Внешние прерывания обычно реализуются через входные порты. Если это порт ввода-вывода, его функция прерывания будет включена только тогда, когда он установлен в режим ввода; если это выходной порт, функция внешнего прерывания будет автоматически отключена (есть некоторые исключения в серии ATiny от ATMEL, которые также могут запускать функцию прерывания, когда они являются выходными портами). Области применения внешних прерываний следующие:


Обнаружение внешних триггерных сигналов: один основан на требованиях реального времени, таких как управление тиристорами, обнаружение внезапных сигналов и т. д., а другой — на необходимости экономии энергии.


Измерение частоты сигнала: Для того чтобы сигнал не был пропущен, идеальным выбором является внешнее прерывание.


Декодирование данных: В области приложений дистанционного управления для снижения стоимости проектирования часто необходимо использовать программное обеспечение для декодирования различных закодированных данных, таких как декодирование Манчестерского и ШИМ-кодирования.


Обнаружение нажатия клавиши и пробуждение системы: микроконтроллеры, переходящие в спящий режим, обычно необходимо пробуждать с помощью внешних прерываний. Самый простой способ — это нажатие клавиши, которое приводит к изменению уровня сигнала.


4. Интерфейс связи: Интерфейс связи, предоставляемый микроконтроллером, обычно включает интерфейсы SPI, UART, I2C и т. д., которые описываются следующим образом:


Интерфейс SPI: Этот тип интерфейса является самым базовым методом связи, предоставляемым большинством микроконтроллеров. Передача данных контролируется синхронным тактовым сигналом. Сигналы включают: SDI (последовательный ввод данных), SDO (последовательный вывод данных), SCLK (последовательный тактовый сигнал) и сигнал готовности; в некоторых случаях сигнал готовности может отсутствовать; этот тип интерфейса может работать в режиме ведущего или ведомого устройства. В общепринятом понимании это зависит от того, кто предоставляет тактовый сигнал. Сторона, предоставляющая тактовый сигнал, является ведущей, а противоположная сторона — ведомой.


UART (Universal Asynchronous Receive Transmit): это самый простой асинхронный интерфейс передачи данных. Он имеет всего две сигнальные линии: Rx и Tx. Базовый формат данных: стартовый бит + бит данных (7-бит/8 бит) + бит четности (четный, нечетный или отсутствует) + стоповый бит (1-2 бита). Время, затрачиваемое на передачу одного бита данных, называется скоростью передачи (бод).


Для большинства микроконтроллеров длина битов данных, режим проверки данных (нечетная проверка, четная проверка или отсутствие проверки), длина стопового бита и скорость передачи данных могут гибко устанавливаться посредством программирования. Наиболее распространенный метод такого интерфейса — это связь с последовательным портом ПК.


Интерфейс I2C: I2C — это протокол передачи данных, разработанный компанией Philips. Он также реализован с использованием двух сигналов: SDAT (последовательный ввод и вывод данных) и SCLK (последовательный тактовый сигнал). Его главное преимущество заключается в том, что к этой шине можно подключать множество устройств, идентифицировать и получать к ним доступ по адресам; одним из главных преимуществ шины I2C является удобство использования программного обеспечения для её реализации через порт ввода-вывода. Скорость передачи данных полностью контролируется сигналом SCLK, который может быть быстрым или медленным, в отличие от интерфейса UART, который имеет строгие требования к скорости.


5. Сторожевой таймер (Watchdog): Сторожевой таймер — это базовая функция большинства микроконтроллеров (некоторые 4-битные микроконтроллеры могут не иметь этой функции). В большинстве микроконтроллеров сторожевой таймер позволяет программе только перезагрузить его, но не выключить (в некоторых случаях это происходит при прошивке программы, например, в микроконтроллерах серии Microchip PIC), а в некоторых микроконтроллерах используется специальный метод для определения необходимости включения, например, в серии Samsung KS57. Пока программа обращается к регистру сторожевого таймера, он автоматически включается и не может быть выключен. В общем, время перезагрузки сторожевого таймера можно установить программно. Самое базовое применение сторожевого таймера — обеспечение возможности самовосстановления микроконтроллеров, вышедших из строя из-за непредвиденных сбоев.



Четыре
Крупнейший мировой производитель микроконтроллеров

(Рейтинг составлен без определенного порядка, сгруппирован по основным производителям. Если чего-то не хватает, пожалуйста, добавьте это в комментариях.)




Европа и Америка




1. Freescale+NXP (Freescale+NXP): Нидерланды, в основном производит 16-битные и 32-битные микроконтроллеры. Области применения: автомобильная электроника, светодиодное и общее освещение, здравоохранение, конвергенция мультимедиа, бытовая техника и электроинструменты, технологии автоматизации зданий, управление двигателями, источники питания и преобразователи мощности, энергетика и интеллектуальные сети, автоматизация, компьютерная и коммуникационная инфраструктура.




2. Microchip+Atmel (Microchip Technology + Atmel): США, в основном поставляют 16-битные и 32-битные микроконтроллеры. Области применения: автомобильная электроника, промышленное использование, управление двигателями, автомобили, автоматизация зданий, бытовая техника, домашние развлечения, промышленная автоматизация, освещение, Интернет вещей, интеллектуальная энергетика, мобильная электронная техника, компьютерная периферия.




3. Cypress+Spansion (Cypress + Spansion Semiconductor): США, в основном производит 8-битные, 16-битные и 32-битные микроконтроллеры. Области применения: автомобильная электроника, бытовая техника, медицина, потребительская электроника, связь и телекоммуникации, промышленность, беспроводные технологии.




4. ADI (Analog Devices): США, в основном производит 8-битные, 16-битные и 32-битные микроконтроллеры. Области применения: аэрокосмическая и оборонная промышленность, автомобильная промышленность, строительные технологии, связь, бытовая электроника, энергетика, здравоохранение, измерительная техника, электродвигатели, промышленная автоматизация, безопасность.




5. Infineon: Германия, в основном производит 16-битные и 32-битные микроконтроллеры. Области применения: автомобильная электроника, бытовая электроника, машиностроение, коммерческий и сельскохозяйственный транспорт, обработка данных, электротранспорт, промышленное применение, медицинское оборудование, мобильная техника, управление и привод двигателей, источники питания, для мотоциклов, электровелосипедов и малогабаритных электромобилей, интеллектуальные сети, освещение, решения для солнечных энергосистем, решения для ветроэнергетических систем.




6. ST Microelectronics: Италия/Франция, в основном производит 32-разрядные микроконтроллеры. Области применения: светодиодное и общее освещение, транспорт, здравоохранение, конвергенция мультимедиа, бытовая техника и электроинструменты, технологии автоматизации зданий, управление двигателями, источники питания и преобразователи мощности, энергетика и интеллектуальные сети, автоматизация, компьютерная и коммуникационная инфраструктура.




7. Qualcomm: США, в основном производит 16-битные и 32-битные микроконтроллеры. Области применения: смартфоны, планшеты, беспроводные модемы.




8. Texas Instruments: США, в основном производит 16-битные и 32-битные микроконтроллеры. Область применения: автомобильная электроника, бытовая электроника, медицинское оборудование, мобильные устройства, средства связи.




9. Maxim (Maxim): США, в основном производит 32-разрядные микроконтроллеры. Область применения: автомобильная электроника, бытовая электроника, промышленное применение, безопасность.




Япония и Южная Корея  




1. Renesas: Япония, в основном производит 16-битные и 32-битные микроконтроллеры. Область применения: компьютеры и периферийные устройства, бытовая электроника, медицинская электроника, автомобильная электроника, промышленность и связь.




2. Toshiba: Япония, в основном производит 16-битные и 32-битные микроконтроллеры. Область применения: автомобильная электроника, промышленное использование, управление двигателями, беспроводная связь, мобильные телефоны, компьютеры и периферийное оборудование, обработка изображений, аудио и видео, бытовая техника, светодиодное освещение, системы безопасности, управление питанием, развлекательное оборудование.




3. Fujitsu: Япония, в основном производит 32-разрядные микроконтроллеры. Область применения: автомобильная промышленность, медицина, машиностроение, бытовая техника.




4. Samsung Electronics: Южная Корея, в основном производит 16-битные и 32-битные микроконтроллеры. Области применения: автомобильная электроника, промышленное использование, управление двигателями, автомобили, автоматизация зданий, бытовая техника, домашние развлечения, промышленная автоматизация, освещение, Интернет вещей, интеллектуальная энергетика, мобильная электронная техника, компьютерная периферия.




Китайский регион  




Материковый Китай  




1. Sigma Microelectronics: В основном производит 32-разрядные микроконтроллеры, область применения: телекоммуникации, производство, энергетика, транспорт, электроэнергетика и т. д.




2. Zhuhai Orbit: В основном производит 32-разрядные микроконтроллеры, область применения: аэрокосмическая отрасль: спутниковые станции, корабли, летательные аппараты; высокотехнологичное промышленное управление: встроенные компьютеры; управление судами, промышленное управление, энергетическое оборудование, мониторинг окружающей среды.




3. Инновации GigaDevice: В основном предлагает 32-битные микроконтроллеры, область применения: промышленная автоматизация, человеко-машинный интерфейс, управление двигателями, системы видеонаблюдения, умный дом, Интернет вещей.




4. Shengsi Microelectronics: В основном производит 8-битные и 32-битные микроконтроллеры. Область применения: мелкая бытовая техника, потребительская электроника, пульты дистанционного управления, мыши, литиевые батареи, цифровые продукты, автомобильная электроника, медицинские приборы и измерительные устройства, игрушки, промышленное управление, умный дом и системы безопасности и другие области.




5. Chipsea Technology: В основном производит 16- и 32-битные микроконтроллеры. Область применения: измерительная техника, Интернет вещей, бытовая электроника, бытовая техника и автомобильная электроника.




6. Компания Lianhua Integrated Circuit: в основном производит 8-битные и 16-битные микроконтроллеры. Область применения: бытовая электроника, белая бытовая техника, промышленное управление, коммуникационное оборудование, автомобильная электроника и компьютеры.




7. Zhuhai Jianrong: В основном производит 8-битные микроконтроллеры, область применения: бытовая техника, мобильные источники питания.




8. Технология Actions: В основном предлагает 8-битные и 32-битные микроконтроллеры, область применения: планшетные компьютеры, умный дом, мультимедиа, Bluetooth, Wi-Fi аудио.




9. Aisco Microelectronics: В основном производит 8-битные и 16-битные микроконтроллеры. Область применения: микросхемы для потребительской электроники, коммуникационные микросхемы, информационные микросхемы и бытовая техника.




10. Huaxin Microelectronics: В основном производит 8-битные и 4-битные микроконтроллеры. Области применения: спутниковые ресиверы, зарядные устройства для мобильных телефонов, вечные календари и универсальные пульты дистанционного управления.




11. Shanghai Belling (Huada Semiconductor Holdings): В основном производит 8-битные, 16-битные и 32-битные микроконтроллеры. Области применения: компьютерная периферия, HDTV, управление питанием, мелкая бытовая техника и цифровые устройства.




12. Haier Integrated Circuits: В основном производит 14-битные, 15-битные и 16-битные микроконтроллеры. Область применения: бытовая электроника, автомобильная электроника, промышленность и интеллектуальные приборы.




13. Beijing Ingenic: В основном производит 32-разрядные микроконтроллеры, область применения: носимые устройства, Интернет вещей, умная бытовая техника, автомобили, бытовая электроника, планшетные компьютеры.




14. Китайская микроэлектроника: в основном производит 8-битные микроконтроллеры. Области применения: умная бытовая техника, автомобильная электроника, системы видеонаблюдения, светодиодное освещение и ландшафтный дизайн, умные игрушки, умные дома и бытовая электроника.




15. Shenzhou Loongson Integrated Circuit: В основном производит 32-разрядные микроконтроллеры, область применения: мониторинг энергопотребления, интеллектуальные сети, промышленное цифровое управление, Интернет вещей, умный дом, мониторинг данных.




16. Ziguang Microelectronics: В основном производит 8-битные и 16-битные микроконтроллеры. Область применения: умная бытовая техника.




17. Times Minxin: В основном производит 32-разрядные микроконтроллеры, область применения: автомобильная навигация, мониторинг дорожного движения, контроль рыболовных судов, энергетические телекоммуникационные сети.




18. China Resources Silicon Microelectronics (дочерняя компания China Resources Microelectronics): в основном производит 8-битные и 16-битные микроконтроллеры. Область применения: бытовая электроника, промышленное управление и бытовая техника.




19. Национальная компания по разработке основных технологий: в основном производит 32-разрядные микроконтроллеры, область применения: информационная безопасность, автоматизация офисных процессов, коммуникационные сети, информационная безопасность.




20. Zhongtian Micro: В основном производит 32-разрядные микроконтроллеры. Области применения: смартфоны, цифровые телевизоры, телеприставки, автомобильная электроника, GPS, электронные книги и принтеры.




21. Компания China Resources Microelectronics: в основном производит 8-битные и 16-битные микроконтроллеры. Область применения: схемы управления для бытовой техники, потребительской электроники и промышленной автоматизации.




22. Zhongying Electronics: В основном производит 4-битные, 8-битные, 16-битные и 32-битные микроконтроллеры. Область применения: бытовая техника и электродвигатели.




23. Lingdong Microelectronics: В основном производит 32-битные микросхемы, область применения: управление двигателями, управление Bluetooth, дисплеи высокого разрешения, беспроводная зарядка, дроны, микропринтеры, интеллектуальные этикетки, электронные сигареты, светодиодные матричные экраны и т. д.




24. Nuvoton Technology: В основном предлагает 8-битные микроконтроллеры, область применения: освещение, Интернет вещей и т. д.




25. Neusoft Carrier: В основном производит 8-битные и 32-битные микроконтроллеры. Области применения: бытовая техника, умный дом, измерительная аппаратура, контроллеры ЖК-панелей, промышленное управление и т. д.




26. Betley: В основном производит 32-разрядные микроконтроллеры, область применения: умный дом, промышленное управление и потребительские товары.




27. Shengquan Technology: В основном производит 8-битные микроконтроллеры, область применения: малые и средние дисплейные панели для автомобильной промышленности, образования, промышленного управления, медицины и т. д.




28. Hangshun Chip: В основном производит 8-битные и 32-битные микроконтроллеры. Область применения: автомобили, Интернет вещей и т. д.




29. Fudan Microelectronics: В основном производит 16-битные и 32-битные микроконтроллеры. Области применения: интеллектуальные счетчики, интеллектуальные дверные замки и т. д.




30. Huada Semiconductor: В основном производит 8-битные, 16-битные и 32-битные микроконтроллеры. Области применения: промышленное управление, интеллектуальное производство, «умная жизнь» и Интернет вещей.




Тайвань, Китай  




1. Компания Hongjing Technology: специализируется на производстве 32-разрядных микроконтроллеров. Область применения: связь, промышленное управление, информационные устройства и голосовая связь.




2. Holtek Semiconductor: в основном производит 8-битные и 32-битные микроконтроллеры. Область применения: бытовая электроника, светодиодное освещение и т. д.




3. Компания Lingyang Technology: в основном производит 8-битные и 16-битные микроконтроллеры. Область применения: домашняя аудио- и видеотехника.




4. Компания Zhongying Electronics: в основном производит 4-битные и 8-битные микроконтроллеры. Область применения: зарядные устройства, мобильные источники питания, бытовая техника, промышленное управление.




5. Компания Songhan Technology: в основном производит 8-битные и 32-битные микроконтроллеры. Область применения: пульты дистанционного управления, интеллектуальные зарядные устройства, крупные и мелкие системы, электронные весы, ушные термометры, тонометры, манометры для измерения давления в шинах, различное измерительное и медицинское оборудование.




6. Winbond Electronics: в основном производит 8-битные и 16-битные микроконтроллеры. Область применения: автомобильная электроника, промышленная электроника, сети, компьютеры, бытовая электроника, Интернет вещей.




7. Технология Ten ​​Speed: в основном предлагает 4-битные, 8-битные и 51-битные микроконтроллеры. Область применения: пульты дистанционного управления, мелкая бытовая техника.




8. Youhua Microelectronics: в основном производит 4-битные и 8-битные микроконтроллеры. Область применения: интегральные схемы для записи данных, бытовая электроника, товары для дома.




9. Микроконтроллеры Yingguang Technology: в основном выпускает 4-битные и 8-битные микроконтроллеры. Область применения: машиностроение, автоматизация, бытовая техника, робототехника.




10. Elan Electronics: в основном производит 8-битные и 16-битные микроконтроллеры. Область применения: бытовая электроника, компьютеры, смартфоны.
 




5
Советы по изучению микроконтроллеров
   




Основные принципы и функции любого микроконтроллера схожи. Единственное различие заключается в конфигурации и количестве периферийных функциональных модулей, систем управления и т. д.




В системах обучения, хотя они и кажутся очень разными по форме, на самом деле это всего лишь разные символы. Значения, которые они представляют, функции, которые необходимо выполнить, и методы адресации в основном схожи.




Для понимания работы микроконтроллера необходимо сначала знать его ПЗУ, ОЗУ, количество портов ввода-вывода, количество таймеров и методов синхронизации, предоставленные периферийные функциональные модули (периферийные схемы), источники прерываний, рабочее напряжение и энергопотребление и т. д.




После ознакомления с характеристиками микроконтроллера следующим шагом является сравнение функций выбранного микроконтроллера с функциями, необходимыми для фактической разработки проекта, и уточнение, какие ресурсы в настоящее время необходимы, а какие не используются в данном проекте.




Для функций, необходимых в проекте, но не предоставляемых выбранным микроконтроллером, необходимо тщательно изучить соответствующую информацию о микроконтроллере, чтобы реализовать их косвенными методами. Например, если разрабатываемый вами проект должен взаимодействовать с COM-портом ПК, а выбранный микроконтроллер не имеет порта UART, можно рассмотреть возможность использования внешних прерываний для реализации этой функции.




Для получения ресурсов, необходимых для разработки проекта, вам нужно внимательно изучить и прочитать руководство*, при этом вы можете игнорировать или просматривать ненужные функциональные модули. В изучении микроконтроллеров ключевым и главным является практическое применение.




После разъяснения соответствующих функций микроконтроллера можно приступать к программированию.




Начинающие разработчики или проектировщики, впервые использующие этот микроконтроллер, могут столкнуться со множеством неясных описаний его функций. Для решения таких проблем существует два метода. Первый — написать специальную программу проверки, чтобы понять функции, описанные в данных; второй — временно игнорировать эти моменты и написать программу для микроконтроллера в соответствии с текущим пониманием, оставив её для модификации и улучшения в процессе отладки. Первый метод подходит для проектов с ограниченным временем и для начинающих, а второй — для людей с определённым опытом разработки микроконтроллеров или в случаях, когда сроки проекта сжаты.




Не стоит тратить много времени на изучение системы команд. Система инструкций — это всего лишь символическое логическое описание. Вы можете лишь в соответствии со своей собственной логикой и логическими требованиями программы просматривать соответствующие инструкции. По мере совершенствования навыков программирования вы будете становиться всё более опытным в работе с системой инструкций и даже сможете запоминать её неосознанно.




шесть
Программирование микроконтроллеров




Между написанием программ для микроконтроллеров и программ для ПК существует большая разница. Хотя инструменты разработки для микроконтроллеров на языке C становятся все более популярными, для разработчиков, которым нужен эффективный программный код и которые предпочитают использовать ассемблер, язык ассемблера по-прежнему остается наиболее лаконичным и эффективным языком программирования.




В программировании микроконтроллеров базовая структура примерно одинакова. Она, как правило, делится на три части: инициализация (это самое большое различие между программированием микроконтроллеров и ПК), основной цикл программы и обработчик прерываний. Их соответствующие описания приведены ниже:




1. Инициализация: При разработке всех программ для микроконтроллеров инициализация является наиболее базовым и важным этапом, который обычно включает в себя следующее:




Замаскируйте все прерывания и инициализируйте указатель стека: на этапе инициализации обычно не требуется возникновение каких-либо прерываний.




Очистка области оперативной памяти системы и отображение информации о памяти: хотя иногда это может быть и не совсем необходимо, с точки зрения надежности и стабильности, особенно для предотвращения непредвиденных ошибок, рекомендуется выработать хорошие навыки программирования.




Инициализация порта ввода-вывода: В соответствии с требованиями проекта установите режим ввода и вывода соответствующего порта ввода-вывода. Для входного порта необходимо установить подтягивающий или отключающий резистор; для выходного порта необходимо установить начальный уровень выходного сигнала во избежание ошибок.




Настройки прерываний: Для всех источников прерываний, которые необходимо использовать в проекте, следует включить их и установить условия срабатывания для прерываний. Для резервных прерываний, которые не используются, их необходимо отключить.




Инициализация других функциональных модулей: Для всех периферийных функциональных модулей микроконтроллера, которые необходимо использовать, необходимо выполнить соответствующие настройки в соответствии с требованиями проекта. Например, для связи по UART необходимо установить скорость передачи данных (Baud Rate), длину данных, метод проверки и длину стопового бита. Для таймера программатора необходимо установить источник тактовой частоты, число деления частоты и данные для перезагрузки.




Инициализация параметров: После завершения инициализации аппаратного обеспечения и ресурсов микроконтроллера следующим шагом является инициализация некоторых переменных и данных, используемых в программе. Инициализация этой части должна быть разработана в соответствии со спецификой проекта и общей структурой программы. Для некоторых приложений, использующих EEPROM для сохранения предварительно подготовленных данных проекта, рекомендуется копировать соответствующие данные в ОЗУ микроконтроллера во время инициализации, чтобы повысить скорость доступа программы к данным и снизить энергопотребление системы (в принципе, доступ к внешней EEPROM увеличит энергопотребление источника питания).




2. Основная часть программного цикла: Большинство микроконтроллеров работают непрерывно в течение длительного времени, поэтому их основные части программного цикла, как правило, построены в виде цикла. Для приложений с несколькими режимами работы может быть несколько частей цикла, которые переключаются с помощью флагов состояния. Для основной части программного цикла обычно используются следующие модули:




Вычислительные программы: Вычислительные программы, как правило, требуют много времени, поэтому мы категорически против их обработки в любых прерываниях, особенно операций умножения и деления.




Обработка программ с низкими или нулевыми требованиями к реальному времени;
 




Программа передачи данных для отображения: в основном для приложений с внешними драйверами светодиодов и ЖК-дисплеев.




3. Обработчик прерываний: Программа обработки прерываний в основном используется для обработки задач и событий с высокими требованиями к реальному времени, таких как обнаружение внезапных внешних сигналов, обнаружение и обработка нажатий кнопок, подсчет времени, сканирование светодиодного дисплея и т. д.




В целом, программа обработки прерываний должна быть максимально лаконичной и короткой. Для функций, которые не требуют обработки в реальном времени, можно установить флаг запуска прерывания, после чего основная программа выполнит определенные транзакции. Это очень важно, особенно для маломощных и низкоскоростных микроконтроллеров, которые должны обеспечивать своевременную реакцию на все прерывания.




4. Для организации различных задач разные микроконтроллеры используют разные методы обработки:




Например, для приложений с низкоскоростными и маломощными микроконтроллерами (Fosc=32768 Гц), учитывая, что такие проекты представляют собой портативные устройства с обычными ЖК-дисплеями, требуется высокая производительность в реальном времени при обработке нажатий клавиш и отображении данных, поэтому для обработки нажатий клавиш, действий и отображения данных обычно используются прерывания по таймеру; для приложений с высокоскоростными микроконтроллерами, такими как приложения с Fosc>1 МГц, поскольку у микроконтроллера достаточно времени для выполнения основного цикла программы, он может только устанавливать различные флаги запуска в соответствующих прерываниях и передавать все задачи в основной цикл программы для выполнения.




5. При программировании микроконтроллеров особое внимание следует уделить следующим моментам:

Необходимо предотвратить одновременный доступ к одной и той же переменной или данным в теле прерывания и в основной программе. Эффективным методом предотвращения является организация обработки таких данных в отдельном модуле, определяя необходимость выполнения соответствующих операций с данными по флагу запуска; в других частях программы (в основном, в прерываниях) флаги запуска следует устанавливать только там, где данные необходимо обработать. — Это гарантирует предсказуемость и уникальность выполнения данных.




семь   Краткое изложение программирования микроконтроллеров от инженера  




1. Выработайте хорошую привычку подводить итоги. Подведение итогов — это не только обобщение собственного опыта обучения, но и повторение и углубление знаний. Это также помогает избежать ошибок при повторном изучении материала.


2. Прежде чем писать программу, необходимо сначала хорошо понимать суть проекта, осознавать его и наметить общую структуру. Очень важно тщательно продумать, как организовать код и какая структура будет наиболее оптимальной. Необходимо проанализировать, какой модуль следует разрабатывать первым, конкретные шаги этого модуля, как называть каждую функцию, связь с другими модулями и т. д. Полезно взять лист бумаги и записать важные этапы.


3. При модульном программировании на языке C необходимо сначала разделить каждый модуль, программировать модуль за модулем, определить последовательность, следовать этой последовательности, а затем написать следующий модуль после успешного завершения предыдущего. Что касается заголовочных файлов, заголовочный файл модуля следует писать после его написания.


4. Не игнорируйте предупреждения, когда они появляются. Это означает, что в программе есть что-то неладное. Вам нужно найти источник проблемы и найти решение. Будьте конкретны при поиске источников. Вы можете искать информацию в интернете или обратиться за советом к другим. Например, основная функция из другого проекта была фактически добавлена ​​в этот проект. На самом деле есть дублирующиеся названия функций. Также есть причины анализировать экспериментальные явления и продвигаться шаг за шагом. Также был выбран неправильный интерфейс при определении порта. Иногда полезно сделать перерыв и подумать, если вы действительно не можете решить проблему самостоятельно. Каким бы простым он ни был, следует обратить на него внимание, так как могут быть ошибки.   
В разработке приложений на микроконтроллерах по-прежнему остаются актуальными такие проблемы, как эффективность использования кода, помехоустойчивость и надежность микроконтроллеров. В данной статье мы обобщим несколько основных навыков, которые необходимо освоить при разработке микроконтроллеров.        
 
  8
  Навыки разработки микроконтроллеров  
1. Как уменьшить количество ошибок в программах
Что касается способов уменьшения количества программных ошибок, в первую очередь следует рассмотреть следующие параметры управления, выходящие за пределы допустимого диапазона, которые необходимо учитывать во время работы системы.  
 
  • Физические параметры: Эти параметры в основном являются входными параметрами системы, которые включают параметры возбуждения, рабочие параметры в процессе сбора данных и параметры результата в конце обработки.
  • Параметры ресурсов: Эти параметры в основном представляют собой ресурсы схем, устройств и функциональных блоков в системе, такие как объем памяти, длина блока хранения и глубина стекирования.
  • Параметры приложения: Эти параметры приложения часто представляют собой условия работы некоторых микроконтроллеров и функциональных блоков. Параметры процесса: относятся к параметрам, которые упорядоченно изменяются в процессе работы системы.

2. Как повысить эффективность кода на языке C.
Использование языка C для программирования микроконтроллеров — неизбежная тенденция в разработке и применении микроконтроллеров. Для достижения максимальной эффективности при программировании на C лучше всего ознакомиться с используемым компилятором C. Сначала протестируйте количество строк операторов ассемблера, соответствующих каждой компиляции на языке C, чтобы четко определить эффективность. В дальнейшем при программировании используйте оператор с наибольшей эффективностью компиляции. Каждый компилятор C имеет свои особенности, поэтому и эффективность компиляции будет разной. Длина кода и время выполнения отличного компилятора C для встроенных систем всего на 5-20% больше, чем у той же функции, написанной на языке ассемблера.  
Для сложных проектов с ограниченными сроками разработки можно использовать язык C, но обязательным условием является хорошее знание языка C и компилятора C, используемого в системе микроконтроллера. Особое внимание следует уделить типам данных и алгоритмам, поддерживаемым системой компиляции C. Хотя язык C является наиболее распространенным языком высокого уровня, разные производители микроконтроллеров используют разные системы компиляции C, особенно в работе некоторых специализированных функциональных модулей. Поэтому, если вы не понимаете эти особенности, во время отладки возникнет множество проблем, что приведет к снижению эффективности выполнения по сравнению с языком ассемблера.


3. Как решить проблему помехоустойчивости микроконтроллера
Наиболее эффективный способ предотвращения помех — это устранение источника помех и блокирование пути их распространения, но зачастую это сложно сделать, поэтому мы можем лишь оценить, достаточно ли сильна помехоустойчивость микроконтроллера. При повышении помехоустойчивости аппаратных систем всё больше внимания уделяется программной защите от помех благодаря её гибкости, экономии аппаратных ресурсов и высокой надёжности.  
Наиболее распространенным явлением помех в работе микроконтроллеров является сброс. Что касается выхода программы из-под контроля, то для возвращения программы в состояние сброса могут использоваться программные ловушки и сторожевые таймеры. Поэтому важнейшая задача программного обеспечения микроконтроллера для противодействия помехам — это обработка состояния сброса.  
Как правило, микроконтроллеры имеют регистры флагов, которые можно использовать для определения причины сброса; кроме того, можно также самостоятельно разместить некоторые флаги в оперативной памяти. При каждом сбросе программы можно определить различные причины сброса, оценивая эти флаги; также можно перейти непосредственно к соответствующей программе на основе различных флагов. Это позволяет программе работать непрерывно, и пользователь не заметит, что программа была сброшена, во время её использования.  
4. Как проверить надежность микроконтроллерной системы
После завершения проектирования микроконтроллерной системы для разных типов микроконтроллерных систем будут разработаны различные методы и инструменты тестирования, но некоторые из них обязательно должны быть протестированы:
 
  • Проверьте полноту работы программного обеспечения микроконтроллера.
  • Тест включения и выключения питания
  • Тест на старение
  • Тесты, такие как ESD и EFT.

Иногда мы можем также имитировать повреждения, которые могут возникнуть в процессе эксплуатации. Например, намеренно потереть контактный порт микроконтроллерной системы о тело человека или ткань одежды, чтобы проверить антистатические свойства. Или использовать мощную электродрель, работая вблизи микроконтроллерной системы, чтобы проверить ее устойчивость к электромагнитным помехам.


В заключение можно сказать, что однокристальные микрокомпьютеры стали важным аспектом развития и применения вычислительной техники. Важное значение применения однокристальных микрокомпьютеров заключается в том, что они коренным образом меняют традиционные представления и методы проектирования систем управления.


Большинство функций, которые раньше выполнялись с помощью аналоговых или цифровых схем, теперь могут быть реализованы программными методами с использованием микроконтроллеров. Этот вид технологии управления, в которой программное обеспечение заменяет аппаратное обеспечение, также называется микроконтроллерной технологией и представляет собой революцию в традиционной технологии управления.  
Кроме того, в процессе разработки и применения необходимо совершенствовать навыки и повышать эффективность, чтобы продукт можно было использовать для более широкого круга целей.        
        Девять
Краткое описание работы микросхемы
       
Основные операции на микросхеме — это операции над регистрами. Регистры имеют свои уникальные адреса, отображаемые в памяти, и операция выполняется над соответствующим адресом. При изучении микросхемы сначала следует посмотреть на временную диаграмму, затем понять, как работают соответствующие регистры, определить необходимые порты (которые могут быть идентифицированы программой), а также процедуры записи и чтения.


Как записывать данные в микросхему, как считывать данные и через какой порт вводить или считывать (самое важное).


При подключении микросхем через шину необходимо сначала понять протокол этой шины. Микросхема, подключенная к шине I2C, в основном управляет другими микросхемами через эту шину.


1. Один светодиод 74hc595 в матрице используется для выбора столбцов, а два других — для выбора цвета. Матрица эквивалентна набору диодов.


Диод загорается только тогда, когда на один конец подается высокий уровень сигнала, а на другой — низкий. Просто при изменении напряжения на одном конце загораются разные цвета.


Выбор режима работы таймера: старшие четыре бита устанавливают таймер T1, а младшие четыре бита — T0. Затем последние две цифры каждого режима определяют режим работы. При установке двух таймеров следует использовать оператор ИЛИ (|). При использовании прерываний необходимо следить за сбросом тех прерываний, которые должны быть сброшены после их срабатывания.


2. Приемопередатчик последовательного порта: режим 2 (автоматическая перезагрузка начального значения) обычно используется для установки скорости передачи данных. Поскольку разные устройства имеют разные возможности обработки данных, установка скорости передачи данных в основном предназначена для обеспечения связи между устройствами с низкой скоростью. Бит флага прерывания должен быть сброшен программно. При настройке прерывания последовательного порта, независимо от того, генерируется ли оно при отправке или приеме, может произойти срабатывание функции прерывания, поэтому следует внимательно отнестись к настройке функции прерывания. (Функция обычно устанавливается автоматически, как на хост-компьютере, так и на ведомом компьютере).


Если вы используете прерывание для отправки данных, вам нужно выяснить, как впервые активировать прерывание, поэтому сначала необходимо отправить его один раз, а затем можно активировать прерывание. За один раз можно отправить только один байт, и следующий бит можно отправить только после установки TI.


3. Преобразователь PCF8591AD имеет четыре входных канала. При чтении PCF8591, в зависимости от выбранного канала, считывается напряжение, поступающее на этот канал. Преобразованные данные сохраняются в микросхеме, а затем считываются. При чтении сначала записывается адрес микросхемы, затем субадрес устройства (0x40|номер канала), а затем считываются данные.


4. Преобразование Da заключается в том, чтобы сначала записать адрес устройства в микросхему, затем записать дополнительный адрес (0x40), а затем записать цифровое значение, которое необходимо преобразовать. При этом вводится информация об адресе устройства в микросхеме.


5. Что касается ЖК-дисплея, после записи и отображения данных они будут отображаться постоянно без непрерывного обновления. Если вы хотите изменить их, вы можете только ввести их заново.


6. В случае с микросхемой тактового генератора DS1302 при чтении данных первые данные считываются по спадающему фронту восьмого тактового сигнала, после чего происходит подготовка к следующему выводу. Обратите внимание на способ записи в программу и местоположение возвращаемого значения.


7. Сначала укажите регистр в Ds1302, а затем запишите в него данные. Регистр данных на микросхеме указывает адрес. (Я до сих пор не совсем понимаю программу защиты от записи. Разве запись не происходит постоянно? Почему защита от записи всё ещё включена?)


(Как уже говорилось ранее, после инициализации можно установить флаг. Если этот флаг есть, инициализация не требуется. Однако, если питание выключено, оперативная память микроконтроллера не сможет сохранить этот флаг, поэтому можно использовать оперативную память DS1302 для сохранения флага и его считывания после включения питания. Я тоже новичок и планирую использовать DS1302 в ближайшее время. Не знаю, правильно ли это, и ещё не реализовал. Пожалуйста, поделитесь дополнительной информацией.)


8. Лучше всего записать инициализацию на случай, если вы забудете её позже. Иногда обращайте внимание на то, какой бит обрабатывается первым при чтении или записи, это можно определить по диаграмме синхронизации.


9. В инфракрасном приемопередатчике при приеме определяется уровень сигнала (высокий или низкий) на основе времени между двумя спадающими фронтами. При написании программы сначала используется таймер для определения времени, его сохранения, а затем преобразования в двоичный код (подробнее о том, как написать такую ​​программу, можно прочитать здесь, это очень полезно).


10. Шаговый двигатель: В основном используется для переключения. Крутящий момент шагового двигателя уменьшается с увеличением скорости. Он в основном используется для автоматической подачи деталей, обрабатываемых на станках. Также может использоваться в местах управления с более высокой точностью.


Шаговый двигатель — это устройство с разомкнутым контуром управления, преобразующее электрические импульсные сигналы в угловое или линейное перемещение. В условиях отсутствия перегрузки скорость и положение остановки двигателя зависят только от частоты и количества импульсов импульсного сигнала и не зависят от изменений нагрузки. Когда драйвер шагового двигателя получает импульсный сигнал, он приводит шаговый двигатель во вращение в заданном направлении на фиксированный угол, называемый «углом шага». Его вращение происходит пошагово на фиксированном угле. Угловое перемещение можно регулировать, управляя количеством импульсов для достижения точного позиционирования; одновременно скорость и ускорение вращения двигателя можно регулировать, управляя частотой импульсов для достижения регулирования скорости.


11. Сервомотор: (сервомотор) — это двигатель, управляющий работой механических компонентов в сервосистеме. Это устройство косвенной передачи, помогающее двигателю. Сервомоторы позволяют очень точно контролировать скорость и положение, а также преобразовывать сигналы напряжения в крутящий момент и скорость вращения для привода управляемых объектов. Скорость вращения ротора сервомотора регулируется входным сигналом и быстро реагирует. В системах автоматического управления он используется в качестве исполнительного механизма и обладает такими характеристиками, как малая электромеханическая постоянная времени, высокая линейность, пусковое напряжение и т. д. Он может преобразовывать полученный электрический сигнал в угловое перемещение или угловую скорость на валу двигателя. Они делятся на две категории: сервомоторы постоянного и переменного тока. Их главная особенность заключается в том, что при нулевом напряжении сигнала вращение отсутствует, а скорость вращения уменьшается с постоянной скоростью по мере увеличения крутящего момента. Двигатель постоянного тока: широко распространен, используется в малогабаритных автомобилях.


12. Обзор китайских иероглифов:
Для вывода китайских иероглифов на монитор или принтер, эти символы преобразуются в точечно-матричный код в соответствии с графическими обозначениями, и получается соответствующий точечно-матричный код (код глифа).


Единый метод кодирования, используемый для представления китайских иероглифов в компьютере, формирует кодировку китайских иероглифов, называемую внутренним кодом (например, национальный стандартный код), и этот внутренний код уникален (эквивалентен идентификационному номеру символа). Кодировка китайских иероглифов, сформированная для облегчения ввода китайских иероглифов, называется входным кодом, который представляет собой внешний код китайских иероглифов. Входной код может отличаться в зависимости от метода кодирования и является разнообразным. Код китайских иероглифов, сформированный для отображения и вывода китайских иероглифов, называется глиф-кодом. Компьютер находит глиф-код китайского иероглифа в библиотеке шрифтов с помощью внутреннего кода китайских иероглифов и осуществляет его преобразование.


Встроенный в камеру код


Согласно положениям национального стандартного кода, каждый китайский иероглиф имеет определённый двоичный код, но этот код будет конфликтовать с кодом ASCII при внутренней обработке компьютером. Для решения этой проблемы к первой цифре каждого байта национального стандартного кода добавляют 1. Поскольку код ASCII использует только 7 бит, «1» в начале может использоваться в качестве метки для идентификации кодов китайских иероглифов. Когда компьютер обрабатывает код с «1» в начале, он понимает его как информацию о китайском иероглифе, а когда он обрабатывает код с «0» в начале, он понимает его как код ASCII. Обработанный таким образом национальный стандартный код (внутренний код) является внутренним кодом.


Если заменить точку в этом графическом изображении «口» на «0», мы получим очень наглядный код глифа «口»: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H2004H 3FFAH 2004H 0000H 0000H. Когда компьютер хочет вывести «口», он сначала находит первый адрес библиотеки шрифтов для отображения, вычисляет на основе внутреннего кода «口», затем находит код глифа «口» и последовательно сканирует экран в соответствии с кодом глифа (в двоичном виде) под управлением генератора символов. В двоичном коде, где значение равно "0", сканируется место, где оно равно "0", а место, где оно равно "1", выделяется, таким образом, можно получить последовательность символов "口".


Шрифты китайских иероглифов упорядочены в соответствии с национальным стандартным кодом и хранятся в памяти в виде бинарных файлов, образуя библиотеку шрифтов китайских иероглифов, также называемую библиотекой глифов китайских иероглифов или библиотекой китайских иероглифов.


Два метода кодирования, см. заголовочный файл.


GB1616.h //------------------ Определение структуры данных шрифта китайских символов ------------------------//structtypFNT_GB16 //Структура данных шрифта китайских символов {unsignedcharIndex[3]; //Внутренний индекс кода китайских символов unsignedchar Msk[32]; //данные кода точечной матрицы }; ////////////////////////////////////////////////////////////////////////////// Таблица шрифтов китайских иероглифов//// Библиотека китайских иероглифов: династия Сун, 16 точек, горизонтальное деление по модулю левого старшего бита, расположение данных: слева направо, сверху вниз///////////////////////////////////////////////////////////////////////////////////////////conststructtypFNT_GB16 codeGB_16[]= //таблица данных{/*---------------------------------------------------------------------------------;исходный файл/текст :Xu;ширина×высота (пиксели):16×16--------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x 20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00,
 
Эта структура очень проста: один байт — это внутренний код, а другой — последовательность точечных матриц. Предыдущая библиотека точечных матриц располагалась в порядке внутреннего кода, и индекс внутреннего кода не требовался. Если же размещались только некоторые китайские иероглифы, то индекс внутреннего кода был необходим. (Китайский иероглиф «Сюй» в начале используется для поиска последовательности точечных матриц слова при выводе «Сюй». Эта последовательность точечных матриц написана мной. При отображении на 1602, поскольку микросхема имеет в памяти последовательность точечных матриц на английском языке, записывать её не нужно.) Обычно для внутреннего кода достаточно двух байтов. Если используется ещё один байт, достаточно добавить нулевой символ в конце. Таким образом, китайская строка может быть напрямую помещена во внутренний код китайских иероглифов;


codeGB_16[k].Index[0] указывает, что существует массив структуры typFNT_GB16 под названием codeGB_16. codeGB_16[k] — это k+1-й элемент массива. index является членом структуры typFNT_GB16, поэтому на него можно ссылаться с помощью codeGB_16[k].Index. В то же время index является массивом, поэтому его можно индексировать. If((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && — это логический оператор И, что означает, что значения с обеих сторон символа && истинны. Истинным является только значение &&, то есть true && true = true. Это предложение означает: codeGB_16[k].Index[0]==c[0] и codeGB_16[k].Index[1]==c[1] устанавливаются одновременно. Если выполняется следующее выражение, codeGB_16[] представляет собой массив структур, а codeGB_16[k].Index[0] означает значение 0-го элемента индекса K-й структуры массива структур.  
      13. 12864 LCD:

Каждая точка на дисплее соответствует двоичному числу: 1 означает включение, 0 — выключение. Оперативная память, хранящая эту информацию, называется памятью данных дисплея. Для отображения определенного изображения или китайского символа необходимо записать соответствующую информацию с матрицы в соответствующий запоминающий блок.  
Счетчик адресов (AC) графической памяти автоматически увеличивает только горизонтальный адрес (ось X) на единицу. Когда горизонтальный адрес равен 0FH, он сбрасывается до 00H. Однако он не увеличивает автоматически вертикальный адрес автоматически при переносе. Поэтому при непрерывной записи нескольких данных программе необходимо определить, нужно ли сбрасывать вертикальный адрес.


14. Оперативная память для рисования (GDRAM)

Оперативная память для отображения рисунка предоставляет 128×8 байт памяти. При изменении параметров оперативной памяти сначала последовательно записываются значения горизонтальных и вертикальных координат, а затем два байта данных в оперативную память. Счетчик адресов (AC) автоматически увеличивает горизонтальный адрес (адрес X) на единицу. Когда горизонтальный адрес равен 0XFH, он сбрасывается на 00H; вертикальный адрес автоматически не увеличивается на 1. Во время записи в оперативную память для отображения рисунка необходимо выключить дисплей.

 
[cpp] view plain copy // Отображение китайских символов void dispString (uchar X, Y,uchar *msg) // Какая строка соответствует X, а какой столбец — Y. msg — китайские символы {if(X==0) write_data(*msg++); //Отображение китайских символов }}/////////////////////////////////// ///////////////// /////////////////// Отображение изображения voiddisppicture(uchar code *adder){ uint i,j;//*******Отображение настроек содержимого верхней половины экрана for(i=0;i<32;i++)//32 адреса столбцов в верхней половине экрана { write_com(0x80 + i);//Установка вертикального адреса VERTICALADD write_com(0x80);//Установка горизонтального адреса HORIZONTAL ADDfor(j=0;j<16;j++) { write_data(*adder); adder++; }}//************Настройки отображения содержимого в нижней половине экрана for(i=0;i<32;i++) //{ write_com(0x80 + i); //Установка вертикального адреса VERTICALADD write_com(0x88); //Установка горизонтального адреса HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;} }}
 
В языке C для заданной переменной автоматически выделяется память, адрес которой совпадает с именем переменной. По этому имени можно получить доступ к данным в памяти и выполнить вычисления. Однако в ассемблере программисту необходимо определить область хранения и отправить данные в аккумулятор для вычислений. Каждый шаг требует действий со стороны программиста. В языке C эти процессы выполняются компилятором.




15. Несколько полезных вопросов и ответов

①. Как происходит выделение памяти для переменных в языке C для микроконтроллеров? Возможно ли, что компилятор интеллектуально добавляет код выделения и повторного использования памяти в процессе компиляции? Ключевой момент заключается в том, как я могу гарантировать отсутствие ошибок переполнения памяти в созданной мной программе? Если я выполняю рекурсивную операцию, то рассчитать требования к памяти самостоятельно сложно.




②. Будут ли ограничения в определении переменных в языке C для микроконтроллеров? Например, операции умножения и деления чисел с плавающей запятой записываются на ассемблере, и код довольно сложный. Если бы он был написан непосредственно на языке C, разве это не было бы слишком просто?




③. В шестнадцатеричном файле, сгенерированном микроконтроллером на языке C, распределение адресов ПЗУ инструкций и данных автоматически назначается компилятором? Могут ли пользователи назначать его самостоятельно?




Ответ 1: Программа для микроконтроллера, написанная на языке C, сначала компилируется программой (по-видимому, c51.exe). После завершения компиляции определяется размер памяти для переменных, но конкретный адрес еще не выделен (адрес является плавающим). Затем подключается другая программа (по-видимому, a51.exe). После подключения определяется конкретный адрес.  
Если переменных слишком много, компилятор выдаст сообщение о том, что сегмент данных слишком велик. Для предотвращения ошибки переполнения памяти основным критерием является наличие переполнения стека, и это зависит от опыта.




Язык C, используемый в микроконтроллерах, как правило, запрещает рекурсию, и рекурсивные операции обычно избегаются. В конце концов, микроконтроллеры — это не персональные компьютеры, что повлияет на скорость. Если рекурсия необходима, целесообразнее использовать DSP-чип. Короче говоря, нужно уметь выбирать подходящий чип.




Ответ 2: Размер переменной (количество разрядов) обычно совпадает с количеством разрядов в микросхеме-аккумуляторе. Например, микроконтроллер 51 обычно использует 8 бит, поскольку это 8-битный микроконтроллер.

Микроконтроллер может определять битовые переменные, но не может определять битовые массивы. Написание кода на языке C кажется простым, но на самом деле генерирует наибольший объем кода. Микроконтроллер, используемый для управления, практически не использует операции с плавающей запятой, что не только медленно, но и проблематично, а также занимает много места. Если это DSP-чип, то гораздо лучше, если у него будет подходящая аппаратная структура.




Ответ 3: Как правило, выделение памяти происходит автоматически. Программирование может осуществляться на языке C и ассемблере, либо в режиме онлайн с использованием Keil C. Обмен данными между микросхемой и внешним миром происходит через порт.



Номер телефона компании: +86-0755-83044319
Факс: +86-0755-83975897
Почта: 1615456225@qq.com
QQ: 3518641314 Менеджер Ли

QQ: 332496225 Менеджер Цю

Адрес: Комната 809, корпус C, технологический корпус Чжаньтао, проспект Миньчжи, 1079, новый район Лунхуа, Шэньчжэнь.

whatsapp

Горячая линия обслуживания

tel: +86 755 83044319

WhatsApp

Whatsapp:+8618073002950