微机接口大作业

合集下载

微机接口作业整理

微机接口作业整理

作业一1.字长=8,用补码形式完成下列十进制数运算。

写出补码运算的结果并讨论结果是否有溢出?A(+75)补+(-6)补=101000101(填写连带进位的9个比特)是否溢出?否2.字长=8,用补码形式完成下列十进制数运算。

写出补码运算的结果并讨论结果是否有溢出?(B)(-35)补+(-75)补= (110010010)补(填写连带进位的9个比特)是否溢出? 否3.字长=8,用补码形式完成下列十进制数运算。

写出补码运算的结果并讨论结果是否有溢出?(C)(-85)补+(15)补= (010111010)补(填写连带进位的9个比特)是否溢出?否4.字长=8,用补码形式完成下列十进制数运算。

写出补码运算的结果并讨论结果是否有溢出?(D)(+120)补+(+18)补= (010001010)补(填写连带进位的9个比特)是否溢出?是5.(11101.1011)2=(29.6875)106. (147)10=(10010011)27. (147)10=(93)168. (3AC)16=(940)109.(10010110)BCD= (1100000)210.字长=8,[-1]补=(FF)1611.字长=8,[x]补=(A5),则x= (-5B)1612.设字长=8,X=(8E)16, 当X分别为原码的时候,其真值=(-0E)1613.设字长=8,X=(8E)16, 当X分别为补码的时候,其真值=(-72)1614.设字长=8,X=(8E)16, 当X分别为反码的时候,其真值=(-71)1615.设字长=8,X=(8E)16, 当X分别为无符号数的时候,其真值=(8E)16作业二1. 主存储器和CPU之间增加高速缓冲器的主要目的是(b)a. 扩大CPU通用寄存器数量b. 解决主存与CPU之间速度匹配问题c. 扩大主存储器容量2.中央处理机(CPU)是指(b)a. 控制器b. 运算器和控制器c. 运算器3.若内存容量为64KB,则访问内存所需地址线( c)条a. 20b. 18c. 164.断电后存储的资料会丢失的存储器是(a)a. RAMb. ROMc. 硬盘5. 8086/8088 CPU中ES是(b)a. 代码段寄存器b. 附加段寄存器c. 数据段寄存器6.能够被CPU直接识别的语言是(c)a. 汇编语言b. 高级语言c. 机器语言7.运算器的主要功能是进行(c)a. 算术运算b. 初等函数运算c. 逻辑运算与算术运算8.冯·诺依曼体制中最核心的思想是计算机采用(存储程序)工作方式9.在计算机中使用的连同数符一起数码化的数称为(机器数)10.运算器由多种部件组成,其核心部件是(ALU )作业三1. BP寄存器约定访问的逻辑段是数据段(×)2. 一个源程序中可以包含多个逻辑段。

计算机接口技术课堂大作业(2)

计算机接口技术课堂大作业(2)

计算机接口课堂大作业(2)一、选择题(每题1分,共20分)1. 8255A 引脚信号WR -----=0,CS -----=0,A1=1,A0=1时,表示( )。

(A) CPU 向数据口写数据 (B) CPU 向控制口送控制字 (C) CPU 读8255A 控制口 (D) 无效操作2. 在数据传送过程中,数据由串行变为并行,或由并行变为串行,这种转换是通过接口电路中的什么实现的( )。

(A) 数据寄存器 (B) 移位寄存器 (C) 锁存器 (D) 状态寄存器 3. 8255A 既可作数据输入、出端口,又可提供控制信息、状态信息的端口是( )。

(A) B 口 (B) A 口 (C) A 、B 、C 三端口均可以 (D) C 口4. 设串行异步通信的数据格式是:1个起始位,7个数据位,1个校验位,1个停止位,若传输率为1200,则每秒钟传输的最大字符数为( )。

(A )10个 (B )110个 (C )120个 (D )240个5. 某系统采用8255A 作并行I/O 接口,初始化时CPU 所访问的端口地址为0CBH ,并设定为方式1输出,则A 口的口地址应为( )。

(A) 0C8H (B) 0CAH (C) 0CH (D) 0EH6. DMA 工作方式时,总线上的各种信号是由( )发送的。

(A) 中断控制器(B) CPU(C) 存储器 (D) DMA 控制器7. 异步串行通信的主要特点是( )。

(A) 通信双方不需要同步 (B) 传送的每个字符是独立发送的 (C) 字符之间的间隔时间应相同 (D) 传送的数据中不含有控制信息8. 连接到68000H ~6FFFF 地址范围上的存储器用8K ×8位芯片构成,该芯片需要( )片。

(A )4 (B )8 (C )6 (D )12 9. 两片8259A 接成级联缓冲方式可管理( )个可屏蔽中断。

(A) 2(B) 15(C) 16(D) 25610. 两台微机间进行串行双工通信时,最少可采用( )根线。

接口大作业

接口大作业

基于8088的电子钟设计-----《微控制器与微处理器原理》综合设计数媒08作者: XXX学号:030508概述文章从对《微机原理与接口技术》教材内容与计算机技术的近期发展的关联、比较中,指出该课程的教学重点。

针对我们学生的畏难情绪和缺乏兴趣“学习通病”,提倡“模块记忆”和“形象比喻教学”。

还主张把配套的课程实验划分为验证性实验、设计性实验和综合提高性实验,分别拟定教学目的和要求、编写实验指导书,达到逐级提高我们学生解决实际问题能力的目的。

引言:1978年Intel公司开发出比8086性能更出色的8088处理器,并成功将其销售给IBM全新个人计算机部门,使得8088成为全新热销的IBM PC的大脑。

从8088开始,个人计算机的概念开始在全世界范围内发展起来。

标志着一个新时代的开始。

虽然处理器的发展速度非常迅猛,但是作为里程碑式的8088,仍然作为实验工具被使用。

本文就是基于8088处理器的电子钟的开发。

本实验利用Protel绘制原理图,使用微机原理仿真试验箱,利用系统提供的8253计数器/定时器,中断器8259,6个LED实现了电子钟的基本功能,在电子钟上显示时,分,秒,并具有设置时间,计时,闹钟的功能。

使用汇编语言进行编程。

Abstract:In 1978 Intel Corporation developed 8088 processors. The 8088 processor is more superior than the 8086 processor. The Intel Corporation sold the 8088 processor to the PC department of IBM. Then the concept of PC started to develop all over the world. Even the development of processors is fast, the classical 8088 processor is still used in the experiments. This paper is about the development of eletron clock based on the 8088 processor.This paper ueses Protel to draw the schematic diagram and uses the microcomputer simulation texting box including the 8253 counter/timer,8259 interrupter and six LEDs to realize the basic function of electron clock. The electron clock can display the hour , the minute and the second. It can set the time and count .It can also have the function of alarm clock. This paper uses compiling language to program.一、总设计:1设计内容利用TDS—MD微机实验系统设计数字电子钟及钟控显示装置软硬件。

《微机接口与应用》作业及答案

《微机接口与应用》作业及答案

《微机接口与应用(含汇编语言)》作业及答案一、单顶选择题1. 8086是( )A) 单片机 B) 单板机 C) 微处理器 D)微机系统2. 8086微处理器可寻址访问的最大I/O空间为( )A) 1K B) 64K C) 640K D) 1M3.集成度最高的存储线路是( )态线路。

A) 6管静态 B) 6管动态 C)4管动态 D)单管动态4.当8086/8088访问100H端口时,采用()寻址方式。

A) 直接 B) 立即 C) 寄存器间接 D) 相对5. 8086/8088的中断是向量中断,其中断服务程序的入口地址是由()提供。

A) 外设中断源 B) CPU的中断逻辑电路C) 以中断控制器读回中断类型号左移2位D) 由中断类型号指向的中断向量表中读出。

6.接口芯片是CPU与外设之间的界面,它与外设之间的联络信号是()。

A) RDY,STB B) RDY,INTC) STB,INT D) RDY,STB,INT7.对8253—5的定时与计数()。

A) 有两种不同的工作方式B) 定时只加时钟脉冲,不设计数值C) 实质相同 D) 从各自的控制端口设置8.单片机是( )A)微处理器 B)微型计算机 C) 微机系统 D)中央处理器9. 8086最小工作方式和最大工作方式的主要差别是()A)内存容量不同 B)I/O端口数不同C)数据总线位数不同 D)单处理器和多处理器的不同10. 8253—5某计数器的最大计数初值是()。

A) 65536 B) FF00H C) 0000H D) FFFFH11. 8253—5某计数器工作在方式1时,在计数中途OUTi为()A) 由低变高 B) 由高变低 C) 高电平 D) 低电平12.由8088微处理器组成的PC机的数据线是( )A)8条单向线 B)16条单向线C)8条双向线 D)16条双向线13.要组成64KB的8086系统程序存储空间,选用EPROM的最佳方案是( )芯片。

接口大作业

接口大作业

接口大作业
以8086CPU为微处理器,工作在最小模式,外设包括一台并行输出设备,输出设备以查询方式与CPU进行通信;一台串行输入设备,输入设备以中断方式和CPU进行通信(自定义输入输出设备和接口之间的握手信号)。

8259A进行中断管理,8251充当串行输入设备的接口芯片,8255充当并行设备的接口芯片、8254做定时器。

请设计一个微机系统,1)画出各芯片的连接图,标明重要信号;
2)说明各芯片的工作方式;
3)写出从输入设备读出数据,并送入输出设备输出的程
序,包括所有初始化程序。

434 《微机接口与应用》作业参考答案

434 《微机接口与应用》作业参考答案

《微机接口与应用》作业参考答案一、单顶选择题1.C2. B3. D4. C5.D6. A7. C 8. B 9. D 10.C 11.D 12.C13.B 14.C 15.B 16.D 17.C 18.C19.B 20.A 21.B 22.D 23.D 24.A25.C 26.D 27.A 28.B 29.C 30.D31.A 32.B 33.C 34.C 35.B 36.C二、填空题1. I/O读写;中断响应(中断应答)2. Pentiun MMX(多媒体扩展)3. 实方式;保护方式(保护虚地址方式) ;实方式;保护方式;虚拟8086方式。

4. NMI5. 4 ; 36. 半双工;全双工7. MN/MX8. Pentiun Pro ; MMX(多媒体扩展)9. 逻辑地址(虚拟地址) ;线性地址;物理地址;分段;分页10. CPU停机11. 门控信号GATE12. DTE与通信线路要求。

13. 实方式;保护方式;虚拟8086方式。

14. FPU(浮点处理部件) ; Cache(高速缓冲存储器)15. 57 ;多媒体;通信16. 成组传送;请求传送(或查询传送)17. 中断请求寄存器IRR ;中断服务寄存器ISR18. 非对称;对称19. 奇偶错20. 奔腾;高能奔腾;多能奔腾21. 控制信息;数据总线22. INTR23. 50H三、简答题⒈ [答] 8086系统中存储器操作数的物理地址由16位的段寄存器值(二进制值)左移4位再加上段内偏移量。

指令存放在代码段CS中,指令在段内的偏移量为指令指针IP之值。

所以,指令的物理地址为:16 X CS+IP(注意CS,IP为十进制值)。

⒉ [答] 其原因有四:(1) CPU处于关中断状态,IF=0;(2) 该中断请求已被屏蔽;(3) 该中断请求的时间太短,未能保持到指令周期结束;(4) CPU已释放总线(即已响应了DMA请求),而未收回总线控制权。

3. [答]一帧为—个字符,它包括:①一个低电平的起始位;② 5—8个数据位;③一个奇偶校验位;④ 1—2个高电平的停止位。

微型计算机接口技术大作业

微型计算机接口技术大作业

微型计算机接口技术大作业学院(系):软件学院专业:软件工程班级:姓名:学生学号:电话:2011年6月5日P2P语音聊天工具一、程序简介程序实现了文字聊天和语音聊天,程序即可以作为服务器端侦听其他用户的连接请求,也可以作为客户端主动连接其他用户。

程序使用了Win32 API提供的用于多媒体服务的函数接口,主要涉及波形音频设备的相关内容。

程序主要分为四个模块:1.主程序模块(消息处理和界面控制)2.负责接收连接的服务器Socket模块3.负责接收和发送数据的客户端模块4.声卡数据的采集和播放模块二、流程图主模块流程图:负责接收连接的服务器Socket模块:负责接收和发送数据的客户端模块:声卡数据的采集和播放模块流程图:三、代码实现代码主要是用MFC对话框程序框架编写的,对于界面上的控件和消息传递的部分,此处略去,仅仅给出主要程序的代码。

主模块代码://初始化端口号、聊天消息框和输入框CExample2_ChatRoomDlg::CExample2_ChatRoomDlg(CWnd* pParent /*=NULL*/) : CDialog(CExample2_ChatRoomDlg::IDD, pParent){//{{AFX_DATA_INIT(CExample2_ChatRoomDlg)m_sInputString = _T(""); //输入框m_sShowString = _T(""); //聊天消息框m_uPort = 4000; //端口号//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}//初始化服务器IP地址(默认设置为本机的IP地址)BOOL CExample2_ChatRoomDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CStringstrAboutMenu;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);if(AfxSocketInit(NULL)==0){AfxMessageBox("CSocketInital Error");}BYTE f0,f1,f2,f3;CString name;CClientSocket::GetLocalHostName(name); //获取本机名CClientSocket::GetIpAddress(name,f0,f1,f2,f3); //获取本机IP//设置服务器IP为本机IP((CIPAddressCtrl *)(GetDlgItem(IDC_IPADDRESS)))->SetAddress(f0,f1,f2,f3);m_bInit=false;m_bClient=false;m_willchating=TRUE;return TRUE;}//显示主窗体BOOL CExample2_ChatRoomApp::InitInstance(){AfxEnableControlContainer();#ifdef _AFXDLLEnable3dControls();#elseEnable3dControlsStatic();#endifCExample2_ChatRoomDlg dlg; //创建窗体实例m_pMainWnd = &dlg;intnResponse = dlg.DoModal();if (nResponse == IDOK){}else if (nResponse == IDCANCEL){}return FALSE;}//对于用户更改聊天窗口内容的判断void CExample2_ChatRoomDlg::OnInputText(){if(!m_bInit) //如果用户还没有连接就输入聊天内容,提示用户先连接{AfxMessageBox("还没有连接到服务器!");return;}//如果用户按下Enter按钮,且焦点在输入窗口中,则对当前聊天室中的所//有用户发送消息CString in;CMessgmsg;GetDlgItemText(IDC_INPUTTEXT,in);if(in.GetLength()<1){return;} //如果用户没有输入内容,返回if(in.GetAt(in.GetLength()-1)=='\n'){in.TrimRight(" ");SetDlgItemText(IDC_INPUTTEXT,"");if(in.GetLength()>2){m_sMsgList+=in;SetDlgItemText(IDC_SHOWTEXT,m_sMsgList);Intm_iLineCurrentPos=((CEdit*)(GetDlgItem(IDC_SHOWTEXT)))->GetLineCount();((CEdit*)(GetDlgItem(IDC_SHOWTEXT)))->LineScroll(m_iLineCurrentPos);msg.m_strText=in;if(!m_bClient){POSITION pos;for(pos=m_connectionList.GetHeadPosition();pos!=NULL;){ //循环遍历所有建立连接的用户,分别发送消息CClientSocket * t= (CClientSocket *)m_connectionList.GetNext(pos);t->SendMessage(&msg);}}else{m_clientsocket.SendMessage(&msg);}}}}//建立服务器按钮void CExample2_ChatRoomDlg::OnSetserver(){if(!m_bInit){m_bClient=false; //作为服务器端m_bInit=true;if(m_pListenSocket.Init(GetDlgItemInt(IDC_PORT),this)==FALSE){ //初始化服务器(建立套接字并侦听,详见Server模块)m_bInit=false;return;}}}//连接服务器按钮void CExample2_ChatRoomDlg::OnConnectserver(){if(!m_bInit){BYTE f0,f1,f2,f3;CString name;//读取服务器IP输入框中的数据((CIPAddressCtrl *)(GetDlgItem(IDC_IPADDRESS)))->GetAddress(f0,f1,f2,f3);CStringip;ip.Format("%d.%d.%d.%d",f0,f1,f2,f3);m_bClient=true;m_clientsocket.Create();if(m_clientsocket.Connect(ip,GetDlgItemInt(IDC_PORT))) //连接服务器{m_clientsocket.Init(this);SetDlgItemText(IDC_SHOWTEXT,"成功连接到服务器.");m_bInit=true;}else{m_clientsocket.Close();AfxMessageBox("连接服务器失败!");m_bInit=false;}}}//用户按下语音聊天按钮void CExample2_ChatRoomDlg::OnNewsend(){if(m_willchating==TRUE){m_sound.Init(this); //初始化音频m_sound.Record(); //开始录音SetDlgItemText(IDC_NEWSEND,"停止语音聊天");m_willchating=FALSE;}else{CSingleLocklock(&m_mutex,TRUE);m_sound.StopRecord(); //停止录音SetDlgItemText(IDC_NEWSEND,"语音聊天");m_willchating=TRUE;lock.Unlock();}}负责接收连接的服务器Socket模块代码://服务器初始化BOOL CServerSocket::Init(UINT port, CExample2_ChatRoomDlg* dlg){m_uPort=port;m_dlg=dlg;if(Create(m_uPort)==FALSE) //创建套接字{AfxMessageBox("Server Socket Create Error");return FALSE;}if(this->Listen()==FALSE) //侦听{AfxMessageBox("Server Listen Error");return FALSE;}m_dlg->SetDlgItemText(IDC_SHOWTEXT,"正在侦听其他用户的连接请求!");return TRUE;}//当有连接请求时把该用户加入连接队列中void CExample2_ChatRoomDlg::ProcessPendingAccept(){CClientSocket* pSocket = new CClientSocket(); //为该用户分配一个套接口if (m_pListenSocket.Accept(*pSocket)) //接收连接请求{CMessgmsg;msg.m_strText="一个游客进入聊天室了\n";m_sShowString+="一个游客进入聊天室了\n";POSITION pos;//向所有用户发送消息for(pos=m_connectionList.GetHeadPosition();pos!=NULL;){CClientSocket * t= (CClientSocket *)m_connectionList.GetNext(pos);t->SendMessage(&msg);}pSocket->Init(this);m_connectionList.AddTail(pSocket);}elsedeletepSocket;}负责接收和发送数据的客户端模块代码://发送消息BOOL CClientSocket::SendMessage(CMessg * msg){if (m_aSessionOut != NULL){msg->Serialize(*m_aSessionOut);m_aSessionOut->Flush();return TRUE;}else{//对方关闭了连接m_bClose=true;CloseSocket();m_dlg->CloseSessionSocket();return FALSE;}}//接收消息voidCClientSocket::OnReceive(intnErrorCode){CSocket::OnReceive(nErrorCode);do{CMessg temp;temp.Serialize(*m_aSessionIn);m_dlg->m_sMsgList+=temp.m_strText; //添加条目m_dlg->SetDlgItemText(IDC_SHOWTEXT,m_dlg->m_sMsgList);if(temp.m_tag==1&&m_dlg->m_willchating==FALSE)//如果有声音过来并且本机的声音设备已经准备好了则首先在本机发出声音{memcpy(m_dlg->m_sound.m_cBufferOut,temp.m_buffer,MAX_BUFFER_SIZE);}intlinenum=((CEdit*)(m_dlg->GetDlgItem(IDC_SHOWTEXT)))->GetLineCount();((CEdit *)(m_dlg->GetDlgItem(IDC_SHOWTEXT)))->LineScroll(linenum);if(!m_dlg->m_bClient) //如果是服务器端的话,转发消息{for(POSITIONpos=m_dlg->m_connectionList.GetHeadPosition();pos!=NULL;){CClientSocket * t = (CClientSocket*)m_dlg->m_connectionList.GetNext(pos);if(t->m_hSocket!=this->m_hSocket){t->SendMessage(&temp);}}}}while (!m_aSessionIn->IsBufferEmpty());}声卡数据的采集和播放模块代码://初始化voidCSound::Init(CExample2_ChatRoomDlg *dlg){int result;m_dlg=dlg;if(waveInGetNumDevs()==0) //是否有音频输入设备{AfxMessageBox("There is no sound input device");}if(waveOutGetNumDevs()==0) //是否有音频输出设备{AfxMessageBox("There is no sound output device");}//指定录音格式m_soundFormat.wFormatTag=WAVE_FORMAT_PCM;m_soundFormat.nChannels=1;m_soundFormat.nSamplesPerSec=8000;m_soundFormat.nAvgBytesPerSec=16000;m_soundFormat.nBlockAlign=2;m_soundFormat.cbSize=0;m_soundFormat.wBitsPerSample=16;int res=waveInOpen(&m_hWaveIn,WAVE_MAPPER, &m_soundFormat, (DWORD)m_dlg->m_hWnd,0L,CALLBACK_WINDOW); //打开录音设备if(res!= MMSYSERR_NOERROR){AfxMessageBox("Error in waveInOpen function");return ;}res=waveOutOpen(&m_hWaveOut,WAVE_MAPPER, &m_soundFormat, (DWORD)m_dlg->m_hWnd,0L,CALLBACK_WINDOW); //打开录音设备if(res!= MMSYSERR_NOERROR){AfxMessageBox("Error in waveOutOpen function");return ;}//inm_pWaveHdrIn[0].lpData=m_cBufferIn;m_pWaveHdrIn[0].dwBufferLength=MAX_BUFFER_SIZE;m_pWaveHdrIn[0].dwBytesRecorded=0;m_pWaveHdrIn[0].dwFlags=0;result=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR) ); //准备内存块录音if (result!= MMSYSERR_NOERROR){AfxMessageBox(_T("Cannot InPrepareHeader !"));return;};//增加内存块result=waveInAddBuffer(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR));if (result!= MMSYSERR_NOERROR){AfxMessageBox(_T("Cannot InAddBuffer !"));return;};//outm_pWaveHdrOut[0].lpData=m_cBufferOut;m_pWaveHdrOut[0].dwBufferLength=MAX_BUFFER_SIZE;m_pWaveHdrOut[0].dwBytesRecorded=0;m_pWaveHdrOut[0].dwFlags=0;waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR)); //准备内存块录音waveOutWrite(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR));}//开始录音voidCSound::Record(){waveInStart(m_hWaveIn);//开始录音}//播放本地声音voidCSound::Play(){memcpy(m_cBufferOut,m_cBufferIn,MAX_BUFFER_SIZE);}//停止录音voidCSound::StopRecord(){waveInStop(m_hWaveIn); //停止录音waveInReset(m_hWaveIn); //清空内存块}//清空录音缓冲区voidCSound::FreeRecordBuffer(){intresult=waveInUnprepareHeader(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR)); if (result!= MMSYSERR_NOERROR){AfxMessageBox(_T("Cannot UnInPrepareHeader !"));return;}; //inm_pWaveHdrIn[0].lpData=m_cBufferIn;m_pWaveHdrIn[0].dwBufferLength=MAX_BUFFER_SIZE;m_pWaveHdrIn[0].dwBytesRecorded=0;m_pWaveHdrIn[0].dwFlags=0;result=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR) ); //准备内存块录音if (result!= MMSYSERR_NOERROR){AfxMessageBox(_T("Cannot InPrepareHeader !"));return;}; //inresult=waveInAddBuffer(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR)); //增加内存块if (result!= MMSYSERR_NOERROR){AfxMessageBox(_T("Cannot InAddBuffer !"));return;}; //in}//清空输出缓冲区voidCSound::FreePlayBuffer(){staticbool once=true;int result;result=waveOutUnprepareHeader(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(W AVEHDR));m_pWaveHdrOut[0].lpData=m_cBufferOut;m_pWaveHdrOut[0].dwBufferLength=MAX_BUFFER_SIZE;m_pWaveHdrOut[0].dwBytesRecorded=0;m_pWaveHdrOut[0].dwFlags=0;result=waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAV EHDR)); //准备内存块录音if (result!= MMSYSERR_NOERROR){AfxMessageBox(_T("Cannot OutPrepareHeader !"));return;}; //outresult=waveOutWrite(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR)); //增加内存块if (result!= MMSYSERR_NOERROR){AfxMessageBox(_T("Cannot OutWrite !"));return;}; //out}//输入缓冲区满的时候触发的发送音频消息函数void CExample2_ChatRoomDlg::WriteBufferFull(LPARAM lp,WPARAMwp){m_sound.Play();//发出本地声音CSingleLocklock(&m_mutex,TRUE);CMessgmsg;msg.m_strText="";msg.m_tag=1;memcpy(msg.m_buffer,m_sound.m_cBufferIn,MAX_BUFFER_SIZE);if(!m_bClient){POSITION pos;for(pos=m_connectionList.GetHeadPosition();pos!=NULL;){ //如果是服务器端,就给所有客户端发送音频CClientSocket * t= (CClientSocket *)m_connectionList.GetNext(pos);t->SendMessage(&msg);}}else{m_clientsocket.SendMessage(&msg);}m_sound.FreeRecordBuffer();m_sound.FreePlayBuffer();lock.Unlock();}四、程序运行结果截图五、心得与体会通过学习大作业和平时的小作业,了解并掌握了网络通信编程、视频和音频传输技术,对于MPI、语音识别技术也有了一定的了解。

《微机接口与应用)》作业及答案

《微机接口与应用)》作业及答案

接口芯片是CPU 与外设之间的界面, A ) RDY , STBB ) RDYC ) STB , INTD ) RDY 对8253—5的定时与计数( A ) 有两种不同的工作方式B ) 定时只加时钟脉冲,不设计数值C ) 实质相同D )单片机是()A )微处理器B )微型计算机8086它与外设之间的联络信号是()。

,INT,STB , INT )。

从各自的控制端口设置C ) 微机系统D )中央处理器 最小工作方式和最大工作方式的主要差别是()《微机接口与应用(含汇编语言) 》作业及答案单顶选择题 8086 是()A )单片机B )单板机C ) 微处理器D ) 微机系统8086微处理器可寻址访冋的最大 I/O 空间为()A) 1KB) 64KC)640KD) 1M集成度最高的存储线路是() 态线路。

A ) 6管静态B ) 6管动态C )4 管动态D )单管动态 当8086/8088访问100H 端口时,采用( )寻址方式。

A )直接B )立即C )寄存器间接D ) 相对8086 /8088的中断是向量中断,其中断服务程序的入口地址是由()提供。

A )外设中断源B ) CPU的中断逻辑电路C ) 以中断控制器读回中断类型号左移 2位D ) 由中断类型号指向的中断向量表中读出。

A )内存容量不同B )I / O 端口数不同C )数据总线位数不同D )单处理器和多处理器的不同 8253 — 5某计数器的最大计数初值是( )。

A ) 65536B ) FF00HC ) 0000HD ) FFFFH 8253 — 5某计数器工作在方式 1时,在计数中途 OUTi 为( )A )由低变高B )由高变低C )高电平D ) 低电平由8088微处理器组成的PC 机的数据线是() A )8条单向线B )16条单向线C )8条双向线D )16条双向线要组成64KB 的8086系统程序存储空间,选用EPROMS 最佳方案是() 芯片。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
tim_wr_buffer[6] = tim_rd_buffer[6];//month
tim_wr_buffer[7] = tim_rd_buffer[7];//year
PCF8583_write_n_byte(1,2,tim_wr_buffer,8);
}
void PCF8583_jian_time()//减1分钟
PCF8583_respons();
if(!tim_ack)
{
tim_err = 1;
PCF8583_stop();
return;
}
temp++;
n_byte--;
}
PCF8583_stop();
}
void PCF8583_read_n_byte(unsigned char add,unsigned char com,unsigned char n_byte)
unsigned charday;
unsigned charweekday;
unsigned charmonth;
unsigned intyear;
} time;
sbit tim_sda=P1^0;
sbit tim_scl=P1^1;
sbit sbDIN= P3^5; //MAX7219的数据引脚
sbit sbLOAD = P3^6; //MAX7219的控制引脚
模拟电脑显示数据
C语言程序:
#include <reg51.h>
#include <intrins.h>
#include <I2Clib.c>
#include <stdio.h>
struct time
{
unsigned charsecond;
unsigned charminute;
unsigned charhour;
tim_scl = 0;
delay11us(1);
tim_sda = 1;
delay11us(1);
for(i=0;i<8;i++)
{
tim_scl = 1;
delay11us(1);
k = (k<<1)|tim_sda;
tim_scl = 0;
delay11us(1);
}
return k;
}
void PCF8583_write_n_byte(unsigned char add,unsigned char com,unsigned char *dat,unsigned char n_byte) //
{
tim_wr_buffer[1] = tim_rd_buffer[1];//second
tim_wr_buffer[2] = tim_rd_buffer[2]-0x01;//minute
tim_wr_buffer[3] = tim_rd_buffer[3];//hour
tim_wr_buffer[4] = tim_rd_buffer[4];//day
{
PCF8583_master_respons(1);//如果不是最后一个字节的数据则发送一个相应位
}
temp++;
n_byte--;
}
PCF8583_stop();
}
void PCF8583_jia_time()//加1分钟
{
tim_wr_buffer[1] = tim_rd_buffer[1];//second
unsigned char tim_wr_buffer[16];
/*****************11us延时函数*************************/
void delay11us(unsigned char t)
{
for (;t>0;t--);
}
void delay(unsigned int x)
{
unsigned char i = 0;
unsigned char temp;
temp = *dat;//发送地址给'temp'.
add = add<<1;
add = 0xa0+add+0x00;
PCF8583_start();
PCF8583_wr_byte(add);
PCF8583_respons();
{
unsigned char i;
sbLOAD = 0;
for(i=0;i<8;i++)//先送出8位地址
{
sbCLK = 0; //时钟拉低
Addr <<= 1; //移位送出地址
sbDIN= CY;//送出数据
sbCLK = 1; //时钟上升沿
_nop_();
_nop_();
sbCLK = 0;
tim_ack = 1;
else
tim_ack = 0;
tim_scl = 0;
delay11us(1);
}
// i2c主器件应答
void PCF8583_master_respons(bit master_ack)
{
tim_scl = 0;
delay11us(1);
tim_sda = ~master_ack;
南京航空航天大学
研究生实验报告
姓名
学号
学 院
专业
课程名称微机接口技术
指导教师张乐年
二〇一六年八月
原理图
元器件列表
序号
原件名称
原件作用
1
AT89C51
4K字节FLASH存储器
2
TSEG-MPX8-CC-BLUE
8位7段码数码管,显示蓝色
3
MAX7219
共阴极显示驱动器,用来驱动8为7段数码显管
4
PCF8583
{
unsigned int a,b;
for(a=x;a>5;a--);
for(b=10;b>0;b--);
}
//写MAX7219函数,Addr为MAX7219的内部寄存器地址,Dat为待写入的数据
void Write7219(unsigned char Addr,unsigned char Dat)
delay11us(1);
tim_scl = 1;
delay11us(1);
tim_scl = 0;
delay11us(1);
}
//i2c初始化.
void PCF8583_init()
{
tim_sda = 1;
delay11us(1);
tim_scl = 1;
delay11us(1);
}
// i2c写n个字节
tim_wr_buffer[2] = tim_rd_buffer[2]+0x01;//minute
tim_wr_buffer[3] = tim_rd_buffer[3];//hour
tim_wr_buffer[4] = tim_rd_buffer[4];//day
tim_wr_buffer[5] = tim_rd_buffer[5];//weekday
tim_scl = 1;
delay11us(1);
tim_sda = 0;
}
//i2c从器件应答
void PCF8583_respons()
{
unsigned char i;
tim_scl = 1;
delay11us(1);
while((tim_sda)&&(i<250)) i++;
if(!tim_sda)
{
tim_sda = 1;
delay11us(1);
tim_scl = 1;
delay11us(1);
tim_sda = 0;
delay11us(1);
}
// i2c停止.
void PCF8583_stop()//一个从低到高的跳变作为i2c停止标志.
{
tim_sda = 0;
delay11us(1);
带256字节RAM的实时时钟芯片,用于显示时间
5
ADC0809
8通道A/D转换芯片,用于采集外部模拟电压信号,并向单片机输出数字信号
6
POT-HG
电位器模拟外部模拟信号
7
FM24C256
用于保存最近20个外部故障数据包(包含故障点和故障时间)
8
MAX232
将系统与上位机想连接,传输数据
9
VIRTUAL TERMINAL
{
Write7219(0x09,0xff);//编码模式寄存器
Write7219(0x0a,0x07);//显示亮度控制
Write7219(0x0b,0x07);//扫描控制
Write7219(0x0c,0x01);//关闭模式控制寄存器设置
}
// i2c启动
void PCF8583_start()//一个从高到底的跳变作为i2c启动标志.
sbit sbCLK = P3^7; //MAX7219的时钟引脚
sbit OE = P2^3; //OE引脚
sbit EOC = P2^2; //EOC引脚定义
sbit ST = P2^1; //启动引脚定义START
sbit CLK = P2^0; //时钟引脚定义CLK
sbit ADDRA = P2^5;
tim_wr_buffer[5] = tim_rd_buffer[5];//weekday
tim_wr_buffer[6] = tim_rd_buffer[6];//month
相关文档
最新文档