Для чтения из порта ввода вывода процессор intel может использовать команду
Базовую систему команд микропроцессора можно условно разделить на несколько групп по функциональному назначению:
Кроме базовой системы команд микропроцессора существуют также команды расширений:
- X87 – расширение, содержащее команды математического сопроцессора (работа с вещественными числами)
- MMX – расширение, содержащее команды для кодирования/декодирования потоковых аудио/видео данных;
- SSE – расширение включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных;
- SSE2 – модификация SSE, содержит инструкции для потоковой обработки целочисленных данных, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX, появившегося гораздо раньше;
- SSE3, SSE4 – содержат дополнительные инструкции расширения SSE.
В таблице команд приняты следующие обозначения:
r – регистр
m – ячейка памяти
c – константа
8, 16, 32 – размер в битах
На все базовые команды процессора накладываются следующие ограничения:
- Нельзя в одной команде оперировать двумя областями памяти одновременно. Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения.
- Нельзя оперировать сегментным регистром и значением непосредственно из памяти. Поэтому для выполнения такой операции нужно использовать промежуточный объект. Это может быть регистр общего назначения или стек.
- Нельзя оперировать двумя сегментными регистрами. Это объясняется тем, что в системе команд нет соответствующего кода операции. Но необходимость в таком действии часто возникает. Выполнить такую пересылку можно, используя в качестве промежуточных регистры общего назначения. Например,
Команды передачи данных
Основной командой передачи данных является команда MOV , осуществляющая операцию присваивания:
Команда MOV присваивает значению операнда приемника значение операнда источника. В качестве приемника могут выступать регистр общего назначения, сегментный регистр или ячейка памяти, в качестве источника могут выступать константа, регистр общего назначения, сегментный регистр или ячейка памяти. Оба операнда должны быть одного размера.
Команды передачи данных представлены в таблице.
Команды установки единичного бита
Проверяют условие состояния битов регистра EFLAGS и, если условие выполняется, то младший бит операнда устанавливается в 1, в противном случае в 0. Анализ битов производится аналогично условным переходам.
Команды работы со стеком
Команды ввода-вывода
Команды целочисленной арифметики
Особого внимания среди рассмотренных команд целочисленной арифметики заслуживает команда CMP , которая вычитает второй операнд из первого и не сохраняет результат, а устанавливает биты OF, SF, ZF, AF, PF, CF регистра признаков EFLAGS в соответствии с результатом. Команда CMP чаще всего предшествует командам знакового или беззнакового условных переходов.
Логические команды
Выполнение логических операций описано здесь
Сдвиговые команды
Выполнение сдвиговых операций в языке Си рассмотрено здесь .
Команды циклического сдвига выполняются в соответствии со схемой
Команды коррекции двично-десятичных чисел
Команды коррекции двоично-десятичных чисел не имеют операндов и используют операнд по умолчанию, хранящийся в регистре AX (паре регистров AH:AL ).
Команды преобразования типов
Команды преобразования типов предназначены для корректного изменения размера операнда, заданного неявно в регистре-аккумуляторе ( EAX , AX , AL ). Непосредственно после аббревиатуры команды операнд не указывается.
Команды управления флагами
Команды управления флагами предназначены для сброса или установки соответствующего бита регистра признаков EFLAGS . Команды управления флагами не имеют операндов.
Команды прерываний
Команды передачи управления
Команды обращения к процедуре (функции)
Команды поддержки языков высокого уровня
Команды организации циклов — используют регистр ECX по умолчанию в качестве счетчика числа повторений цикла. Каждый раз при выполнении команды LOOPсс значение регистра ECX уменьшается на 1, а затем сравнивается с 0. Если ECX =0 , выполнение цикла заканчивается, и продолжает выполняться код программы, записанный после команды LOOPcc . Если ECX содержит ненулевое значение, то осуществляется переход по адресу операнда команды LOOPcc .
Команды условных переходов — проверяют состояние одного или нескольких битов регистра признаков и при выполнении условия осуществляют передачу программного управления в другую точку кода, задаваемую операндом. Указанный класс команд не запоминает информацию для возврата. Операнд определяет адрес команды, которой должно быть передано управление.
Вводом/выводом (ВВ) называется передача данных между ядром ЭВМ, включающим в себя микропроцессор и основную память, и внешними устройствами (ВУ). Это единственное средство взаимодействия ЭВМ с "внешним миром", и архитектура ВВ (режимы работы, форматы команд, особенности прерываний, скорость обмена и др.) непосредственно влияет на эффективность всей системы. За время эволюции ЭВМ подсистема ВВ претерпела наибольшие изменения благодаря расширению сферы применения ЭВМ и появлению новых внешних устройств. Особенно важную роль средства ВВ играют в управляющих ЭВМ. Разработка аппаратных средств и программного обеспечения ВВ является наиболее сложным этапом проектирования новых систем на базе ЭВМ, а возможности ВВ серийных машин представляют собой один из важных параметров, определяющих выбор машины для конкретного применения.
Программная модель внешнего устройства
Подключение внешних устройств к системной шине осуществляется посредством электронных схем, называемых контроллерами ВВ (интерфейсами ВВ). Они согласуют уровни электрических сигналов, а также преобразуют машинные данные в формат, необходимый устройству, и наоборот. Обычно контроллеры ВВ конструктивно оформляются вместе с процессором в виде интерфейсных плат.
Регистр, содержащий группу бит, к которой процессор обращается в операциях ВВ, образует порт ВВ. Таким образом, наиболее общая программная модель внешнего устройства, которое может выполнять ввод и вывод, содержит четыре регистра ВВ: регистр выходных данных (выходной порт), регистр входных данных (входной порт), регистр управления и регистр состояния (рис. 3.1). Каждый из этих регистров должен иметь однозначный адрес, который идентифицируется дешифратором адреса. В зависимости от особенностей устройства общая модель конкретизируется, например, отдельные регистры состояния и управления объединяются в один регистр, в устройстве ввода (вывода) имеется только регистр входных (выходных) данных, для ввода и вывода используется двунаправленный порт.
Рис. 3.1. Программная модель внешнего устройства
Непосредственные действия, связанные с вводом/выводом, реализуются одним из двух способов, различающихся адресацией регистров ВВ.
Интерфейс с изолированными шинами характеризуется раздельной адресацией памяти и внешних устройств при обмене информацией. Изолированный ВВ предполагает наличие специальных команд ввода/вывода, общий формат которых показан на рис. 3.2. При выполнении команды ввода IN содержимое адресуемого входного регистра PORT передается во внутренний регистр REG процессора, а при выполнении команды OUT содержимое регистра REG передается в выходной порт PORT. В процессоре могут быть и другие команды, относящиеся к ВВ и связанные с проверкой и модификацией содержимого регистра управления и состояния.
Рис. 3.2. Команды ввода/вывода (общий формат)
В ЭВМ, рассчитанной на изолированный ВВ, нетрудно перейти к ВВ, отображенному на память. Если, например, адресное пространство памяти составляет 64 Кбайт, а для программного обеспечения достаточно 32 Кбайт, то область адресов от 0 до 32 К-1 используется для памяти, от 32 К до 64 К-1 - для ввода/вывода. При этом признаком, дифференцирующим обращения к памяти и портам ВВ, может быть старший бит адреса.
Таким образом, интерфейс с общими шинами (ввод/вывод с отображением на память) имеет организацию, при которой часть общего адресного пространства отводится для внешних устройств, регистры которых адресуются так же, как и ячейки памяти. В этом случае для адресации портов ВВ используются полные адресные сигналы: READ - чтение, WRITE - запись.
В операционных системах ЭВМ имеется набор подпрограмм (драйверов ВВ), управляющих операциями ВВ стандартных внешних устройств. Благодаря им пользователь может не знать многих особенностей ВУ и интерфейсов ВВ, а применять четкие программные протоколы.
Если требуется обеспечить взаимодействие процессора с периферийным устройством, то регистры этого устройства могут быть отображены на ячейки обычной оперативной памяти процессора (memory-mapped I/O) либо на ячейки специального адресного пространства, называемого пространством портов ввода-вывода.
Ввод-вывод с отображением в память обслуживается обычными командами доступа к памяти (MOV, MOVS и т.п.) При этом используются обычные механизмы защиты на уровне сегментов и на уровне страниц. Для обслуживания устройств через пространство портов ввода-вывода используются специальные команды и особый механизм защиты. Особенностью обмена через пространство ввода-вывода является то, что процессор обеспечивает синхронизацию выполнения инструкций ввода-вывода, тогда как при обмене через отображаемую память надо дополнительно позаботиться о предотвращении кэширования и изменения порядка выполнения инструкций (P6+).
- уровень привилегий ввода-вывода (I/O Privilege Level - IOPL);
- битовая карта разрешения ввода-вывода (I/O Permission Bit Map);
Битовая карта разрешения ввода-вывода позволяет более гибко регулировать доступ к портам ввода-вывода непривилегированных программ и задач в состоянии V86. Битовая карта разрешения ввода-вывода располагается в сегменте состояния задачи (TSS) по адресу, задаваемому полем "Адрес карты вв-выв." Размер битовой карты может быть любым и ограничивается пределом сегмента состояния задачи. Каждый бит в этой карте соответствует определенному порту ввода-вывода. Когда непривилегированный код пытается обратиться к определенному порту ввода-вывода, процессор тестирует соответствующий бит. Если бит сброшен, то доступ к порту предоставляется, в противном случае генерируется нарушение общей защиты. Для 16- и 32-битных портов тестируются все соответствующие им биты, если хоть один из них 1, то возникает нарушение общей защиты.
Битовая карта не обязательно должна представлять весь диапазон портов ввода-вывода и может быть короче. Если процессор пытается обратиться к биту карты и выходит за ее пределы, считается, что бит установлен, и операция ввода-вывода вызывает нарушение общей защиты. Если адрес битовой карты совпадает с пределом TSS или больше него, то считается, что битовая карта отсутствует, тогда работает только механизм защиты по полю IOPL.
Т.к. условие выравненности адресов многобайтных портов не является обязательным, процессор при каждом обращении к битовой карте читает два ее байта. Чтобы предотвратить исключение при обращении к портам с адресами вблизи верхней границы битовой карты, в битовую карту следует включать дополнительный байт со всеми выставленными битами (FF).
Встроенные переферийные устройства
8XC196KC/KD содержит следующие внутренние периферийные устройства, обеспечивающие специальные функции для ряда прикладных задач:
- стандартные порты ввода/вывода (Standard Input/ Output Ports);
- последовательный порт ввода/вывода (Serial Port);
- модуль быстрого ввода/вывода (High Speed Input/ Output - HSIO);
- аналого-цифровой преобразователь (Analog-to-Didital Converter - ADC);
- широтно-импульсный модулятор (Pulse Width Modulator - PWM);
- сторожевой таймер (Watchdog Timer).
Периферийные устройства 8ХС196КC/KD отображаются и управляются через регистры спецфункций, доступ к которым осуществляется непосредственно или через горизонтальные окна в младшем регистровом файле.
Стандартные порты ввода/вывода
Почти все разряды параллельных портов выполняют альтернативные функции. Конкретная функция порта ввода/вывода программируется в соответствующем управляющем регистре специальных функций (Special Funktion Register, SFR).
Порт 1 - квазидвунаправленный порт. Выводы порта 1 мультиплексируются с сигналами управления шиной и двумя выводами широтно-импульсного модулятора.
Порт 2 содержит 3 типа разрядов: квазидвунаправленные, ввода и вывода. Некоторые функции 8XC196KC/KD совместно используют разряды ввода и вывода порта 2.
Порты 3 и 4 - двунаправленные порты с открытым стоком, которые используются совместно как 16-разрядная внешняя шина адреса/данных.
Последовательный порт ввода/вывода
Последовательный порт ввода/вывода - асинхронно-синхронный порт, вклю-чающий универсальные асинхронные приемник и передатчик (Universal Asynchronous Recevier and Transmitter - UART).
UART имеет 3 асинхронных режима и 1 синхронный. Порт функционально со-вместим с последовательным портом семейства MСS-51, хотя для управления портами используется различное программное обеспечение.
Синхронный режим сдвигового регистра предназначен для расширения ввода/вывода через последовательный порт.
Модуль быстрого ввода/вывода
Блок быстрого ввода/вывода предназначен для приема и регистрации входных событий и формирования и выдачи выходных событий. Событием является изменение значения сигнала в какой-либо точке схемы МК. Различают единичные события (пере-ход с нулевого уровня сигнала на единичный) и нулевые события (замена единичного значения нулевым).
HSIO содержит 4 индивидуальных модуля: счетчик 1 и счетчик 2, устройство быстрого ввода (High Speed Input - HSI) и устройство быстрого вывода (High Speed Output - HSO). В режиме ввода при приеме и регистрации входного события запоминается время появления события определенного типа на определенном входе модуля HSI. В режиме вывода при формировании и выдаче выходного события в определенное, за-ранее заданное время на определенном выходе устройства HSO появляется событие заданного типа. Вместе эти модули формируют гибкую, основанную на "таймерах/счетчиках" систему ввода/вывода.
Счетчик 1 - счетчик свободного доступа, значение которого увеличивается че-рез каждые восемь временных состояний. Он - временная основа модуля быстрого ввода и иногда - модуля быстрого вывода.
Счетчик 2 предназначен для счета положительных и отрицательных фронтов на его входе. Он может использоваться как временная основа для модуля быстрого вывода, как счетчик или как дополнительный таймер.
Модуль быстрого ввода (HSI модуль) может записывать времена внешних событий с разрешающей способностью в 8 временных состояний. Он может контролировать четыре входа с независимо перестраиваемой конфигурацией и фиксировать значение счетчика 1, когда происходят события заданного типа.
HSI модуль может запоминать до восьми событий ввода (значения счетчика 1): семь в семиуровневом стеке FIFO и одно в выходном регистре HSI.
Модуль быстрого вывода (HSO модуль) может формировать и выдавать события в определенные времена, заданные в счетчике 1 или счетчике 2. Эти программируемые события включают старт ADC, сброс счетчика 2, генерацию до четырех программных таймеров, установку или очистку одной (или более) из шести линий вывода HSO.
HSO модуль сохраняет отложенные события и соответствующие им времена в ассоциативном запоминающем устройстве (Content-Addressable Memory - CAM). CAM может хранить до восьми строк. Каждая строка определяет время наступления и тип события, должно ли происходить прерывание и какой задействован счетчик - первый или второй.
Аналого-цифровой преобразователь
Могут быть осуществлены преобразования уровня аналоговой земли и опорного напряжения, результаты которых используются для вычисления коэффициента преобразования и погрешности смещения нуля.
Основные компоненты ADC - схема выборки и хранения, мультиплексор с 8 каналами и 10-битовый регистр последовательного приближения.
Широтно-импульсный модулятор
Широтно-импульсный модулятор предназначен для формирования и выдачи импульсной последовательности с постоянным периодом и изменяемой скважностью импульсов. МК 8XC196KC/KD имеет три модуля PWM. Период следования импульсов - 256 или 512 временных состояний - программируется.
Сторожевой таймер
Сторожевой таймер предназначен для перевода МК в состояние сброса при об-наружении ошибок программного обеспечения.
Сторожевой таймер - шестнадцатиразрядный счетчик, ведущий счет на сложе-ние с частотой счета Fosc/2. При переполнении счетчика формируется сигнал RESET, который переводит схему МК в состояние сброса и удерживает ее в этом состоянии в течение времени, равного 32Tosc.
Программа, выполняемая без сбоев, должна периодически сбрасывать счетчик в нулевое состояние. При сбое в ходе программы сброс сторожевого таймера своевременно не выполняется.
Каждый порт ввода-вывода обслуживают как минимум 3 служебных регистра:
- регистр, содержащий данные (уровни сигналов) на всех линиях порта и используется для записи сигналов в порт;
- регистр, содержащий состояния входов порта, доступен только для чтения, используется при чтении данных из порта;
- регистр направления линий порта: каждая линия порта может быть сконфигурирована как вход или как выход в зависимости от значения бита этого регистра.
Если какая-то линия порта ввода-вывода в схеме не используется, она должна быть определена как выход (соответствующий бит регистра направления должен соответствовать выходу), и ее выходное значение должно быть равно 0.
Большинство линий ввода-вывода могут быть сконфигурированы для выполнения альтернативных функций, обозначенных в назначении выводов микроконтроллера.
Для всех линий портов ввода-вывода, как правило, доступна программная конфигурация входных подтягивающих резисторов. Подтягивающие резисторы осуществляют доопределение потенциалов «брошенных» входов напряжением высокого (Pull-up) или низкого (Pull-down) уровня.
Для обращения к отдельным линиям порта используется маскирование битов.
В качестве входных элементов управления могут использоваться
- другие элементы схемы;
- тумблеры;
- джамперы;
- множественные переключатели;
- кнопки.
Тумблеры предназначены для коммутации цепей управления. Обрабатываемый сигнал с тумблера – потенциальный.
Различают 1-позиционные и 2-позиционные тумблеры:
1-позиционные
2-позиционные
Джамперы , как правило, используются для переключения режима работы, и их состояние проверяется только в момент включения питания микроконтроллера. Установка джампера замыкает 2 вывода, между которыми он установлен.
Множественные переключатели представляют собой набор 1-позиционных тумблеров в миниатюрном формате.
Кнопки предназначены для коммутации цепей управления. Обрабатываемый сигнал с кнопки – импульсный и фиксирует момент нажатия кнопки и момент ее отжатия.
Выходные элементы управления
В качестве выходных элементов управления могут использоваться
- другие элементы схемы;
- элементы индикации (единичные светодиоды или светодиодные сборки, в частности, — 7-сегментные индикаторы).
Единичные светодиоды
7-сегментные индикаторы
Различают 7-сегментные индикаторы с общим анодом и с общим катодом.
При подаче логической единицы на соответствующий сегмент индикатора с общим катодом светодиод сегмента включается. При этом общий вывод сегментов (катод) должен быть соединен с логическим нулем.
При подаче логического нуля на соответствующий сегмент индикатора с общим анодом светодиод сегмента включается. При этом общий вывод (анод) должен быть соединен с логической единицей.
В таблице приведены коды для отображения цифр на 7-сегментном индикаторе
Цифра | G | F | E | D | C | B | A | Код |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 0x3F | |
0 | 0 | 0 | 0 | 1 | 1 | 0 | 0x06 | |
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0x5B | |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 0х4F | |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0x66 | |
1 | 1 | 0 | 1 | 1 | 0 | 1 | 0x6D | |
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0x7D | |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 0x07 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x7F | |
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0x6F |
Уважаемая Елена не подскажите как написать в языке Си: если на три порта микрконтроллера при считывании датчиков будут нули то нужно четвертый порт перевести на выход if((PINA+PINB+PINC)==0)
Порт подразумевает, что датчик подключен ко всем 8 линиям? Он параллельным кодом выдает сигнал? Порт перевести на выход - имеется в виду линии сконфигурирован как выходы, значение не важно? Или вывести значение в порт? Тогда какое? Или все-таки задействуются отдельные линии порта? В предложенной строке - как минимум, опечатка в POTD
Читайте также: