《计算机接口技术》大作业.doc_第1页
《计算机接口技术》大作业.doc_第2页
《计算机接口技术》大作业.doc_第3页
《计算机接口技术》大作业.doc_第4页
《计算机接口技术》大作业.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

苏州科技学院电子与信息工程学院计算机接口技术大作业专 业: 电子信息工程 班 级: 姓 名: 学 号: 2012年6月1. 设计内容:应用所学芯片8255、8251、8253、8237、8259、0809、0832及总线接口相关知识,在proteus中设计一套系统或一个小装置。要求至少用到以上三款芯片或接口技术。2.考核要求:1、设计具有基本完整的功能,具有可实现性;2、强调创新性和应用性,不与现有系统、产品雷同;3、硬件设计要求详尽,软件设计可以限于主要功能和关键部分4、自拟题目,题目要求新颖3. 硬件设计3.1 设计思想 硬件电路的搭建主要由8255A、8251和8253组成,利用地址译码器将8086芯片的端口地址分隔开,然后分给各个芯片。3.2主要元器件介绍 3.2.1 8255A模型8255共有40个引脚,采用双列直插式封装,各引脚功能如下:D0-D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。CS:片选信号线,低电平有效,表示芯片被选中。RD:读出信号线,低电平有效,控制数据的读出。WR:写入信号线,低电平有效,控制数据的写入。Vcc:+5V电源。PA0-PA7:A口输入/输出线。PB0-PB7:B口输入/输出线。PC0-PC7:C口输入/输出线。RESET:复位信号线。A1、A0:地址线,用来选择8255内部端口。GND:地线。其控制逻辑为:A1A0RDWRCS工作状态00010A口数据-数据总线01010B口数据-数据总线10010C口数据-数据总线00100总线数据-A口01100总线数据-B口10100总线数据-C口11100总线数据-控制字寄存器*1数据总线-三态11010非法状态*110数据总线-三态8255内部包括三个并行数据输入/输出端口,两个工作方式控制电路,一个读/写控制逻辑电路和8位总线缓冲器。各部分功能概括如下:(1)端口A、B、CA口:是一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。B口:是一个8位数据输入/输出锁存器/缓冲器和一个8位数据输入锁存器。C口:是一个8位数据输出锁存器/缓冲器和一个8位数据输入缓冲器(输入不锁存)。通常A口、B口作为数据输入/输出端口。C口作为控制/状态信息端口,它在“方式控制字”的控制下可分为两个4位端口,每个端口有一个4位锁存器,分别与A口、B口配合使用,作为控制信号输出或状态信息输入端口。(2)工作方式控制电路工作方式控制电路有两个,一个是A组控制电路,另一个是B组控制电路。这两组控制电路具有一个控制命令寄存器,用来接受中央处理器发来的控制字,以决定两组端口的工作方式,也可根据控制字的要求对C口按位清“0”或者按位置“1”。A组控制电路用来控制A口和C口的上半部分(PC7-PC4)。B组控制电路用来控制B口和C口的下半部分(PC3-PC0)。(3)总线数据缓冲器总线数据缓冲器是一个三态双向8位缓冲器,作为8255与系统总线之间的接口,用来传送数据、指令、控制命令以及外部状态信息。(4)读/写控制逻辑电路读/写控制逻辑电路接受CPU发来的控制信号RD、WR、RESET、地址信号A1-A0等,然后根据控制信号的要求,将端口数据读出,发往CPU,或者将CPU送来的数据写入端口。工作方式控制字D0端口C(下半部) 1:输入 0:输出B组D1端口B 1:输入 0:输出D2方式选择 0:方式0 1:方式1D3端口C(上半部) 1:输入 0:输出A组D4端口A 1:输入 0:输出D5D6方式选择 00:方式0 10:方式1 *1:方式2D7置方式标志 1:有效C口按位操作控制字:D0位:置位/复位 1:置位 0:复位D3D2D1000001010011100101110111COC1C2C3C4C5C6C7D4无关D5D6D7位:置位/复位标志 0:有效工作方式0是一种基本的输入/输出工作方式,在这种方式下,三个端口都可以由程序设置为输入或输出,没有固定的用于应答的联络信号.其基本的功能可概括如下:1、可具有两个8位端口(A、B)和两个4位端口(C口的上半部分和下半部分)。2、任何一个端口都可以设定为输入或者输出,各端口的输入、输出可构成16种组合。3、数据输出时可以锁存,输出时不锁存。按照方式0工作时,CPU可以通过简单的传送指令对人以一个端口进行读/写,这样各端口就可以作为查询式输入/输出接口。按照查询方式工作时, A口、B口可作为两个数据输入/输出端口,C口的某些位可作为这两个端口的控制/状态信号端。工作方式1工作方式1是一种选通式输入/输出工作方式。在这种工作方式下,选通信好于输入/输出数据一起传送,由选通信号对数据进行选通。其基本功能可概括如下:1、三个端口分为两组,即A组和B组。2、每一组包括一个8位数据端口和一个4位的控制/状态端口。3、每一个8位数据端口均可设置为输入或者输出,输入端均可锁存。4、4位端口作为8位数据端口的控制/状态信号端口。方式1输入:当任何一个端口按照工作方式1输入时,控制联络信号如图所示:各控制信号的功能如下:STB:选通输入,低电平有效.是由外设送来的输入信号,用来将输入数据送入输入锁存器:IBF:输入缓冲器满信号,高电平有效,表示数据已送入输入锁存器,它由STB信号的下降沿置位,由RD信号的上升沿复位.INTR:中断请求信号,高电平有效,由8255输出,向CPU发中断请求.发中断请求的条件是STB、IBF、INTE(中断允许)为高电平。中断请求信号由RD的下降沿复位。INTE A:A口中断允许信号,由PC4的置位/复位来控制,INTE B由PC2的置位/复位来控制。方式1输出:当任何一个端口按照工作方式1输入时,控制联络信号如图所示:各控制信号的功能如下:OBF:输出缓冲器满信号,低电平有效,是8255输出给外围设备的联络信号。表示CPU已把输出数据送到指定端口,外设可以把数据取走。它由WR信号的上升沿置“0”(有效),由ACK信号的下降沿置“1”(无效)。ACK:外设响应信号,低电平有效。表示CPU输出给8255的数据已由外设取走。INTR:中断请求信号,高电平有效。表示数据已被外设取走,请求CPU继续输出数据。中断请求的条件是ACK、OBF和INTE(中断允许)为高电平,中断请求信号由WR的下降沿复位。INTE A:由PC6的置位/复位来控制。INTE B:由PC2的置位/复位来控制。工作方式2:A口除了工作方式0、1之外,还有工作方式2。按照方式2工作时,A口称为双向数据总线端口,既可以发送数据,又可以接收数据。其主要功能可概括如下:1、有一个8为双向数据输入/输出端口(A)和一个5位控制信号端口(C)。2、输入、输出均可锁存。3、5位控制信号端口(C)作为8位双向数据输入/输出端口A的控制/状态信号端口。4、工作方式2只适合于A口。按照工作方式2工作时,A口既可工作于查询方式,又可工作于中断方式.其控制联络信号如图所示:各控制信号功能如下:INTR:中断请求信号,高电平有效.在输入、输出方式时,可用于向CPU发中断请求。OBF:输出缓冲器满信号,低电平有效。是8255输出给外设的联络信号,表示CPU已把数据输出到A口。ACK:外设响应信号,低电平有效。用来启动A口三态输出缓冲器输出数据。INTE1:是一个与输出缓冲器相关的中断允许触发器,由PC6的置位/复位来控制。STB:选通输入,低电平有效。是由外设送来的输入信号,用来将数据送入输入锁存器。IBF:输入缓冲器满信号,高电平有效,表示数据已送入输入锁存器。INTE2;是一个与输入缓冲器相关的中断允许触发器,由PC4的置位/复位来控制。当A口工作于方式2时,B口可工作于方式0或方式1,既可以作为输入端口,又可以作为输出端口。这时C口主要用于控制/状态信号的输入/输出。C口各位的功能如图所示,其中高5位用于A口,低3位用于B口3.2.2 定时计数器8253资料8253工作原理8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。其CLK0CLK2是计数器02的时钟脉冲输入端, GATE0GATE2是门控脉冲输入端, OUT0OUT2是输出端及内部结构见下图当用8253做外部事件计数器时,在CLK端所加的计数脉冲由外部事件产生,这些脉冲的间隔可以不相等。如果要用它做定时器,则CLK端应输入精确的时钟脉冲。这时, 8253所能实现的定时时间决定于计数脉冲的频率和计数器的初值,即定时时间=时钟脉冲周期tc预置的计数初值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位。M2,M1,M0工作方式选择位。8253具有3个独立的16位减法计数器,6种不同的工作方式。方式0 :又称计数结束产生中断工作方式。当程序将工作方式控制字写入控制字寄存器时,计数器的输出端OUT立即变为低电平。在计数初值写入该计数器后,输出仍将保持为低电平。当门控信号GATE为高电平时,计数器对输入端CLK的输入脉冲开始作减一计数,当计数器从初值减为0时,输出端OUT由低电平变为高电平,该输出信号可作为向CPU发出的中断请求信号。方式1 :又称可编程单稳态工作方式。功能是在GATE信号的上升沿作用下,输出端OUT产生一个负脉冲信号,负脉冲的宽度可由定时器的计数初值和时钟频率编程确定。方式2 :又称频率发生器工作方式。当程序将工作方式控制字写入控制字寄存器时,计数器的输出端OUT立即变为高电平。在写入计数初值后,计数器对输入时钟CLK计数。在计数过程中OUT保持不变,直到计数器从初值减为1时,输出OUT将变低,再经过一个CLK周期,OUT恢复为高电平,并按已设定的计数初值重新开始计数。在需要产生某个脉冲信号或将某一个较高频率的脉冲信号分频为较低频率时,可使用8253的方式2。方式3 :又称方波发生器工作方式。方式3的工作类似于方式2 ,不同之处是方式3的输出OUT是方波。方式4 :又称软件触发选通工作方式。其功能是在输出OUT端隔一定时间产生一价目负脉冲。与方式0不同的是,输出脉冲的宽度是固定的,但产生负脉冲所相隔时间是可编程的。方式5 :又称硬件触发选通工作方式。方式5的工作类似于方式4 ,不同之处是GATE信号的作用不同。方式5的计数过程由GATE的上升沿触发,当计数结束时,OUT将输出一个CLK周期的低电平信号。3.2.3 串行通信可编程接口芯片8251A资料8251工作原理:1发送器a. 数据输出线TxDb. 发送时钟 TxCc. 发送器准备好 TxRDYd. 发送器空信号 TxEMPY 过程TxRDY有效CPU写数据到82518251发数据 发送完毕,TxEMPY有效2接收器a. 数据输入线RxDb. 接收时钟 RxCc. 接收器准备好 RxRDY过程8251接数据 RxRDY有效 CPU读82513调制解调控制电路DTR数据终端准备好信号。是由8251A送往外设的,表示CPU当前已经准备就绪。DSR数据设备准备好。是外设送往825lA的,表示当前外设已经准备好数据。RTS请求发送信号。是8251A送往外设的,表示CPU已经准备好发送。CTS允许发送信号。由外设送往825lA的,当为低电平时,允许825lA执行发送操作。读/写控制模式寄存器用于设置8251A工作于同步/异步方式,数据格式控制寄存器 使8251A实现某种操作或进入规定的工作状态状态寄存器CPU可通过I/O读操作把8251的状态字读入CPU,用以控制CPU与8251之间的数据交换4. 软件设计4.1 设计思想 程序主要由按键判断、显示、定时计数以及串行口子程序构成,他们完成的功能为在显示程序处显示按键的值,并根据具体的运算得出结果值,在串行口输出屏处可以记录已经输入的值以及运算结果,而定时计数单元用于产生系统的时间基准时间。4.2 源程序/* LABCENTER ELECTRONICS * * Proteus VSM Sample Design Code * * Integer Calculator ( 2K Code Limit) */#include calc.h/Variablesstatic LONG lvalue;static LONG rvalue;static CHAR currtoken;static CHAR lasttoken;static CHAR lastpress;static CHAR outputbufferMAX_DISPLAY_CHAR;VOID main (VOID)/Initialise our variables and call the /Assembly routine to initialise the LCD display. lvalue = 0; rvalue = 0; currtoken = =; lasttoken = 0; initialise(); / Initialize the LCD calc_output(OK); calc_evaluate(); VOID calc_evaluate() CHAR key; INT i; CHAR numberMAX_DISPLAY_CHAR; CHAR *bufferptr; / Clear the buffer before we start. for (i = 0; i = MAX_DISPLAY_CHAR; i+) numberi = ; bufferptr = number; for (;) key = calc_getkey(); if (calc_testkey(key) / Key test positive for digit so we read it into the / buffer and then write the buffer to the screen/LCD. / Size limit the number of digits - allow for termination / and possible negative results. if (bufferptr != &numberMAX_DISPLAY_CHAR - 2) *bufferptr = key; calc_display(number); bufferptr+; else / Key is an operator so pass it to the function handlers. / If we are just after startup or cancel then assign to lvalue / otherwise assign to rvalue. /Assign the value. if (lasttoken = 0) lvalue = calc_asciidec (number); else rvalue = calc_asciidec (number); /Clear the number buffer. bufferptr = number; for (i = 0;i = MAX_DISPLAY_CHAR; i+) numberi = ; /Process the Operator. currtoken = key;if (currtoken = C) calc_opfunctions(currtoken); else calc_opfunctions(lasttoken); / Clear the outputbuffer for reuse on next operation. for (i = 0;i = 0x30) & (lastpress = 0x30) & (lastpress = 0x30) & (lastpress = 0x30) & (lastpress = -9999999) & (num = 9999999) return OK; else return ERROR; VOID calc_output (INT status)/ Output according to the status of the operation./ *Sleep* is used for the first op press after a full cancel/ or on startup. switch (status) case OK : calc_display(calc_decascii(lvalue); break; case SLEEP : break;case ERROR : calc_display(Exception ); break; default : calc_display(Exception ); break; LONG calc_asciidec (CHAR *buffer)/ Convert the ASCII string into the floating point number. LONG value; LONG digit; value = 0; while (*buffer != ) digit = *buffer - 48; value = value*10 + digit; buffer+; return value; CHAR *calc_decascii (LONG num)/ A rather messy function to convert a floating/ point number into an ASCII string. LONG temp = num; CHAR *arrayptr = &outputbufferMAX_DISPLAY_CHAR; LONG divisor = 10; LONG result; CHAR remainder,asciival; INT i; / If the result of the calculation is zero / insert a zero in the buffer and finish. if (!temp) *arrayptr = 48; goto done; / Handle Negative Numbers. if (temp 0) outputbuffer0 = -; temp -= 2*temp; for (i=0 ; i = 0x30) & (key = 0x39) return 1; else return 0; /* I/O Routines */CHAR calc_getkey (VOID)/ Use the input routine from the *Keypad_Read* assembly file to / Scan for a key and return ASCII value of the Key pressed. CHAR mykey; do mykey = input(); while (mykey = 0); return mykey; VOID calc_display (CHAR bufMAX_DISPLAY_CHAR)/ Use the Output and Clearscreen routines from the / *LCD_Write* assembly file to output ASC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论