Файл: Отчет по лабораторной работе 5 ацп проверил Качалов А. В. 2020 г.docx
Добавлен: 23.11.2023
Просмотров: 97
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Согласно варианту присутствует левое выравнивание, соответственоо бит ADLAR в регистре ADMUX должен быть установлен, а полученный результат сдвинут на 4 бита. Также для выбора первого канала регулирования необходимо установить бит 0 и первый бит в битах MUX. Также для выбора предделителя установим биты ADPS2,1,0 в регистре ADCSRA, установим 6 и 7 бит этого регистра, чем разрешим работу АЦП и запустим преобразование Л
истинг программы;Программа для управления электродвигателем постоянного тока..equ EN_WORK = 0.equ REVERS = 1.equ BIT_MASK = $03.equ SPEED_MASK = $06.equ CONST = 13.def SPEED_REG = R18.include"m32def.inc" ;подключение стандартной библиотеки.cseg ;начало сегмента кода.org$0reset: ldi r16,low(RAMEND) ;Инициализация стека ldi r17,high(RAMEND) out spl,r16 out sph,r17 clr r16;Инициализация портов ввода/выводаout DDRA,r16 ;Порт А - на ввод информацииser r16out DDRD,r16 ;Порт D - на вывод информации.out DDRB,r16 ;Порт B - на вывод информации.clr r16out OCR1AH,r16 ;обнуление регистров Т1out OCR1BH,r16 out TCNT1H,r16 out TCNT1L,r16ldi r16,0xA1 ; инициализация таймера ШИМ 8 бит, быстрыйout TCCR1A,r16 ldi r16,0x0B ; out TCCR1B,r16 clr SPEED_REG rcall startADCmain: in r16,ADCSRA ;Опрос регистра ADCSRA SBRC r16,4 ;Если бит 4 чист, то следующая команда пропускаетсяrcall ADC_ready ;Иначе вызов ADC_ready rjmp main ;Возврат на mainADC_ready: in r23,SREG ;сохранение значения регистра SREGldi r16,0x97 ;Обнуление флага ADIF записью в него логической«1»out ADCSRA,r16 in r16, PINA ; маска на вход andi r16, BIT_MASK sbrs r16, EN_WORK ; проверка разрешения rjmp stop ; нет разрешения останов двигателя rcall set_speed ; установка скорости: out PORTB, SPEED_REG ; вывод скорости sbrc r16, REVERS rjmp revers_set ; если есть реверс, то переход на установки реверса clr r17 out OCR1BL, R17 ; если реверса нет, то идем дальше out OCR1BH, R17 out OCR1AL, SPEED_REGquit: ldi r16,0xA1 ; ; установка значений таймера и АЦП out TCCR1A,r16 ldi r16,0x0B ; out TCCR1B,r16rcall startADC out SREG, r23 rjmp mainrevers_set: ; установки таймера для реверса
clr r17 out OCR1AL, R17 out OCR1AH, R17 out OCR1BL, SPEED_REG rjmp quitstop: ; Останов двигателя. Либо нет сигшнала вкл. Либо не нажата скорость clr r16 out TCCR1A, r16 out TCCR1B, r16 out PORTB, r16 ;скорость очистили out ADCSRA,r16 ; выключили бит 7. ADEN rjmp mainset_speed:in r17,ADCH ;Считывание результата преобразования из ADCHlsr r17 ; 4 разрядаlsr r17lsr r17lsr r17 ; max speed = 1350\1700 = 0.8 = 205 от maxPWM (256) ; всего 16 скоростей 205 \ 16 = = 13 от max speed на каждую скорость 13ldi r21, CONST mul r17, r21 mov SPEED_REG, r0 retstartADC: ldi r16,0x63 ;Инициализация мультиплексора АЦПout ADMUX,r16 ldi r16,0xC7 out ADCSRA,r16 ;Инициализация АЦП и его запускretВывод: Был исследован аналого-цифровой преобразователь.