Обработка аналоговых сигналов на основе МК C8051F064

Автор: Пользователь скрыл имя, 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

Работа содержит 1 файл

Обобщенная пояснительная записка.doc

— 5.12 Мб (Скачать)

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.

// end-Of-Operation не была получена.

  

   while(!(DMA0CF & 0x01));   // ожидание, пока DMA получит команду End of Operations

   while(DMA0CF & 0x40);    //  ожидание, пока DMA остановит работа с XRAM

   DMA0CF |= 0x80;      // разрешение доступа главного процесса к XRAM

   Send_Data_to_PC();     // отправка результатов

}

}

 

    1. Фрагменты листингов файлов МК-приложения, полученные в результате трансляций: MAP-file и др

INPUT MODULES INCLUDED:

  D: \MC\MC.obj (MC)

  C:\SILABS\MCU\IDEFILES\C51\LIB\C51S.LIB (?C_STARTUP)

  C:\SILABS\MCU\IDEFILES\C51\LIB\C51S.LIB (?C?SLDIV)

  C:\SILABS\MCU\IDEFILES\C51\LIB\C51S.LIB (?C?ULDIV)

 

 

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\Павлова\МК\M

>> C\MC (MC)

 

 

SEGMENT                          DATA_GROUP

  +--> 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)

 

    1. Алгоритмы
      1. Обобщенный алгоритм программы для МК


 

 


 

      1. Дополнительные алгоритмы программы для МК
        1. Алгоритм процедуры отключения WDT


 


 


 


 

 

        1. Алгоритм функции SYSCLK_Init


 


 


 




 


 


 


 


 

 

        1. Алгоритм функции Port_Init


 


 


 


 


 


 


 

 

        1. Алгоритм функции ADCInit

 


 


 


 


 


 







 


 


 



 


 


 


 

 

 

        1. Алгоритм функции DMAInit


 


 


 


 


 


 




         


 


 


 


 


 


 

 

        1. Алгоритм работы функции UART0_Init


 


 


 




 


 


 


 


 


 


 

 

        1. Алгоритм функции Timer3_Init


 


 


 




 


 


 


 

 

        1. Алгоритм функции main

        1. Алгоритм функции Config


 


 


 




 


 


 

 

        1. Алгоритм функции SendData


 


 


 






 

 

        1. Алгоритм функции ReceiveData

Информация о работе Обработка аналоговых сигналов на основе МК C8051F064