- •Российская открытая академия транспорта микропроцессорные информационно-управлчющие системы
- •Микроконтроллеры серии 1830ве51
- •1.1. Структурная схема микроконтроллера 1830ве51
- •1.1.1. Блок управления
- •1.1.2. Арифметико-логический блок
- •1.1.3. Организация памяти программ
- •1.1.4. Резидентная память данных
- •1.1.5. Счетчик команд и регистр указателя данных
- •1.1.6. Регистр указателя стека
- •1.1.7. Таймеры/счетчики
- •Режимы работы таймера/счетчика
- •1.1.8. Блок последовательного интерфейса и прерываний
- •1.1.9. Порты мк51
- •1.1.10. Начальная установка и режимы работы мк51
- •1.2. Система команд микроконтроллера 1830ве51
- •1.2.1. Команды пересылки данных
- •1.2.2. Команды арифметических операций
- •1.2.3. Команды логических операций
- •1.2.4. Команды операций над битами
- •1.2.5. Команды передачи управления
- •1.3. Структурная организация систем на основе микроконтроллеров
- •1.3.1. Подключение внешней памяти
- •1.3.2. Расширение каналов ввода/вывода информации
- •2. Программная реализация типовых вычислительных процедур
- •2.1 Типовые структуры схем алгоритмов обработки данных
- •2.2 Приемы программирования
- •2.3 Примеры программ обработки данных в мк51
- •2.3.1 Примеры использования команд передачи данных
- •2.3.2 Примеры использования команд арифметических операций
- •2.3.3 Примеры использования команд логических операций
- •3. Применение микропроцессорных информационно-управляющих систем на железнодорожном транспорте
- •3.1. Классификация микропроцессорных информационно-управляющих систем на железнодорожном транспорте
- •3.2 Автоматизированные системы управления и контроля движения поездов
- •3.3 Автоматизированные системы диспетчерского контроля
- •3.4 Информационные системы обслуживания пассажиров
- •Литература
2.3 Примеры программ обработки данных в мк51
2.3.1 Примеры использования команд передачи данных
Пример 2.1.Передать содержимое буфера УАПП в РПД по косвенному адресу изR0:
MOV@R0,SBUF; передача принятого по
; последовательному каналу
; байта в РПД
Пример 2.2.Загрузить в указатель данных начальный адрес 7F00Hмассива данных, расположенного в ВПД:
MOVDPTR, #7F00H; загрузка начального
; значения указателя данных
Пример 2.3.Загрузить управляющее слово в регистр управления таймером:
MOVTCON, #00000101B; загрузка управляющего
; слова
Пример 2.4. Сбросить все флаги пользователя (область РПД с адресами 20H– 2FH):
MOVR0, #20H; задание начального адреса
; области флагов
MOVR1, #0FH; счетчик (длина области
; флагов)
LOOP:MOV@R0, #0 ; сброс одного байта
INCR0 ; переход к следующему байту
DJNZR1,LOOP; цикл
Пример 2.5. Запомнить в ВПД содержимое регистров банка 0. Начальный адрес ВПД – 5000H:
MOVPSW, #01000B; выбор банка регистров 1
MOVR0, #8 ; счетчик
MOVDPTR, #5000H; определение начального
; адреса ВПД
MOVR1, #0 ; определение начального
; адреса РПД
LOOP:MOVA, @R1 ; загрузка текущего байта
MOVX@DPTR,A; передача из аккумулятора в
; ВПД
INCR1 ; переход к следующему
; регистру
INCDPTR; увеличение адреса
DJNZR0,LOOP; еслиR0>0, то повторять
Пример 2.6. Передать данные через последовательный порт со скоростью 500 бит/с. Частота синхронизации составляет, а бит SMOD=0:
CLRTR1 ; останов таймера Т/С 1;
MOVTH1, #0DBH; автозагружаемое значение
; для получения; скорости
; 500 бит/с,
MOVSCON, #11011100B; установка режима 3 УАПП
MOVTMOD, #00100000B; установка режима 2 Т/С 1
SETBTR1 ; запуск таймера;
LABEL:JNBT1,LABEL; ожидание окончания
; передачи
CLRT1 ; очистка флага передачи
MOVSBUF,A; выдача 9 бит данных в
; последовательный порт
Флаг прерывания передатчика Т1 регистра SCON устанавливается аппаратно в конце времени выдачи 8-го бита в режиме 0 или в начале стоп бита в других режимах.
2.3.2 Примеры использования команд арифметических операций
Пример 2.7. Сложить два двоичных многобайтных числа. Оба слагаемых располагаются в РПД, начиная с младшего байта. Начальные адреса слагаемых заданы вR0 иR1. Формат слагаемых в байтах задан вR2:
CLRC; сброс переноса
LOOP:MOVA, @R0 ; загрузка в аккумулятор
; текущего байта первого
; слагаемого
ADDCA, @R1 ; сложение байт с учетом
; переноса
MOV@R0,A; размещение байта результата
INCR0 ; увеличение указателей
INCR! ;
DJNZR2,LOOP; цикл, если не все байты
; просуммированы
При сложении чисел без знака на переполнение укажет флаг C, а в случае сложения чисел со знаком – флагOV.
Пример 2.8. Умножить целое двоичное число произвольного формата на константу 173. Исходное число размещается в РПД, адрес младшего байта находится в регистреR0. Формат числа в байтах хранится в регистреR1:
MOVA, #0 ; сброс аккумулятора
LOOP:ADDA, @R0 ; загрузка множимого
MOVB, #173 ; загрузка множителя
MULAB; умножение
MOV@R0,A; запись младшего байта
; частичного произведения
INCR0 ; увеличение адреса
MOVA,B; пересылка старшего байта
; частичного произведения в
; аккумулятор
XCHA, @R0 ; предварительное
; формирование очередного
; байта произведения
DJNZR2,LOOP; цикл, если не все биты
; исходного числа умножены
; на константу
Полученное произведение размещается на месте исходного числа и занимает на один байт больше.
Пример 2.9. Перевести двоичное число, содержащееся в аккумуляторе в двоично-десятичную систему. При таком преобразовании может получиться трехразрядное двоично-десятичное число. Старшая цифра будет размещена в регистреR0, а две младшие в аккумуляторе.
MOVB, #100 ; загрузкаBдля вычисления
; количества сотен в числе
DIVAB; определение старшей цифры
MOVR0,A; пересылка вR0 старшей
; цифры
XCHA,B; пересылка остатка исходного
; числа в аккумулятор
MOVB, #10 ; загрузкаBдля вычисления
; количества десятков в числе
DIVAB; определение числа десятков
SWAPA; размещение числа десятков
; в старшей тетраде A
ADDA,B; подсуммирование остатка в
; Aобе младшие цифры числа