Смекни!
smekni.com

Микропроцессорная система дрессировочного стана (стр. 2 из 4)

Внешняя память SDK-1.1 разбита на следующие области: AduC812 Flash/EE, SRAM,MAX.

Flash/EE. Это область, в которой располагается таблица векторов прерываний и резидентный загрузчик файлов в формате HEX в память SRAM.

SRAM. Статическая память SRAM в SDK-1.1 имеет страничную организацию (максимум 8 страниц по 64 К) и условно разделяется на две области. Первая занимает младшие 64 Кбайт (страница 0) и доступна для выборки команд микроконтроллером ADuC812. Таким образом, программы могут располагаться только в этих младших 64 К адресного пространства. Остальные страницы доступны только для размещения данных. Для адресации ячейки памяти определенной страницы необходимо записать номер страницы в регистр специального назначения DPP ADuC812 (адрес 84h).

MAX. В младших адресах восьмой страницы адресного пространства (080000h- 080007h) располагается 8 ячеек-регистров ПЛИС MAX8064 (MAX8128). Эта область предназначена для взаимодействия с периферийными устройствами стенда.

Сопряжение с ПК

Сопряжение стенда с компьютером, необходимое для программирования микроконтроллера стенда и передачи данных между ПК и SDK, осуществляется с помощью последовательного порта (RS-232).

Требования к ПК:

·IBM-совместимый компьютер с наличием последовательного СОМ-порта.

·Операционная система: Windows 95/98/ME/2000/XP/Vista.

3. Описание технических средств для реализации проекта

Следует отметить, что основное внимание в данном курсовом проекте уделено разработке программного обеспечения для микропроцессорного учебного стенда SDK и ПК, а технологический процесс моделируется упрощенно с помощью имеющихся на стенде устройств.

Так, например, в качестве датчика толщинометра использован цифро-аналоговый преобразователь, замкнутый на аналого-цифровом преобразователе. На выходе ЦАП формируется напряжение ≈1.1 В, после преобразований в АЦП и передаче значения через последовательный порт в расчетах в программе на С++ используется значение ≈1, которое использовано в качестве толщины на входе клети. Для моделирования обоих импульсных датчиков угловой скорости используется клавиатура SDK: кнопка «1» прибавляет один импульс, кнопка «2» - десять импульсов, кнопка «3» - сто импульсов. Превышение заданного значения относительной деформации сигнализируется зажиганием нечетных светодиодов (через один), звуковым сигналом и выводом необходимой информации на дисплей, при этом выводится значение разности между текущим и заданным значением деформации. Передача данных между SDK и ПК осуществляется по последовательному COM-порту (RS-232). В качестве ПК используется IBM-совместимый компьютер с наличием последовательного СОМ-порта и операционной системой семейства Windows.

микропроцессорный контроллер деформация дрессировочный


4. Описание программных средств для реализации проекта

Для создания программы на языке C++ использовалась среда разработки BorlandC++Builder 6, а также набор программ для компиляции и загрузки кода на языке Ассемблера в стенд SDK.

Для взаимодействия стенда с ПК и работы с интерфейсом RS-232 использована библиотека ComPortLirary 3.10.

Для создания, компиляции и загрузки в стенд кода используется следующий набор программ:

Ассемблер А51 преобразовывает исходный ассемблерный код в перемещаемый объектный модуль. Ассемблер А51 полностью поддерживает исходный код на языке IntelASM-51. Ассемблер А51 поддерживает все микроконтроллеры семейства 8051. Набор регистров специального назначения (SFR) является стандартным. Вызов:

А51 sourcefile [directives] А51 @ commandfile

sourcefileИмя исходного файла на ассемблере.

commandfileИмя файла, содержащего командную строку ассемблера, включающую sourcefile и directives. Вы можете использовать командный файл для более простой компоновки исходного файла или в том случае, когда все директивы не помещаются в командной строке.

directivesПараметры.

Загрузчик/компоновщик BL51 объединяет один или несколько объектных модулей в один исполняемый файл. Компоновщик также разрешает внешние и глобальные ссылки и назначает абсолютные адреса перемещаемым сегментам программ. Компоновщик автоматически выбирает подходящие библиотеки рабочих программ и связывает только нужные модули библиотек. Вызов:

BL51 inputlist [TO outputfile] [directives]

L51 inputlist [TO outputfile] [directives] BL51 @commandfile

L51 @commandfiIe

sourcefileИмя исходного объектного файла, созданного компилятором А51 или С.

commandfileИмя файла, содержащего командную строку компилятора, включая sourcefile и directives. Можно использовать командный файл для более простой компоновки исходного файла или в том случае, когда все директивы не помещаются в командной строке.

directivesПараметры элементов управления.

Шестнадцатеричныйконвертер ОН51 конвертирует объектные модули в абсолютных адресах в шестнадцатеричные файлы в формате Intel. Модули перед этим создаются с помощью компоновщика BL51 или конвертера ОС51.

ОН51 absfile |HEXFILE (hexfile)

absfileИмя объектного модуля, построенного в абсолютных адресах.

hexfileИмя шестнадцатеричного файла в формате Intel, который должен быть создан.

Для загрузки программы в МК используется загрузчик T2.

5. Программа для работы микропроцессорного контроллера на языке ассемблер

DPPDATA84h; адрес указателя страницы данных (data; page ponter)

ADCCON1 DATA0EFH; регистр управления АЦП

ADCCON2 DATA 0D8H; регистр управления АЦП

ADCCON3 DATA 0F5H; регистр управления АЦП

ADCDATALDATA 0xD9; регистр младшего байта оцифрованных; данных АЦП

ADCDATAH DATA0xDA; регистр старшего байта оцифрованных данных; АЦП

DACCON DATA0xFD; регистр управления ЦАП

DAC0L DATA0xF9; младший регистр данных ЦАП содержат

DAC0H DATA0xFA; старший регистр данных ЦАП содержат

PLLCONDATA0D7H; регистр управления частотой контроллера

TIMECONDATA0A1H; адрес счетчика временных интервалов

T3FD DATA0x9D; регистры настройки Таймера 3

T3CON DATA0x9E; регистр управления таймером 3

ORG0000h; начало области, в которой будет располагаться код

JMPSTART; переход на инициализацию системы

ORG0023H; вектор прерывания от последовательного порта (UART)

JMPPOSL_PORT; переход на подпрограмму обработки прерывания

START:

MOVPLLCON,#3; настраиваем частоту ядра

MOVTMOD,#00H; T/C0 -таймер, режим0

MOVT3CON,#83H; устанавливаем скорость

MOVT3FD,#2DH; передачи – 9600 бод

MOVSCON,#50H; настройка последовательного порта; 0101 0000 (01 - 8-битный режим, 01 - режим 0, прием разрешен, 00 - биты используемые в режимах 1 и 2, 0 - флаг передачи; последов. порта, устанавливается; аппаратно после передачи 8-го бита, д.б. сброшен программно, 0 - флаг приема; последов порта, установливается аппаратно после приема 8-го бита, д.б. сброшен; программно)

MOVIE,#00010000B; разрешение прерывания от UART

SETBEA; разрешение прерываний

MAIN:; основная программа

CLRF0;

MOVR3,#0;

SCAN:; сканирование и проверка регистра R3;

K0:

CJNER3, #2,K1; если R3=2, то

CALLDAC_ADC; перейти на подпрограмму ЦАП-АЦП,

MOVR3,#0; затем записать в R3 0; иначе перейти на метку К1

K1:

CJNER3,#1, SCAN; если R3=1, то дальше сканировать клавиши 1,2 и 3, в портивном случае перейти на метку SCAN;

MOV R5,#0FEH;

MOV R7,#00H; нам нужен 0-й байт 8-й страницы 08"00"00"Н

MOV R6,#00H; 08"00"00

CALLWRITE;

CALLCHECK123;

CJNE A,#00H,K2; если клавиша 1 не нажата, сканировать клавишу 2

CALLWAIT_CHECK1; проверка на "залипание" клавиши 1

MOVSBUF,#01111000b; записываем в буфер значение символа;"x", бит TI устанавливается в 1,; инициируя прерывание по посл. порту

CALL DELAY; задержка

K2:; проверка нажатия клавиши 2

MOVR5,#0FDH;

MOV R7,#00H; нам нужен 0-й байт 8-й страницы 08"00"00"Н

MOV R6,#00H; 08"00"00

CALLWRITE;

CALLCHECK123;

CJNE A,#00H,K3; если клавиша 2 не нажата, сканировать клавишу 3

CALLWAIT_CHECK2; проверка на "залипание" клавиши 2

MOVSBUF,#01111001b; записываем в буфер значение символа; "y", бит TI устанавливается в 1,; инициируя прерывание по посл. порту

CALL DELAY; задержка

K3:; проверка нажатия клавиши 3

MOVR5,#0FBH;

MOV R7,#00H; нам нужен 0-й байт 8-й страницы 08"00"00"Н

MOV R6,#00H; 08"00"00

CALLWRITE;

CALLCHECK123;

CJNE A,#00H,SCAN; если клавиша 3 не нажата, перейти на; метку SCAN

CALLWAIT_CHECK3; проверка на "залипание" клавиши 2

MOVSBUF,#01111010b; записываем в буфер значение символа; "z", бит TI устанавливается в 1,; инициируя прерывание по посл. порту

CALLDELAY; задержка

JMP SCAN; переход на метку SCAN

CHECK123:; функция определения, нажата ли клавиша (1,2 или 3)

CALL READ; читаем байт по адресу 080000Н

ANLA,#10H

RET

WAIT_CHECK1:

CALL READ;

CJNE A,#0FEH,WAIT_CHECK1; ждать, есликлавиша 1 зажата

RET

WAIT_CHECK2:

CALL READ;

CJNE A,#0FDH,WAIT_CHECK2; ждать, есликлавиша 2 зажата

RET

WAIT_CHECK3:

CALL READ;

CJNE A,#0FBH,WAIT_CHECK3; ждать, есликлавиша 3 зажата

RET

BUZZ:; Для управления динамиком в процедуре использованы таймер и регистр ПЛИС ENA (адрес;080004h).;2-4 биты регистр ENA управляют величиной напряжения на динамике, т.е. позволяют; задавать громкость звука. ;Для формирования звука генерируются прямоугольные импульсы с заданным периодом.

MOVPLLCON,#5;

MOVR1,#255; задаем продолжительность сигнала

MOVR2,#5;

AGAIN:

CLRTR0; выключаем таймер

MOVTH0,#00H;инициализация таймера

MOVTL0,#00H;

SETBTR0; включаем таймер

MOVR5,#010H; записываемое число в регистр DPTR,

;соответствует высокому уровню напряжения

MOVR7,#04H; нам нужен 4-й байт 8-й страницы 0800"04"Н

MOVR6,#00H; 08"00"04

REP1:

CALLWRITE; включаем сигнал

JNBTF0,REP1; удерживаем значение в течение полупериода

CLRTR0; выключаем таймер

MOVTH0,#00H; инициализация таймера

MOVTL0,#00H;

SETBTR0; включаем таймер

MOVR5,#08H; записываемое число в регистр DPTR,; соответствует низкому уровню напряжения

MOVR7,#04H; нам нужен 4-й байт 8-й страницы 08"00"04"Н

MOVR6,#00H; 08"00"04

REP2:

CALLWRITE; Выключаем сигнал, 0-е напряжение

JNBTF0,REP2; удерживаем значение в течение полупериода

CLRTR0; выключаем таймер

DJNZR1,AGAIN;

DJNZR2,AGAIN;

MOVPLLCON,#3;

RET;

LCD_Putch:; вывод символа на дисплей, код которого

;передается через регистр R5

MOVR7,#01H; DATA_IND ( 080001H)