Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
PAGE \* MERGEFORMAT 5
Міністерство освіти І науки України
національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторні роботи 5 - 8 з периферійних пристроїв
На тему:
"Дослідження режимів функціонування інтерфейсу USB"
Виконав:
студент групи КІ-31
Громов А. С.
Прийняв:
Миц А.М.
Львів 2011
Зміст
1. Мета роботи.......................................................................................................3
2. Короткі теоретичні відомості............................................................................3
3. Хід роботи...........................................................................................................4
4. Висновки.............................................................................................................4
5. Текст програми (у додатку)...............................................................................
6. Демонстрація програми на компютері...........................................................4
1. Мета роботи
Ознайомитися з процесом передачі даних через послідовний інтерфейс USB. Ознайомитися з процесом створення програми передавача даних через послідовний USB інтерфейс. Ознайомитися з процесом створення елементів програми для сканування USB-портів на наявність підключених пристроїв до послідовного USB інтерфейсу. Ознайомитися з процесом створення та налаштування основних параметрів програми передачі даних через послідовний USB інтерфейс. Ознайомитися з процесом формування та передачі посимвольних даних у графічному представленні в схемі кодування NRZI через послідовний USB інтерфейс.
2. Короткі теоретичні відомості
USB (англ. Universal Serial Bus, абревіатура читається ю-ес-бі) укр. універсальна послідовна шина, призначена для з'єднання периферійних пристроїв. Шина USB представляє собою послідовний інтерфейс передачі даних для середньошвидкісних та низькошвидкісних периферійних пристроїв. Для високошвидкісних пристроїв на сьогодні кращим вважається FireWire. USB-кабель представляє собою дві виті пари: по одній парі відбувається передача даних в кожному напрямку (диференціальне включення), а інша пара використовується для живлення периферійного пристрою (+5 В). Завдяки вбудованим лініям живлення, що запезпечують струм до 500 мА, USB часто дозволяє використовувати пристрої без власного блоку живлення (якщо ці пристрої споживають струм потужністю не більше 500 мА). До одного контролера шини USB можно під'єднати до 127 пристроїв через ланцюжок концентраторів (вони використовують топологію «зірка»). На відміну від багатьох інших стандартних розємів, для USB характерні довговічність та механічна міцність. Інтерфейс USB є послідовною, напівдуплексною, двонаправленою шиною. Шина дозволяє підключити до ПК до 127 фізичних пристроїв. Кожен фізичний пристрій може, у свою чергу, складатися з декількох логічних (наприклад, клавіатура з вбудованим манипулятором-трекболом). Кабельна розводка USB починається з вузла (host). Хост володіє інтегрованим кореневим концентратором (root hub), який надає декілька роз'ємів USB для підключення зовнішніх пристроїв. Потім кабелі йдуть до інших пристроїв USB, які також можуть бути концентраторами, і функціональних компонентів (наприклад, модем або акустична система). Концентратори часто вбудовуються в монітори і клавіатури (які є типовими
складеними пристроями). Концентратори можуть містити до семи "витікаючих"
портів. Для передачі сигналів шина USB використовує чотирипровідною інтерфейс. Одна пара провідників ("+5В" і "загальний") призначена для живлення периферійних пристроїв з навантаженням до 500 мА. Дані передаються по іншій парі ("D+" "D-"). Для передачі даних використовується диференціальна напруга до 3 В (з метою зниження впливу шуму) і схема кодування NRZI (що позбавляє від необхідності виділяти додаткову пару провідників під тактовий сигнал).
3. Хід роботи
Створюємо новий проект MFC у середовищі Microsoft Visual Studio 2008. Обираємо створення проекту в діалоговому вікні. У вікні вставляю поля (Edit) для вводу імені файлу та введення повідомлення, яке запишеться в цей файл. Також додаю елемент ComboBox, який позволяє обрати необхідний USB-пристрій. Додаю кнопки для оновлення списку USB-пристроїв та для надсилання повідомлення.
4. Висновки
Виконуючи цю лабораторну роботу я освоїв основи роботи з USB-портом. Навчився відправляти та отримувати дані з USB-порта. Освоїв як створюється передаваємий сигнал відповідно до даних, що передаються.
5. Текст програми (у додатку)
6. Демонстрація програми на компютері
PP_GROMOV_lab2Dlg.h
// PP_Gromov_lab2Dlg.h : файл заголовка
//
#pragma once
#include "afxwin.h"
// диалоговое окно CPP_Gromov_lab2Dlg
class CPP_Gromov_lab2Dlg : public CDialog
{
// Создание
public:
CPP_Gromov_lab2Dlg(CWnd* pParent = NULL); // стандартный конструктор
// Данные диалогового окна
enum { IDD = IDD_PP_GROMOV_LAB2_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV
// Реализация
protected:
HICON m_hIcon;
// Созданные функции схемы сообщений
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
CComboBox combo1;
CString myString;
afx_msg void OnBnClickedButton2();
CString mySource;
};
PP_GROMOV_lab2Dlg.cpp
// PP_Gromov_lab2Dlg.cpp : файл реализации
//
#include "stdafx.h"
#include "PP_Gromov_lab2.h"
#include "PP_Gromov_lab2Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Диалоговое окно CAboutDlg используется для описания сведений о приложении
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Данные диалогового окна
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV
// Реализация
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// диалоговое окно CPP_Gromov_lab2Dlg
CPP_Gromov_lab2Dlg::CPP_Gromov_lab2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CPP_Gromov_lab2Dlg::IDD, pParent)
, myString(_T(""))
, mySource(_T("ENTER_HERE_NAME_OF_FILE.TXT"))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPP_Gromov_lab2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, combo1);
DDX_Text(pDX, IDC_EDIT1, myString);
DDX_Text(pDX, IDC_EDIT2, mySource);
}
BEGIN_MESSAGE_MAP(CPP_Gromov_lab2Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CPP_Gromov_lab2Dlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CPP_Gromov_lab2Dlg::OnBnClickedButton2)
END_MESSAGE_MAP()
// обработчики сообщений CPP_Gromov_lab2Dlg
BOOL CPP_Gromov_lab2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Добавление пункта ''О программе...'' в системное меню.
// IDM_ABOUTBOX должен быть в пределах системной команды.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Задает значок для этого диалогового окна. Среда делает это автоматически,
// если главное окно приложения не является диалоговым
SetIcon(m_hIcon, TRUE); // Крупный значок
SetIcon(m_hIcon, FALSE); // Мелкий значок
// TODO: добавьте дополнительную инициализацию
char driver[3] = "A:";
for (; driver[0] < 91; driver[0]++)
if(GetDriveTypeA(driver)==2)
combo1.AddString((LPCTSTR) driver);
return TRUE; // возврат значения TRUE, если фокус не передан элементу управления
}
void CPP_Gromov_lab2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
// чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,
// это автоматически выполняется рабочей средой.
void CPP_Gromov_lab2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // контекст устройства для рисования
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Выравнивание значка по центру клиентского прямоугольника
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Нарисуйте значок
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// Система вызывает эту функцию для получения отображения курсора при перемещении
// свернутого окна.
HCURSOR CPP_Gromov_lab2Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CPP_Gromov_lab2Dlg::OnBnClickedButton1()
{
char driver[3] = "A:";
for (; driver[0] < 91; driver[0]++)
if(GetDriveTypeA(driver)==2)
combo1.AddString((LPCTSTR) driver);
// TODO: добавьте свой код обработчика уведомлений
}
void CPP_Gromov_lab2Dlg::OnBnClickedButton2()
{
UpdateData();
DWORD dwBytesWritten;
CString My_Data = myString;
CString D1;
combo1.GetLBText(combo1.GetCurSel(), D1);
int DR_T = GetDriveTypeA(D1);
if (DR_T == 2) // якщо флеш-пам'ять, то
{
CString My_File;
My_File += D1; // "H:"
My_File += "\\"; // "H:\"
My_File += mySource; // "H:\\MyFile.txt"
HANDLE hFile;
hFile=CreateFileA(My_File, GENERIC_READ|GENERIC_WRITE , 0, NULL, OPEN_ALWAYS, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
// QMessageBox * err1 = new QMessageBox(QMessageBox::Critical,"Error","Can`t write file");
// qWarning("open() - CreateFileA Error code: %ld", GetLastError());
//err1->show();
//return;
MessageBox("Error");
}
int len1 = My_Data.GetLength();
WriteFile(hFile, My_Data, len1, &dwBytesWritten, NULL);
CloseHandle(hFile);
}
else
MessageBox("Error");
// TODO: добавьте свой код обработчика уведомлений
}