Автор: Пользователь скрыл имя, 13 Декабря 2012 в 09:08, курсовая работа
Цель курсовой работы – получение навыков программирования аппаратных комплексов, включающих взаимодействующие между собой различные 8- или 32-разрядные микроконтроллерные системы (МК-системы) и персональные компьютеры (РС), на языках Ассемблеров, С – для микроконтроллеров (МК) и языке С++ для РС с платформой Windows.
1. Постановка задачи 6
1.1. Стандартное задание 6
1.2. Индивидуальное задание 6
2. Техническое задание 7
3. Описание аппаратных и программных средств лабораторного комплекса 8
3.1. Структура аппаратных средств 8
3.1.1. Структурная схема лабораторного комплекса 8
3.1.2. Плата МК – системы 9
3.1.2.1. Конфигурируемые узлы МК C8051F064 11
3.1.2.2. Внешняя память XRAM 16
3.1.2.3. Входные усилители 17
3.1.2.4. Микросхема моста UART-USB 18
3.1.2.5. Сопряжение платы с PC 20
3.1.2.6. Питание платы 21
3.1.3. Требования к PC 21
3.1.4. ОСЦИГЕН 21
3.2. Перечень программных средств лабораторного комплекса 22
3.2.1. Средства программирования и отладки МК-системы 22
3.2.1.1. Интегрированная среда разработки фирмы SiLabs IDE 2.0 22
3.2.1.2. Ассемблер, компилятор и линкер интегрированной среды разработки Keil 23
3.2.2. Средства разработки Windows-приложений 24
3.2.2.1. Среда разработки 24
3.2.2.2. Библиотека WIN32 API функций 24
3.2.3. Приложения для ОСЦИГЕНа. 25
3.2.3.1. Драйвер конфигурируемого выносного блока 25
3.2.3.2. Windows-приложение OGView 25
3.2.4. Драйвер виртуального COM-порта фирмы SiLabs 26
4. Разработка программного комплекса для решения целевой задачи 26
4.1. Функциональная схема реализации функций запоминающего осциллографа 26
4.2. Состав и механизм взаимодействия приложений программного комплекса 27
4.2.1. Схема программного комплекса 27
4.2.2. Протокол обмена между PC-приложением и МК-приложением 27
4.2.3. Таблица допустимых команд 27
4.2.4. Размещение в памяти значений выборок сигнала со стороны МК и ПК 28
4.3. Разработка приложения для МК-системы 29
4.3.1. Обобщенная схема алгоритма 29
4.3.2. Обоснование выбора языка программирования и среды разработки 30
4.3.3. Описание файлов проекта приложения 30
4.3.3.1. Модули приложения 30
4.3.3.2. Модули, подключаемые на этапе линкования 30
4.3.4. Структура и организация программы 30
4.3.5. Схемы алгоритмов и описание функций приложения 30
4.3.5.1. Перечень функций приложения 30
4.3.5.2. Организация бесконечного цикла встроенного приложения 31
4.3.5.3. Отключение сторожевого таймера 31
4.3.5.4. Переключение с внутреннего генератора на внешний 32
4.3.5.5. Конфигурирование портов ввода/вывода 33
4.3.5.6. Конфигурирование аналого-цифровых преобразователей ADC 32
4.3.5.7. Конфигурирование интерфейса DMA 34
4.3.5.8. Инициализация последовательного интерфейса UART 35
4.3.5.9. Выбор и инициализация таймера для установки скорости обмена данными по последовательному каналу 36
4.3.5.10. Инициализация таймера для установки времени дискретизации входного сигнала 36
4.3.5.11. Выбор режимов работы внешней памяти XRAM и ее интерфейса 36
4.3.5.12. Инициализация прерываний 37
4.3.5.13. Формирование цифровых отсчетов и их сохранение во внешней памяти XRAM 37
4.3.5.14. Передача данных на PC 37
4.3.5.15. Прием данных с PC 37
4.3.5.16. Другие используемые функции 38
4.3.5.17. Конфигурирование узлов МК с учетом данных, пришедших с PC 38
4.4. Разработка Windows-приложения 39
4.4.1. Особенности использования среды разработки 39
4.4.2. Описание файлов проекта 39
4.4.3. Обобщенная схема алгоритма многопоточного приложения 40
4.4.4. Внешний вид и описание графического интерфейса, принципы построения программы 40
4.4.5. Описание структуры и организация программы 41
4.4.5.1. Назначение подключаемых файлов 41
4.4.5.2. Описание прототипов функций 41
4.4.5.3. Функция WinMain() 42
4.4.5.4. Функция главного окна 42
4.4.5.5. Организация дополнительных потоков, их назначение 43
4.4.5.6. Рабочие функции дополнительных потоков 43
4.4.5.7. Синхронизация потоков 43
4.4.5.8. Особенности обработки сообщений Windows в программе 43
4.4.5.9. Функция рисования графика восстановленного сигнала 45
4.4.5.10. Разметка осей графика 45
4.4.5.11. Использование контекстуальной памяти для рисования графика 45
4.4.6. Работа с COM-портом, описание WinAPI-функций и структур данных 46
4.4.6.1. Инициализация COM-порта, обоснование выбора режима (синхронный, асинхронный), объема буфера приема/передачи данных 46
4.4.6.2. Организация настроек COM¬-порта в графическом интерфейсе 48
4.4.6.3. Использование функций WaitCommEvent(), WaitForSingleObject(), WaitForMultiplyObject() 49
4.4.7. Работа оператора с приложением 49
4.4.7.1. Последовательность запуска приложения на МК и ПК в лаборатории 49
4.4.7.2. Примеры последовательности 49
4.4.7.3. Адаптация к сепктру входного сигнала 49
4.4.8. Описание протокола RS-232 49
5. Список используемых источников информации 87
6. Приложения 50
6.1. Исходные тексты модулей программы для МК 50
6.2. Фрагменты листингов файлов МК-приложения, полученные в результате трансляций: MAP-file и др 56
6.3. Исходные тексты файлов Windows-приложения 58
6.4. Алгоритмы 72
6.4.1. Обобщенный алгоритм программы для МК 72
6.4.2. Дополнительные алгоритмы программы для МК 73
6.4.2.1. Алгоритм процедуры отключения WDT 73
6.4.2.2. Алгоритм функции SYSCLK_Init 74
6.4.2.3. Алгоритм функции Port_Init 75
6.4.2.4. Алгоритм функции ADCInit 76
6.4.2.5. Алгоритм функции DMAInit 77
6.4.2.6. Алгоритм работы функции UART0_Init 79
6.4.2.7. Алгоритм функции Timer3_Init 80
6.4.2.8. Алгоритм функции main 81
6.4.2.9. Алгоритм функции Config 82
6.4.2.10. Алгоритм функции SendData 83
6.4.2.11. Алгоритм функции ReceiveData 84
6.4.3. Обобщенный алгоритм программы Windows-приложения 85
6.4.3.1. Алгоритм работы функции рисования графика 85
6.4.3.2. Алгоритм обработки сообщений 86
Описанный алгоритм иллюстрирует следующий код:
SCON0 = 0x50 // Mode 1: 8-Bit UART, Variable Baud Rate, UART0 reception enabled.
SSTA0 |= 0x10; // UART0 baud rate divide-by-two disabled.Timer 1 generates UART0 TX Baud Rate
// T1 initialization
SFRPAGE = TIMER01_PAGE;
TMOD = 0x20; // Mode 2: 8-bit counter/timer with autoreload
TH1 = -(SYSCLK / BAUDRATE)/16; // 250; // Reload value
TL1 = -(SYSCLK / BAUDRATE)/16; // 250; // Start value for T1
TR1 = 1; // Start T1
CKCON |= 0x10; // Timer 1 uses the system clock.
Для установки скорости обмена данными по последовательному каналу был выбран таймер T1. Таймер T1 был выбран в качестве генератора скорости передачи данных с помощью регистра SSTA0, см. пред. пункт. Инициализация таймера T1 также описана в п.4.3.5.8.
Для установки времени
Инициализация таймера T3 проходит по следующему алгоритму:
Описанный алгоритм иллюстрирует следующий код:
TMR3CN = 0x00; // temporary turning off T3
TMR3CF |= 0x00; // Counter frequency = SYSCLK/12
RCAP3 =(0xFFFF-ReloadValue); // writing reload value
TMR3 = 0xFFFF; // making counter overflow to reload counter
TR3 = 1; // start T3
Все порты для работы с внешней памятью (P4..P7) работают в режиме push-pull. Их настройка происходит в вышеописанной функции Port_Init().
В функции отправки байта Send_Byte (unsigned char Byte) перед началом отправки данных флаг прерывания TI0 сбрасывается в ноль:
TI0=0;// Drop tramsmition interrupt flag
В функции получения байта Receive_Byte (void) перед началом получения данных флаг прерывания RI0 сбрасывается в ноль:
RI0=0; // drop receiving interrupt flag
Со стороны МК (Little format) Со стороны ПК (Big format)
Функция отправки байта на ПК void Send_Byte (unsigned char Byte) работает по следующему алгоритму:
Описанный алгоритм иллюстрирует следующий код:
void Send_Byte (unsigned char Byte)
{
char old_SFRPAGE = SFRPAGE;
SFRPAGE = UART0_PAGE; // Switch to UART0 page
TI0=0; // Drop tramsmition interrupt flag
SBUF0=Byte; // copy data to send to SBUF0
while(!TI0); // dalay while tramsmiting
SFRPAGE = old_SFRPAGE; // restore SFRPAGE
}
Функция приема байта с ПК unsigned char Receive_Byte (void) работает по следующему алгоритму:
Описанный алгоритм иллюстрирует следующий код:
unsigned char Receive_Byte (void)
{
char old_SFRPAGE = SFRPAGE;
unsigned char rb;
SFRPAGE = UART0_PAGE;
RI0=0; // drop receiving interrupt flag
REN0=1; // receive enable
while(!RI0); // delay while receiving
rb = (unsigned char)SBUF0; // receive data from SBUF0
REN0=0; // receiving finished
SFRPAGE = old_SFRPAGE; // restore SFRPAGE
return rb;
}
Функция отправки результатов оцифровывания void Send_Data_to_PC (void) работает по следующему алгоритму:
Описанный алгоритм иллюстрирует следующий код:
void Send_Data_to_PC (void)
{
unsigned int i;
read_ptr = XRAM_START_ADD;
Send_Byte('r'); // notify PC that results are about to be sent
Receive_Byte()!= 'a'; //wait for confirm of readiness
for (i=0; i < 2*NUM_SAMPLES; i++)
{
Send_Byte(*read_ptr); //send data
read_ptr++;
}
}
С PC приходят данные, при изменении числа выборок, частоты выборок, скорости двоичной передачи и режиме работы ADC. Пришедшие параметры устанавливаются в приложении для МК-системы.
Использование бесплатной версии Visual Studio 8 накладывает определенные ограничения на использование ресурсов. Поэтому в программе отсутствуют диалоговые окна, тулбары, горячие клавиши и расширенное горизонтальное меню.
В проекте при написании
Файл 111.cpp
Этот файл представляет собой полный набор функций и переменных, необходимых для работы программы со стороны ПК.
Файл stdafx.h
Файл подключает все необходимые библиотеки для работы функций файла Win2.cpp.
Файл 111.h
Файл является заголовком Win2.cpp
Файл 111.срр
Подключает stdafx.h
Файл111.vcproj
Это основной файл для VC++ проектов. Он содержит информацию о версии Visual C++, которая генерирует файл, а также информацию о платформе, настройках и особенностях проекта, заданных при его создании.
Обобщенная схема алгоритмов многопоточного приложения приведена на рис.4.4.
Рис.4.4. Обобщенная схема алгоритма многопоточного приложения
Графический интерфейс (рис.4.5) условно делится на 2 части:
Все элементы основного окна являются дочерними окнами.
Ресурсы в окне не используются в связи с ограничениями, накладываемыми средой разработки. Поэтому в программе нет панели инструментов, диалоговых окон и строки состояния.
В ходе выполнения программы идет контроль ошибок, и в случае таковой об этом сразу будет сообщено пользователю с помощью всплывающего окна.
Рис.4.5. Внешний вид рабочего окна программы для ПК
Программа не разбита на модули, поэтому из подключаемых файлов только stdafx.cpp, который добавляется по умолчанию. Их описание находится выше в пункте «Описание файлов проекта» (п.4.4.2).
В программе используются следующие функции:
Программа состоит из функции инициализации, цикла сообщений Windows, функций обработки сообщений главного окна и потока, выполняемого параллельно с главным потоком.
Точкой входа в программу является функция WinMain(), которая регистрирует классы и вызывает функцию инициализации, в результате чего создается главное и дочерние окна. В конце функции WinMain находится бесконечный цикл по трансляции и обработке сообщений Windows. После трансляции сообщение передается в функцию обратного вызова соответствующего окна.
CallBack главного окна обрабатывает
сообщение о выходе из
Помимо основного потока в программе используются еще два потока: для получения данных от микроконтроллера и для прорисовки графика. Потоки создаются запущенными.
_beginthread(MyThreadSend,
0, 0); - создание потока для
обмена данных с микроконтролле
uintptr_t Thread0=_beginthread(
WaitForSingleObject((HANDLE)
Поток рисования графика имеет в себе одну функцию – проставить точки. Поток обмена данными использует функцию SendSet, после чего вызывает перерисовку и удаляется
Поскольку дополнительный поток возобновляется по указанию основного, т.е. в нужное время, то таким образом обеспечивается синхронизация дополнительного с основным потоком.
В программе предусмотрена
- WM_COMMAND – это сообщение используется для отслеживания нажатий на кнопки «Start» для инициализации обмена данными между МК и компьютером, нажатий на кнопки «Demo» для отображения демонстрационного варианта графика и кнопки «Exit» для выхода из приложения.
- WM_PAINT – это сообщение посылается, когда необходимо перерисовать графические элементы в окне. В нашем случае осуществляется прорисовка осей, сетки, а в случае получения данных и графика зависимости напряжения.
Информация о работе Обработка аналоговых сигналов на основе МК C8051F064