- •7. Ввод в mcs-51 аналоговых сигналов: виды ацп, схемы подключения и программы опроса ацп.
- •14. Функции формирования временных задержек в языке с18.
- •15. Программирование на языке с18 типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя.
- •16. Подключение жк-дисплея к pic-микроконтроллеру: структура жк-дисплея, функции управления дисплеем.
- •17. Аналого-цифровое преобразование в pic-мк: структура внутреннего ацп, функции управления ацп на языке с18.
- •18. Реализация широтно-импульсной модуляции в pic-мк: параметры шим, функции управления шим на языке с18.
- •19. Прерывания в pic18: источники прерываний, управляю-е биты, программирование прерываний на языке с18.
- •29. Разработка и автономная отладка аппаратных и программных средств микроконтроллерных систем.
- •30. Методы и средства совместной отладки аппаратных и программных средств микроконтроллерных систем.
7. Ввод в mcs-51 аналоговых сигналов: виды ацп, схемы подключения и программы опроса ацп.
Подпрограмма OPROS производит переключение аналоговых каналов коммутатора DA1 (рис. 3.5).
;*********************************************************
;OPROS – подпрограмма ввода аналоговых сигналов U1-U4.
;*********************************************************
OPROS: MOV R0, #DATA_W ; Начальный адрес массива
;DATA_W
MOV R7, #4 ; Счетчик аналоговых сигналов
NEXT: MOV R2, #0001100B ; Регистр R2 - код для выбора
; канала коммутатора DA1
MOV P1, R2 ; Вывод в P3 - выбор канала коммутатора
CALL ADCONV ; Подпрограмма АЦ преобразования,
; в регистре B – МлБ, в регистре А – СтБ кода АЦП
MOV @R0, B ; Пересылка МлБ кода АЦП в ПД
INC R0
MOV @R0, A ; Пересылка СтБ кода АЦП в ПД
INC R0
INC R2
DJNZ R7, NEXT ; Цикл, если (R7) 0
RET
Схемы ввода цифровых и аналоговых сигналов
Реализация схем ввода сигналов от датчика МКС зависит от их количества, а также типа заданного АЦП. При разработке схемы подключения АЦП следует учитывать разрядность кода и возможность управления выходными буферами микросхемы.
На рис. 3.5 приведена функциональная схема ввода цифровых и аналоговых сигналов при использовании АЦП типа К1113ПВ1. Микросхема DA1 КР590КН3 является коммутатором аналоговых входных сигналов U1-U4. Переключение входных каналов коммутатора выполняется цифровыми сигналами уровней ТТЛ, подаваемых на адресные входы А1 и А0. Таблица истинности коммутатора имеет вид:
А1 |
А0 |
Соединение |
0 |
0 |
Y=X1 |
0 |
1 |
Y=X2 |
1 |
0 |
Y=X3 |
1 |
1 |
Y=X4 |
Операционный усилитель DA2 включен по схеме повторителя и служит для устранения влияния низкоомного входа АЦП на коммутатор.
Особенностью микросхемы К1113ПВ1 является то, что в ней отсутствует возможность управления выходными буферами выдачи цифрового кода. После запуска АЦП выходы буферов будут в z-состоянии. Когда преобразование закончится (сигнал на выводе станет равным 0), выходы буферов переходят в активный режим и на выводахD0-D9 появится цифровой код, который будет неизменным до нового запуска АЦП. В схеме на рис. 3.5 разряды D0-D7 выходного кода АЦП подаются на входы буферного регистра DD2, а два старших разряда D8,D9 – на входы регистра DD3. Сигнал готовности данных АЦП и цифровые входные сигналы Х1-Х4 подаются на входыDD3. Выходы регистров DD2 и DD3 соединены с выводами порта Р0 МК. Управление выходными буферами регистров осуществляется от линий Р3.3 и Р3.4. При Р3.3=1, Р3.4=1 выходы регистров DD2, DD3 находятся в z-состоянии и они отключены от выводов порта Р0. Запуск АЦП выполняется сигналом от линии Р1.3. Переключение каналов коммутатора производят сигналы с линий Р1.0, Р1.1 микроконтр-а.
Рис. 3.5. Схема ввода цифровых и аналоговых сигналов с АЦП К1113ПВ1
13. Функции в языке С18: определение функции, прототип, библиотечные функции. Определение функции. Программа на языке Си состоит из одной или нескольких функций. Функция – это логически самостоятельная именованная часть программы, которой могут передаваться параметры и которая может возвращать какое-то значение. Современный стиль языка Си предполагает следующий формат определения функции: возвращаемый_тип имя_функции (тип параметр_1, …,тип параметр_n)
{
описание данных;
оператор_1;
……
оператор_m;
return (выражение);
}
Совокупность предложений в фигурных скобках часто называют телом функции. Встретив определение функции, компилятор создает самостоятельную секцию кода программы, которая на этапе компоновки объединяется с другими функциями. Синтаксис языка Си запрещает внутри определения функции помещать определение еще одной функции. Поле «возвращаемый_тип» задает тип возвращаемого функцией значения (char, int, float и т.д.). Если функция не возвращает никакого значения, то в поле «возвращаемый_тип» записывается ключевое слово void (пустой).
После имени функции в скобках помещаются аргументы (или по-другому параметры), передаваемые в функцию, они содержат любую комбинацию типов и имен. Это поле в определении функции называется списком формальных аргументов (или параметров). Поле «список аргументов» - не обязательная часть в определении функции. Если в функцию не передаются никакие аргументы. То это поле–пустое или содержит ключевое слово void.
Пример определения функции:
int mul(int a, int b)
{
int y;
y = a * b;
return y;
}
Определения функций могут размещаться в различных частях программы, в том числе и в различных файлах. Поэтому может возникнуть ситуация, когда вызывается функция, определение которой находится ниже (по тексту) в программе. Это вызывает сбой в работе компилятора. Прототип функции. Стандарт языка Си требует, чтобы функции были объявлены до первой ссылки на них. Это «предварительное» объявление называется прототипом функции. Оно извещает компилятор о типе возвращаемого значения, количестве и типе аргументов. Используя прототип, компилятор может выполнить тщательный контроль числа аргументов и соответствие их типов в вызовах функции и ее определении. Современный стиль записи прототипа имеет следующий формат: возвращаемый_тип имя_функции(тип параметр_1, …., тип параметр_n); Сравнивая формат прототипа с определением функции, можно сделать вывод о том, что прототип точно повторяет первую строку определения функции. Пример прототипа для рассмотренной ранее функции:
int mul(int a, int b);
Следует отметить, что определение функции будет одновременно являться ее прототипом при условии, что функция определяется до того, как будет вызвана. В таком случае прототип можно не записывать в текст программы. Однако лучше всего соблюдать следующее правило: всегда записывать прототипы функций, используемых в программе, вне зависимости от того, где (по тексту) находятся определения функций. Прототипы функций обычно размещаются в начале программы после директив препроцессора. Общеупотребительная практика - помещение прототипов функций в заголовочный файл, подключаемый директивой #include к тексту программы.
Библиотечные функции. MPLAB C18 имеет обширные библиотеки, содержащие функции для решения часто встречающихся задач. Использование таких готовых функций избавляет пользователя от необходимости разработки соответствующих средств и предоставляет ему дополнительный сервис. Стандартные функции языка Си оформлены в соответс-щие программные модули, включены в библиотеки и поставляются с системой программирования. Их прототипы даны в файлах типа *.h. Поэтому в начале программы с библиотечными функциями должны быть строки вида #include<включаемый файл вида *.h>.