Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
07.04.2023
Размер:
523.6 Кб
Скачать

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра ВТ

ОТЧЕТ

по лабораторной работе

по дисциплине «Микропроцессорные системы»

Тема: ИЗУЧЕНИЕ СИСТЕМЫ КОМАНД MCS-51

И КРОСС-СРЕДСТВ РАЗРАБОТКИ ПРОГРАММНОГО

ОБЕСПЕЧЕНИЯ ДЛЯ ОДНОКРИСТАЛЬНОГО

МИКРОКОНТРОЛЛЕРА ADuC812

Студенты гр.

Преподаватель

Зуев И.С.

Санкт-Петербург

2023

Цель работы.

1. Ознакомление с системой команд однокристального микроконтроллера (ОМК) MCS-51.

2. Получение навыков программирования для ОМК MCS-51.

3. Получение навыков работы с кросс-средствами разработки программного обеспечения для ОМК MCS-51.

Для подготовки исходного текста программы на входном языке может использоваться любой редактор, формирующий текстовый файл в коде ASCII. Для трансляции исходного текста программы в объектный код в данном цикле лабораторных работ используется ассемблер ASM51. При разработке достаточно сложных многомодульных программ используется также редактор связей (линкер), который позволяет включать в исполняемую программу независимо разработанные и библиотечные модули.

Задание на лабораторную работу

1. Повторить последовательность и назначение этапов подготовки программного обеспечения с использованием кросс-средств. Повторить синтаксис директив ассемблера ASM51, команды и режимы адресации OMK MCS-51.

2. Подготовить программу на языке ассемблера, выполняющую пересылку массива констант (8 чисел) из памяти программ (ПП) в резидентную память данных (РПД) по адресам 20H–27H. В программе необходимо предусмотреть инициализацию указанной области ПП константами с помощью директивы DB.

Считывание данных из ПП в цикле реализуется парой команд:

– MOV A,#0;

– MOVC A,@A+DPTR.

При этом двухбайтовый регистр-указатель DPTR в начале программы должен быть инициализирован командой MOV DPTR,#addr (addr– адрес первой константы), а затем инкрементироваться при каждом проходе цикла (INC DPTR). Пересылку значений в ячейки РПД целесообразно выполнять в цикле командой MOV @R1,A. Предварительно регистр R1 должен инициализироваться константой 20H (MOV R1,#20H), а затем инкрементироваться при каждом проходе цикла (INC R1).

Кроме того, для подсчета числа пересылок необходим счетчик цикла (например, регистр R0). Для организации цикла удобно использовать команду DJNZ R0,M1, которая декрементирует содержимое R0 и в случае его неравенства нулю передает управление на метку M1 (начало цикла).

3. Подготовить программу, копирующую в ячейки РПД с адресами 18H–1DH (регистровый банк 3) содержимое следующих регистров специальных функций в указанной последовательности: DPH, DPL, TH0, TL0, TH1, TL1. Для наблюдаемости процесса следует предварительно записать в эти региcт-ры некоторые отличные от нуля значения. Для выполнения пересылок использовать команду MOV @R0,ad, где ad – адрес источника (см. табл. 1.2). Регистр R0, используемый для косвенной адресации загружаемых ячеек РПД, должен относиться к первому регистровому банку. Программу следует демонстрировать в пошаговом режиме.

4. Подготовить программу для обработки измерительной информации. Исходные данные хранятся во внешней памяти данных в виде массива (10 чисел). Необходимо найти среднее значение , сравнить его с уставками – двумя константами и , хранящимися также во внешней памяти данных. По результатам сравнения сформировать признак и вывести его на линии порта P1:

,

,

,

Для демонстрации результатов среднее значение следует запомнить в регистре РПД; следует определить реальные данные, при которых сумма десяти чисел больше 255. Эту и последующие программы следует демонстрировать в автоматическом режиме, для чего организовать зацикливание программы как это делается в программе управления реальным объектом.

Часть 1.2

$mod52

    ORG 0h

M1:

    MOV     DPTR, #init ;Устанавливаем указатель DPTR на начало данных

    MOV     R0, #8      ;Количество повторений цикла

    MOV     R1, #20h    ;Начальный адрес таблицы данных в DSEG

LOOP:

    MOV     A, #0

    MOVC    A, @A+DPTR ;Чтение данных из CSEG по адресу (A)+(DPTR)

    MOV     @R1, A     ;Запись данных в таблицу DSEG по адресу (R1)

    INC     DPTR

    INC     R1

    DJNZ    R0,LOOP    ;Декремент R0, если не ноль то переход на LOOP

    JMP     M1         ;Повторение с начала

    ORG 1000h

init:

    DB 1,2,3,4,5,6,7,8 ;Таблица данных во внешней памяти

    END

Рисунок 1. Результат исполнения программы

Часть 1.3

$mod52

ORG 0h      ;Начало программы: от 0h - только если нет обработки других прерываний

M1:

    MOV DPH, #1

    MOV DPL, #2

    MOV TH0, #3

    MOV TL0, #4

    MOV TH1, #5

    MOV TL1, #6 ;Установка регистров в указанной последовательности

    SETB RS0    ;R0 должен относиться к первому регистровому банку

    MOV R0,#18h ;Начальный адрес

    MOV @R0,DPH ;Выполнение перессылки

    INC R0

    MOV @R0,DPL

    INC R0

    MOV @R0,8Ch ;Значения из таблицы 1.2

    INC R0

    MOV @R0,8Ah

    INC R0

    MOV @R0,8Dh

    INC R0

    MOV @R0,8Bh

    SETB RS1

END

Рисунок 2. Результат исполнения программы

Часть 1.4

$mod52

START:

   ORG 0h

   MOV DPTR,#init;Устанавливаем указатель DPTR на начало данных

   MOV R0, #10   ;Количество повторений цикла

   MOV R1, #20h  ;Начальный адрес таблицы данных в DSEG

   ;Перессылка массива констант из памяти программы в РПД

   LOOP:

      MOV A,#0

      MOVC A,@A+DPTR;Чтение данных из CSEG по адресу (A)+(DPTR)

      MOV @R1,A;заносим содержимое в регистровый банк R1

      INC DPTR

      INC R1

   DJNZ R0,LOOP;Декремент R0, если не ноль то переход на LOOP

   ;Вычисление среднего арифметического

   MOV R2,#0     ;текущее среднее значение

   MOV R4,#0     ;накопитель остатка от деления

   MOV R6,#0     ;накопитель остатка от деления

   MOV B, #1

   MOV R0,#10    ;Количество повторений цикла

   MOV R1,#20h   ;Начальный адрес таблицы данных в DSEG

   ;old=old+(x(n)-old)/n

   LOOP1:

      MOV A,@R1

      SUBB A,R2   ;"вычитание с заемом", вычитает указанную переменную

                  ;вместе с флагом переноса из содержимого аккумулятора,

                  ;засылая результат в аккумулятор

      JC NEGATIVE  ;Команда "переход, если перенос установлен"

      JMP POZITIVE ;команда безусловного перехода в указанное место

      NEGATIVE:

         CLR C     ;сбрасывает указанный бит в 0 (для флага переноса С)

         MOV A,R2

         MOV R3,B

         MOV B,@R1

         SUBB A,B

         MOV B,R3

         MOV R3,B

         DIV AB

     

      MOV R7,A

      MOV A,R6

      ADD A,B

      MOV R6,A

      MOV B,#100

      SUBB A,B

      JC NEGATIVE3

      JMP POZITIVE3

      NEGATIVE3:

         CLR C

         MOV A,R7

         JMP FINAL3

      POZITIVE3:

         MOV R6,A

         MOV A,R7

         MOV B,R2

         DEC B ;Декремент В

         MOV R2,B

      FINAL3:

     

      MOV B,R3

      MOV R3,A

      MOV A,R2

      SUBB A,R3

      MOV R2,A

      JMP FINAL

      POZITIVE:

         MOV R3,B

         DIV AB

      MOV R5,A

      MOV A,R4

      ADD A,B

      MOV R4,A

      MOV B,#100

      SUBB A,B

      JC NEGATIVE2

      JMP POZITIVE2

      NEGATIVE2:

         CLR C

         MOV A,R5

         JMP FINAL2

      POZITIVE2:

         MOV R4,A

         MOV A,R5

         INC A

      FINAL2:

         MOV B,R3

         ADD A,R2

         MOV R2,A

      FINAL:

         INC R1

         INC B

   DJNZ R0,LOOP1;Декремент R0, если не ноль то переход на LOOP1

   ;Сравнение ср. знач. с уставками (QMAX, QMIN)

   MOV DPTR, #QMAX

   MOV A, #0

   MOVC A, @A+DPTR

   SUBB A, R2;Эта команда ставит флаг переноса(заема),если при вычитании

   ;для бита 7 необходим заем, иначе сбрасывает флаг переноса; A-=R2

   JC M3;прыжок на M3 если флаг переноса остался,т.е. R2>=QMAX

   MOV DPTR, #QMIN

   MOV A, #0

   MOVC A, @A+DPTR

   SUBB A, R2;A-=R2

   JNC M2;прыжок на M2 если флаг переноса не остался,т.е. R2<=QMIN

   MOV P1, #00000010b;QMAX>R2>QMIN

   JMP M4

   M2:

      MOV P1, #00000000b

      JMP M4

   M3:

      MOV P1, #00000011b

   M4:

      JMP START

   ORG 1000h

   init:

      DB 101,121,50,73,119,11,13,115,2,97 ;Таблица данных во внешней памяти, ср=70.2

   QMIN:

      DB 69

   QMAX:

      DB 71

END

Рисунок 3. Результат выполнения программы

Оценка времени выполнения программ

Время работы для части 1.2 составило 0,000082 с: это связано с наличием в тексте программы цикла на 8 итераций

Время работы для части 1.3 составило 0,000031 с: это связано с отсутствием циклов в программе

Время работы для части 1.4 составило 0,000549 с: это связано с наличием в тексте программы двух циклов на 10 итераций

Соседние файлы в папке 1 лаба
  • #
    07.04.2023523.6 Кб2lab1.docx
  • #
    07.04.2023209 б1lab1_2.asm
  • #
    07.04.2023361 б1lab1_3.asm
  • #
    07.04.20232.69 Кб1lab1_4.asm