- •Цифровые устройства и микропроцессоры Микроконтроллеры фирмы “Freescale”
- •117454, Москва, просп. Вернадского, 78 предисловие
- •1.1. Основные характеристики микроконтроллера.
- •1.2 Способы адресации
- •Карта памяти микроконтроллера.
- •1.4. Принципы написания программы.
- •Метка, операция, операнд(ы); комментарий
- •2. Исследование команд пересылки данных
- •3. Арифметические команды.
- •5. Команды работы с битовыми полями.
- •7. Содержание отчета
- •8. Контрольные вопросы и задания.
- •Методические указания по выполнению лабораторной работы №2 Изучение команд сдвигов, команд передачи управления и специальных команд.
- •1. Команды сдвигов.
- •Команды передачи управления.
- •2.1. Команды безусловного перехода.
- •2.2. Команды условного перехода.
- •Команды работы с подпрограммами.
- •Команды работы с прерываниями.
- •3. Специальные команды.
- •4. Содержание отчета
- •Контрольные вопросы и задания
- •Методические указания по выполнению лабораторной работы №4. Программирование ацп и фильтрации сигналов.
- •Библиографический список.
Команды работы с прерываниями.
Команда 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. Каков результат выполнения программы:
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. Измерить период следования импульсов, подаваемых на вход нулевого канала, используя функцию входного захвата.