计算机接口技术实验报告.docx

上传人:b****5 文档编号:14489051 上传时间:2023-06-23 格式:DOCX 页数:24 大小:75.83KB
下载 相关 举报
计算机接口技术实验报告.docx_第1页
第1页 / 共24页
计算机接口技术实验报告.docx_第2页
第2页 / 共24页
计算机接口技术实验报告.docx_第3页
第3页 / 共24页
计算机接口技术实验报告.docx_第4页
第4页 / 共24页
计算机接口技术实验报告.docx_第5页
第5页 / 共24页
计算机接口技术实验报告.docx_第6页
第6页 / 共24页
计算机接口技术实验报告.docx_第7页
第7页 / 共24页
计算机接口技术实验报告.docx_第8页
第8页 / 共24页
计算机接口技术实验报告.docx_第9页
第9页 / 共24页
计算机接口技术实验报告.docx_第10页
第10页 / 共24页
计算机接口技术实验报告.docx_第11页
第11页 / 共24页
计算机接口技术实验报告.docx_第12页
第12页 / 共24页
计算机接口技术实验报告.docx_第13页
第13页 / 共24页
计算机接口技术实验报告.docx_第14页
第14页 / 共24页
计算机接口技术实验报告.docx_第15页
第15页 / 共24页
计算机接口技术实验报告.docx_第16页
第16页 / 共24页
计算机接口技术实验报告.docx_第17页
第17页 / 共24页
计算机接口技术实验报告.docx_第18页
第18页 / 共24页
计算机接口技术实验报告.docx_第19页
第19页 / 共24页
计算机接口技术实验报告.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机接口技术实验报告.docx

《计算机接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《计算机接口技术实验报告.docx(24页珍藏版)》请在冰点文库上搜索。

计算机接口技术实验报告.docx

计算机接口技术实验报告

计算机接口技术实验报告

数学与计算机学院

《计算机接口技术》

实验报告

专业:

班级:

学号:

姓名:

指导老师:

实验1定时与中断接口程序设计

一实验目的

1了解定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法;2.学习使用TURBOC++对8253、8255进行编程操作;

3(熟悉拦截PC机中断向量的TC++编程方法。

二实验内容

1(8253、8255在PC/XT机中的电路连接介绍

1,808882532,D7…D0OUT0D7…D0至8259IRQ0,中断类型=83,RDGATE0+5VIOR

4,WRCLK0IOW

5,A0OUT1A0至8237的DRAM刷新请求

6,A1GATE1A1+5V

7,CLK1

8,地址OUT2IO/M&放大9,译码CSGATE2A9…A2

10,CLK0,1,240H~43H

1.19MHz

地址PB0

译码CSPB1

60H~63H8255

PC机启动后,系统设置的初始状态为:

芯片有关工作方式初值运行情况

通道0#:

方式3(方波计数初值:

OUT输出55ms方波至

0000H发生器)8259的IRQ08253通道2#:

(1KHz)计数初值:

,(1KHz方波)

(1190)

PB0、PB1:

方式0(简控制蜂鸣器发声。

0:

不发8255单输出)声,1:

发声8259IRQ0:

允许中断中断类型号:

8CPU响应8号中断2(程序要求

(1)程序启动时,要求输入定时时间,以秒为单位。

(2)按秒计时,每秒到达时,在屏幕上显示当前为第几秒,同时蜂鸣器发出短促叫声;

(3)当定时时间到,则显示“TimeUp!

”,结束程序。

三.实验步骤

1(建立源文件:

启动TURBOC++3.0,建立Timer.CPP。

保存到D:

\×(学号)\Timer.CPP;

2(设置TC工作目录:

选菜单Options/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放目录,OK。

如此,TC生成的可执行文件等将会存放到此工作目录下。

四,实验代码

#include//支持标准输入输出,如printf()。

#include//支持接口访问、中断向量操作函数

#include//支持exit()函数

#ifdef__cplusplus//定义C++使用的中断函数标识符。

若是×.C程序,则不需要#define__CPPARGS...

#else

#define__CPPARGS

#endif

intnTick=0,sec=0,flag=0;

unsignedcharsys_PB,my_PB;

voidinterruptfar(*sys_int_08)(__CPPARGS);//若是×.C,则函数参数不写voidinterruptfarmy_int_08(__CPPARGS)//若是××.C,则函数参数不写{//8号中断,每55ms中断一次,由8253的0号定时器定时,向8259IRQ0申请中断

++nTick;

if(tinck==1)outportb(0x61,my_PB);//开始鸣叫

elseif(tinck==3)outportb(0x61,sys_PB);//停止鸣叫

elseif(nTick>18)

{//1second/55ms近似等于18

sec++;

}

sys_int_08();//调用系统的中断向量

}

//==========================================voidmain()

{unsignedintTime_up;

printf("PleaseinputUpTime(5--30):

");

scanf("%d",&Time_up);

printf("\n");

if(Time_up<5||Time_up>30)

{printf("InputError!

");

exit

(1);//结束程序

}

outportb(0x63,0x82);//设置8255,PB为输入方式

sys_PB=inportb(0x61);//读取PB口,内容

my_PB=sys_PB|0x03;//将PB口低2位(PB0,PB1)置1

outportb(0x63,0x80);//设置8255,PB为输出方式

//8253通道2,产生1KHz方波,送到扬声器,使扬声器发声

outportb(0x43,0xb6);//CW=10110110B,通道2,先低字节,再高字节,方

式3,二进制

outportb(0x42,0xa6);//lowbyte,

outportb(0x42,0x04);//highbyte,0x04a6=1190,f=1.19MHz,out=f/1190=1000Hz

sys_int_08=getvect(0x08);//保存系统的中断向量

setvect(0x08,my_int_08);//设置系统向量

while

(1)

{if(flag==1)

{flag=0;

printf("%d",sec);

if(sec==Time_up)break;

}

}

printf("TimerUp!

\n\n");

outportb(0x61,sys_PB);//恢复系统的PB口状态

setvect(0x08,sys_int_08);//恢复系统的中断向量}

五,实验结果

六实验总结

通过本次实验使我进一步了解了可编程并行接口8253和8255的工作方式及编程原理,可以编写简单的c语言程序控制8255A实现一些基本功能,了解了定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法熟悉了拦截PC机中断向量的TC++编程方法但是在实验过程中同样出现了一些问题,经过自己及同组人的共同努力最终解决了问题,也加深了对8255A的了解。

学习了很多知识。

实验3基于DLL与HOOK技术的键盘消息拦截与读音一实验目的

1(了解MFCDLL动态连接库的编程方法;

2(了解HOOK技术和回调函数的运行机制;

3(学习MFC中加载动态连接库的方法。

二实验指导

1(HOOK的基本概念

在Windows下,当硬件或软件产生中断时,系统会发送一个消息给用户程序。

因此,用户程序一般不使用中断,而是采用拦截系统消息的方法。

为了拦截不属于本应用程序

的消息,拦截程序必须得到系统的认可,由系统安装成全局运行。

HOOK即通常所说的钩子。

实际上,HOOK就是上面所说的消息拦截程序段。

通过系统调用,把它挂入系统。

每当HOOK所希望的消息发出,在没有到达目的窗口前,HOOK程序就先捕获该消息,得到控制权。

HOOK程序先处理该消息,再向系统传递该消息。

也可以丢弃该消息。

系统维护着一个HOOK链,最近安装的HOOK总放在链的开始,从而得到优先执行。

2(HOOK函数的形式及其安装方法

HOOK函数在程序中应为全局函数,即:

HOOK函数不应写在一个类中。

HOOK函数是一个消息响应函数,由系统调用,应以回调函数的形式出现,其格式为:

LRESULT_declspec(dllexport)_stdcallCALLBACKKeyboardProc(

intnCode,//若为HC_ACTION,说明后两参数含有击键的消息WPARAMwParam,//虚键码

LPARAMlParam//击键的有关信息,如重复次数等

写好HOOK函数后,应进行安装,才能得到系统的回调。

安装HOOK的函数为:

HHOOKSetWindowsHookEx(

intidHook,//钩子的类型,按键为WH_KEYBOARD

HOOKPROClpfn,//钩子函数的地址

HINSTANCEhMod,//包含钩子函数的模块句柄

DWORDdwThreadId//指定监视的线程。

若为NULL,则为全局钩子

);

3(程序要求

(1)编写含有按键HOOK的DLL,要求当按键时,能读出按键名称

(2)编写安装DLL的应用程序。

三实验步骤

1(建立DLL

(1)启动VC++,选File\New

(2)进入MFCAppWizard_step1of1(3)在KeyHook.cpp文件中添加代码:

#include"stdafx.h"installhook()#include"KeyHook.h"{

#include"mmsystem.h"hkb=SetWindowsHookEx(WH_KEYBOARD,(H

#ifdef_DEBUGOOKPROC)KeyboardProc,hInst,0);

#definenewDEBUG_NEWreturnTRUE;#undefTHIS_FILE}

staticcharTHIS_FILE[]=__FILE__;BOOL__declspec(dllexport)UnHook()

#endif{

#pragmadata_seg(".SHARDAT")BOOLunhooked=

UnhookWindowsHookEx(hkb);staticHHOOKhkb=NULL;//定义HOOK

returnunhooked;句柄

#pragmadata_seg()}

LRESULTHINSTANCEhInst;//定义本实例的

__declspec(dllexport)__stdcall句柄

BOOL__declspec(dllexport)__stdcallCALLBACKKeyboardProc(intnCode,

WPARAMwParam,LPARAMlParam)BEGIN_MESSAGE_MAP(CKeyHookApp,{CWinApp)

if(((DWORD)lParam&0x40000000)&&END_MESSAGE_MAP()

(HC_ACTION==nCode))CKeyHookApp:

:

CKeyHookApp(){}

{CKeyHookApptheApp;

if(wParam>='A'&&wParam<='Z'){CKeyHookApp:

:

InitInstance()

char{

KeyName[20],temp[10];AFX_MANAGE_STATE(AfxGetStaticModule

strcpy(KeyName,"sound\\");State());

temp[0]=wParam;temp[1]=0;hInst=AfxGetInstanceHandle();

strcat(KeyName,temp);returnCWinApp:

:

InitInstance();

strcat(KeyName,".wav");}

sndPlaySound(KeyName,SND_ASYNC);intCKeyHookApp:

:

ExitInstance()

}{

}UnHook();

LRESULTRetVal=CallNextHookEx(hkb,returnCWinApp:

:

ExitInstance();nCode,wParam,lParam);}

return(RetVal);}

在keypress.cpp添加如下文件:

#include"stdafx.h"CDialog:

:

DoDataExchange(pDX);#include"KeyPress.h"}

#include"KeyPressDlg.h"BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)#ifdef_DEBUGEND_MESSAGE_MAP()

#definenewDEBUG_NEWCKeyPressDlg:

:

CKeyPressDlg(CWnd*#undefTHIS_FILEpParent/*=NULL*/)

staticcharTHIS_FILE[]=__FILE__;:

CDialog(CKeyPressDlg:

:

IDD,#endifpParent)

classCAboutDlg:

publicCDialog{

{m_hIcon=AfxGetApp()->LoadIcon(IDR_Mpublic:

AINFRAME);

CAboutDlg();}

enum{IDD=IDD_ABOUTBOX};void

protected:

CKeyPressDlg:

:

DoDataExchange(CDataEx

virtualvoidchange*pDX)

DoDataExchange(CDataExchange*pDX);{

protected:

CDialog:

:

DoDataExchange(pDX);

DECLARE_MESSAGE_MAP()}

};BEGIN_MESSAGE_MAP(CKeyPressDlg,CAboutDlg:

:

CAboutDlg():

CDialog)

CDialog(CAboutDlg:

:

IDD){}ON_WM_SYSCOMMAND()

voidON_WM_PAINT()

CAboutDlg:

:

DoDataExchange(CDataExchaON_WM_QUERYDRAGICON()nge*pDX)END_MESSAGE_MAP()

{BOOLCKeyPressDlg:

:

OnInitDialog()

{{

CDialog:

:

OnInitDialog();CAboutDlgdlgAbout;

ASSERT((IDM_ABOUTBOX&0xFFF0)==dlgAbout.DoModal();IDM_ABOUTBOX);}

ASSERT(IDM_ABOUTBOX<0xF000);else

CMenu*pSysMenu={

GetSystemMenu(FALSE);CDialog:

:

OnSysCommand(nID,

if(pSysMenu!

=NULL)lParam);

{}

CStringstrAboutMenu;}

strAboutMenu.LoadString(IDS_ABOUTBOvoidCKeyPressDlg:

:

OnPaint()X);{

if(!

strAboutMenu.IsEmpty())if(IsIconic())

{{

pSysMenu->AppendMenu(MF_SEPARATOR);CPaintDCdc(this);//device

contextforpainting

pSysMenu->AppendMenu(MF_STRING,SendMessage(WM_ICONERASEBKGND,IDM_ABOUTBOX,strAboutMenu);(WPARAM)dc.GetSafeHdc(),0);

}intcxIcon=

}GetSystemMetrics(SM_CXICON);

SetIcon(m_hIcon,TRUE);intcyIcon=

//SetbigiconGetSystemMetrics(SM_CYICON);

SetIcon(m_hIcon,FALSE);//SetCRectrect;

smalliconGetClientRect(&rect);

staticHINSTANCEhinstDLL;intx=(rect.Width()-cxIcon+1)/2;

BOOL(CALLBACK*inshook)();inty=(rect.Height()-cyIcon+1)/2;

if(hinstDLL=LoadLibrary((LPCTSTR)"kdc.DrawIcon(x,y,eyhook.dll"))m_hIcon);

{}

inshook=GetProcAddress(hinstDLL,else

"installhook");{

inshook();CDialog:

:

OnPaint();

}}

returnTRUE;//returnTRUEunless}

yousetthefocustoacontrolHCURSOR

}CKeyPressDlg:

:

OnQueryDragIcon()voidCKeyPressDlg:

:

OnSysCommand(UINT{

nID,LPARAMlParam)return(HCURSOR)m_hIcon;{}

if((nID&0xFFF0)==IDM_ABOUTBOX)

四,实验结果:

五,实验总结:

通过本次实验我了解了MFCDLL动态连接库的编程方法,了解HOOK技术和回调函数的运行机制,同时也学习了一些MFC中加载动态连接库的方法。

了解了DLL的可重用特性。

语言无关特性等等。

自己的实践能力也得到了很大的锻炼。

实验4MFC串行通信程序设计

一实验目的

1(了解使用MFC编写Windows应用程序的一般方法,熟悉WindowsAPI接口函数的使用;

2(熟悉定时器Timer()函数、RS232API接口函数的使用,两者之间的协调工作。

3(程序要求

(1)建立基于对话框的MFC程序框架,实现数据的发送和接收;

(2)调试程序时,本机发送,本机接收;

(3)将程序改为两机之间通信,一机发送,另一机接收。

三实验步骤

1(建立基于对话框的MFC工程:

以下假设工程名为Scom,对话框的类(Class)为

CscomDlg,对应的头文件为ScomDlg.h,源程序文件为ScomDlg.cpp。

#include"stdafx.h"protected:

#include"Scom.h"DECLARE_MESSAGE_MAP()

#include"ScomDlg.h"};

#ifdef_DEBUGCAboutDlg:

:

CAboutDlg():

#definenewDEBUG_NEWCDialog(CAboutDlg:

:

IDD)

#undefTHIS_FILE{

staticcharTHIS_FILE[]=}

__FILE__;void

#endifCAboutDlg:

:

DoDataExchange(CDataEx

classCAboutDlg:

publicchange*pDX)

CDialog{

{CDialog:

:

DoDataExchange(pDX

public:

);

CAboutDlg();}

enum{IDD=IDD_ABOUTBOX};BEGIN_MESSAGE_MAP(CAboutDlg,

}}AFX_DATACDialog)

protected:

END_MESSAGE_MAP()

virtualvoidCScomDlg:

:

CScomDlg(CWnd*

DoDataExchange(CDataExchange*pParent/*=NULL*/)

pDX);//DDX/DDVsupport:

CDialog(CScomDlg:

:

IDD,

}}AFX_VIRTUALpParent)

{{

m_SenTxt=_T("");

m_Receive=_T("");pSysMenu->AppendMenu(MF_SEPARAT

m_hIcon=OR);

AfxGetApp()->LoadIcon(IDR_MAINFRA

ME);pSysMenu->AppendMenu(MF_STRING,

}IDM_ABOUTBOX,strAboutMenu);

void}

CScomDlg:

:

DoDataExchange(CDataExc}

hange*pDX)SetIcon(m_hIcon,TRUE);

{//Setbigicon

CDialog:

:

DoDataExchange(pDXSetIcon(m_hIcon,FALSE););//Setsmallicon

DDX_Text(pDX,IDC_SendTxt,hCom=CreateFile("COM1",m_SenTxt);GENERIC_READ|GENERIC_WRITE,

DDX_Text(pDX,IDC_Receive,0,NULL,m_Receive);OPEN_EXISTING,0,NULL);

}if(hCom==(HANDLE)-1)

BEGIN_MESSAGE_MAP(CScomDlg,{

CDialog)MessageBox("创建串口1接

ON_WM_SYSCOMMAND()口实例失败","未找到COM1口

ON_WM_PAINT()",MB_ICONSTOP|MB_OK);

ON_WM_QUERYDRAGICON()returnTRUE;

ON_BN_CLICKED(IDC_SEND,}

OnSend)DCBdcb;

ON_WM_TIMER()GetCommState(hCom,&dcb);

END_MESSAGE_MAP()

BOOLCScomDlg:

:

OnInitDialog()BuildCommDCB("COM1:

1200,n,8,1",&d

{cb);//用字符串方式填充DCB结构.

CDialog:

:

OnInitDialog();SetCommState(hCom,&dcb);

ASSERT((IDM_ABOUTBOX&ComTimeOut;

0xFFF0)==IDM_ABOUTBOX);ComTimeOut.ReadIntervalTime

ASSERT(IDM_ABOUTBOX

0xF000);

CMenu*pSysMenu=ComTimeOut.ReadTotalTimeoutMultipGetSystemMenu(FALSE);lier=0;

if(pSysMenu!

=NULL)ComTimeOut.ReadTotalTimeout

{Constant=0;

CStringstrAboutMenu;ComTimeOut.Wri

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2