Основы программирования микропроцессоров


Функция Регистры при вызове



Download 1,87 Mb.
bet119/119
Sana23.02.2022
Hajmi1,87 Mb.
#139915
TuriКонтрольные вопросы
1   ...   111   112   113   114   115   116   117   118   119
Bog'liq
Системное программирование

Функция

Регистры при вызове

Регистры при возврате

Инициализация порта

AH = 00h
AL = параметры
инициализации порта
DX = номер порта (0-3)

AH = состояние линии
AL = состояние модема

Передать символ

AH = 01h
AL = код символа
DX = номер порта (0-3)

AH – бит 7 сброшен, если успешное выполнение и установлен в случае ошибки. Биты 6-0 – состояние порта

Принять символ

AH = 02h
DX = номер порта (0-3)

AH = состояние линии
AL = принятый символ,
если бит 7 сброшен

Состояние порта

AH = 03h
DX = номер порта (0-3)

AH = состояние линии
AL = состояние модема

Параметры инициализации порта приведены в табл. 124-127. Как видно, функциям BIOS также присущи недостатки: нельзя установить скорость передачи более 9600 бод, нет возможности узнать текущий режим работы адаптера, отсутствует поддержка модема. Поэтому для программирования асинхронного адаптера рекомендуется использовать порты ввода-вывода и работать на низком уровне.
Табл. 124. Формат байта инициализации порта.

Биты

7

6

5

4

3

2

1

0

Значение

Скорость передачи

Контроль
четности

Число
стоп-битов

Размер
слова


Табл. 125. Размер слова.

Слово (бит)

Код

5

00

6

01

7

10

8

11




Табл. 126. Коды четности.

Тип четности

Код

Нет

00

Нечетность

01

Нет

10

Четность

11




Табл. 127. Коды скорости.

Скорость (бод)

Код

110

000

150

001

300

010

600

011

1200

100

2400

101

4800

110

9600

111



13.6. Упражнения


Пример 1. Используя ассемблер, определить базовый адрес порта COM1 и инициализировать его следующими параметрами: скорость обмена 9600 Кбод, 1 стоповый бит, четный тип четности, размер информационного слова 8 бит.


Решение. Для инициализации COM-порта должны быть использованы регистр делителя скорости обмена, регистр контроля линии и регистр разрешения прерывания. Реализация алгоритма инициализации может быть следующим.

MOV AX, 40h


MOV ES, AX ; регистр ES указывает на область данных BIOS
MOV DX, ES:[00] ; читаем базовый адрес порта COM1
ADD DX, 3 ; адрес регистра управления
MOV AL, 80h ; установка бита DLAB для доступа регистру делителя
OUT DX, AL
DEC DX
DEC DX ; адрес старшего байта делителя скорости
MOV AL, 12h
OUT DX, AL
DEC DX ; адрес младшего байта делителя скорости
MOV AL, 0Ch ; установка младшего байта делителя
OUT DX, AL
ADD DX, 3 ; адрес регистра управления
MOV AL, 00011011b ; DLAB=0, четность, 1 стоп-бит, 8 бит/слово
OUT DX, AL
DEC DX
DEC DX ; адрес регистра разрешения прерываний
MOV AL, 00h ; прерывания запрещены
OUT DX, AL


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


Решение. При передаче данных программа полностью контролирует состав данных и скорость, с которой они должны передаваться. Когда байт данных помещается в регистр хранения передат­чика, оттуда он автоматически выводится в последовательный канал через регистр сдвига передатчика. Бит 5 регистра статуса линии показывает, свободен ли регистр хранения передатчика для приема данных.
Регистр статуса постоянно проверяется до тех пор, пока бит 5 не станет равным 1. После этого в регистр хранения передатчика может быть передан очередной байт данных. В процессе передачи бит 5 равен 0, и когда он опять станет равным 1, в регистр хранения передатчика может быть передан следующий символ.

; чтение байта с ожиданием без использования прерываний


MOV DX, COM1 ; помещаем базовый адрес порта в регистр DX
ADD DX, 5 ; адрес регистра состояния
wait: ; метка ожидания окончания приема
IN AL, DX ; чтение байта состояния
TEST AL, 01h ; бит 1 = «1» (принят байт)
JZ wait ; нет - ждем
SUB DX, 5 ; адрес регистра приемника
IN AL, DX ; чтение принятого байта в регистр DX

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


; передача байта из AH без контроля готовности приемника


MOV DX, COM1 ; помещаем базовый адрес порта COM1 в регистр DX
ADD DX, 5 ; адрес регистра состояния
wait: ; метка ожидания окончания передачи
IN AL, DX ; чтение байта состояния
TEST AL, 40h ; бит 6 = «1» (готовность к передаче очередного байта)
JZ wait ; нет - ждем
SUB DX, 5 ; адрес регистра передатчика
MOV AL, AH ; помещаем передаваемый байт в регистр AL
OUT DX, AL ; передача данных


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


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

; установка нового вектора прерывания


MOV DX, OFFSET IOINT
MOV AX, SEG IOINT
MOV DS, AX ; пара DS:DX указывает на обработчик прерываний
MOV AL, 0Ch ; номер вектора прерывания для порта COM1
MOV AH, 25h ; функция изменения вектора
INT 21h ; изменение вектора прерывания

; инициализация регистра разрешения прерывания


MOV DX, COM1 ; помещаем адрес порта COM1 в регистр DX
INC DX ; адрес регистра разрешения прерываний
MOV AL, 11b ; разрешаем прерывания приема и передачи
OUT DX, AL

Второе действие состоит в реализации подпрограммы обработки прерывания. Для порта COM1 номер прерывания равен 0Bh. Алгоритм обработчика этого прерывания показан на рис. 50. При наступлении прерывания читается регистр идентификации IIR и по его разрядам IID0 и IID1 определяется тип прерывания. Если прерывание вызвано поступлением данных, происходит переход на подпрограмму принятия данных, в противном случае – на подпрограмму передачи.


Затем проверяется разряд INP на наличие отложенных прерываний. Если они существуют, вновь следует определить тип прерывания. В отсутствии новых прерываний выполняется разрешение прерываний с более низким уровнем и завершается обработка прерывания 0Bh.
Ниже представлена дословная реализация описанного алгоритма.

; процедура обработки прерывания


IOINT PROC FAR
MOV DX, COM1 ; помещаем адрес порта COM1 в регистр DX
INC DX ; указываем на регистр идентификации прерывания
INC DX
IN AL, DX ; читаем значение регистра идентификации прерывания
nextint:
TEST AL, 10b ; тип прерывания «получены данные»
JNZ sendata ; переход на передачу символа, если флаг нуля установлен
getdata: ; метка начала приема данных
... ; реализация алгоритма приема данных
JMP SHORT newio ; переход на проверку наличия нового прерывания
sendata: ; метка начала передачи данных
... ; реализация алгоритма передачи данных
; перед выходом проверка на наличие нового прерывания
newio: ; метка начала проверки поступления нового прерывания
MOV DX, COM1 ; помещаем адрес порта COM1 в регистр DX
INC DX ; указываем на регистр идентификации прерывания
INC DX
IN AL, DX ; читаем значение регистра идентификации прерывания
TEST AL, 1 ; проверка бита 1
JNZ nextint ; переход по метке nextint, если флаг нуля установлен
MOV AL, 20h ; иначе передаем код завершения аппаратного прерывания
OUT 20h, AL
IRET ; возврат из процедуры обработки прерывания
IOINT ENDP ; завершение процедуры обработки прерывания


Рис. 50. Алгоритм обработки прерывания 0Bh.


Пример 4. Используя встроенный в среду Borland® Delphi ассемблер разработать подпрограмму эмуляции последовательного порта при помощи параллельного. Подпрограмма должна выполнять передачу байтовых данных. Активным уровнем считать лог. 0. Временные параметры считать задаваемыми через глобальные переменные.


Решение. При решении ряда задач возникает необходимость организации нестандартного последовательного интерфейса. Например, микроконтроллеры компании ATMEL использует синхронный последовательный интерфейс, в котором синхронизируется каждый бит, и данные передаются без старт-стопных битов пакетами по три байта. В такой ситуации можно эмулировать последовательный интерфейс с использованием аппаратной части параллельного интерфейса. При этом программно эмулируется сдвиговый регистр и тактовый генератор.
Алгоритм последовательной передачи с использованием параллельного порта показан на рис. 51. Данные передаются по линии D0, а синхросигнал – по линии D1. Разряды байта передаются последовательно, начиная с самого старшего. Операции маскирования задают последовательное изменение разряда D1 в порядке 1-0-1 и совместно с очередным разрядом передаваемого байта данных выводятся в порт. Временные задержки определяют скорость передачи данных и задаются глобально через параметр DLY. Базовый адрес порта хранится в переменной LPT.

Рис. 51. Алгоритм последовательной передачи байта данных через параллельный порт.


Пример процедуры синхронной передачи байта приведен ниже.

procedure SendByte(b: Byte);


begin
asm
{ Передаваемый байт }
MOV BL, b
{ Инверсия разрядов байта }
NOT BL
{ В DX базовый адрес порта LPT }
MOV DX, LPT
{ Счетчик для передачи 8 бит из BL }
MOV CX, 8
{ Сдвиг влево; в флаге CF старший бит }
@@L1:SHL BL, 1
MOV AL, 1
JC @@L2
{ Если передаваемый бит = 0, то AL=0 иначе AL=1 }
MOV AL, 0
{ D0=передаваемый бит, D1=CLK=1 }
@@L2:OR AL, 2
OUT DX, AL
{ D0=передаваемый бит, D1=CLK=0 }
AND AL, 0FDh
OUT DX, AL
{ Временная задержка }
PUSH CX
MOV CX, DLY
@@L3:LOOP @@L3
POP CX
{ D0=передаваемый бит, D1=CLK=1 }
OR AL, 2
OUT DX, al
{ Временная задержка }
PUSH CX
MOV CX, DLY
@@L4:LOOP @@L4
POP CX
{ Повторять 8 раз }
LOOP @L1
end;
end;

Контрольные вопросы


  1. В чем заключается идея асинхронной передачи данных?

  2. Опишите структуру информационного кадра.

  3. Какие существуют разновидности УАПП? Перечислите их функции.

  4. Перечислите и опишите структуру регистров УАПП.

  5. Каковы возможности BIOS и MS-DOS для передачи данных в последовательной форме?



Литература


  1. Пильщиков В.Н. Программирование на языке ассемблера IBM PC. – М.: Диалог-МИФИ, 1996.

  2. Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. – М.: Радио и связь 1989.

  3. Абель П. Язык Ассемблера для IBM PC и программирование. Перевод с англ. Сальникова Ю.В. – М.: Высшая школа 1992.

  4. Браун Р., Кайл Дж. Справочник по прерываниям IBM PC. Том 1,2. – М.: Мир 1994.

  5. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. – М.: Финансы и статистика 1992.

  6. Путилин А.Б., Юрагов Е.А. Компонентное моделирование и программирование на языке UML. Практическое руководство по проектированию информационных систем. – М. НТ Пресс 2005.

  7. Томпкинс У., Уэбстер Д. Сопряжение датчиков и устройств ввода данных с компьютерами IBM PC. – М.: Мир 1992.

  8. Хаммел Р.Л. Последовательная передача данных. – М.: Мир, СК ПРЕСС 1996.





Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета

Download 1,87 Mb.

Do'stlaringiz bilan baham:
1   ...   111   112   113   114   115   116   117   118   119




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish