Результат работы показать преподавателю. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Результат работы показать преподавателю.



Оформить отчет по результатам лабораторной работы.

7.6. СПИСОК ЛИТЕРАТУРЫ

1. AT BOOK (Текстовый файл формата DOS объемом 1.2 Мбайт).

2. «Аппаратура персональных компьютеров и ее программирование. IBM PC/XT/AT и PS/2». М: Радио и связь, 1995 г.

3. Финогенов К.Г. Самоучитель по системным функциям MS DOS. М: Радио и связь, 1995 г.

7.7. ПРИЛОЖЕНИЯ.

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

7.7.1. Примеры программ:

Работа с клавиатурой

Программа 1. Включить все светодиоды. В результате программы включаются индикаторы NumLock, CapsLock, ScrollLock.

mov dx,0064 - ждем, пока входной буфер не пуст

a1: in al,dx


test al,00

jnz a1

mov al,ed - команда установки и сброса индикаторов состояния

mov dx,60

out dx,al

a2: in al,dx - команда подтверждения приема

cmp al,fa

jnz a2

mov al,07 - установка индикаторов

out dx,al

a3: in al,dx - команда подтверждения приема

cmp al,fa

jnz a3

INT3

 

Программа 2. Повторение клавиши с частотой 0,3 сек и начальной задержкой 0,5 с.

mov dx,60 - команда задания частоты повтора кода клавиши

mov al,f3

out dx,al

a1: in al,dx - команда подтверждения приема

cmp al,fa

jnz a2

mov al,3b - установка повторения клавиши

out dx,al

a2:in al,dx - команда подтверждения приема

cmp al,fa

jnz a3

INT 3

Работа с контроллером клавиатуры.

Программа 3. Чтение входного порта.

mov dx,64

а1: in al,dx

test al,02

jnz a1

а2: in al,dx

test al,01

jnz a2

mov al,c0

a3: in al,dx

test al,01

jz a3

a4: out dx,al

test al,02

loopnz a4

mov dx,60

in al,dx

INT3


Программа 3. Запись в выходной порт.

mov dx,64

а1: in al,dx

test al,02

jnz a1

а2: out dx,al

test al,02

loopnz a2

mov al,00

mov dx,60

a3: out dx,al

test al,02

loopnz a3

mov dx,64

a4: in al,dx

test al,01

jnz a4

mov al,d0

out dx,al

INT 3

 

Программа 4. Чтение состояния входных линий.

mov dx,64

а1: in al,dx - входной буфер полон?

test al,02

jnz a1

mov al,e0 - команда чтения состояния входных линий

а2: out dx,al

a3: in al,dx

test al,01 -ждать, пока заполнится выходной буфер

jz a3

mov dx,60 - чтение состояния входных линий

in al,dx

INT 3

 

Программа 5. Пульсация выходного порта.

mov dx,64

а1: in al,dx

test al,02 - входной буфер полон?

jnz a1

mov al,fE - команда пульсации 0-вого разряда

out dx,al выходного порта

а2: test al,02 - ждать, пока входной буфер освободится

Jnz a2

INT 3

 


 

 

Лабораторная работа 7

(описание)

8.«ПРОГРАММИРОВАНИЕ RTC CMOS»

 


8.1. ЦЕЛЬ РАБОТЫ.

 

Целью лабораторной работы «Программирование RTC CMOS» является ознакомление с принципами работы контроллера типа MC146818 (Motorola) в качестве часов реального времени RTC (real-time clock) и памяти конфигурации системы, а также с приемами его программирования.

 

8.2. ТЕХНИЧЕСКИЕ СРЕДСТВА, ИСПОЛЬЗУЕМЫЕ В РАБОТЕ.

 

В лабораторной работе используется:

ПЭВМ IBM PC AT и старше.

 

8.3. НАЗНАЧЕНИЕ МИКРОСХЕМЫ MC146818(RTC/CMOS).

 

В архитектуре PC AT используется контроллер типа MC146818 (Motorola) в качестве часов реального времени RTC (real-time clock) и памяти конфигурации системы. Контроллер содержит 64 байт памяти (CMOS): первые 14 байт памяти используются непосредственно для внутренней схемы RTC, остальные 50 байт используются для размещения информации о конфигурации системы.

 

8.4. ФУНКЦИОНИРОВАНИЕ МИКРОСХЕМЫ MC146818(RTC/CMOS).

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

Программа процессора получает данные времени и календаря путем чтения соответствующих байтов памяти. Путем записи этих байтов в соответствующие регистры RAM программа может инициализировать часы, календарь и будильник. Содержимое 10 байтов часов, календаря и будильника может быть двоичным или двоично-десятичным (BCD). Адреса байтов часов, календаря, будильника, служебных регистров и т.д. подробно описаны в приложении 8.9.1.

Перед инициализацией внутренних регистров разряд SET регистра B должен быть установлен в 1, чтобы предотвратить изменения данных часов/календаря.

Программа инициализирует 10 ячеек в выбранном формате (двоичном или BCD), затем указывает этот формат в разряде кода режима данных (DM) регистра B.

Во всех 10 байтах часов, календаря и будильника должны быть использованы одинаковые данные - либо двоичные либо BCD. Для разрешения корректировок должен быть сброшен разряд SET. После инициализации RTC производит все корректировки данных в выбранном режиме. Для изменения режима необходимо реинициализировать указанные выше 10 байтов. Цикл корректировки проводится MC146818 каждую секунду при условии, что использована одна из определенных частот, делитель DV0-DV2 не сброшен, а разряд SET в регистре B сброшен. Если разряд SET установлен в 1, то программа может инициализировать байты часов и календаря; для этого прекращается текущий цикл корректировки и запрещаются новые циклы.

При частоте 4,194304 МГц или 1,048576 МГц цикл корректировки занимает 248 мкс, а при временной оси 32,768 кГц - 1984 мкс. Во время цикла корректировки программа

 


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

В это время устанавливается разряд состояния цикла корректировки UIP. При случайном обращении к данным о времени и дате доступ программы к этим данным оказывается невозможным ни в одной из 4032 попыток.

Разряд 24/12 в регистре B определяет, как ведется отсчет времени: 1-12 или 0-23. Этот разряд не может быть изменен без реинициализации байта часов. При выборе 12-часового формата старший разряд байта часов соответствует времени после полудня при установке в 1.

Три байта будильника могут быть использованы двояко. Во-первых, когда программа устанавливает время будильника в соответствующих байтах часов минут и секунд, каждый день в указанное время вырабатывается прерывание будильника, если установлен разряд разрешения прерывания. Кроме того, программа может установить «безразличное» состояние в одном или всех байтах будильника. Кодом «безразличного» состояния служит любой шестнадцатеричный байт от C0 до FF, т.е. «безразличное» состояние вызывается, когда установлены в 1 два старших разряда каждого байта. Если «безразличный» код установлен в байте часов будильника, прерывание будильника вырабатывается каждый час. Если «безразличный» код установлен в байтах часов и минут будильника, прерывание будильника вырабатывается каждую минуту. Наконец, если «безразличный» код установлен во всех трех байтах будильника, прерывание вырабатывается каждую секунду.

RTC и RAM обеспечивают три отдельных автономных источника прерываний процессора. Прерывание будильника может быть запрограммировано на периодичность от одного раза в секунду до одного раза в день. Периодические прерывания могут быть выбраны с периодом от 0,5 с до 30,517 мкс. Для извещения программы о завершении цикла корректировки может быть использовано прерывание конца корректировки. Нужный режим прерывания выбирает программа процессора. Три разряда в регистре B разрешают три прерывания. При записи единицы в разряд разрешения прерывания прерывание будет выработано при наступлении соответствующего события. Нуль в разряде разрешения прерывания запрещает выводу IRQ реагировать на данное прерывание.

В MC146818 предусмотрено 22 двоичных каскада делителя по временной оси, как показано на блок-схеме(приложение рис. 1). Выход делителей представляет собой сигнал частотой 1 Гц, подающийся на логическое устройство, обеспечивающее цикл корректировки. Делители управляются тремя разрядами (DV2, DV1 и DV0) регистра A.

Делители могут иметь три базовых частоты (4,194304 МГц, 1,048576 МГц или 32,768 кГц). Цепочка делителя может удерживаться сброшенной, что дает возможность точной установки времени. Когда делитель переходит от сброса к рабочей временной оси, через 0,5 с осуществляется первый цикл корректировки.Разряды управления делителем используются также для облегчения тестирования MC146818.

У MC146818 присутствует выход прямоугольных сигналов, но он не используется в архитектуре РС АТ.

Пятнадцать из 22 выходов делителя доступны для селектора 1-15, как показано на блок-схеме. Первая цель выбора выхода делителя состоит в генерации прямоугольного выходного сигнала на выводе SQW. Частота прямоугольного сигнала устанавливается

 


разрядами RS0-RS3 в регистре A.

Селектор 1-15 используется не только для выбора частоты SQW, но и для периодических прерываний.

После того как частота выбрана, программа управляет включением и выключением выходного сигнала на выводе SQW с помощью разряда разрешения прямоугольного сигнала (SQWE) в регистре B. Во время изменения разрядов выбора прямоугольного сигнала или разрешения прямоугольного сигнала SQWE может возникать сигнал асимметричной формы. Вывод SQW прямоугольного сигнала может использоваться по-разному. Например, он может служить эталоном частоты для внешних применений, синтезатором частоты или использоваться для генерирования одного или более звуковых тонов под управлением программы. В приложении 8.9.1 приведена блок-схема контроллера RTC и назначение выводов микросхемы.

 

8.5. ПРОГРАММИРОВАНИЕ МИКРОСХЕМЫ MC146818(RTC/CMOS).

Для чтения и записи во внутреннюю память RTC используются команды микропроцессора IN и OUT. Порт 70h используется совместно регистром маски NMI и регистром адресов памяти конфигурации памяти. Чтобы оставить разрешенным прерывание NMI, нужно, чтобы разряд 7 адресов RTC был установлен в единицу при записи в порт 70h(т.е. 1XXXXXXX, где XXXXXXX - реальный адрес).

Чтобы записать значение в память RTC необходимо: использовать OUT 70h, AL -для указания адреса памяти конфигурации, которая будет изменена (70h - номер порта, AL - адрес памяти), с учетом вышеуказанного условия для NMI;

использовать OUT 71h, AL для записи данных в память RTC по адресу, указанному в предыдущей команде записи в порт 70h.

Команды вывода слов (например, OUT 70h, AX) для одновременной загрузки ячейки памяти и данных не допускаются.

Чтобы прочитать содержимое памяти конфигурации необходимо: использовать OUT 70h, AL для указания адреса памяти конфигурации, который будет читаться (70h - номер порта, AL - адрес памяти);

использовать IN AL, 71h для чтения данных, хранящихся по этому адресу.

Все 64 регистра памяти RTC доступны для чтения и записи, кроме

следующих:

регистров состояния C и D, доступных только для чтения;

разряда 7 регистра состояния A, доступного только для чтения;

старшего разряда байта секунд, доступного только для чтения;

не используемого байта 3Fh.

В MC146818 имеются четыре служебных регистра(A,B,C,D), доступных программе процессора. Эти четыре регистра полностью доступны и во время цикла корректировки. Назначение битов служебных регистров смотри в приложении 8.9.1.

 

8.6. УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ ЛАБОРАТОРНОЙ РАБОТЫ.

Выполнение лабораторной работы состоит из трех этапов:

º подготовка к лабораторной работе;

º проведение работ по непосредственному изучению RTC/CMOS принципов ее работы, программной настройки, написание и отладка программ, иллюстрирующих работу RTC/CMOS;

º оформление отчета и сдача(защита) лаб. работы преподавателю.


8.6.1. Подготовка к лабораторной работе заключается в изучении описания лабораторной работы «Подсистема часов реального времени RTC/CMOS», описания работы микросхемы MC146818(RTC/CMOS), отладчика AFD, ознакомления с примерами программ(см. приложение). Подготовка к работе проводится студентом самостоятельно во внеурочное время.

8.6.2. Проведение работы по изучению принципов организации и работы RTC/CMOS разбивается на два этапа.

На первом этапе определяются значения управляющих слов служебных регистров RTC/CMOS и их адреса, формат представления времени в RTC, изучается текст резидентной сервисной программы BEEP_TSR.EXE (приведенный в приложении). На втором этапе производится создание и отладка программ, иллюстрирующих возможности программирования RTC/CMOS.

8.6.3. Оформление отчета по лабораторной работе осуществляется во внеаудиторное время. Сдача (защита) лабораторной работы производится во время выполнения следующей работы или во внеурочное время по согласованию с преподавателем.

8.6.4. Отчет по лабораторной работе должен содержать следующий материал:

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

n краткое описание работы RTC/CMOS, возможностей подсистемы реального времени и значения управляющих слов служебных регистров;

n результаты изучения программирования различных функций RTC/CMOS;

n тексты программ на ассемблере;

n выводы о проделанной работе.

Отчет должен быть оформлен грамотно и аккуратно!

 

8.7. ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ.

8.7.1. По описанию лабораторной работы определить адреса служебных регистров RTC/CMOS, адреса байтов времени, будильника, даты и т.п.

8.7.2. Определите управляющие слова для программирования различных функций RTC/CMOS: прерывание будильника, периодическое прерывание, генерация прямоугольных импульсов, перевод и установка даты/времени.

8.7.3. Запустите имеющуюся на диске сервисную резидентную программу BEEP_TSR.EXE для получения звуковых сигналов при возникновении прерывания от RTC/CMOS.

7.8.4. Используя программу 1, установите системную дату равной дате своего рождения(или дате указанной преподавателем). Результат покажите преподавателю.

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

8.7.6. Изучив текст программы 3, запрограммируйте RTC на генерацию периодического прерывания с частотой, указанной преподавателем. Результат покажите преподавателю.

 

 

8.8. РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА.

1) Лекции по курсу «Адаптеры и контроллеры ЭВМ».

2) Электронный учебник «PC Book»

3). «Аппаратура персональных компьютеров и ее программирование. IBM PC/XT/AT и PS/2». М: Радио и связь, 1995 г.


ПРИЛОЖЕНИЯ.

 

8.9.1.Описание микросхемы MC146818(RTC/CMOS).

В архитектуре PC AT используется контроллер типа MC146818 (Motorola) в качестве часов реального времени RTC (real-time clock) и памяти конфигурации системы. Контроллер содержит 64 байт памяти (CMOS): первые 14 байт памяти используются непосредственно для внутренней схемы RTC, остальные 50 байт используются для размещения информации о конфигурации системы. На рис. 1 приведена блок-схема контроллера RTC,а в Таблице 1 - назначение выводов RTC.

 

 

Рис.1. Блок-схема контроллера RTC.

 


Таблица 1. Назначение выводов RTC.




 


Временные диаграммы чтения/записи мультиплексированной шины.

 

 


Карта адресов памяти МС 146818


 


Режимы службы времени RTC


Служебные регистры

 

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

 

Регистр A (0A).

Чтение/запись, кроме UIP.

7 0

UIP - разряд текущего цикла корректировки - флажок состояния, который может контролироваться программой. Когда UIP установлен в 1, корректировка происходит или должна начаться. Когда UIP установлен в нуль, цикла корректировки нет и он не начнется раньше, чем по меньшей мере через 244 мкс. Данные часов, календаря и будильника в RAM полностью доступны программе при UIP=0, в это время они не изменяются. Разряд UIP доступен только для чтения и не управляется выводом RESET. При установке SET в регистре B в 1 отсутствует цикл корректировки, и UIP сбрасывается.

DV2, DV1, DV0 - три разряда, позволяющие программе выбирать различные режимы 22-каскадного делителя. Разряды выбора делителя идентифицируют используемую частоту. Может быть использована частота 4,194304 МГц, 1,048576 МГц и 32,768 кГц. Разряды выбора делителя используются также для сброса цепочки делителя. При инициализации часов календаря программа может запустить делитель в определенный момент, который задан в RAM. При снятии сброса делителя через одну секунду начинается первый цикл корректировки.

RS3, RS2, RS1, RS0 используются для выбора одного из 15 выходов 22-каскадного делителя или запрещения выхода делителя. Выбранный выход может использоваться для генерирования выходного прямоугольного сигнала (вывод SQW) и/или периодического прерывания. Программа может

1) разрешить прерывание с помощью PIE;

2) разрешить выход SQW с помощью SQWE;

3) разрешить одновременно прямоугольный сигнал и прерывание с

одинаковой периодичностью;

4) не разрешить ни того, ни другого.

Указанные четыре разряда доступны для чтения и записи, на них не действует вывод RESET. Соответствие содержимого разрядов RS3, RS2, RS1, RS0 и частоты выходного прямоугольного сигнала и/или периодического прерывания приведено в таблице 4.

Таблица 4.


Регистр B (0B)

Чтение/Запись.

7 0

SET: когда этот разряд установлен в нуль, цикл корректировки функционирует обычным образом, инкрементируя счет каждую секунду. Когда SET установлен в 1, цикл корректировки запрещен. SET доступен для чтения и записи, но он не изменяется выводом RESET или внутренними функциями МC146818.

PIE - разряд разрешения периодического прерывания, доступный для чтения и записи; он позволяет флажковому разряду периодического прерывания(PF) в регистре C понижать уровень вывода IRQ. Программа записывает 1 в PIE, чтобы получать периодические прерывания с частотой, заданной разрядами RS3, RS2, RS1 и RS0 в регистре A. Нулевой PIE блокирует возбуждение IRQ от периодического прерывания, но при этом остается установленным флажковый разряд PF. PIE не модифицируется никакими внутренними функциями MC146818, но сбрасывается в нуль выводом RESET.

AIE - разряд разрешения сигнального прерывания, доступен для чтения и записи; он разрешает флажковому разряду сигнализации (AF) устанавливать

IRQ. Сигнальное прерывание вырабатывается каждую секунду, когда три разряда времени совпадают с тремя разрядами сигнализации, включая «безразличный» код (11ХХХХХХ).Когда разряд AIE установлен в нуль, разряд AF не активизирует сигнал IRQ. Вывод RESET сбрасывает разряд AIE в нуль. Внутренние функции МС146818 не влияют на разряд AIE.

UIE - разряд прерывания конца корректировки, доступный для чтения и записи; он позволяет флажковому разряду конца корректировки (UF) в регистре C устанавливать IRQ. При понижении вывода RESET или при установке SET разряд UIE сбрасывается.

SQWE - разряд разрешения прямоугольного сигнала. Когда он установлен программой в 1, на вывод SQW выводится прямоугольный сигнал, частота которого выбрана разрядами RS3-RS0. Когда SQWE установлен в нуль, вывод SQW удерживается на низком уровне. SQWE сбрасывается выводом RESET.SQWE доступен для чтения и записи.

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

24/12 - разряд, устанавливающий формат байтов часов: 24-часовой режим(1) или 12-часовой режим (0). Этот разряд доступен для чтения и записи иизменяется только программно.

DSE - разряд разрешения летнего времени, доступный для чтения и записи при установке в 1 позволяет программе разрешить две специальные корректировки. В последнее воскресенье апреля время инкрементируется с 1.59.59 на 3.00.00. В последнее воскресенье октября время по достижении 1.59.59 изменяется на 1.00.00. Эти специальные корректировки не производятся, когда DSE установлен в нуль. DSE не изменяется никакими внутренними функциями или RESET.


Регистр C (0С).

Чтение/запись

7 0

IRQF -флажок запроса прерывания, устанавливается в 1, когда выполняется одно или несколько следующих условий:

PF = PIE = 1,

AF = AIE = 1,

UF = UIE = 1,

т. е. IRQF = PF*PIE + AF*AIE + UF*UIE

Когда IRQF установлен в 1, вывод IRQ находится на низком уровне. После чтения регистра C программой или после понижения вывода RESET все флажковые разряды сбрасываются.

PF - флажок периодического прерывания, доступный для чтения и записи. Он устанавливается в 1, когда обнаруживается определенный фронт на выбранном отводе цепочки делителя. Частота периодических прерываний задается разрядами RS3-RS0. PF устанавливается в 1 независимо от состояния PIE. При PF = 1 возбуждается сигнал IRQ, а если и PIE = 1, то устанавливается IRQF. Разряд PF сбрасывается по выводу RESET или при считывании программой регистра C.

AF - флажок сигнального прерывания. Установка его в 1 показывает, что текущее время совпало со временем будильника. При этом понижается уровень вывода IRQ и IRQF устанавливается в 1, если AIE также установлен в 1. AF сбрасывается по RESET или при считывании программой регистра C.

UF - флажок конца корректировки, устанавливаемый после каждого цикла корректировки. Когда UIE установлен в 1, то при единице в UF устанавливается в 1 IRQF и возбуждается вывод IRQ. UF сбрасывается при чтении регистра C или по RESET.

Разряды 3-0 - неиспользуемые разряды регистра состояния C, читаются как нулевые, запись в них невозможна.

Регистр D (0D)

Только чтение.

7 0

VRT - разряд подтверждения корректности содержимого RAM и времени при условии правильного подключения вывода состояния питания (PS). При низком уровне PS в VRT появляется нуль. Программа процессора может установить VRT при инициализации часов и календаря, чтобы он указывал верные RAM и время. VRT доступен только для чтения и не изменяется по RESET. VRT может быть установлен только чтением регистра D.

 

8.9.2.Содержимое обработчика прерываний программы BEEP_TSR.EXE.

 

mov al,0x0c;

out 0x70,al;

in al,0x71; // сбрасываем прерывание от RTC

in al,0x61; // далее программируем таймер


and al,0xfc;

out 0x61,al;

mov al,0xb7;

out 0x43,al;

mov al,0;

out 0x42,al;

mov al,20;

out 0x42,al;

in al,0x61;

or al,0x03;

out 0x61,al;

mov cx,0xffff;

a: mov dx,cx; // два вложенных цикла для задержки

mov cx,0x0008;

b: loopnz b;

mov cx,dx;

loopnz a;

in al,0x61;

and al,0xfc;

out 0x61,al;

mov al,0x20;

out 0xa0,al; // сообщаем контроллерам, что прерывание закончено

out 0x20,al;

int 0x60 // вызываем старый обработчик прерываний от RTC

// заранее размещенный нами по свободному вектору 0x60

 

8.9.3. Примеры программ.

Программа 1.

Установка системной даты: 12 апреля 74 года.

 

mov AL,8B

out [70],AL

mov AL,83 // устанавливаем SET

out [71],AL

mov AL,89

out [70],AL

mov AL,74 // год в BCD-коде

out [71],AL

mov AL,88

out [70],AL

mov AL,04 // месяц в BCD-коде

out [71],AL

mov AL,87

out [70],AL

mov AL,12 // день в BCD-коде

out [71],AL

mov AL,8B

out [70],AL

mov AL,83 // сбрасываем SET

out [71],AL

int 3

 

Программа 2.

Установка будильника на генерацию прерываний каждый час через

 

15 минут 13 cекунд.

mov AL,8B

out [70],AL

mov AL,03 // устанавливаем SET

out [71],AL

mov AL,81

out [70],AL

mov AL,13 // секунды будильника BCD-коде

out [71],AL

mov AL,83

out [70],AL

mov AL,0F // минуты будильника в BCD-коде

out [71],AL

mov AL,85

out [70],AL

mov AL,0f // часы будильника в BCD-коде

out [71],AL

mov AL,8B

out [70],AL

mov AL,43 // сбрасываем SET и разрешаем прерывания будильника

out [71],AL

int 3

 

Программа 3.

Установка RTC на генерацию периодических прерываний с частотой 16384 гц

 

mov AL,8A

out [70],AL

in AL,[71] // читаем содержимое регистра A

and AL,F0

or Al,06 // задаем частоту

out [71],AL

mov AL,8B

out [70],AL

mov AL,43 // разрешаем периодические прерывания

out [71],AL

int 3

 

Программа 4.

Установка RTC на генерацию прямоугольного сигнала с частотой 16384 гц

 

mov AL,8A

out [70],AL

in AL,[71] // читаем содержимое регистра A

and AL,F0

or Al,02 // задаем частоту

out [71],AL

mov AL,8B


out [70],AL

mov AL,0B // разрешаем генерацию прямоугольного сигнала

out [71],AL

int 3

 

Программа 5.

Для запрета прерываний запустить из AFD следующую программу

 

mov AL,AL

out [70],AL

mov AL,03

out [71],AL

int 3

 


Приложение


9.1. Основные команды отладчика AFD

(Advanced Fullscreen Debug)

L имя_файла{,перем, адрес1} - загрузить файл в память. Адрес программы можно задавать(адрес1). По умолчанию -адрес CS:0100. Количество отображаемых байтов находится в BX, CX после окончания команды. Параметр имя_файла- это имя файла. Расширение (по умолчанию.exe).

Пример: L aaa.txt,, CS:0140

W имя_файла, адрес, количество_байт - записать данные в файл. Адресный сегмент по умолчанию -DS, количество_байт -определяет количество байт (4-х разрядное шестнадцатиричное число).

Пример: W aaa.txt,0100,0136

{R} регистр=содержимое регистра - установить регистр. FL=содержимое регистра, флаговый регистр установится как 16 -разрядный регистр. Для раздельного доступа к флаговым битам нужно использовать OF, DF, IF, SF, ZF, AF, PF, CF.

D адрес - показать код. Указатель устанавливается в окне дизассемблера на этот адрес. Сегмент по умолчанию CS.

M n адрес

[регистр] - показать окно памяти (n=1 или n=2). Сегмент о умолчанию тот, который показан в соответствующем окне. FS можно использовать для фиксации памяти. Для косвенной адресации, содержимое любого регистра может использоваться, как адрес.

Пример: M 2 100

G {нач_адрес}{,кон_адрес} - выполнить программу с текущего адреса или со стартового адреса нач_адрес, кон_адрес - точка останова. Сегмент по умолчанию - текущий CS.

Пример: G 2aaa,2baa

A {адрес1} - переход в ассемблерный режим, в котором происходит редактирование программ. Инструкции вводятся по команде «Enter», клавиши управления курсором используются для перемещения между командами с области кодов вверх и вниз. адрес1 -адрес входа (по умолчанию -текущий адрес).

P адрес, строка - «взлом» памяти. Сегмент по умолчанию CS.

F адрес, число повторений, строка - заполнить память указанной строкой. Адресный сегмент по умолчанию DS. Число повторений определяет сколько раз строка будет записана в память.

S {адрес1}{,строка1} - поиск данных в памяти, начиная с адреса

{адрес1}. Если адрес не указан, поиск начинается с CS:00. Когда данные обнаружены, экран отобразит эту область памяти. Команда S без параметров начинает повторный поиск. Cтрока1-строка символов, любой набор значений, 1234, BX, «ASCII», и т.д.

С адрес1, адрес2, длина - сравнение двух областей памяти. Если обнаружено несовпадение, то на экране М1 будет отражена область памяти, адресуемая первым параметром, а на экране М2 -область памяти, адресуемая вторым параметром. Сегмент по умолчанию DS.

CO адрес1, адрес2, количество_байт - копирование данных из области памяти с адресом адрес1 в область памяти с адресом адрес2.

I адрес -отображение содержимого порта ввода/вывода. Адрес-любой 8-ми или 16-ти разрядный адрес или название регистра.

Пример: i 2fb i ax

O адрес, константа - вывод 8-разрядной константы в порт ввода/вывода, параметр адрес -см. команду I.

Пример: O 2fb,00

Т{В} - показать буфер трассировки. Если параметр В не указан,


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

BW имя_файла - записать установки точки останова в файл.

BL имя_файла - считать установки точки останова из файла.

PH адрес, длина{, имя_файла} - распечатать данный в шестнадцатиричном и ASCII формате. Сегмент по умолчанию DS. Длина определяет количество байт. По умолчанию вывод на принтер.

PD адрес1, длина{,имя_файла} - распечатать дизассемблированный код. Сегмент по умолчанию CS. Параметр длина -количество команд, которые будут распечатаны. Параметр имя_файла -имя файла, из которого необходимо взять команды для печати.

Пример: PD 100, 10, aaa.asm

РТ{смещение, длина{, имя_файла}} - распечатать содержимое буфера трассировки. Смещение определяет смещение ло 1 печатаемой команды. Число печатаемых инструкций определяется длиной или действительным числом записанных команд. По умолчанию -все команды.

ON

OFF - переключение режима ассемблера и дизассемблера для I80286. Переключатель установлен на РС тип (РС/АТ).

MO{DE} M{ONO}

C{OLOR}

A{LTERN} ON

OFF - установить режим экрана.

M -черно-белый адаптер.

C -цветной адаптер.

Если указано A ON, то выполнение программы будет сопровождаться отображением выводимых ею на экран данных (так называемый «теневой экран»). F6 - переключение между основным и теневым экраном. Команда без параметров возвращает текущие установки.

BE{EP} ON

OFF - включение и выключение звука.

XT - перейти в режим обучения. Все нажатия клавиш хранятся в буфере и могут быть записаны в файл или выполнены. Режим обучения завершается, когда буфер переполнен или по Ctrl+Break.

XX {имя_файла} - выполнить записанные в режиме обучения нажатия клавиш. Если указано имя файла, то данные считываются из файла и выполняются.

XW имя_файла - записать нажатия клавиш, хранящихся в буфере в файл.

XX имя_файла - заполнить буфер клавиатуры данными из файла.

CTRL-HOME - выход из ассемблерного редактора в интерактивный режим для ввода команд.

CTRL-ESC - выход из бесконечного цикла (созданного, например командой JMP).

QUIT - выход из AFD и возврат в DOS.

F1 - выполнение команды

F2 - выполнение процедуры

F3 - восстановление команды

F4 - помощь

F5 - просмотр окна трассировки

F7 - перемещение вверх

F8 - перемещение вниз

F9 - перемещение влево

F10 - перемещение вправо


2. Система команд микропроцессора К1810ВМ86 (I8086)

Форматы команды

Микропроцессор К1810ВМ86 относится к классу однокристальных с фиксированной системой команд. При рассмотрении системы команд удобно обращать­ся к программной модели МП, содержащей его функциональные узлы (регистры), доступные программисту (рис. 2.1). Общие регистры разбиты на две группы: 1) группа HL, состоящая из регистров AX, BX, CX, DX, которые пред­назначены прежде всего для хранения данных и допускают раздельную адреса­цию их старших (Н) и младших (L) половин; 2) группа PI, содержащая ука­зательные регистры ВР, SP и индексные регистры SI, DI, в которых обычно хранится адресная информация. Для общих и сегментных регистров указаны коды, используемые в форматах команд для их адресации. Регистр флагов F и указатель команд IP адресуются в командах неявно.

Рис. 2.1. Программно-доступные регистры МП ВМВБ

 

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

В общем виде формат двухоперандной команды приведен на рис. 2.2, а, где штриховыми линиями обозначены необязательные байты команды. Первый байт команды содержит код операции СОР и два однобитовых поля: направле­ния d и слова w. При d=l осуществляется передача операнда или результата операции в регистр, который определяется полем reg второго байта команды; при d==0—передача из указанного регистра. Поле w идентифицирует тип (разрядность) операндов: при w==l команда оперирует словом, при w=0— байтом.

Рис. 2.2. Форматы двухопврандных команд

Второй байт, называемый постбайтом, определяет участвующие в опера­ции регистры или регистр и ячейку памяти. Постбайт состоит из трех полей: md — режим, reg — регистр, r/m — регистр/память. Поле reg определяет опе­ранд, который обязательно находится в регистре МП и условно считается вторым операндом. Поле r/m определяет операнд, который может находиться в регистре или памяти и условно считается первым. Способ кодирования внут­ренних регистров МП в полях reg и r/m представлен в табл. 2.1.

Отметим, что поле reg используется для указания регистра только в двухоперандных командах. Если в команде один операнд, то он идентифицируется полем г/m, а поле reg используется для расширения кода операции.


Поле md показывает, как интерпретируется поле r/m для нахождения первого операнда: если md=ll, то операнд содержится в регистре, в осталь­ных случаях — в памяти. Когда адресуется память, поле md определяет вари­ант использования смещения disp, находящегося в третьем и четвертом байтах команды:

ì 00, disp = 0—смещение отсутствует;

md=í 01, disp = disp L—команда содержит 8-битовое смещение, которое расширяется со

ê знаком до 16 бит;

î 10, disp = disp H, disp L—команда содержит 16-битовое смещение.

При md=ll реализуется косвенная адресация памяти и поле r/m определяет правила формирования эффективного адреса ЕА операнда в соответствии с табл. 2.2, где disp означает смещение, заданное в формате команды.

Приведенные в табл. 2.2 правила имеют одно исключение, позволяющее реализовать прямую (абсолютную) адресацию: если md=00 и r/m=110, то EA=disp H, disp L. Таким образом, имеется три варианта интерпретации поля md и восемь вариантов интерпретации поля r/m, что дает 24 варианта вы­числения эффективного адреса ЕА. Суммарные сведения о постбайтовых режимах адресации ЦП ВМ86 приведены в табл. 2.3 и на рис. 2.3.



Поделиться:


Последнее изменение этой страницы: 2017-02-17; просмотров: 127; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.133.228 (0.296 с.)