Автор: Пользователь скрыл имя, 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
TR3 = 1; // запуск Timer3
SFRPAGE = old_SFRPAGE; // восстановление SFRPAGE
}
//----------------------------
// Отправка данных
//----------------------------
// Отправка данных на ПК (фактически на UART)
void Send_Byte (unsigned char Byte)
{
char old_SFRPAGE = SFRPAGE;
SFRPAGE = UART0_PAGE; // Переключение на страницу UART0
TI0=0; // сброс флага прерывания, разрешение передачи информации
SBUF0=Byte; // запись байта в буфер SBUF0
while(!TI0); // ожидание, пока не закончится передача
SFRPAGE = old_SFRPAGE; // восстановление SFRPAGE
}
//----------------------------
// Прием данных
//----------------------------
// Прием байта от ПК (фактически от UART0)
unsigned char Receive_Byte (void)
{
char old_SFRPAGE = SFRPAGE;
unsigned char rb;
SFRPAGE = UART0_PAGE; // Переключение на страницу UART0
RI0=0; // сброс флага прерывания, разрешение получения информации
REN0=1; // установка флага активного приема
while(!RI0); // ожидание, пока не закончится прием
rb = (unsigned char)SBUF0; // запись байта из буфера SBUF0
REN0=0; // сброс флага активного приема
SFRPAGE = old_SFRPAGE; // восстановление SFRPAGE
return rb;
}
//----------------------------
// Отправка результатов ADC преобразования
//----------------------------
//Отправка всех результатов на ПК
void Send_Data_to_PC (void)
{
unsigned int i;
read_ptr = XRAM_START_ADD; //получение адреса начала данных
Send_Byte('r'); //
while(Receive_Byte()!= 'a';) //ожидание уведомления со стороны ПК о готовности приема данных
for (i=0; i < 2*NUM_SAMPLES; i++)
{
Send_Byte(*read_ptr); //
read_ptr++;
}
}
//----------------------------
// Настройка МК
//----------------------------
void MC_Config (void)
{
EA = 0; // запрет всех прерываний
WDTCN = 0xde; //отключение WDT
WDTCN = 0xad; //между записью этих значений должно пройти не более 4х тактовых циклов,
//иначе операция отключения игнорируется
SYSCLK_Init (); // инициализация генератора
Port_Init(); // конфигурирование портов ввода/вывода
UART0_Init (); // инициализация UART0
EA = 1; // разрешение всех прерываний
}
//----------------------------
// MAIN Routine
//----------------------------
void main(void)
{
unsigned char a,b;
char old_SFRPAGE = SFRPAGE;
int i;
MC_Config(); //Настройка МК
//main loop
while (1)
{
P1_6 = 0;
// соединение с ПК
while (Receive_Byte() != 'c'); //ожидание уведомления со стороны ПК о соединении
Send_Byte('p'); //отправка уведомления ПК о соединении
P1_6=1;
ADC_Mode = Receive_Byte(); // получение настроек ADC
a = Receive_Byte(); // получение старшего байта NUM_SAMPLES
b = Receive_Byte(); // получение младшего байта NUM_SAMPLES
NUM_SAMPLES = a*256 + b; // NUM_SAMPLES
a = Receive_Byte(); // получение старшего байта SAMP_RATE
b = Receive_Byte(); // получение младшего байта SAMP_RATE
SAMP_RATE = a*256 + b; // SAMP_RATE
ADC_Init(); // настройка ADC
Timer3_Init (SYSCLK/SAMP_RATE); // настройка таймера 3
DMA0_Init(); // настройка DMA для получения NUM_SAMP выборок
SFRPAGE=DMA0_PAGE; // Переключение на страницу DMA0
DMA0CN = 0x80; // запуск DMA0
DMA0CF &= 0x4E; // сброс DMA0HLT, установка DMA0BSY, разрешение прерывания Repeat Counter Overflow.
// повторение счетчика
прерываний произошло,
// end-Of-Operation не была получена.
while(!(DMA0CF & 0x01)); // ожидание, пока DMA получит команду End of Operations
while(DMA0CF & 0x40); // ожидание, пока DMA остановит работа с XRAM
DMA0CF |= 0x80; // разрешение доступа главного процесса к XRAM
Send_Data_to_PC(); // отправка результатов
}
}
INPUT MODULES INCLUDED:
D: \MC\MC.obj (MC)
C:\SILABS\MCU\IDEFILES\C51\
C:\SILABS\MCU\IDEFILES\C51\
C:\SILABS\MCU\IDEFILES\C51\
LINK MAP OF MODULE: D:\\MC\MC
>> (MC)
TYPE BASE LENGTH RELOCATION SEGMENT NAME
------------------------------
* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
DATA 0008H 0007H UNIT ?DT?MC
DATA 000FH 0003H UNIT _DATA_GROUP_
IDATA 0012H 0001H UNIT ?STACK
* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
0003H 07FDH *** GAP ***
CODE 0800H 00CEH UNIT ?C?LIB_CODE
CODE 08CEH 0081H UNIT ?PR?MAIN?MC
CODE 094FH 004AH UNIT ?PR?ADC_INIT?MC
CODE 0999H 0044H UNIT ?C?LDIV
CODE 09DDH 003BH UNIT ?PR?SEND_DATA_TO_PC?MC
CODE 0A18H 002CH UNIT ?PR?DMA0_INIT?MC
CODE 0A44H 0027H UNIT ?PR?SYSCLK_INIT?MC
CODE 0A6BH 0022H UNIT ?PR?_TIMER3_INIT?MC
CODE 0A8DH 001EH UNIT ?PR?UART0_INIT?MC
CODE 0AABH 0017H UNIT ?PR?PORT_INIT?MC
CODE 0AC2H 0015H UNIT ?PR?RECEIVE_BYTE?MC
CODE 0AD7H 0014H UNIT ?PR?MC_CONFIG?MC
CODE 0AEBH 000FH UNIT ?PR?_SEND_BYTE?MC
CODE 0AFAH 000CH UNIT ?C_C51STARTUP
OVERLAY MAP OF MODULE: D:\учеба\!6 семестр\АСВТ\!Курсовик\progs\
>> C\MC (MC)
SEGMENT
+--> CALLED SEGMENT START LENGTH
------------------------------
?C_C51STARTUP ----- -----
+--> ?PR?MAIN?MC
?PR?MAIN?MC 000FH 0003H
+--> ?PR?MC_CONFIG?MC
+--> ?PR?RECEIVE_BYTE?MC
+--> ?PR?_SEND_BYTE?MC
+--> ?PR?ADC_INIT?MC
+--> ?PR?_TIMER3_INIT?MC
+--> ?PR?DMA0_INIT?MC
+--> ?PR?SEND_DATA_TO_PC?MC
?PR?MC_CONFIG?MC ----- -----
+--> ?PR?SYSCLK_INIT?MC
+--> ?PR?PORT_INIT?MC
+--> ?PR?UART0_INIT?MC
?PR?SEND_DATA_TO_PC?MC ----- -----
+--> ?PR?_SEND_BYTE?MC
+--> ?PR?RECEIVE_BYTE?MC
******************************
>>
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 01E8H BYTE (23%) *
>>
******************************
>>
Program Size: data=19.0 xdata=0 code=777
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
Информация о работе Обработка аналоговых сигналов на основе МК C8051F064