数字二进制转换器.doc_第1页
数字二进制转换器.doc_第2页
数字二进制转换器.doc_第3页
数字二进制转换器.doc_第4页
数字二进制转换器.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

微机原理课程设计合肥学院计算机科学与技术系微机原理与接口技术课程设计20072008学页: 08-09年第二学期课程设计科目二进制编码器学生姓名 欧阳小叶学号 0604031039班级 06网工(1)班指导教师 张 向 东2008年12月数字二进制码编页:1题目可以不写一、题意分析及解决方案1.题义需求分析本页:1注意文章的缩进和段落格式,不该加粗的不要加粗,其他雷同课程设计的内容是:用STAR ES598PCI单板开发机和接口芯片设计应用接口作为一个十六位二进制编码器的输入口,并用该口作为四位LED七段显示器的输出口,循环显示其编码的结果。即:利用逻辑开关板输入一个十六位的二进制数,利用LED七段数码显示控制电路板的LED七段显示器,循环显示与所输入的十六位二进制数相对应的四位十六进制数。为了实现课题所要求的功能,本设计需要解决以下问题:(1) 如何实现二进制的置数(2)如何输入二进制数(3)如何实现二进制数到十六进制字型码的转化(4)如何输出数据(5)如何循环显示结果2.解决问题的方法及思路设计方案:为了解决以上问题,本实验设计分硬件设计和软件设计两部分。1.3硬件部分页:1标号不一致,其他雷同PC机与PCI卡连接,通过可编程并行接口芯片8255A同开关与LED七段显示器相连。通过逻辑开关(分四次输入设置)将十六位二进制信息由8255A芯片的PC口输入,经过程序转换为对应的七段LED段选码(字型码),输出至LED数码显示器,由LED数码显示器显示出与输入的二进制信息相对应的字形码。8255A芯片的PA口用于进行LED七段显示器的位选码的选择,PB口用于段选码的选择,PC口用于输入。因此二进制的置数设备、输入设备的选择以及输出设备都属于硬件部分,二进制的指数设备可选用逻辑开关二进制的输入设备实现四位四位的处理,输出可以处理八位,可选用芯片页:1调整文章格式,使其更有条理。8255A, 输出显示使用LED显示器。1.4软件部分利用汇编语言编写动态移动的控制程序。软件部分将完成:初始化(PCI卡初始化,写8255方式命令控制字)读取二进制数锯(设置初值子程序,读取并存储二进制开关状态)字型码的转化(16位二进制数从高位到低位分4组对应4位16进制数,通过查段选码表确定每组字型码,控制位选码和段选码的输出实现字型码的转换)写操作(输出结果并控制显示器显示循环送出段选码和位选码,通过两个循环, 第一次循环写低8位,第二次循环写高8位,分两次写一个8位数据,先写低4位,再写高4位。位选码初始化为0FEH,并用循环左移控制不同LED显示器的亮灭,每位显示1ms,循环显示。)二、硬件设计1.选择芯片逻辑开关1).芯片逻辑开关在本设计中的作用通过逻辑开关给出所需编码的二进制数。2).芯片逻辑开关的功能分析逻辑开关为8个并连在一起的单刀双置开关,它一端接+5V的电源电压VCC,一端接地。当触头与VCC相连时表示二进制数1,当触头与地线相连是表示二进制树0。 表2-1逻辑开关真值表K4K3K2K1段码000000001100102001130100401015011060111710008100191010A1011b1100c1101d1110E1111F图2-1逻辑开关原理图3).芯片逻辑开关的技术参数开关向左拨形成“1”,接+5V电压,向右拨形成“0”,接0 V电压。2.选择芯片8255A1)芯片8255A在本设计中的作用PC口作为作为输入口,它与逻辑开关相连把读入的二进制数经PCI卡送PC机, PB口输出段选码,将4位二进制数据转换为16进制数据后对应的段选码送LED显示。PA口输出位选码,选择转换后16进制数据显示在LED上的位置。在用8255前首先要对它进行初始化,设置它的方式选择控制字。8255A工作于方式0:指基本输入输出方式,相当于无条件传送方式。对于基本输入方式,其数据不锁存,对基本输出方式,其数据锁存。2)芯片8255A的功能分析8255A的数据总线缓冲器是一个三态8位双向缓冲器,用作8255A同系统数据总线相连时的缓冲部件,CPU通过执行输入/输出指令来实现对缓冲器发送或接收数据。8255A的控制字或状态字也是通过该缓冲器传送的。PA、PB、PC三口均工作在方式状态。PC0PC7与逻辑开关18相连,PB0PB7与LED相连设置段选,PA0PA7 与LED相连设置位选。当控制程序运行到读开关变量时,逻辑开关状态经PC送PC机中,经程序运行后,PA0PA7与LED0LED7相连当控制程序运行至显示16进制数时送出位选码选中相应位,对应的七段LED显示器显示16进制数的字型。3)芯片8255A的技术参数表2-2 8255A技术参数8255A技术参数测试条件规范值单位大小输入低电平电压IL.输入高电平电压IHCC.输出低电平电压OL(数据端口)OL.输出低电平电压OL(外围端口)OL.输出高电平电压OH(数据端口)OR.输出高电平电压OH(外围端口)OH.达林顿驱动电流OAR.mA电源电流CCmA输入负载电流ILINmA输出浮动电流OFOR.VmA由上表格中达林顿驱动电流一栏可以知道:电流最大值是4.0 mA,最小值是1.0 mA,可知:8255A的负载能力较小,由于这远小于LED所要求的工作电压,所以输出口PC经驱动器同七段LED显示器相连接。3.选择芯片LED显示器1) 芯片LED显示器在本设计中的作用本设计中,LED显示器用于显示编码结果。2) 芯片LED显示器的功能分析 由于设计中采用共阴极LED显示器,所以当某段接入正电压时,对应的发光二极管会发光,当需要显示字型码“0”时,对应下图中的a,b,c,d,e,f发光二极管应发光,输入位选码应为00111111,即为:3FH;类似可以显示其他。图2-2 LED原理图与内部结构示意图页:4图片要居中,其他雷同图2-3数码管内部结构3) 芯片LED显示器的技术参数LED显示器的工作电压23.6V,工作电流0.020.03A,所以,耗电不超过0.1W。但是,由8255A的参数知:8255 A的驱动电流Vmin=1mA,Vmax=4mA,远远小于LED 所要求的20 mA 30 mA,所以二者之间要加上驱动器。表2-3 8255A真值表字型二进制输入A B C D字型码a b c d e f g dpOX01234567890 0 0 00 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 1 1 1 1 1 0 00 1 1 0 0 0 0 01 1 0 1 1 0 1 01 1 1 1 0 0 1 00 1 1 0 0 1 1 01 0 1 1 0 1 1 00 0 1 1 1 1 1 01 1 1 0 0 0 0 01 1 1 1 1 1 1 01 1 1 0 0 1 1 03f065b4f666d7d077f6f10/a11/b12/c13/d14/e15/f1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 01 1 1 11 1 1 0 1 1 1 00 0 1 1 1 1 1 01 0 0 1 1 1 0 00 1 1 1 1 0 1 01 0 0 1 1 1 1 01 0 0 0 1 1 1 0777c395e79714硬件总逻辑图及其说明设计思路说明主要连线:首先通过线路将PC机与实验箱(PCI)相连,8255A芯片的CS片选信号线接PCI卡的CS0, 8255A芯片A0、A1接PCI卡的A0、A1,这样做的结果使得CS0选择的地址空间范围是00F000FF,偶地址空间有效。而8255A控制端口地址为00F3,PA口地址为00F0,PB口地址为00F1,PC口地址为00F2。其他读写控制等信号线已在内部接好;8255A芯片的三个端口使用排线与其他部件相连,连接时应注意插孔的位置的对应:在本实验中,由于A口位选,B口段选,则C口接逻辑开关,B口接LED的B位置作段选,A口接LEDC位置作位选。注意:逻辑开关的置数是个关键;接线时千万不要带电操作,避免危险和损坏仪器设备。图3-1硬件总逻辑图三、控制程序设计1.控制程序设计思路说明本程序主要功能分为初始化、读开关量、写操作。初始化主要实现写8255方式控制字。8255芯片的C口作输入,工作于方式0,B口作段选,工作于方式0 ,A口作位选。读开关量主要实现从PC口读入开关量,由第8位控制当前是否出于置数状态。16位二进制数据分四组四位数据进行置数并存储在4个连续的的存储单元,以8位开关的低4位作为数据,6、7位作为标志位标志所置数据位16位数据中的哪一部分。需要显示时从其中将数据取出。写操作实现的是根据二进制数从段选码中查表找出相应的字型码在LED显示器中显示。写操作通过四个循环完成。第一次循环写低8位的低4位,第二次循环写低8位的高4位,第三次循环写高8位的低4位,第四次循环写高8位的高4位。 位选码初始化为0FEH,即显示在最后一位,并用循环左移控制不同LED显示器的亮灭,每位显示1mS循环显示。16位二进制数据分4次显示。当16位二进制数据处理完后,程序跳到判断是否置数操作判断是否置数,若置数则读入另16位二进制数,进入另一次循环。2.程序流程图 图4-1 流程图页:8子流程图呢?- 3 -3.控制程序页:8代码要有分栏符.MODELTINYPCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址, 也为DMA & 32 BIT RAM板卡上的8237提供基地址) Vendor_IDEQU 10EBH;厂商ID号Device_IDEQU8376 ;设备ID号.STACK100.DATAIO_Bit8_BaseAddressDW?msg0 DBBIOS不支持访问PCI $msg1 DB找不到Star PCI9052板卡 $msg2 DB读8位I/O空间基地址时出错$COM_ADD DW00F3H;控制口偏移量PA_ADDDW00F0H;PA口偏移量PB_ADDDW00F1H;PB口偏移量PC_ADDDW00F2H;PC口偏移量TIME db 3fh,06h,5bh,4fh,66h ,6dh,7dh,27h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;段选码表BEGINT db 00h,00h,00h,00h ;要显示的数据值.CODESTART:MOVAX,DATAMOVDS,AXNOP CALLInitPCI ;PCI卡初始化 CALLModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址 mov al,10001001b ;8255芯片初始化 以PC口为输入,PB口输出段选,PA口输出位选mov dx,COM_ADDout dx,al;将初始化信息写入8255控制口loop3:mov dx,PC_ADD;取8255C口地址in al,dx;将从C口打入的开关量输入至ALand al,80h ;取PC口第七位的状态 cmp al,80h ;判断PC7=1?je settime ;等于1则设置初值loop4:call TDISP ;否则显示编码jmp loop3 ;继续查看C口状态 settime: ;设置初值子程序 mov bx,offset begint ;BX存放的要显示的数据值的偏移地址 mov dx,PC_ADD ;送pc口地址 in al,dx mov ah,al ;低位不变,ah、al中内容用于判断和存数据 and ax,0f60h ;0000111101100000b,屏蔽保留6,7位后,用于位选LED八位的高低位 mov cl,5 ;设置循环次数 shr al,cl ;逻辑右移5位01100000, mov cx,0 ;CX清零,利用低8位传送 mov cl,al ;循环后对应00,01,10,11 add bx,cx ;BX里存放是从逻辑开关打入的数据的偏移地址 mov byte ptr bx,ah ;将AH中的内容以字节的形式存放到指定单元 call TDISP ;转换为16位数据并显示 jmp loop3 ; 数码管显示子程序,完成显示功能 TDISP proc ;过程定义伪操作 ;显示4位16进制,因此设四次循环 loop1: mov si,offset begint mov cx,4 mov ah,11111110b ;设置位选码,即LED0显示,如FEFFHloop2: mov al, byte ptr si;取存放在地址为SI寄存器中内容的内存单元中的数据( 取begint偏移地址) mov bx, offset time ;取 time偏移地址 如 0151H xlat ;查数据段表,al+bx-al mov dx,PB_ADD ;送PB口地址段选 out dx,al mov al,ah ;送位选码,输入输出指令对累加器采用固定寻址方式,即从输入端口传送到al/ax mov dx,PA_ADD ;送PA口地址进行位选 out dx,al call delay ;执行子程序,显示灯 mov al,0ffh ;禁止显示 out dx,al add si,1 rol ah,1 ;设置下次显示的位选码 loop loop2 ;循环 jmp loop3 ;从开关读取另一组16位二进制数据 retTDISP endpdelay proc;延迟子程序,实现延时的功能 push cx ;将cx 的内容保存入栈 mov cx,0A0h ;设置循环次数loop5: nop ;空操作 loop loop5 ;循环延时 pop cx ;出栈 ret ; 返回“ 禁止显示”delay endpInitPCIPROCNEAR;近调用(同一程序段内)MOVAH,00HMOVAL,03H;0003hINT10H;清屏MOVAH,0B1HMOVAL,01HINT1AH;0001hCMPAH,0JZInitPCI2LEADX,msg0InitPCI1:MOVAH,09H ;不存在PCI卡时退出程序INT21HJMPExitInitPCI2:MOVAH,0B1HMOVAL,02HMOVCX,Device_IDMOVDX,Vendor_IDMOVSI,0INT1AHJNCInitPCI3 ;是否存在Star PCI9052板卡LEADX,msg1JMPInitPCI1InitPCI3:MOVDI,PCIBAR3 ;是否存在Star PCI9052板卡,存在初始化MOVAH,0B1H ;给出出错信息MOVAL,09H ;退出程序INT1AH ;读取该卡PCI9052基地址JNCInitPCI4LEADX,msg2 ;读地址出错时给出出错信息JMPInitPCI1 ;退出程序InitPCI4:ANDCX,0FFFCH ;屏蔽cx寄存器中最后两位的信息MOVIO_Bit8_BaseAddress,CX ;并保存其它位信息RET;返回到CALLModifyAddressInitPCIENDPModifyAddressPROCNEAR;将虚地址转化为物理地址ADDCOM_ADD,CXADDPA_ADD,CXADDPB_ADD,CXADDPC_ADD,CXRET;8255芯片初始化ModifyAddressENDPExit:MOVAH,4CHINT21HENDSTART四上机调试过程1.硬件调试将PC机的数据总线插入与实验箱的接口。在实验箱的相应位置插入PCI卡。8255A芯片CS片选信号线接PCI卡上CS0, 8255A芯片A0、A1接PCI卡的A0、A1。8255A芯片的C口接逻辑开关,B口接LED的B口作段选,C口接LED的A口作位选。调试的时候,由C口在开关处置数,然后观察数码管显示的数据是否与初始状态的数相对应,或者是否有数据显示,如果数据显示正确的话,表示所接的硬件连线是正确的,可以正常使用了;否则进行相应改正。在检查清楚后才可以打开开关,以防出现短路等现象毁坏仪器。2.软件调试在软件部分,程序分为三个部分:8255A初始化部分,读入开关量部分,显示出数字量部分。应首先写出设计思路,并画出程序流程图,然后编写汇编程序,最后在与实验箱配套的集成环境下调试程序,编译链接通过后,准备联机调试。设计的程序是使用汇编语言编写的,程序写完成后就可以对它进行编译和链接,如果发现有错误,可以单步执行来查看问题所在,发现问题再进行修改则返回程序中修改,完成后再次编译和链接,就这样重复操作,直至没有出现编译错误之后就可以运行了。运行的时候也有问题出现。可以通过单步执行来查找问题所在,可能是程序的结构有问题,对于寄存器的使用不合法,或者是对于寄存器的重复使用导致数据混乱,循环不能正常的结束等问题。要解决这些问题就要对汇编用深入的理解,画清楚流程图,使用结构简单的循环,分布编写程序,同时在语句旁边加上注释会减少问题的产生。3.联机调试在软件和硬件独自调试后,就要把二者连接起来一起调试,调试正确所得的结果就是程序设计的最终结果了。由于各个部件都单独调试正常,如果出现的结果和理论的有所不同,那么就要分析是硬件的问题还是软件的问题,并对相应的地方做出改动。操作:将实验箱总电源开关打开,打开PC机上的集成软件。编译程序、编译通过后,单步调试并观察结果以及各寄存器中值得变化,然后单步连续执行观察按下键与显示数值。出现问题时对程序进行修改,直至出现正确结果。再作全速运行。4.调试结果及问题的提出 从逻辑开关置数,每次可置4位二进制数据。以8位逻辑开关的低4位设置数据,第5位无作用,6、7位设置数据对应数码管的位置。数据设置好后将第八位开关置1,使8255A可以从C口读入数据,LED显示器上会在相应位显示对应16进制的字型码。连续设置四组共16位二进制后,可循环再置另16位二进制数据。全速运行后,可以观测到数码管显示四位十六进制数据,如置四组数为“0001,0010,0011,0100”,则显示“1234”(根据6,7位来判断先后顺序,如“00”对应第四个数码管,10,01,11分别对应第三,二,一位数码管)。根据程序的设置,可以在全速运行时任意改变数据。提出问题:为什么要使用“禁止显示”?“延时”是如何设置时间的?五、设计结果分析及问题讨论:1.结果分析及改进设想本课程设计(编码器)实现的是数字转换,利用到了8255和LED,逻辑开关等芯片,主要的转换通过汇编程序实现,如在本程序中一条强大的指令(换码XLAT),巧妙的实现了将数据指向段选,完成了显示功能。在完成基本功能后,我们又增加了两个功能:1)32位的二进制转化为八位的十六进制这个增加的功能和之前的相比,就是二进制的位数多了,需要做的改变就是,存储二进制的变了,我们使用两个存储器来存储32位的二进制,仍然是四位四位一显示,会有八个灯亮,延时的时间也要做相应的调整。还有双刀双掷开关也要做相应的调整,第五位和第六位第七位一起选择位数,其他的不变。此功能已经实现。2)24位的二进制转化为八位十进制这个功能和之前的相比难度加大了,是二进制转换为十进制的。这里将做详细的介绍。改变一:双刀双掷开关的功能改变了,低四位的作用不变,仍然是输入数据,第五六七位的功能改变了,就是当这几位输入110时表示转换为十进制,为111时表示重新输入,其他的六种位24位输入的二进制的位选。存放二进制仍然使用两个存储器,higher存放高八位的二进制,lower存放低十六位的二进制,将二进制转换成十进制时使用除法,先把高位除以10保留余数送到Si商送到lower,当higher为0时将低位除以10,由此可以把二进制转换为十进制。在当输入111重新输入时,将上一次的结果清零时遇到了一个问题,上次的结果无法清除,仍显示,经过一段时间的研究以后我们终于解决了这个问题,我们重新定义了一个存储器来存储新一轮的数据,最后得到了想要的结果,实现了所有的功能。2.

温馨提示

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

评论

0/150

提交评论