Главная страница
Навигация по странице:

  • Функциональная схема

  • Таблица

  • Программа

  • МПС. Экзамен Крылов И.А. П-477. Крылов И. А. П477 вариант 9 Задача


    Скачать 66.24 Kb.
    НазваниеКрылов И. А. П477 вариант 9 Задача
    Дата05.10.2020
    Размер66.24 Kb.
    Формат файлаdocx
    Имя файлаЭкзамен Крылов И.А. П-477.docx
    ТипЗадача
    #141134

    Крылов И.А. П-477 вариант 9

    Задача:

    Нарисовать функциональную схему, рассчитать требуемые параметры настройки, составить программу преобразования аналогового значения ошибки по скорости двигателя в цифровой код: аналоговый сигнал задания: 7 канал АЦП, сигнал аналоговой обратной связи по скорости: 1 канал АЦП; работа АЦП: с однократным преобразованием, левым выравниванием, источник AREF (5В), количество разрядов АЦП - 9; вывод выполнить в порты D (старший байт) и B (младший байт). В таблице пояснить процесс получения 9 бит выходного кода при заданном выравнивании сигнала АЦП.

    Канал аналогового ввода:

    ADC7 – ADC1

    Выравнивание результата и режим работы АЦП: Левое; однократный.

    Вывод в порты D (старший байт) и B (младший байт).

    Функциональная схема:



    АDC1, ADC7 – аналоговые входы

    RP1, RP2 – потенциометры задания входных сигналов
    Настройка:

    Настройка регистра управления мультиплексором АЦП ADMUX:

    ADMUX=0 0 1 1 0 1 1 1 = $37

    5 бит=1 т.к. левое выравнивание;

    6 и 7 биты = 0 т.к. внешний источник 5 В;

    Первые 4 бита из за ADC7-ADC1.
    Настройка регистра управления АЦП ADCSRA:
    ADCSRA= 1 1 0 0 1 1 1 1 = $CF

    7 бит разрешение работы

    6 бит разрешение преобразования

    5 бит = 0 т.к. у нас не циклический режим работы.

    4 бит флаг готовности

    3 бит прерывание

    2-0 биты предделитель = 128

    Таблица:

    Постарался пояснить как реализовал перенос 9 бита

    ADCH

    ADC9

    ADC8

    ADC7

    ADC6

    ADC5

    ADC4

    ADC3

    ADC2

    ADCL

    ADC1

    ADC0

    -

    -

    -

    -

    -

    -

    Оставляем в R20 только ADC1 наложением маски

    R20

    ADC1

    -

    -

    -

    -

    -

    -

    -

    Сдвигаем циклически влево ADC1

    ЕД. переноса

    1

























    Сдвигаем циклически влево ADC1

    R20


    -

    -

    -

    -

    -

    -

    -

    ADC1

    В R22 копируем R21 (ADCH)

    R22

    ADC9

    ADC8

    ADC7

    ADC6

    ADC5

    ADC4

    ADC3

    ADC2

    В R22 производим сдвиг влево

    R22

    ADC8

    ADC7

    ADC6

    ADC5

    ADC4

    ADC3

    ADC2

    -

    Добавляем к R20 R22

    R20

    ADC8

    ADC7

    ADC6

    ADC5

    ADC4

    ADC3

    ADC2

    ADC1

    Оставляем в R21 только ADC9 наложением маски

    R21

    ADC9

    -

    -

    -

    -

    -

    -

    -

    Сдвигаем циклически влево ADC9

    ЕД. переноса

    1

























    Сдвигаем циклически влево ADC9

    R21

    -

    -

    -

    -

    -

    -

    -

    ADC9


    Программа:

    .include"m32def.inc"

    .cseg

    .org 0

    rjmp reset

    .org $20

    rjmp ADC7_1

    reset:
    ldi r16,low(RAMEND) ; инициализация стека

    ldi r17,high(RAMEND)

    out spl,r16

    out sph,r17
    clr r16 ;настройка портов

    ser r16

    out DDRA,r16

    out DDRD,r17

    out DDRB,r17
    ldi r17,0x37 ; настройка ADMUX

    out ADMUX,r17

    ldi r17,0xCF ; настройка ADCSRA

    out ADCSRA,r17

    sei
    main: ; основной цикл

    rjmp main
    ADC7_1: ;подпрограмма

    ldi r17,0xCF

    out ADCSRA,r17
    in r20,ADCL ; считывание
    in r21,ADCH

    andi r20,0x80 ; оставляем только ADC1
    rol r20
    rol r20 ;сдвигаем из единицы переноса
    mov r22,r21 ;r22 регистр будем использовать для операций сдвига
    lsl r22

    or r20,r22 ; добавляем в ADCH ADC1

    andi r21,0x80 ; ADC9
    rol r21
    rol r21 ;0000 0001

    out PORTB,r20 ; вывод в порты
    out PORTD,r21

    reti
    правое выравнивание 8 бит

    in r20,ADCL ; считывание
    in r21,ADCH
    lsr r20

    lsr r20
    ror r21

    ror r21

    ror r21
    or r21, r20
    out portB r21

    reti


    ADCH

    -

    -

    -

    -

    -

    -

    ADC9

    ADC8

    ADCL

    ADC7

    ADC6

    ADC5

    ADC4

    ADC3

    ADC2

    ADC1

    ADC0

    Сдвигаем R20 вправо дважды

    R20

    -

    -

    ADC7

    ADC6

    ADC5

    ADC4

    ADC3

    ADC2

    Сдвигаем циклически вправо 3 раза ADC9 и 8

    R21

    ADC9

    ADC8

    -

    -

    -

    -

    -

    -

    Суммируем 20 и 21 регистры

    ADCL


    ADC9

    ADC8

    ADC7

    ADC6

    ADC5

    ADC4

    ADC3

    ADC2


    написать администратору сайта