微机接口大作业
- 格式:docx
- 大小:299.73 KB
- 文档页数:16
作业一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)一、选择题(每题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)写出从输入设备读出数据,并送入输出设备输出的程
序,包括所有初始化程序。
《微机接口与应用》作业参考答案一、单顶选择题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 最佳方案是() 芯片。
小组成员:赖…,欧…,李…..一、设计任务及要求编写一实现电子琴的程序,并实现若干扩展功能。
基本功能:用8257键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;扩展功能:1、录音:记录所弹奏曲目2、放录音:任意时刻重放最新记录曲目3、在程序中可预设一曲目,按一键实现播放该曲目。
4、在播放录制曲目或预设曲目时,按8279键盘上任意键可以暂停播放,再按一次从暂停处继续播放。
5、程序运行时有友好的用户介面二、元件与仪器介绍本设计所要用到的元器件有:计时器8253,使用8088芯片的键盘控制器,并行控制器8255A,实验箱。
2.1 8253的介绍8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
2.1.1 8253的工作原理8253是可编程的计数器/定时器,其CLK0~CLK2是计数器0~2的时钟脉冲输入端, GATE0~GATE2是门控脉冲输入端, OUT0~OUT2是输出端及内部结构见下图。
当用8253做外部事件计数器时,在CLK端所加的计数脉冲由外部事件产生,这些脉冲的间隔可以不相等。
如果要用它做定时器,则CLK端应输入精确的时钟脉冲。
这时, 8253所能实现的定时时间决定于计数脉冲的频率和计数器的初值,即定时时间=时钟脉冲周期t c ×预置的计数初值n8253的控制逻辑由5个控制信号WR、CS、A1和A0组成,对应的操作见表1。
8253编程时,要对其控制字寄存器写入相应的控制字,控制字寄存器格式如表2所示。
其中: SC1, SC0———通道选择位。
为00, 01, 10分别表示选择0, 1, 2通道。
RL1, RL0——读/写操作位。
00 表示锁存数据,可随时读取计数器中的计数值; 01 表示只读/写低8位,高8位自动置为0; 10表示只读/写高8位,低8位自动置为0; 11表示读/写16位数据,先低8位,后高8位。
《微机接口技术》大作业作业要求:设计一外部设备监控系统,采用CPU为51系列单片机,用C51或ASM51编写软件,给出SCH原理图和软件清单(要求有功能注释),系统要求如下:①系统带有电子时钟,2路模拟量和8路数字量的检测;②4个按键,分别为设置、+、-、->可以可以完成相应的设置过程(包括时间设置和外部监控值的上下限设置);③采用I2C 8583时钟芯片(可以查相关资料);④8个8段LED显示(可以采用SPI总线芯片7219)以辅助完成设置,显示内容:时-分-秒;⑤8个按键分别可以模拟外部8个故障点;⑥2路电位器可以模拟外部模拟信号;⑦EEPROM(I2C总线芯片24c256)保存最近100个外部故障数据(包含故障点和故障时间);⑧RS485上位机接口。
系统软件完成的功能:①上电时电子钟方式显示当前时间;②设置按键进入设置状态,可以重新设置新时间值和外部监控值的上下限,结果写入8583。
设置完成后电子钟方式显示当前时间;③实时监测外部8个数字故障点和模拟数字,一旦故障记录其故障数据、故障发生时间和恢复时间;④上位机传来命令字0xaa向上位机发送所保存的外部故障数据,发送完成后清除保存数据。
(自定义通讯协议)。
一、元器件选择芯片名称型号接口类型线数其它AD转换芯片TLC1549 SPI 3 2块共阴极数码管显示驱动器MAX7219 SPI 3时钟芯片PCF8583 I2C 2EPROM 24WC256 I2C 2串口RS485 MAX487E 3二、MCS-51单片机引脚连接单片机I/O 引脚外部器件连接及功用器件名称引脚代号功用P0^0 SW1 按钮1,模拟外部故障点1P0^1 SW2 按钮2,模拟外部故障点2P0^2 SW3 按钮3,模拟外部故障点3P0^3 SW4 按钮4,模拟外部故障点4P0^4 SW5 按钮5,模拟外部故障点5P0^5 SW6 按钮6,模拟外部故障点6P0^6 SW7 按钮7,模拟外部故障点7P0^7 SW8 按钮8,模拟外部故障点8P1^0 MAX7219 DIN 数码管显示串行数据输入端P1^1 MAX7219 LOAD 数码管显示数据锁存端P1^2 MAX7219 CLK 数码管显示时钟输入端P1^3 --- --- ---P1^4 SPI/TLC1549 CS 模拟SPI片选信号P1^5 SP I/TLC1549 DA TA OUT 模拟SPI数据传送位P1^6 SP I/TLC1549 CLK 模拟SPI时钟控制位P1^7 --- --- ---P2^0 --- --- ---P2^1 SW9 按钮9,系统参数“设置”键P2^2 SW10 按钮10,系统参数增加“+”键P2^3 SW11 按钮11,系统参数减小“-”键P2^4 SW12 按钮12,系统参数项目选择“->”键P2^5 --- --- ---P2^6 MAX487E DE 485串口通信P2^7 MAX487E RE 485串口通信P3^0/RXD MAX487E RXD 485串口通信P3^1/TXD MAX487E TXD 485串口通信P3^2/INT0 PCF8583 INTP3^3/INT1 --- --- ---P3^4/T0 --- --- ---P3^5/T1 --- --- ---P3^6/WR I2C总线SCL 模拟I2C时钟控制位P3^7/RD I2C总线SDA 模拟I2C数据传送位1.I2C器件接线图2.功能按键设置接线图3.AD转换器件接线图4.数码管显示驱动接线图5.485串口接线电路6.单片机复位与外部时钟电路四、软件程序清单1.延时程序:void delay(void);2.启动I2C总线:void I_start(void);3.停止I2C总线:void I_stop(void);4.初始化I2C总线:void I_int(void);5.提供时钟信号,并返回时钟为高电平时SDA的状态:bit I_clock(void);6.向SDA发送一个字节,并检验应答信号:bit I_send(uchar I_data);7.从SDA上读取8位数据信号,并作为一个数据信号返回:byte I_receive(void);8.发送应答信号:void I_ack(void);9.毫秒级延时程序:void delay_ms(int n);10.向8583时钟芯片内指定地址写入数据,并检验应答信号,成功则返回TRUE,否则返回FAULSE:bit Write_8583(uchar Address,uchar data1);11.从8583时钟芯片指定地址读出数据,如成功读取,则发送应答信号,并返回TRUE,否则返回FAULSE:uchar Read_8583(uchar Address);12.初始化8583时钟芯片,预输入时间:void init_8583(void);13.向7219指定地址写入数据:void Write_7219(uchar Address,uchar Data);14.MAX7219初始化:void init_7219(void);15.设置时间和监控值:void set(void);16.向24c256写入器件地址和一个指定的字节地址:bit E_address(uchar Address1,uchar Address2);17.从24c256内地址0开始读出BLOCKSIZE个字节的数据:bit E_read(void);18.向24c256写入数据:bit E_write(uchar data1);19.故障点产生故障时写入24c256:void failure(void);20.将模拟量通过TLC1549转换成数字量:uint TLC1549(void);21.初始化:void init(void);22.接受主机指令:bit Recv_Data(uchar *type);23.发送单字节数据:void Send(uchar m);24.发送数据:void Send_Data(uchar type,uchar len,uchar *buf);25.主函数:void main(void)。