Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦУМП2 лаб.раб.посл. вар.2.doc
Скачиваний:
5
Добавлен:
09.09.2019
Размер:
368.64 Кб
Скачать
    1. Команды работы с прерываниями.

Команда SWI служит для генерации программного прерывания, а команда RTI для выхода из подпрограммы обслуживания прерывания.

org $00F4

jmp lithe

org $1000

ldab #$FF

stab $0003

ldab #$40

m1 ldaa #$AA

swi

coma

swi

decb

bne m1

bra *

lithe ldx #$B800

m2 nop

nop

nop

dex

bne m2

rti

Осуществить выполнение программы. Объяснить принцип её работы.

3. Специальные команды.

К специальным командам относятся команды WAI и STOP.

Команда WAI переводит микроконтроллер в режим ожидания первого немаскированного прерывания.

Команда STOP приводит к остановке всех внутренних генераторов микроконтроллера и переход в режим минимального энергопотребления.

Выход из этих режимов можно осуществить, например, с помощью RESET или немаскируемого прерывания IRQ.

4. Содержание отчета

Отчет должен содержать:

  1. Название и цель работы.

  2. Лабораторные задания.

  3. Составленные и отлаженные программы.

  4. Результаты работы программ.

  1. Контрольные вопросы и задания

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

1. Каков результат выполнения программы:

org $1000 sec clra adda #0

2. Какие методы адресации применимы к командам циклического сдвига?

3. Расскажите о командах работы с битами регистра CCR.

4. В чем заключается различие команд ASR и LSR?

5. Можно ли использовать команду ROLA вместо команд ASLA, LSLA?

6. Каким образом реализуется команда ASRD?

7. На какие группы можно подразделить команды сдвигов?

8. Чем отличается команда COM от команды NEG?

9. В чем заключается различие между командами JMP и BRA?

10. Каким образом можно реализовать переход к подпрограмме, не используя команд BSR и JSR?

11. Какие виды переходов Вам известны?

12. Каково назначение команд BLE, BSR, BCS, BRCLR?

13. Реализуйте команды BRCLR и BRSET через другие команды.

14. Можно ли выполнить переход, аналогичный переходу по команде BCS, используя команды BNE и BLE?

15. Каким образом можно осуществить корректный выход из подпрограммы, не используя команду RTS?

16. Для какой цели используются команды WAI и STOP?

17. Каково назначение команд BLE, RTI, JSR, ВEQ?

18. Каково различие между командами BSR и JSR?

Задания

1. Напишите программу, осуществляющую сдвиг влево 3-х ячеек памяти таким образом, чтобы выдвигаемый из старшей ячейки памяти бит становился на место младшего бита в младшей ячейке.

2. Произведите операцию “логическое ИЛИ” над регистрами X и Y.

3. Напишите программу, производящую обмен старшей и младшей тетрады аккумулятора A.

4. Напишите программу, создающую зеркальное отображение битовой карты регистра A в регистре B.

5. Реализовать подсчет установленных в регистре A битов с занесением суммы в регистр B.

6. Произведите операцию “логическое И” над регистрами X и Y.

7.Написать тремя способами установку битов 2 и 3 в ячейке памяти $10.

8. Написать программу, позволяющую инвертировать те биты регистра А, которые сброшены в регистре B.

9. Написать программу, которая в четные биты регистра X записывает биты регистра A, а в нечетные регистра B.

10. Написать программу, заполняющую ячейки памяти $0–$7 соответствующими битами регистра A. Т.е., например, если бит 0 в регистре A сброшен, то в ячейку $0 записывается ноль, если установлен – $FF.

11. Установить 4 и 5 биты в регистре A с помощью команды BSET.

12. Напишите программу, копирующую блок данных, расположенных по адресам $2900–$2920, в соответствующие ячейки $2000–$2020. При этом данные перезаписываются только в том случае, если бит 3 в соответствующей ячейке памяти сброшен.

13. Написать программу подсчета суммы 8-битных беззнаковых чисел, расположенных в ячейках $2900–$29ff. Результат поместить в регистр Y.

14. Произвести сортировку по возрастанию чисел, расположенных в ячейках $2900–$29ff.

15. Произвести подсчет количества отрицательных, положительных чисел и нулей в области памяти $2900–$9ff.

16. Произвести сортировку по убыванию чисел, расположенных в ячейках $2900–$29ff.

Методические указания по выполнению

лабораторной работы №3.

Исследование системы таймера микроконтроллера.

1. Введение

В данной работе изучается таймер микроконтроллеров семейства 68HC12 / HCS12 и функционально связанные с ним устройства.

2. Краткие сведения.

Таймер микроконтроллеров семейства 68HC12 / HCS12 обладает широкими возможностями и обеспечивает работу нескольких систем микроконтроллера:

- системы обеспечения функции входного захвата;

- системы обеспечения функции выходного сравнения;

- прерывания реального времени;

- счетчика пульсаций.

В основе таймера лежит 16-ти разрядный счетчик, тактируемый импульсами синхронизации, поступающими с выхода предделителя частоты E (эта частота в 4 раза меньше внешней частоты синхронизации и в отладочном модуле DEMO9S12XDT512 составляет 2 МГц). Коэффициент деления устанавливается программно и имеет значения: 1, 4, 8, 16 и 32. Установка нужного коэффициента производится посредством записи битов PR2, PR1 и PR0 в регистр TMSK2 (см. рис. 8.4). Соответствие между состоянием этих битов и коэффициентом деления приведено в табл. 3.1.

Таблица 3.1.

PR2

PR1

PR0

Коэффициент деления

0

0

0

1*

0

0

1

2

0

1

0

4

0

1

1

8

1

0

0

16

1

0

1

32

1

1

0

зарезервирован

1

1

1

зарезервирован

Состояние счетчика инкрементируется на 1 с каждым импульсом синхронизации. Это состояние можно прочитать из 16-ти битного регистра TCNT, представленного в виде двух 8-ми битных регистров, находящихся по адресу $100E (старший байт) и $100F (младший байт). Регистр TCNT не доступен для модификации (исключение составляет режим теста) и, таким образом, пользователь может только считывать его состояние. При переходе состояния таймера от $FFFF к $0000 устанавливается флаг переполнения таймера TOF (бит 7) регистра флагов таймера TFLG2. Прерывание по установке этого бита можно разрешить установкой бита TOI регистра маскирования прерываний TMSK2.

Регистр TCSR Адрес $0085

TEN

TSWAI

TSBCK

TFFCA

0

0

0

0

Регистр TFLG2 Адрес $008F

TOF

0

0

0

0

0

0

0

Регистр TMSK2 Адрес $008C

TOI

0

PUPT

RDPT

TCRE

PR2

PR1

PR0

Регистр PACTL Адрес $00A0

0

PAEN

PAMOD

PEDGE

CLK1

CLK0

PAOVI

PAI

Регистр TCNT Адрес $0084

Bit 15

Bit 14

Bit 13

Bit 12

Bit 11

Bit 10

Bit 9

Bit 8

Регистр TCNT Адрес $0085

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Регистр TIOC Адрес $0080

I/OC7

I/OC6

I/OC5

I/OC4

I/OC3

I/OC2

I/OC1

I/OC0

Регистр TCTL1 Адрес $0088

OM7

OL7

OM6

OL6

OM5

OL5

OM4

OL4

Регистр TCTL2 Адрес $0089

OM3

OL3

OM2

OL2

OM1

OL1

OM0

OL0

Регистр TCTL3 Адрес $008A

EDG7B

EDG7A

EDG6B

EDG6A

EDG5B

EDG5A

EDG4B

EDG4A

Регистр TCTL4 Адрес $008B

EDG3B

EDG3A

EDG2B

EDG2A

EDG1B

EDG1A

EDG0B

EDG0A

Регистр TMSK1 Адрес $008C

C7I

C6I

C5I

C4I

C3I

C2I

C1I

C0I

Регистр TFLG1 Адрес $008E

С7F

C6F

C5F

C4F

C3F

C2F

C1F

C0F

Регистр CFORC Адрес $0081

FOC7

FOC6

FOC5

FOC4

FOC3

FOC2

FOC1

FOC0

Регистр OC7M Адрес $0082

OC7M7

OC7M6

OC7M5

OC7M4

OC7M3

OC7M2

OC7M1

OC7M0

Регистр OC7D Адрес $0083

OC7D7

OC7D6

OC7D5

OC7D4

OC7D3

OC7D2

OC7D1

OC7D0

Переполнение таймера.

Пример 3.1. Рассмотрим задачу использования прерываний по переполнению таймера для поочерёдного высвечивания элементов семисегментного индикатора. Для этого необходимо обратиться к таблице векторов прерывания. Различают векторы прерывания в рабочем режиме и в режиме отладки. Адрес вектора прерывания в рабочем режиме $FFDE, $FFDF. При программировании необходимо:

- осуществить инициализацию управляющего регистра для установки коэффициента деления предделителя частоты в и разрешения прерывания по переполнению таймера в регистре TMSK2;

- определить регистр, содержащий флаг переполнения таймера;

- разрешить I-прерывания в регистре CCR.

Программа примера 3.1:

tmsk2 equ $008d

tflg2 equ $008f

portb equ $0001

portbd equ $0003

org $1000

ldaa #$84

staa tmsk2

ldaa #$ff

staa portbd

lddd #$d000

std $ffde

cli

ldab #$01

bra *

org $d000

bclr tflg2,#$80

stab portb

rolb

rti

Функция выходного сравнения.

В микроконтроллере имеется 8 каналов выходного сравнения.

Функция выходного сравнения соответствует функции будильника. Каждому каналу выходного сравнения соответствует 16-битовый регистр, доступный для чтения и записи. При совпадении значения, записанного в этот регистр, со значением счётчика таймера устанавливается флаг выходного сравнения соответствующего канала в регистре флагов tflg1, возникает запрос на прерывание и осуществляется генерирование уровня на выходе канала IOSn в соответствии со значениями битов регистров TCTL1 и TCTL2 по таблице 3.2. Реализуемая каналом функция входного захвата или выходного сравнения определяется значением соответствующего бита I/OCn регистра tioc. Если бит установлен в 1, то реализуется функция выходного сравнения, а если бит сброшен в 0, то реализуется функция входного захвата.

Таблица 3.2.

OMn:OLn

Режим формирования уровня

00

Выход формирователя не соединён с выходом IOSn

01

Инвертирует сигнал на выходе

10

Устанавливает выход в 0

11

Устанавливает выход в1

Пример 3.2. Составить программу формирования импульсов синхронизации с частотой 8 кГц, используя функцию выходного сравнения 1-го канала.

tmsk1 equ $004C

tflg1 equ $004D

tios equ $0040

tc0 equ $0050

tctl1 equ $0048

tctl2 equ $0049

tmsk2 equ $004C

tctl3 equ $004A

tctl4 equ $004B

ivbr equ $0121

org $1000

ldaa #$01

staa tmsk2

ldaa #$01

staa tios

staa tmsk1

staa tctl2

clra

staa tctl3

staa tctl4

staa tctl1

ldd #$00f9

std tc0

std $2000

ldaa #$30

staa ivbr

ldd #$2100

std $30EE

cli

bra *

org $2100

bclr tflg1,#$01

ldd tc0

addd $2100

std tc0

rti

Отладить и запустить программу. Наблюдать импульсы на выходе нулевого канала.

Пример 3.3. Измерить период следования импульсов, подаваемых на вход нулевого канала, используя функцию входного захвата.