接口课设实验报告.docx
接口课设实验报告接口课设试验报告 本文关键词:接口,试验,报告接口课设试验报告 本文简介:接口课设试验报告计算机0206班熊兰君(012002022804)一绪论本试验是一个利用接口硬件平台开发的微机模拟系统,它不仅考查了我们的对接口硬件的驾驭和理解程度,同样了熬炼了我们的编程实力。在组长的带领下我们顺当完成了这次试验课设,并收获了许多的相关学问,而且熬炼了我们的团队精神,受益匪浅。二接口课设试验报告 本文内容:接口课设试验报告计算机0206班熊兰君(012002022804)一绪论本试验是一个利用接口硬件平台开发的微机模拟系统,它不仅考查了我们的对接口硬件的驾驭和理解程度,同样了熬炼了我们的编程实力。在组长的带领下我们顺当完成了这次试验课设,并收获了许多的相关学问,而且熬炼了我们的团队精神,受益匪浅。二试验目的驾驭接口硬件开发平台的运用方法,利用现有的试验平台和PC机,组成一个微机模拟应用系统;驾驭基本接口电路的综合应用驾驭接口电路的驱动程序和界面软件的设计与编制,学会调试与测试接口软件的一般方法微机接口技术及接口芯片的综合应用(重点)三试验题目及要求选课系统学生通过下位机进行选课,上位机对选课信息进行统计。进入系统须要密码,密码错误或者操作错误时报警。系统由一个主控机监控和若干个下位机组成,主控机负责数据处理,下位机负责访问接口。四试验内容这次我们所做的选课系统功能还比较强大,它主要由主控机,下位机,执行部件构成。1.机实现管理员的功能,界面如下:主界面主要是便利管理员管理学生基本信息,课程基本信息,选课基本信息。它的功能有:1.增加基本信息;2.删除基本信息;3.查询基本信息。留意,全部的数据信息都存放在Sqlserver数据库上,程序先分析管理员的指令,然后通过ODBC(OpenDataBaseConnecttion)接口操作数据库。另外,主控机程序实现的另一个功能,也就是本程序的核心功能,就是接受下位机的选课信息。当操作员按下“接受选课”按钮后,主控机程序起先接受远程选课信息,接收后会将该信息存入Sqlserver数据库中。2.下位机是给选课学生的信息窗口,它同时也起到了主控机和执行部件信息传送的作用,而实现这个功能是通过接口试验台上的可编程串行接口芯片8251。但是选课还是通过执行部件,而不是通过下位机,这一点是非常重要的。以下就下位机的界面:下位机程序的功能是接受用户选课信息,然后将该信息发送给上位机。须要选课的学生,可以先点击“起先选课”的按钮,然后用拨码开关输入想要选择的功能。功能1代表选课,功能2代表查询全部课程,功能3表示结束选课。选功能2后,程序会通过文本框输出全部可供选择的课程的相关信息。选功能1后,程序会一步一步提示用户来操作。这里有两个问题,第一是假如学生输入的密码错误,上位机会发送回代表错误的信息,下位机依据该信息驱动LED显示灯报警;其次,假如学生所选的课程不存在,上位机亦会发送回相应错误代号,下位机依据该代号启动报警程序。3执行部件由接口试验台上的芯片:可编程的并行I/O接口芯片8255,可编程计数器8253,LED显示灯,手动开关和一个按钮开关组成。它主要做为学生选课的输入和警报提示。学生通过手动开关拨出用户名密码,还有想选的课程号,按下按钮表示确定。还可以选择查看课程号和课程名。以上就是本系统的大致功能,当然这只是一个模拟的系统,它实现的功能都很简洁。真刚要达到好用的阶段,还有许多细微环节须要完善。但基本的框架,在本系统中已经得到了体现。五.实施安排及分工分工如下:首先夏永同学负责整个系统框架的设计,odbc数据源的配置以及界面的设计。吴莎同学和武孟梦同学负责上位机各个功能的实现以及与下位机的通信。我和贾玉芳同学负责下位机各个功能的实现以及硬件连接。同时我们全部人都参加了系统的测试工作。首先是硬件的连接,根据我们的也许的设计,下位机有一个很重要的的功能,就是反馈执行部件的选择信息,而这项功能除了软件的设计外,最重要的就是硬件连接。对于执行部件与下位机的通信重要是靠可编程并口8255实现的,对于8255我们用到了它的A口进行输出,B口进行输入,C口作为限制口。PA0PA7依次连接的是试验台上的八个灯,其作用是当用户名和密码不符合主控机中已存的相应的用户名和密码时,这八个灯就会轮回闪耀产生报警的效果。PB0PB7依次与试验台上八个拨码开关连接,当用户要输入数字信息时,通过这八个开关进行输入(留意这里的数字是用二进制输入而不是八位十进制数字),起先的时候我们将凹凸位接反了,干脆导致整个系统混乱,因为功能项输入错误。PC0口作为SW1的输入口,当SW1按下时,会给PC0一个电平,程序轮询查看,若发觉PC0口变为“1”时,就将拨码开关的数字传送给下位机进行处理,所以这里PC0作为限制作用,这里还要留意在连接SW1时,还要经过一个74SL373芯片,这个芯片的OE#口必需和8255的PC4口连接,用PC4口来限制74SL373,当PC4等于“1”时,74SL373关闭,这时SW1就没有任何作用了。还有就是负责双机通信的8251芯片,这里我们用一根连接线将主控机和下位机到26芯插座连接起来进行近距离通信,这个在试验平台已经完成好了,所以不再赘述。限制8251时钟的是8253芯片,它的OUT2端与8251的TxC和RxC相连进行限制,而8253的时钟脉冲端CLK2与1MHZ脉冲信号进行连接,至于它的GATE2与8255的PC6口连接进行脉冲源的限制,以上就是下位机与执行部件的硬件连接。接下来就是程序的设计了,我们起先用的C语言进行编写,后来因为要进一步完善系统功能,要用到ODBC连接数据库,还有界面的编写就将持续移植到VC上运用C+语言。程序主要实现的功能有:1.将用户名和密码输入并传给主控机进行正确性的推断;2.当用户选择“1”号功能时,用户可以进行选课,下位机将选课信息(学生号和课程号)传给主控机并存储起来;3.当用户选择“2”号功能时,用户可以查看选课信息(课程号和课程名);4.当用户选择“3”功能时,退出选课系统。这个程序根据功能来划分两大部分,一个是与传送信息有关程序,二者是与界面有关的程序。由于界面相关程序由夏永同学负责,所以这里就不多说了,我们主要负责的是传送信息有关的程序,也许如下:#definePORTTALK_TYPE40001#defineIOCTL_READ_PORT_UCHAR/CTL_CODE(PORTTALK_TYPE,0x904,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineIOCTL_WRITE_PORT_UCHAR/CTL_CODE(PORTTALK_TYPE,0x905,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineIOCTL_GETINTCODE_PORT_UCHAR/CTL_CODE(PORTTALK_TYPE,0x906,METHOD_BUFFERED,FILE_ANY_ACCESS)unsignedcharOpenPortTalk(void);voidClosePortTalk(void);voidoutportb(unsignedshortPortAddress,unsignedcharbyte);unsignedcharinportb(unsignedshortPortAddress);portb(unsignedshortPortAddress);/myport.cpp#include“stdafx.h“#include“conio.h“#include“windows.h“#include#include“myport.h“HANDLEPortTalk_Handle=NULL;/*界面相关*/unsignedcharOpenPortTalk()PortTalk_Handle=CreateFile(“/./MPNP1“,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(PortTalk_Handle=INVALID_HANDLE_VALUE)return-1;return0;voidClosePortTalk()CloseHandle(PortTalk_Handle);voidoutportb(unsignedshortPortAddress,unsignedcharbyte)/*写字符传到对应地/*址的端口DWORDdwError=0;unsignedinterror;DWORDBytesReturned;unsignedcharBuffer3;/*BUFFER和pBUFFER是传送过程中的unsignedcharpBuffer;/*中间缓冲区pBuffer=(unsignedchar)pBuffer=(unsignedchar)PortAddressBuffer2=byte;error=DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,unsignedcharinportb(unsignedshortPortAddress)/*读对应地址的端口的信息unsignedinterror;DWORDBytesReturned;unsignedcharBuffer3;/*BUFFER和pBUFFER是传送过程中的unsignedshortpBuffer;/*中间缓冲区pBuffer=(unsignedshort)pBuffer=(unsignedchar)PortAddresserror=DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,return(Buffer0);/classCClientDlg:publicCDialogpublic:CClientDlg(CWnd*pParent=NULL);voidInit8251(intstate,intwork);/*初始化8251芯片voidTrans(inttran);/*通过8251芯片传送数值tranintRecei();/*接收发送到8251芯片的数值,便返回该值voidset_bps(intbps);/*设置8253计数器的计数初值voidsTrans(chars);/*传送字符串svoidsRecei(chars);/*接受一个字符串,并存入s中voidAddSC(intsid,intcid);/*添加一个选课记录voidsw();/*检测开关sw1有没有按下,如没有按下,则等待voidWarning(intlevel);/*当用户名和密码不对时进行报警enumIDD=IDD_SERVER_DIALOG;CEditm_Output;/*系统信息CStringm_sid;/*学生信息中的学号信息CStringm_sname;/*学生信息中的学生姓名信息CStringm_password;/*密码信息CStringm_cid;/*课程信息中的课程号信息CStringm_cname;/*课程信息中的课程名信息CStringm_ssid;/*选课信息中的学生号信息CStringm_ccid;/*选课信息中的课程号信息/AFX_DATA/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CServerDlg)public:virtualLRESULTDisplayMessage(WPARAMwParam,LPARAMlParam);protected:virtualvoidDoDataExchange(CDataExchange*pDX);/DDX/DDVsupport/AFX_VIRTUALprotected:/Generatedmessagemapfunctions/AFX_MSG(CServerDlg)virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();afx_msgvoidOnDestroy();afx_msgvoidOnButton1();/查询全部课程afx_msgvoidOnButton2();/选课afx_msgvoidOnButton3();/确定/AFX_MSGDECLARE_MESSAGE_MAP();/CClientDlg.cpp#include“StdAfx.h“#include“Server.h“#include“ServerDlg.h“#include“ServerDlg.h“#include#definefactor16/*波特率因子16unsignedlongintclk=1193182;/*8251输入时钟频率(十六进制表示)CClientDlg:CClientDlg(CWnd*pParent):CDialog(CClientDlg:IDD,pParent)/AFX_DATA_INIT(CServerDlg)m_sid=_T(“);m_password=_T(“);m_cid=_T(“);/AFX_DATA_INIT/以上是程序面板上文本框对应的变量的定义voidCClientDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CServerDlg)DDX_Control(pDX,IDC_EDIT1,m_Output);DDX_Text(pDX,IDC_EDIT2,m_sid);DDX_Text(pDX,IDC_EDIT4,m_password);DDX_Text(pDX,IDC_EDIT5,m_cid);/AFX_DATA_MAP/以上是变量与资源的对应关系BEGIN_MESSAGE_MAP(CServerDlg,CDialog)/AFX_MSG_MAP(CServerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_DESTROY()ON_BN_CLICKED(IDC_BUTTON3,OnButton3)ON_BN_CLICKED(IDC_BUTTON1,OnButton1)ON_BN_CLICKED(IDC_BUTTON2,OnButton2)/AFX_MSG_MAPEND_MESSAGE_MAP()/以上是消息与按钮对应关系的说明voidCClientDlg:Init8251(intstate,intwork)/*8251的初始化*/outportb(IO_BASE+9,0x0);/*空操作*/outportb(IO_BASE+9,0x40);/*内部复位(使D6=1)*/outportb(IO_BASE+9,0x4e);/*方式吩咐字,,查课本p180*/outportb(IO_BASE+9,0x27);/*工作吩咐字,例子p183*/voidCClientDlg:set_bps(intbps)/*计数器设置inti,sendhigh,sendlow;i=clk/bps;i=i/factor;/计算计数初值sendhigh=(i>>8)sendlow=ioutportb(IO_BASE+7,0xb6);outportb(IO_BASE+6,sendlow);/装计数初值低字节outportb(IO_BASE+6,sendhigh);/装计数初值高字节voidCClientDlg:Trans(inttran)/发送字符intstate;dostate=inportb(IO_BASE+9);while(!(state=stateoutportb(IO_BASE+8,tran);/*发送字符*/intCClientDlg:Recei()/接收字符intr,state;dostate=inportb(IO_BASE+9);while(!(state=stater=inportb(IO_BASE+8);/*接收字符*/returnr;voidCClientDlg:sTrans(chars)/传送字符串intlength=strlen(s);Trans(length);inti=0;for(;i#include“myport.h“HANDLEPortTalk_Handle=NULL;/*HandleforPortTalkDriver/unsignedcharOpenPortTalk()PortTalk_Handle=CreateFile(“/./MPNP1“,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(PortTalk_Handle=INVALID_HANDLE_VALUE)return-1;return0;voidClosePortTalk()CloseHandle(PortTalk_Handle);voidoutportb(unsignedshortPortAddress,unsignedcharbyte)DWORDdwError=0;unsignedinterror;DWORDBytesReturned;unsignedcharBuffer3;unsignedcharpBuffer;pBuffer=(unsignedchar)pBuffer=(unsignedchar)PortAddressBuffer2=byte;error=DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,unsignedcharinportb(unsignedshortPortAddress)unsignedinterror;DWORDBytesReturned;unsignedcharBuffer3;unsignedshortpBuffer;pBuffer=(unsignedshort)pBuffer=(unsignedchar)PortAddresserror=DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,return(Buffer0);/ServerDlg.h:classCServerDlg:publicCDialogpublic:CServerDlg(CWnd*pParent=NULL);voidInit8251(intstate,intwork);/初始化8251芯片voidTrans(inttran);/通过8251芯片传送数值tranintRecei();/接收发送到8251芯片的数值,便返回该值voidset_bps(intbps);/设置8253计数器的计数初值intgetPassword(intssid);/返回学号为ssid的同学的密码intcheckCid(intccid);/检查课号为ccid的课程是否存在voidsTrans(chars);/传送字符串svoidsRecei(chars);/接受一个字符串,并存入s中voidAddSC(intsid,intcid);/添加一个选课记录enumIDD=IDD_SERVER_DIALOG;CEditm_Output;CStringm_sid;CStringm_sname;CStringm_password;CStringm_cid;CStringm_cname;CStringm_ssid;CStringm_ccid;/AFX_DATA/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CServerDlg)public:virtualLRESULTDisplayMessage(WPARAMwParam,LPARAMlParam);protected:virtualvoidDoDataExchange(CDataExchange*pDX);/DDX/DDVsupport/AFX_VIRTUALprotected:/Generatedmessagemapfunctions/AFX_MSG(CServerDlg)virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();afx_msgvoidOnDestroy();afx_msgvoidOnButton3();afx_msgvoidOnButton1();afx_msgvoidOnButton2();afx_msgvoidOnButton5();afx_msgvoidOnButton4();afx_msgvoidOnButton6();afx_msgvoidOnButton7();afx_msgvoidOnButton11();afx_msgvoidOnButton12();/AFX_MSGDECLARE_MESSAGE_MAP();/ServerDlg.cpp#include“StdAfx.h“#include“Server.h“#include“ServerDlg.h“#include“ServerDlg.h“#include#definefactor16/波特率因子16unsignedlongintclk=1193182;/8251输入时钟频率(十六进制表示)CServerDlg:CServerDlg(CWnd*pParent):CDialog(CServerDlg:IDD,pParent)/AFX_DATA_INIT(CServerDlg)m_sid=_T(“);m_sname=_T(“);m_password=_T(“);m_cid=_T(“);m_cname=_T(“);m_ssid=_T(“);m_ccid=_T(“);/AFX_DATA_INIT/以上是程序面板上文本框对应的变量的定义voidCServerDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CServerDlg)DDX_Control(pDX,IDC_EDIT1,m_Output);DDX_Text(pDX,IDC_EDIT2,m_sid);DDX_Text(pDX,IDC_EDIT3,m_sname);DDX_Text(pDX,IDC_EDIT4,m_password);DDX_Text(pDX,IDC_EDIT5,m_cid);DDX_Text(pDX,IDC_EDIT6,m_cname);DDX_Text(pDX,IDC_EDIT7,m_ssid);DDX_Text(pDX,IDC_EDIT8,m_ccid);/AFX_DATA_MAP/以上是变量与资源的对应关系BEGIN_MESSAGE_MAP(CServerDlg,CDialog)/AFX_MSG_MAP(CServerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_DESTROY()ON_BN_CLICKED(IDC_BUTTON3,OnButton3)ON_BN_CLICKED(IDC_BUTTON1,OnButton1)ON_BN_CLICKED(IDC_BUTTON2,OnButton2)ON_BN_CLICKED(IDC_BUTTON5,OnButton5)ON_BN_CLICKED(IDC_BUTTON4,OnButton4)ON_BN_CLICKED(IDC_BUTTON6,OnButton6)ON_BN_CLICKED(IDC_BUTTON7,OnButton7)ON_BN_CLICKED(IDC_BUTTON11,OnButton11)ON_BN_CLICKED(IDC_BUTTON12,OnButton12)/AFX_MSG_MAPEND_MESSAGE_MAP()/以上是消息与按钮对应关系的说明voidCServerDlg:Init8251(intstate,intwork)outportb(IO_BASE+9,0x0);outportb(IO_BASE+9,0x40);outportb(IO_BASE+9,0x4e);outportb(IO_BASE+9,0x27);voidCServerDlg:set_bps(intbps)inti,sendhigh,sendlow;i=clk/bps;i=i/factor;/计算计数初值sendhigh=(i>>8)sendlow=ioutportb(IO_BASE+7,0xb6);outportb(IO_BASE+6,sendlow);/装计数初值低字节outportb(IO_BASE+6,sendhigh);/装计数初值高字节voidCServerDlg:Trans(inttran)/发送字符intstate;dostate=inportb(IO_BASE+9);while(!(state=stateoutportb(IO_BASE+8,tran);/*发送字符*/intCServerDlg:Recei()/接收字符intr,state;dostate=inportb(IO_BASE+9);while(!(state=stater=inportb(IO_BASE+8);/*接收字符*/returnr;intCServerDlg:getPassword(intssid)/依据学号ssid查询数据库中该记录的psswordCDatabasedatabase;database.Open(_T(“select“);/数据源名称CStringtemp=“;intpass;CRecordsetrecset;recset.m_pDatabase=CStringstr=“;CDBVariantvar;str.Format(“%d“,ssid);CStringReq=“SELECTFROMStwheresid=“+str+“;“;str=“;recset.Open(CRecordset:forwardOnly,Req,CRecordset:readOnly);if(recset.IsEOF()m_Output.ReplaceSel(“用户不存在!“);return0;elsem_Output.ReplaceSel(“该用户存在!/r/n“);recset.GetFieldValue(“password“,var);pass=var.m_iVal;recset.Close();returnpass;intCServerDlg:checkCid(intccid)/检查课程号为ccid的课程是否存在CDatabasedatabase;database.Open(_T(“select“);/数据源名称CStringtemp=“;CRecordsetrecset;recset.m_pDatabase=CStringstr=“;CDBVariantvar;str.Format(“%d“,ccid);CStringReq=“SELECTFROMCowherecid=“+str+“;“;str=“;recset.Open(CRecordse篇2:微机原理与接口技术复习总结微机原理与接口技术复习总结 本文关键词:微机,复习,接口,原理,技术微机原理与接口技术复习总结 本文简介:微机原理与接口技术期末复习要点(选择、填空、推断、简答、分析、设计)第一章微型计算机的基础学问1、二进制数、十进制数,十六进制数转化P162、CPU的数据线与计算机中表示的数值范围:只考无符号数P18n位最大数最小数无符号数0补码源码其次章微处理器与系统结构1、8086CPU的两个独立的功能部微机原理与接口技术复习总结 本文内容:微机原理与接口技术期末复习要点(选择、填空、推断、简答、分析、设计)第一章微型计算机的基础学问1、二进制数、十进制数,十六进制数转化P162、CPU的数据线与计算机中表示的数值范围:只考无符号数P18n位最大数最小数无符号数0补码源码其次章微处理器与系统结构1、8086CPU的两个独立的功能部件、各部件的组成与功能P2224(至少5题)名称:总线接口部件(BIU)和执行部件(EU)BIU和EU的独立工作体现了一种指令流水技术BIU组成:20位地址加法器;4个段寄存器和1个指令指针寄存器;指令队列缓冲器;输入/输出限制电路。(记图)EU组成:ALU(算术逻辑单元);8个通用寄存器;标记寄存器FR;执行部件限制电路;(记图)BIU功能:取指令、读/写存储器、读/写I/O接口(其实就是访问存储器和接口电路)EU功能:执行指令2、CPU内部寄存器:SP、IPP25、P26CPU中共有14个寄存器。典型的有SP/IP,不能干脆修改,完成操作后值自动加减(隐含的)。SP:堆栈指针寄存器(向下生成,栈底地址最大)压栈pushSP-2(占两个单元)IP:指令指针寄存器(只加)IP+指令长度例如:32位,取一条指令+43、CPU的地址线数量与最大寻址空间P27地址线(根)最大寻址空间n8086有20跟4、标记寄存器的限制与状态位数及各标记位(ZF、IF、OF)表示的内容P2526标记寄存器是:EU的组成部分共9个。表示状态的有6个,表示限制的有3个。零标记ZF(ZeroFlag):若运算结果为0,则ZF1;否则ZF0。中断标记IF(InterruptEnableFlag):假如IF置“1”,则CPU可以接受可屏蔽中断恳求;反之,则CPU不能接受可屏蔽中断恳求。溢出标记OF(OverflowFlag):若运算过程中发生了“溢出”,则OF1。5、8086可屏蔽中断恳求信号与中断响应信号的有效电平P33、P34(信号线名称、什么时候有效、响应的条件、8259A和8086的连接的信号线叫什么)INTR(InterruptRequest)可屏蔽中断恳求信号,输入、高电平有效。(InterruptAcknowledge)中断响应信号,输出、低电平有效。6、CPU响应INTR引脚上来的中断恳求的条件P33或P104条件:IF=1第三章存储器1、存储器地址线、数据线与存储容量的计算P40存储容量=字数×字长2、8086系统中的存储器奇、偶分体结构的连线图PPT21第四章汇编语言及