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

Алгоритм вычисления арифметического выражения.

  1. Считываем х1 ;

  2. Считываем х2 ;

  3. Вычисляем 1 + х2) ;

  4. Значение 1 + х2) помещаем в ОЗУ ;

  5. Вычисляем (х1 + х2) 2 ;

  6. Вычисляем (х1 + х2) 3 ;

  7. Считываем х3 ;

  8. Вычисляем ;

  9. Значение помещаем в ОЗУ;

  10. Преобразуем полученное значение у в двоично-десятичный код;

  11. Значение у передаем на индикаторы;

  12. Переходим к п.1.

Листинг программы.

// Присваиваем значения через EQU

DATAADDR EQU $0000

CODEADDR EQU $4000

PORTA EQU 1000

DDRD EQU 1009

// Регистры последовательного порта SPI

SPCR EQU 1028

SPSR EQU 1029

SPDR EQU 102A

// Адреса семисегментных индикаторов

INDIC_21 EQU $3400

INDIC_43 EQU $3401

INDIC_65 EQU $3402

ORG DATAADDR //Присваиваем значение счетчику адреса

AI1 FCB 0 //FCB = DB

AI2 FCB 0

AI3 FCB 0

AI_TMP FCB 0

AI1REZULT FCB 0

ORG CODEADDR

START: // Инициализируем SPI

LDAA #%00111111 // Загружаем в аккумулятор A

STAA SPCR // Сохраняем аккумулятор А

LDAA #%01111111

STAA SPCR

LDAA #%00010000

STAA DDRD

LDY SPSR // Загрузить в регистр Y содержимое SPSR

LDY SPDR // Загрузить в регистр Y содержимое SPDR

LDAA #%01010000 // Выбираем АЦП канал 1

STAA SPDR

LOOP1: // Ожидание готовности порта SPI

LDY SPSR // Загрузить в регистр Y содержимое SPSR

BRCLR 0,#80,LOOP1

LDD SPDR //Загружаем в 16-ти разрядный аккумулятор D содержимое SPDR

STAB AI1

LDAA #%01010001 // Выбираем АЦП канал 2

STAA SPDR

LOOP2: // Ожидание готовности порта SPI

LDY SPSR // Загрузить в регистр Y содержимое SPSR

BRCLR 0,#80,LOOP2

LDD SPDR

STAB AI2

LDAA #%01010010 // Выбираем АЦП канал 3

STAA SPDR

LOOP3: // Ожидание готовности порта SPI

LDY SPSR // Загрузить в регистр Y содержимое SPSR

BRCLR 0,#80,LOOP3

LDD SPDR

STAB AI3

// Рассчитываем значение согласно формулы y = x3/(x1+x2)3

LDAA AI1 // Загружаем в аккумулятор А x1

LDAB AI2 // Загружаем в аккумулятор В x2

ABA // Складываем

STAB AI_TMP // Сохраняем в ОЗУ полученное значение

TBA // Копируем B в A, чтобы можно было перемножить

LDAB AI_TMP // Загружаем в аккумулятор B x1+x2

MUL // Перемножаем А и В. Получили (x1+x2)2

XGDX // Обмен содержимым регистра D с индексным регистром X

TBA

LDAB AI_TMP

MUL // Перемножаем А и В. Получили (x1+x2)3

XGDX

LDAA AI3 // Загружаем в аккумулятор А x3

IDIV // Делим

STAB AIREZULT // Сохраняем в ОЗУ полученное значение

// Выводим на семисегментные индикаторы полученное значение

// Для этого нужно предварительно преобразовать полученное значение

// в двоично-десятичный код

LDAB AIREZULT // Загружаем в аккумулятор В полученное значение функции

LDX #10 // Загружаем в регистр Х константу 10

IDIV // Делим

STAB INDIC_TMP // Сохраняем во временную переменную данные для 1-го индикатора

XGDX

LDX #10

IDIV // Получили данные для 2-го индикатора

LDY #4

// Сдвиг на 4 бита влево

LOOP4: ROLB // Циклический сдвиг влево аккумулятора B

DEY // Уменьшение индексного регистра Y на 1

CPY ZERO // Сравниваем индексный регистр Y

BGT LOOP4 // Если Y > 0, то продолжаем цикл

EORB INDIC_TMP // Операция Искл. ИЛИ для совмещения данных для 2-х индикаторов

STAB INDIC_21 // Запись данных на индикаторы

XGDX

LDX #10 // Загружаем в регистр Х константу 10

IDIV // Делим

STAB INDIC_TMP // Сохраняем во временную переменную данные для 3-го индикатора

XGDX

LDX #10

IDIV // Получили данные для 4-го индикатора

LDY #4

// Сдвиг на 4 бита влево

LOOP5: ROLB

DEY

CPY ZERO

BGT LOOP5

EORB INDIC_TMP // Операция Искл. ИЛИ для совмещения данных для 2-х индикаторов

STAB INDIC_43 // Запись данных на индикаторы

XGDX

LDX #10 // Загружаем в регистр Х константу 10

IDIV // Делим

STAB INDIC_TMP // Сохраняем во временную переменную данные для 5-го индикатора

XGDX

LDX #10

IDIV // Получили данные для 6-го индикатора

LDY # 4

// Сдвиг на 4 бита влево

LOOP6: ROLB

DEY

CPY ZERO

BGT LOOP6

EORB INDIC_TMP // Операция Искл. ИЛИ для совмещения данных для 2-х индикаторов

STAB INDIC_65 // Запись данных на индикаторы

XGDX

JMP START //Безусловный переход к началу программы

Соседние файлы в папке Контрольная Петровский