Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
—————————
Кафедра систем автоматического управления
ОТЧЕТ
по лабораторной работе №8
«Вольтметр»
по курсу «ВМ, системы и сети»
Студент: |
Ву Ван |
гр. /2 |
|
Преподаватель: |
|
Санкт-Петербург — 2010
Изучить работу аналогового выхода микроконтроллера. Написать программу, выводящую на ЖКИ значение подаваемого напряжения, регулируемого рукояткой на панели микроконтроллера
Работу программы организуем следующим образом. Будем считывать показания с аналогового выхода вольтметра. Потом преобразуем данные в число, находящееся в пределах от 0 до 5 В с точностью до 0.01 В. После этого будем выводить полученное число на ЖКИ.
Получаемый сигнал с аналогового входа имеет целые значения в промежутке от 0 до 255. Для преобразования сигнала разделим его значение на 5 и выделим целую часть. Это значение есть количество целых Вольт. Дробная часть оставшаяся при делении есть дробная часть получаемого числа Вольт.
Для вывода на экран значения напряжения необходимо преобразовать каждую цифру числа в ASCI код. Для этого нужно воспользоваться таблицей кодов. Наблюдается такая закономерность: код цифры на 30 больше, чем ее значение, поэтому просто прибавляем к каждой цифре 30 и получаем соответствующие коды.
Показания вольтметра хранятся в ячейке памяти 7FH. Цифры числа вольт будем хранить в регистрах. R0 – целая часть, R1 – десятые, R2 – сотые. Для выделения целой части, десятых и сотых используются подпрограмма SHOW_OUT, которая использует команды MUL AB и DIV AB, которые позволяют умножить содержимое регистров А и В или разделить соответственно. Для вывода на экран значения напряжения используется подпрограмма SHOW_OUT, которая преобразует каждую цифру числа в ASCI код, записывает код в видеопамять и выводит содержимое видеопамяти на ЖКИ.
#include "reg51gb.h"
extern code (LCD_INIT)
extern code (LCD_OUT)
org 8000h
lcall LCD_INIT;инициализация дисплея
mov adcon,#10h
;=======================================
;главная программа
Glav:
mov sp, #7fh
mov r0, ADRES3;чтение значения вольтметра
lcall convert;конвертация числа
lcall OUT;вывод значения на ЖКИ
mov WDTCON, #0E1h
mov WDTCON, #1Eh
jmp Glav;зацикливание
;=======================================
;преобразование числа в цифры
convert:
mov r0,sp
dec r0
dec r0
mov b,#125d;b=125
mov a, @r0
mul ab;выделение целой части
mov r7,b
mov r1,a
mov r2,#6d;R2=6
metka1:
mov a,r7
clr c
rrc a
mov r7,a
mov a,r1
rrc a
mov r1,a
djnz r2,metka1
mov a,r7;загружаем число в аккумулятор
mov r3,a
mov a,r1
mov r4,a
mov a,@r0
;выделение целой части
mov b,#5d
mul ab;умножение аккумулятора на 5
mov r7,b
mov a,r7;получаем значение целой части
mov b,#100d
mul ab;умнонжаем R7 на 100
mov r5,b
mov r6,a
clr c
mov a,r4
subb a,r6
mov r6,a
mov b,#10d;загружаем в b 10
mov a,r6
div ab;деление числа на 10
mov r1,a
mov a,r6
mov b,#10d;загружаем в b 10
div ab;деление числа на 10
mov r2,b
mov a,r7
mov @r0,a
dec r0;декремент указателя
mov a,r1
mov @r0,a
dec r0
mov a,r2
mov @r0,a
ret
;=======================================
;вывод цифр на экран
out:
mov dptr,#0e000h;установка указателей
mov r0,sp
dec r0
dec r0;установка указателей
mov a,@r0
add a,#30h;перевод в ASCI код
movx @dptr,a;пересылка аз аккумулятора в видеопамять
inc dptr;сдвиг указателя
dec r0;сдвиг указателя
mov a,#2eh;вывод символа запятой
movx @dptr,a;пересылка аз аккумулятора в видеопамять
inc dptr;сдвиг указателя
mov a,@r0
add a,#30h;перевод в ASCI код
movx @dptr,a;пересылка аз аккумулятора в видеопамять
inc dptr;сдвиг указателя
dec r0;сдвиг указателя
mov a,@r0
add a,#30h;перевод в ASCI код
movx @dptr,a;пересылка аз аккумулятора в видеопамять
inc dptr;сдвиг указателя
mov a,#20h;вывод символа пробела
movx @dptr,a;пересылка аз аккумулятора в видеопамять
inc dptr;сдвиг указателя
mov a, #42h;вывод буквы В
movx @dptr,a;пересылка аз аккумулятора в видеопамять
lcall lcd_out;вывод содержимого ВП на ЖКИ
ret
;=======================================
end
В процессе работы программы мы поворачивали рукоятку передней панели стенда и наблюдали, как меняются показания на ЖКИ в зависимости от угла поворота.
В ходе работы мы познакомились с новыми командами микроконтроллера, такими как MUL AB и DIV AB, научились работать с регулятором напряжения на передней панели стенда. Также была создана программа, которая считывала регулируемое напряжение и выводила его на экран в режиме реального времени.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.