微机接口大作业

合集下载

微机接口作业整理

微机接口作业整理

作业一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 最佳方案是() 芯片。

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

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

小组成员:赖…,欧…,李…..一、设计任务及要求编写一实现电子琴的程序,并实现若干扩展功能。

基本功能:用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位。

MCS-51微机接口大作业重点讲义资料

MCS-51微机接口大作业重点讲义资料

《微机接口技术》大作业作业要求:设计一外部设备监控系统,采用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)。

计算机接口技术大作业

计算机接口技术大作业

计算机接口技术大作业班级:姓名:学号:指导老师:设计内容:总结计算机接口技术发展,CPU可以选择8086或者单片机,应用所学芯片(不限于)8255、8251、8253、8237、8259、0809、0832、8279及总线接口相关知识,设计一套系统或一个小装置。

要求至少用到以上三款芯片或接口技术,提倡在proteus 中仿真,然后到实验室验证。

计算机接口技术发展微机系统中,接口处于微机总线与设备之间,进行CPU与设备之间的信息交换。

设置接口的目的有两条:通过接口实现设备与总线的连接;连接起来以后,CPU通过接口对设备进行访问,即操作或控制设备。

接口技术的基本内容包括设备接口设计和应用程序设计,实现把设备连接到用户总线(ISA)和完成对设备在应用层的访问。

接口技术的新内容包括总线接口设计和设备驱动程序设计,实现把用户总线(ISA)连接到PCI总线和完成对设备在windows操作系统核心层的访问。

设备驱动程序的程序结构,编程语言,开发工具和程序设计,调试,安装方法与应用程序完全不同,是现代微机接口技术的新内容。

接口技术的发展是随着微机体系结构(CPU,总线,存储器)和被连接的对象,以及操作系统应用环境的发展而发展的。

当接口的两端及应用环境发生了变化,作为中间桥梁的接口也必须发生变化。

这种变化与发展,过去是如此,今后仍然如此。

早期的计算机系统,接口与设备之间无明显的边界,接口与设备控制器做在一起。

到8位微机,在接口与设备之间有了边界,并且出现了许多接口标准。

早期计算机系统中并没有设置独立的接口电路,对外设的控制和管理完全由CPU直接操作。

由于微机技术的发展,其应用越来越广泛,外设品种和门类大大增加,且性能各异,操作复杂,因此,不设接口就不行了。

为了解决矛盾,开始在CPU与外设之间设置了简单的接口电路,后来逐步发展成为独立功能的接口和设备控制器,把对外设的控制任务交给接口去完成,这样大大减轻了主机的负担,简化了CPU对外设的控制和管理。

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

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

《微机接口与应用(含汇编语言)》作业及答案一、单顶选择题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的最佳方案是( )芯片。

(完整版)微机原理与接口技术作业(含答案)

(完整版)微机原理与接口技术作业(含答案)

(完整版)微机原理与接⼝技术作业(含答案)o d 浙江⼤学远程教育学院《微机原理与接⼝技术》课程作业姓名:学号:年级:学习中⼼:第2章 P522.80C51单⽚机引脚有哪些第⼆功能?第⼀功能第⼆功能P0.0~P0.7 地址总线Ao ~A7/数据总线D0~D7 P2.0~P2.7 地址总线A8~A15 P3.0 RXD(串⾏输⼊⼝) P3.1 TXD(串⾏输出⼝) P3.2 INT0外部中断0) P3.3 IINT1(外部中断1)P3.4 TO(定时器/计数器0的外部输⼊) P3.5 T1(定时器/计数器0的外部输出) P3.6 WR(外部数据存储器或I /O 的写选通)P3.7 RD 外部数据存储器或I /O 的读选通)4.80C51单⽚机的存储器在结构上有何特点?在物理上和逻辑上各有哪⼏种地址空间?访问⽚内RAM 和⽚外RAM 的指令格式有何区别?1、80C5l 单⽚机采⽤哈佛结构,即将程序存储器和数据存储器截然分开,分别进⾏寻址。

不仅在⽚内驻留⼀定容量的程序存储器和数据存储器及众多的特殊功能寄存器,⽽且还具有较强的外部存储器扩展能⼒,扩展的程序存储器和数据存储器寻址范围都可达64 KB 。

2、在物理上设有4个存储器空间·⽚内程序存储器; ·⽚外程序存储器;·⽚内数据存储器;. ·⽚外数据存储器。

在逻辑上设有3个存储器地址空间●⽚内、⽚外统⼀的64 KB 程序存储器地址空间。

●⽚内256字节(80C52为384字节)数据存储器地址空间。

⽚内数据存储器空间在物理上⼜包含两部分:●对于80C51型单⽚机,0~127字节为⽚内数据存储器空间;128~255字节为特殊功能寄存器(SFR)空间(实际仅占⽤了20多个字节)。

●对于80C52型单⽚机,O ~127字节为⽚内数据存储器空间;128~255字节共128个字节是数据存储器和特殊功能寄存器地址重叠空间。

⽚外64 KB 的数据存储器地址空间。

微机接口作业

微机接口作业

第二章作业1. 总线接口部件有哪些功能?2. 8086的总线接口部件由哪几部分组成?3. 段寄存器CS=1200H,指令指针寄存器IP=FF00H,此时,指令的物理地址为多少?4. 8086的执行部件有什么功能?由哪几部分组成?5. 状态标志和控制标志有何不同?程序中是怎样利用这两类标志的?8086的状态标志和控制标志分别有哪些?6. 8086/8088和传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?7. 总线周期的含义是什么?8086/8088的基本总线周期由几个时钟组成?8. 在总线周期的T1、T2、T3、T4状态,CPU分别执行什么动作?什么情况下需要插入等待状态TW?TW在哪儿插入?怎样插入?9. CPU启动时,有哪些特征?如何寻找8086/8088系统的启动程序?10. CPU在8086的微机系统中,为什么常用AD0作为低8位数据的选通信号?11. 8086和8088是怎样解决地址线和数据线的复用问题的?ALE信号何时处于有效电平?12. RESET信号来到后,CPU的状态有哪些特点?13. 8086最多可有多少个中断?按照产生中断的方法分为哪两大类?14. 非屏蔽中断有什么特点?可屏蔽中断有什么特点?分别用在什么场合?15. 什么叫中断向量?它放在那里?对应于1CH的中断向量存放在哪里?如果1CH的中断处理子程序从5110H:2030H开始,则中断向量应怎样存放?16. 8086存储空间最大为多少?怎样用16位寄存器实现对20位地址的寻址?第四章1.DRAM根据什么原理进行刷新?DRAM刷新控制器应具备什么功能?2. 微型机系统中存储器的层次化总体结构是如何体现的?系统在运行时存储器各层次之间如何协调?3. 什么叫存储器的逻辑地址?什么叫存储器的线性地址?4. 描述符表包含什么内容?采用描述符表有什么优点?5. 段选择子包含哪几部分?其中索引字段有什么功能?6. Pentium系统中,有几种描述符表?局部描述符表和全局描述符表之间有什么关系?在系统运行中,两者是用什么参数来选择的?7. 结合教材中图4.17,概述如何实现逻辑地址到线性地址的的转换。

微机接口作业及答案

微机接口作业及答案

微机接⼝作业及答案《微机系统与接⼝技术作业》部分参考答案第8章输⼊/输出系统P2442.接⼝电路的作⽤是什么?I/O接⼝应具备哪些功能?参见教材P2193.什么是端⼝?端⼝有⼏类?参见教材P220 8.1.2 输⼊输出端⼝4.I/O端⼝有哪两种编址⽅式?PC系列机采⽤哪种编址⽅式?答:I/O端⼝和存储单元统⼀编址及I/O端⼝独⽴编址两种。

PC机采⽤I/O端⼝独⽴编址。

7. 定时/计数器的3个通道在PC系列机中是如何应⽤的?答:0#计数器⽤于系统时钟中断;1#计数器⽤于动态存储器刷新定时;2#计数器⽤于发声系统⾳调控制。

10.系统机定时/计数器的通道0定时周期最长是多少?要实现长时间定时,应采取什么措施?如果采⽤外扩8254定时/计数器实现长时间定时,应采取哪些措施?答:系统机定时/计数器通道0定时周期最长是55ms。

要实现长时间定时,只能使⽤ INT 1CH 中断的⽅法,通过对预先设定的中断次数进⾏计数,达到n倍55ms的定时⽬的。

采⽤外扩8254,可以使⽤三个通道硬件级联的⽅法实现长时间定时。

补充题:设PC 系统机外扩了⼀⽚8254 及相应的实验电路。

(1) 根据由门电路构成的译码电路,分析出该⽚8254 的四个端⼝地址。

其中控制⼝的地址是213H(填16 进制格式)。

其他三个端⼝地址是210H~212H。

(2) 设CLK0 已接⾄8MHz 时钟,为了能从OUT0 输出4KHz 的⽅波,编写8254初始化程序,其中假设0 号定时计数器⼯作在⼆进制⽅式。

解:计数初值=(8×106)/4000=2000MOV DX,213H ;8254控制⼝地址MOV AL,00110110B ;命令字,0通道,16位读写,⽅式3,⼆进制计数OUT DX, ALMOV DX,210H ;0通道计数器端⼝地址MOV AX,2000 ;计数初值2000,因是⼆进制计数,所以后⾯不能加HOUT DX, AL ;先送低8位OUT DX, AL ;再送⾼8位第9章中断系统P3001.叙述可屏蔽中断处理的全过程。

微机接口课后作业答案Ch7

微机接口课后作业答案Ch7
10
OUT DX,AL
MOV DX,0D0D0H
MOV AL,20
;送计数器0的计数初值
OUT DX,AL
MOV DX,0D0D1H
MOV AX,2000
;送计数器1的计数初值
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,0D0D2H
MOV AX,1000
;送计数器2的计数初值
OUT DX,AL
(1)根据图中接线,写出8255芯片、8253芯片各端口的地址。
(2)编写8255芯片和8253芯片的初始化程序。其中,8253芯片的OUT 1 端输出100Hz方波,8255芯片的A 口为输出, B 口 和 C 口为输入。
(3)为8255芯片编写一个I/O控制子程序,其功能为:每调用一次,先检测PC0的状态,若PC0 = 0,则循环等待; 若PC0 = 1,可从 PB 口读取当前开关 K 的位置(0~7 ),经转换计算从 A 口的 PA0~PA3输出该位置的二进 制编码,供LED显示。
RET
MAIN ENDP ;输出开关位置的二进制码程序
DISP PROC
PUSH CX
PUSH SI
XOR CX,CX
8
CLC
LEA SI,BUFFER MOV DX,8002H WAITT:IN AL,DX TEST AL,01H JZ WAITT MOV DX,8001H IN AL,DX NEXT: SHR AL,1 INC CX JC NEXT DEC CX ADD SI,CX MOV AL,[SI] MOV DX,8000H OUT DX,AL POP SI POP CX RET DISP ENDP CODE ENDS END MAIN
  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
相关文档
最新文档