Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Запись/чтение данных в регистр Data

Итак, рассмотрим сразу практическую задачу. Хочу чтобы на выводе регистра Data под номером 3 (3 - это номера вывода LPT порта) была установлена логическая 1 (т.е. чтоб между ним и землей было +5 В) и на остальных выводах этого регистра (2,4-9 выводы порта) были нули. Пишем код:

int Address=888; int data=2; Out32(Address, data);

Я использовал функцию Out32 библиотеки inpout32.dll, будем привыкать к ней, т.к. дальнейшие примеры будем разбирать именно на этой библиотеке. Если этот код выполнить, то получится что на выводе порта 3 есть +5 В, а на 2,4-9 висит ноль. Как это получилось?

Начнем разбираться: первым параметром функции Out32 мы передаем число 888. Как Вы уже знаете, это адрес регистра Data LPT порта. Теперь функция знает куда ей писать данные. Далее вторым параметром мы передаем число 2. Прошу обратить внимание, что двоика в десятичной системе счисления. Что дальше делает функция? Ей надо эту двойку запихнуть в регистр Data, но вот проблема: регистр совершенно непонимает что такое 2. Он знает 0 или 1. Больше ничего. Тогда функция как бы "переводит эту двоику в двоичную систему счисления" (это не совсем верно, но для объяснения на пальцах сгодится) и каждый разряд двоичного числа справо на лево записывает по порядку в регистр начиная с младшего разряда D0 (вывод 2 порта) и заканчивая старшим D7 (вывод 9). Если Вы переведете число 2 из десятичной в двоичную систему счисления то получите 10. Функция берет первый разряд двоичного числа - это 0 (самую правую) и пишет ее в D0, далее берет 1 и пишет ее в D1. Т.к. регистр 8-ми разрядный (у него есть 8 контактов), функция продолжает брать данные справо на лево и писать в следующий бит регистра. Т.к. наше число закончилось, то функция как бы дописывает нулями наше двоичное число слева, чтоб оно стало 8-ми разрядным. Эта опрерация смыслу не противоречит, т.к. например, что 23 руб. так и 00023 руб. - одно и тоже.

Ну что, мозг опух пока прочитали? Сейчас станет понятнее. Давайте в регистр Data запишем число 245. Пишем код:

int Address=888; int data=245; Out32(Address, data);

Опять переводим 245 в двоичную систему счисления и справо на лево записываем разряды числа в соответсвующие биты регистра. В итоге получим, что на выводах LPT порта под номерами 2,4,6-9 присутствует напряжение +5 В, на выводах 3,5 ноль.

Ну что, теперь я думаю, с записью данных в регистр Data мы разобрались. Надо отметить, что диапозон десятичных чисел, которые можно записать в регистр Data лежит в пределах от 0 до 255. Регистр он у нас 8-ми разрядный, значит максимальное число комбинации 0 и 1 на его выводах составляет 28-1=256-1=255.

<== предыдущая лекция | следующая лекция ==>
Внутренности LPT порта | Запись/чтение данных в регистр Status
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 314; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.006 сек.