Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа SDK11.doc
Скачиваний:
96
Добавлен:
01.05.2015
Размер:
1.24 Mб
Скачать

1.2.12. Жидкокристаллический дисплей

Жидкокристаллический индикатор (ЖКИ) работает в текстовом режиме (2 строки по 16 символов), имеет подсветку (цвет желто-зеленый). Основные характеристики ЖКИ:

  • Габариты: 80x36x13.2 мм.

  • Активная область 56.21x11.5 мм.

  • Размеры точки 0.56x0.66 мм; размеры символа 2.96x5.56 мм.

  • Встроенный набор 256 символов (ASCII + кириллица).

  • Генератор символов с энергозависимой памятью на 8 пользовательских символов.

Рис. 22. ЖКИ WH1602B-YGK-CP

1.2.13. Звукоизлучатель

В SDK-1.1 используется пьезоэлектрический звукоизлучатель НРА17А (Z1). Выходы SND0..SND2 подключены к расширителю портов на базе ПЛИС.

Рис. 21. Звукоизлучатель

2. Порядок выполнения работы

  1. Изучите структурную и электрическую принципиальную схемы стенда SDK-1.1. Воспользуйтесь комплектом документации к SDK-1.1 и данным пособием.

  2. Изучите описание инструментального программного обеспечения. Воспользуйтесь руководством пользователя SDK-1.1 и справочной системой Keil Software.

  3. Изучите структуру STARTUP.A51 и простейшего примера программы на языке С.

3.1. Файл STARTUP.A51

;STARTUP.А51: Этот код исполняется после рестарта процессора

;Для трансляции этого файла используйте ассемблер А51

;со следующей командной строкой: А51 STARTUP.A51

;Для сборки вашего проекта и модифицированного вами файла ;STARTUP.OBJ используйте линкер BL51 со следующей командной ;строкой.

; BL51 <ваши объектные файлы>, STARTUP.OBJ <опции>

;Определяемая пользователем инициализация памяти после ;рестарта.

;С этими константами будет производится инициализация памяти:

;Абсолютный адрес начала памяти IDATA всегда 0

IDATALEN EQU 8ОН;Длина памяти IDATA в байтах.

XDATASTART EQU ОН ;Абсолютный адрес начала памяти XDATA XDATALEN EQU ОН ; Размер памяти XDATA

PDATASTART EQU ОН ; Абсолютный адрес памяти PDTATA PDATALEN EQU ОН ; Размер памяти PDATA

;Инициализация стека

;Следующие константы определяют положение стека необходимого ;для работы реентерабельных функций

;Модель SMALL

IBPSTACK EQU 0 ; =1 если используется стек для SMALL .

IBPSTACKTOP EQU OFFH+1; установка стека в старшую позицию +1.

;Модель LARGE

XBPSTACK EQU 0 ; =1 если используется стек для LARGE

XBPSTACKTOP EQU OFFFFH+1; установка стека в старшую ;позицию +1.

;Модель COMPACT

PBPSTACK EQU 0 ; =1 если используется стек для COMPACT

PBPSTACKTOP EQU OFFFFH+1 ; установка стека в старшую ;позицию +1.

;Определение PPAGE для модели Compact с 64 Кбайт xdata RAM

;Эти константы определяют положение переменных типа pdata.

PPAGEENABLE EQU 0 ; =1 если pdata используется.

PPAGE EQU 0 ; определяет количество страниц PPAGE.

NAME ?C_STARTUP

?C_C51STARTUP SEGMENT CODE

?STACK SEGMENT IDATA

RSEG ?STACK

DS 1

EXTRN CODE (?C_START)

PUBLIC ?C_STARTUP

; Установите 0, если вы компилируете программу для симулятора

CSEG AT О

; Установите 2100Н, если вы компилируете программу для SDK1.1

CSEG AT 2100H

?C_STARTUP: LJMP STARTUPl

RSEG ?C_C51STARTUP

STARTUPl:

; Очистка IDATA

IF IDATALEN <>0

MOV R0,#IDATALEN-1

CLR A

IDATALOOP: MOV @R0,A

DJNZ RO,IDATALOOP

ENDIF

; Очистка XDATA

IF XDATALEN <>0

MOV DPTR,#XDATASTART

MOV R7,#LOW(XDATALEN)

IF (LOW(XDATALEN)) <>0

MOV R6,#(HIGH XDATALEN)+1

ELSE

MOV R6,#HIGH(XDATALEN)

ENDIF

CLR A

XDATALOOP: MOVX @DPTR,A

INC DPTR

DJNZ R7,XDATALOOP

DJNZ R6,XDATALOOP

ENDIF

IF PPAGEENABLE <>0

MOV P2,#PPAGE

ENDIF

; Очистка памяти pdata

IF PDATALEN <>0

MOV RO,#PDATASTART

MOV R7,#LOW(PDATALEN)

CLR A

PDATALOOP: MOVX @R0,A

INC RO

DJNZ R7,PDATALOOP

ENDIF

; стек для модели SMALL

IF IBPSTACK <>0

EXTRN DATA (?C_IBP)

MOV ?C_IBP,#LOW IBPSTACKTOP

ENDIF

; стек для модели LARGE

IF XBPSTACK <>0

EXTRN DATA (?C_XBP)

MOV ?C_XBP,#HIGH XBPSTACKTOP

MOV ?C_XBP+l,#LOW XBPSTACKTOP

ENDIF

; стек для модели COMPACT

IF PBPSTACK <>0

EXTRN DATA (?C_PBP)

MOV ?C_PBP,#LOW PBPSTACKTOP

ENDIF

; Установка указателя стека

MOV SP,#?STACK-1

; Переход к программе инициализации памяти и далее к main()

LJMP ?C_START

END

3.1. Простейшая программа на языке Си

Следующая программа на языке Си для стенда SDK-1.1 инициализирует последовательный канал на скорости 9600 бод и выдает в него строчку «SDK 1.1». Текст программы:

#include "ADuC812.h" // Включение в текст описания регистров

// специального назначения ADuC812

void main(void)

{

TH1 = OxFD; // Скорость 9600

TMOD = 0x2 0; // Таймер 1 в режиме autoreload

TCON = 0x4 0; // Запуск таймера 1

SCON = 0x5 0; //8 bit UART, разрешение приема

PCON&= 0x7F; // Отключение дублирования скорости, установленной в

// ТН1

ЕА =0; // Запрещение прерываний

TI = 0; // Обнуление флага завершения посылки

SBUF = 'S'; // Инициация посылки символа «S»

while(!Т1); // Ожидание завершения посылки

TI = 0; SBUF = 'D' ; while( !TI );

TI = 0; SBUF = 'K'; while( !TI );

TI = 0; SBUF = ' 1' ; while(!TI);

TI = 0;

SBUF

while( !TI );

TI = 0; SBUF = ' 1' ; while( !TI );

while ( 1 ); // «Завершение» программы.

}

Необходимо обратить внимание на последний оператор в теле функции main(). Бесконечный цикл while (1); играет роль оператора завершения программы. Так как SDK-1.1 не находится под управлением операционной системы, то простой выход из пользовательской программы приведет к неконтролируемой выборке команд микроконтроллером из памяти, что может вызвать нежелательные последствия и даже привести к выходу стенда из строя. Поэтому рекомендуется все программы либо «завершать» бесконечным циклом, либо строить их таким образом, чтобы они работали по бесконечному алгоритму.

Для трансляции программы необходим компилятор С51 фирмы Keil Software.

  1. Изучите структуру и назначение объектных файлов, OMF, HEX

  2. Изучите переменные окружения, необходимые для нормальной работы компилятора.

  3. Разберитесь в командных файлах для трансляции программ и для загрузки программ в SDK-1.1.

Для трансляции программы используется пакет Keil Software. Keil Software поддерживает все стадии разработки приложения: создание исходного файла на С или Ассемблере, трансляцию, исправление ошибок, линкование объектных файлов, тестирование приложения.

В пакете Keil Software содержатся следующие средства разработки для микроконтроллера 8051:

  • С51 - компилятор С;

  • Макроассемблер А51;

  • Динамический загрузчик/компоновщик BL51;

  • Конвертер объектных файлов ОС51;

  • Конвертер объектных и НЕХ-файлов ОН51;

  • Менеджер библиотек LIB 51;

  • Симулятор dScope-51 (для Windows);

  • Отладчик/компилятор ц Vision/51 (для Windows );

  • Операционная система реального времени (Real-Time Operating System - RTX).

  1. Оттранслируйте пример простейшей программы и загрузите ее в SDK-1.1. Изучите назначение каждой строки исходного текста в программе. Измените программу и попробуйте ее оттранслировать и загрузить в SDK-1.1.

Для трансляции своей программы запустите командный файл make.bat.

Пример командного файла:

@echo off

rem стираем загрузочный модуль

del test.hex

rem Транслируем стартовый модуль

А51 startup.a51

rem Если ассемблер вернул код ошибки то завершаем командный файл

if errorlevel l goto ERROR

rem Транслируем нашу программу на языке С

С51 test.с CODE LARGE WL(2)

rem Если ассемблер вернул код ошибки то завершаем командный файл

if errorlevel l goto ERROR

rem Формирование файла в формате ОМЕ из объектных модулей.

rem Сегмент кода начинается с адреса 0x2100, сегмент данных с адреса 0x7000

BL51 startup.obj, test.obj to test CODE(02100H) XDATA(07000H)

rem Преобразование файла в формате ОМЕ в формат HEX

ОН51 test

rem Добавляем стартовый адрес (0x2100) в HEX файл

if exist test.hex tl67b 0x2100 0x0 addhexstart exhibit.hex bye

goto OK

:ERROR

echo ERROR

:OK

  1. Скомпилируйте и загрузите свою программу в симулятор dScope Debugger. Изучите процесс отладки программ в симуляторе

Загрузка программы в SDK-1.1.

Подключите SDK-1.1 к ПК с помощью кабеля RS-232. Включите питание стенда.

Загрузочный модуль программы в формате HEX передается в SDK-1.1 по последовательному каналу RS-232 с помощью программы Т167b или Т2. Для запуска процесса загрузки запустите командный файл load.bat. Далее, перед каждым запуском загрузчика, нажимайте кнопку RESET на стенде, чтобы стенд переходил из режима выполнения вашей программы в режим загрузчика.

Пример командного файла:

tl67b 2 12 openchannelrts loadhex+ test.hex bye