- •1.8 Меры безопасности при эксплуатации комплекса
- •2. Методические указания к лабораторным работам
- •2.1. Общие положения
- •2.2. Работа №1
- •2.3. Работа № 2
- •Пояснения к работе
- •2.4. Работа №3
- •Изучить организацию прерываний в микроконтроллере at90s8535 и обслуживание подсистемы внешних прерываний. Пояснения к работе
2.2. Работа №1
Изучение системы команд микроконтроллера
Цель работы
Ознакомиться с лабораторным комплексом, изучить систему команд программируемого микроконтроллера AT90S8535, подготовить простейшую программу, отладить её и продемонстрировать работу подготовленной программы.
Пояснения к работе
Для выполнения работы необходимо знать структуру и функционирование микроконтроллера AT90S8535, методы адресации и систему команд. В главе 3 представлена система команд микроконтроллеров семейства AVR. В технической документации на микроконтроллеры команды даются в алфавитном порядке. В главе 3 команды разбиты на группы команд: арифметические и логические команды, команды сдвигов и операции с битами, команды пересылки данных, команды переходов. При использовании команд IN и OUT используются адреса ввода-вывода с $00 по $3F. Но к ним же можно обращаться и как к ячейкам внутреннего ОЗУ. При этом к непосредственному адресу регистра ввода-вывода необходимо прибавить $20. Следует помнить, что регистры ввода-вывода в пределах адресов от $00 по $1F имеют программно доступные биты. Обращение к ним осуществляется командами SBI и CBI, а проверка состояния командами SBIS и SBIC.
При арифметических операциях используется регистр состояния SREG, располагаемый по адресу $3F($5F). Формат этого регистра следующий:
Регистр состояния – SREG
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$3F ($5F) |
I |
T |
H |
S |
V |
N |
Z |
C |
SREG |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Бит 7 – Разрешение всех прерываний. Для разрешения прерываний этот бит должен быть установлен в состояние 1. Управление разрешением конкретного прерывания выполняется регистром маски прерывания EIMSK и TIMSK. Если этот бит очищен (=0), то ни одно из прерываний не обрабатывается. Бит аппаратно очищается после возникновения прерывания и устанавливается для последующего разрешения прерывания командой RETI.
Бит 6 – Бит сохранения копии. Команды копирования бита BLD и BST используют этот бит как источник и приемник при операциях с битами. Командой BST бит регистра общего назначения копируется в бит T, командой BLD бит Т копируется в бит регистра общего назначения.
Бит 5 – Флаг полупереноса. Он указывает на перенос между тетрадами при выполнении ряда арифметических операций.
Бит 4 – Бит знака. Бит S имеет значение результата операции исключающее ИЛИ (N(+)V) над флагами отрицательного значения (N) и дополнения до двух флага переполнения (V).
Бит 3 – Дополнение до двух флага переполнения. Он поддерживает арифметику дополнения до двух.
Бит 2 – Флаг отрицательного значения. Этот флаг указывает на отрицательный результат ряда арифметических и логических операций.
Бит 1 – Флаг нулевого значения. Этот флаг указывает на нулевой результат ряда арифметических и логических операций.
Бит 0 – Флаг переноса. Этот флаг указывает на перенос при арифметических и логических операциях.
Микроконтроллер AT90S8535 имеет 4 параллельных порта ввода/вывода A, B,C и D.
Порт А является 8-разрядным двунаправленным портом. Взаимодействие с портом А осуществляется через три регистра в пространстве ввода/вывода памяти данных: регистр данных – PORTA, $1B($3B), регистр направления данных – DDRA, $1A($3A), регистр входных данных – PINA, $19($39). Регистр PINA обеспечивает только возможность чтения, а регистры PORTA и DDRA – возможность чтения и записи. Регистр PINA не является регистром в полном смысле этого слова. Обращение к нему обеспечивает чтение физического состояния каждого вывода порта. Порт А служит также для ввода аналоговых сигналов A/D.
Регистр данных порта А – PORTA
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$1B($3B) |
PORTA7 |
PORTA6 |
PORTA5 |
PORTA4 |
PORTA3 |
PORTA2 |
PORTA1 |
PORTA0 |
PORTA |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр направления данных порта А – DDRA
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$1A ($3A) |
DDA7 |
DDA6 |
DDA5 |
DDA4 |
DDA3 |
DDA2 |
DDA1 |
DDA0 |
DDRA |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр входных данных порта А – PINA
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$19 ($39) |
PINA7 |
PINA6 |
PINA5 |
PINA4 |
PINA3 |
PINA2 |
PINA1 |
PINA0 |
PINA |
|
Чтение/Запись |
R |
R |
R |
R |
R |
R |
R |
R |
|
|
Исходное значение |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
|
Порт В является 8-разрядным двунаправленным портом ввода/вывода. Также как и у порта А взаимодействие с портом В осуществляется через три регистра в пространстве ввода/вывода памяти данных: регистр данных – PORTB, $18($38), регистр направления данных – DDRB, $17($37) и регистр входных данных – PINB, $16($36). Регистр PINB обеспечивает возможность только чтения. Регистр PINB не является регистром в полном смысле этого слова. Обращение к нему обеспечивает чтение физического состояния каждого вывода порта. Выводы порта В могут выполнять альтернативные функции, указанные в табл. 2.1.
Таблица 2.1. Альтернативные функции выводов порта В
-
Вывод порта
Альтернативная функция
PB0
T0 – вход тактового сигнала таймера/счетчика 0
PB1
T1 – вход тактового сигнала таймера/счетчика 1
PB2
AIN0 – положительный вывод компаратора
PB3
AIN1 – отрицательный вывод компаратора
PB4
–вход выбора
ведомого SPIPB5
MOSI – установка ведущий выход/ведомый вход SPI
PB6
MISO – установка ведущий вход/ведомый выход SPI
PB7
SCK – тактовый сигнал SPI
При использовании выводов для альтернативных функций регистры PORTB, DDRB должны быть установлены соответствующим образом.
Регистр данных порта B – PORTB
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$18 ($38) |
PORTB7 |
PORTB6 |
PORTB5 |
PORTB4 |
PORTB3 |
PORTB2 |
PORTB1 |
PORTB0 |
PORTB |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр направления данных порта B – DDRB
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$17 ($37) |
DDB7 |
DDB6 |
DDB5 |
DDB4 |
DDB3 |
DDB2 |
DDB1 |
DDB0 |
DDRB |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр входных данных порта B – PINB
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$16 ($36) |
PINB7 |
PINB6 |
PINB5 |
PINB4 |
PINB3 |
PINB2 |
PINB1 |
PINB0 |
PINB |
|
Чтение/Запись |
R |
R |
R |
R |
R |
R |
R |
R |
|
|
Исходное значение |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
|
Порт С представляет собой 8-разрядный двунаправленный порт ввода/вывода. Также как у портов А и В взаимодействие с портом С осуществляется через три регистра в пространстве ввода/вывода памяти данных: регистр данных – PORTC, $15($35), регистр направления данных – DDRC, $14($34) и регистр входных данных – PINC, $13($33). Регистр PINC обеспечивает только возможность чтения, а регистры PORTC и DDRC – возможность чтения и записи. Регистр PINC не является регистром в полном смысле этого слова. Обращение к нему обеспечивает чтение физического состояния каждого вывода порта.
У порта С только два вывода могут выполнять альтернативные функции: выводы PC6 и PC7 выполняют функции TOSC1 и TOSC2 таймера/счетчика 2.
Регистр данных порта C – PORTC
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$15 ($35) |
PORTC7 |
PORTC6 |
PORTC5 |
PORTC4 |
PORTC3 |
PORTC2 |
PORTC1 |
PORTC0 |
PORTC |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр направления данных порта C – DDRC
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$14 ($34) |
DDC7 |
DDC6 |
DDC5 |
DDC4 |
DDC3 |
DDC2 |
DDC1 |
DDC0 |
DDRC |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр входных данных порта C – PINC
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$13 ($33) |
PINC7 |
PINC6 |
PINC5 |
PINC4 |
PINC3 |
PINC2 |
PINC1 |
PINC0 |
PINC |
|
Чтение/Запись |
R |
R |
R |
R |
R |
R |
R |
R |
|
|
Исходное значение |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
|
Порт D является 8-разрядным двунаправленным портом ввода/вывода. Также как и у портов А, В и С взаимодействие с портом D осуществляется через три регистра в пространстве ввода/вывода памяти данных: регистр данных – PORTD, $12($32), регистр направления данных – DDRD, $11($31) и регистр входных данных – PIND, $10($30). Регистр PIND обеспечивает возможность чтения, а регистры PORTD и DDRD – возможность чтения и записи. Регистр PIND не является регистром в полном смысле этого слова. Обращение к нему обеспечивает чтение физического состояния каждого вывода порта.
Выводы порта D могут выполнять альтернативные функции, указанные в табл. 2.2.
Таблица 2.2. Альтернативные функции выводов порта D
-
Вывод порта
Альтернативная функция
PD0
RxD – вход приемника UART
PD1
TxD – выход передатчика UART
PD2
INT0 – вход внешнего прерывания 0
PD3
INT1 – вход внешнего прерывания 1
PD4
OC1B – вывод сравнения выхода В таймера/счетчика 1
PD5
OC1А – вывод сравнения выхода А таймера/счетчика 1
PD6
ICP – вход триггера захвата таймера/счетчика 1
PD7
OC2 – вывод сравнения выхода таймера/счетчика 2
При использовании выводов для альтернативных функций регистры PORTD, DDRD должны быть установлены соответствующим образом.
Регистр данных порта D – PORTD
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$12 ($32) |
PORTD7 |
PORTD6 |
PORTD5 |
PORTD4 |
PORTD3 |
PORTD2 |
PORTD1 |
PORTD0 |
PORTD |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр направления данных порта D – DDRD
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$11 ($31) |
DDD7 |
DDD6 |
DDD5 |
DDD4 |
DDD3 |
DDD2 |
DDD1 |
DDD0 |
DDRD |
|
Чтение/Запись |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
|
|
Исходное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
Регистр входных данных порта D – PIND
|
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
$10 ($30) |
PIND7 |
PIND6 |
PIND5 |
PIND4 |
PIND3 |
PIND2 |
PIND1 |
PIND0 |
PIND |
|
Чтение/Запись |
R |
R |
R |
R |
R |
R |
R |
R |
|
|
Исходное значение |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
Hi-Z |
|
Так как рассматриваемая работа первая, то для приобретения обучающимися навыков работы с лабораторным комплексом все обучающиеся сначала делают одинаковую работу. Со своих рабочих мест они вводят в ПЭВМ одну и ту же задачу вычитания из числа 5 числа 3, приведённую в п. 1.5.3.1. После компиляции программы она записывается в микроконтроллер рабочего места и демонстрируется её работа преподавателю.
После такого знакомства с комплексом обучающийся приступает к выполнению индивидуального задания. При наличии времени преподаватель может усложнить индивидуальное задание.
Варианты индивидуальных заданий
Организовать сложение двух чисел и индикацию младшей тетрады результата на семисегментном индикаторе HG2. На блоке управления располагаются кнопки и тумблеры. Кнопки SB2 и SB3 представляют собой младшие разряды первого слагаемого, т.е. возможен набор чисел от 0 до 3. Тумблеры SA4, SA5 представляют собой соответственно 3-й и 4-й разряды 2-го слагаемого, т.е. возможен набор десятичных чисел 0,4,8,12. На индикаторе высвечивать результат в шестнадцатеричном формате, т.е. 0...F.
В памяти записать два массива, например по 5 ячеек в каждом массиве. В ячейках записаны шестнадцатеричные цифры от 00 до 0FH. Цифры в массивах, кроме одной разные. Программа должна определить какая цифра присутствует в обоих массивах и при нажатии на кнопку SB3 (кратковременно) высвечивать ее в шестнадцатеричном виде на индикаторе HG2. Если цифры в массивах разные, то при нажатии на кнопку SB3 (кратковременно) на индикаторе HG2 высвечивается символ "Н" (нет).
При нажатии на кнопку SB1 загорается цифра 1 и светодиод VD4. При нажатии на кнопку SB2 загорается цифра 2 и светодиод VD5. При одновременном нажатии кнопок SB1 и SB2 загорается цифра 3 и включается светодиод VD6.
Умножить положительное число 2 на число 3 и при нажатой кнопке SB1 на индикаторе HG2 высветить результат. При отпущенной кнопке на индикаторе горит символ П.
При включении микроконтроллера и кратковременном нажатии кнопки SB6 “RESET” при отключенном тумблере SA1 горит светодиод VD4 и на индикаторе HG1 горит цифра 2. При включении тумблера SA1 светодиод VD4 и индикатор HG1 гаснут, загорается светодиод VD5 и на индикаторе HG2 загорается цифра 5. При нажатой кнопке SB2 все светодиоды и индикаторы гаснут.
Организовать сложение двух чисел 3 и 4. При включении микроконтроллера и кратковременном нажатии кнопки SB6 “RESET” загорается и постоянно горит светодиод VD5. При нажатой кнопке SB1 на индикаторе HG2 горит первое слагаемое, при нажатой кнопке SB2 – второе слагаемое, при нажатой кнопке SB3 – результат.
В массиве из 16 ячеек памяти располагаются шестнадцатеричные числа от 00 до 00F. В массиве есть только одно число, которое повторяется несколько раз. Выявить какое это число и сколько раз оно повторяется. При нажатии на кнопку SB1 на семисегментном индикаторе HG1 загорается повторяющееся число. При нажатии на кнопку SB2 на семисегментном индикаторе HG2 высвечивается число его повторений. Если нет повторяющегося числа, то при нажатии на кнопку SB1 на индикаторе HG1 загорается символ "Н" (нет).
При включении микроконтроллера на индикаторе HG2 горит "0". Организовать счет и индикацию числа нажатий кнопки SB1 на индикаторе HG2 в шестнадцатеричном виде, т. е. 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 ….. Нажатие кнопки сопровождается загоранием светодиода VD5. Для упрощения программы мер борьбы с дребезгом контактов не предпринимать.
