ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:175.96KB ,
资源ID:22446295      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22446295.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字二进制编码器Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字二进制编码器Word格式.docx

1、我们将利用学过的汇编知识,通过编程来实现二进制数到十六进制字型码的转化,以及到有正负之分的十进制数的转化。显示编码设备LEDLED七段显示器是常用输出设备,由发光二极管封装而成。它的工作电压低,体积小,响应快,使用LED七段显示器比较简便。在该设计中要采用动态扫描、分时循环显示的方法。LED显示器共用一套段码锁存器和驱动器,而各位的阴极则分别由端口B的一位经过驱动后去控制。2)软件部分(汇编语言编写程序)软件部分将完成:对PCI卡初始化,写8255方式命令控制字。读入开关量,设置初值子程序,读取并存储二进制开关状态。16位二进制数从高位到低位分4组4位的二进制数输入,通过查段选码表确定每组字型

2、码,控制位选码和段选码的输出实现字型码的转换,包括到16进制数和10进制数的两种转换。位选码初始化为0FEH,并用循环左移控制不同LED显示器的亮灭,每位显示1ms,循环显示。二、硬件设计1.选择二进制逻辑开关图1 逻辑开关原理图1) 作用实现二进制数的输入。2)功能逻辑开关为8个并连在一起的单刀双置开关,它一端接+5V的电源电压VCC,一端接地。当触头与VCC相连时表示二进制数1,当触头接地时是表示二进制数0。3)技术参数一边接5V电压,另一边接地。2. 可编程并行接口芯片8255 1)作用 PC口为输入口,它与二进制数逻辑开关相连把读入的数经PCI卡送到PC机,PB输出段码,将4位二进制数

3、据转换为16进制数后对应的段选码送LED显示。PA口输出位选码,选择转换后16进制数显示在LED上的位置。 2)功能 在本设计中,PA、PB、PC三口均工作在方式0状态。PA0PA7 与LED相连设置位选,PB0PB7与LED相连设置段选, PC0PC7与逻辑开关18相连。在读操作中,二进制逻辑开关被置的状态经PC口送入PC机中,在写操作中,把转换后的16进制数循环地输出到LED上。 8255的技术参数包括:输入低电平电压,输入高电平电压,输出低电平电压(数据端口),输出低电平电压(外围端口),输出高电平电压(数据端口),输出高电平电压(外围端口),达林顿驱动电流,电源电流,输入负载电流和输出

4、浮动电流等。 8255的负载能力较小,由于这远小于LED所要求的工作电压,所以输出口PC需经驱动器同七段LED显示器相连接。3. 七段LED显示器 图2 LED原理图与内部结构示意图1)作用显示输出的16进制数或10进制数。2) 功能本设计中我们用共阴极类的LED显示器,它是由8个二极管电路按字型8的方式排列,当不同的二极管被选通后根据发光效果会显示不同的字型。3) 技术参数 工作电压23.6V,工作电流0.020.03A,所以,耗电不超过0.1W。由8255的参数可知,8255 的驱动电流Vmin=1mA,Vmax=4mA,远远小于LED 所要求的20 mA 30 mA,所以二者之间要加上驱

5、动器。4. 硬件总逻辑图及其说明图3 硬件逻辑图说明:首先将PC机与实验箱(PCI)相连接,8255芯片的CS片选信号线接PCI卡的CS0, 8255芯片A0、A1接PCI卡的A0、A1,这样做就是为了使CS0选择的地址空间范围是00F000FF,偶地址空间有效。由此我们得到8255控制端口地址为00F3,PA口地址为00F0,PB口地址为00F1,PC口地址为00F2。其他读写控制等信号线在内部已经接好,8255芯片的三个端口使用排线与其他部件相连,连接时应注意插孔的位置对应,不能连反了。在本实验中,PA口位选,PB口段选,PC口接逻辑开关,所以PB口接LED的B位置作段选,PA口接LED的

6、C位置作位选。接线的过程中千万不要带电操作,避免危险和损坏仪器设备。三、控制程序设计1控制程序设计思路说明我们在本程序中要做到的工作如下:(1)初始化是要实现写8255方式控制字。8255芯片的A口作位选,B口作段选,C口作输入,且三个端口都工作于方式0。(2)读入开关量是实现从PC口读入开关量。16位二进制数据分四组四位数据进行置数并存储在4个连续的的存储单元,以8位开关的低4位作为数据,第5位用于重新置入新的一个16位的二进制数的开关,6、7位作为标志位标志所置数据位16位数据中的哪一部分,最高位则用于输入一个有效的4位二进制数的标志开关。需要显示时从存储的单元中将数据取出。(3)写操作实

7、现的是根据二进制数从段选码中查表找出相应的字型码在LED显示器中显示。在输出对应16进制数时,写操作是通过四个循环完成。第一次循环写低8位的低4位,第二次循环写低8位的高4位,第三次循环写高8位的低4位,第四次循环写高8位的高4位。 位选码初始化为0FEH,即显示在最后一位,并用循环左移控制不同LED显示器的亮灭,每位显示1mS循环显示。16位二进制数据分4次显示。每输入一个有效的4位数据时,程序都会根据PC5的状态来判断是否重新置一个16位的二进制数,若PC5是1,则表示此次输入是另一个新的16位二进制数。在输出对应的10进制数时,写操作较麻烦一点。在程序中我们要先把16位的二进制数转换为1

8、0进制数,再把对应的10进制数的每位上的数值记入到一个我们事先定义的内存单元中,在写操作时,我们要把该单元中的数值通过段码表转换成对应的字型码,再通过位选上的设置来将其输出,这样就得到了转换后的10进制数。(4)通过PC7的状态,我们可以得到16位二进制数对应的10进制数和16进制数。PC7为1时,得到的是它对应的10进制数;PC7为0时,得到的是它对应的16进制数。如此通过PC7我们就可以实现10进制数和16进制数的交替显示了。2. 控制程序流程图1)主程序2)TDSIP子程序:3. 控制程序.MODEL TINY PCIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址

9、, 也为DMA & 32 BIT RAM板卡上的8237提供基地址) Vendor_ID EQU 10EBH ;厂商ID号Device_ID EQU 8376 ;设备ID号.STACK 100 .DATA IO_Bit8_BaseAddress DW ?msg0 DB BIOS不支持访问PCI $msg1 DB 找不到Star PCI9052板卡 $msg2 DB 读8位I/O空间基地址时出错$COM_ADD DW 00F3H ;控制口偏移量PA_ADD DW 00F0H ;PA口偏移量PB_ADD DW 00F1H ;PB口偏移量PC_ADD DW 00F2H ;PC口偏移量SEGM db

10、3fh,06h,5bh ,4fh,66h ,6dh,7dh,27h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,40h;段选码表NUM db 00h,00h,00h,00h,00h,00h ;10进制数据BEGIN db 00h,00h,00h,00h,00h,00h .CODE START: MOV AX,DATA MOV DS,AX NOP CALL InitPCI ;PCI卡初始化 CALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址 mov al,10001001b ;8255芯片初始化 以PC口为输入,PB口输出段选,PA口输出位

11、选 mov dx,COM_ADD out dx,al ;将初始化信息写入8255芯片控制口loop1: mov dx,PC_ADD ;取8255C口地址 in al,dx mov ah,al ;将从C口打入的开关量输入至AL and ah,80h ;取PC口第七位的状态 cmp ah,80h ;判断PC7=1? je setdata ;等于1则设置初值 mov si,offset BEGIN call TDISP jmp loop1 ;继续查看C口状态设置初值 setdata: mov ah,al and ah,10h cmp ah,10h ;判断PC4=1? jne next ;不是,则执行

12、next mov bx,offset BEGIN;是,BEGIN单元全置0 call reast mov bx,offset NUM ;NUM单元全置0 next:mov bx,offset BEGIN ;BX存放BEGIN单元的偏移地址 低位不变,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,

13、cx ;BX里存放是从逻辑开关打入的数据的偏移地址 mov byte ptr bx,ah ;将AH中的内容以字节的形式存放到指定单元 mov bx,offset BEGIN mov al,byte ptrbx+1 mov cl,4 shl al,cl or al,byte ptrbx mov ah,byte ptrbx+3 shl ah,cl or ah,byte ptrbx+2 ;把输入的数据放入ax,没有输入的位默认为0 mov bx,offset NUM cmp ax,8000h ;判断输入的是否为负数 jb next1 ;不是,则执行next1 sub ax,1 ;是,则求它的相反数(

14、正数) xor ax,0ffffh mov byte ptrbx+5,10h ;把的段码放入要显示的数据的最高位 next1: mov dx,0 mov cx,10 div cx ;进行除10操作 mov byte ptrbx,dl ;余数放入bx指向的单元 inc bx ;bx加1 cmp ax,0 ;判断商是否为0 jne next1 ;不是,执行next1 mov si,offset NUMTDISP proc mov cx,6 mov ah,11111110b ;设置位选码,即LED0显示loop2: mov al, byte ptr si ;取存放在地址为SI寄存器中内容的内存单元中

15、数据 mov bx, offset SEGM ;取SEGM偏移地址 xlat ;查数据段表,al+bx-al mov dx,PB_ADD ;送PB口地址段选 out dx,al mov al,ah ;送位选码,输入输出指令对累加器采用固定寻址方式,即从输入端口传送到al/ax mov dx,PA_ADD ;送PA口地址进行位选 call delay ;执行delay子程序 mov al,0ffh ;禁止显示 out dx,al add si,1 rol ah,1 ;设置下次显示的位选码 loop loop2 ;循环 retTDISP endp 延迟子程序delay proc push cx ;

16、将cx 的内容保存入栈 mov cx,100h ;loop5: nop ;空操作 loop loop5 ;循环延时 pop cx ;出栈 ret ;返回“ 禁止显示”delay endp;复位子程序reast proc near push cx push ax mov al,0 loop3:mov byte ptrbx,al inc bx loop loop3 pop ax pop cxreast endp InitPCI PROC NEAR;近调用(同一程序段内) MOV AH,00H MOV AL,03H INT 10H MOV AH,0B1H MOV AL,01H INT 1AH CMP

17、 AH,0 JZ InitPCI2 LEA DX,msg0 InitPCI1: MOV AH,09H ;不存在PCI卡时退出程序 INT 21H JMP Exit InitPCI2: MOV AH,0B1H MOV AL,02H MOV CX,Device_ID MOV DX,Vendor_ID MOV SI,0 INT 1AH JNC InitPCI3 ;是否存在Star PCI9052板卡 LEA DX,msg1 JMP InitPCI1 InitPCI3:MOV DI,PCIBAR3;是否存在Star PCI9052板卡,存在则转 PCI3初始化PCI卡 MOV AH,0B1H ;给出出

18、错信息 MOV AL,09H ;退出程序 INT 1AH ;读取该卡PCI9052基地址 JNC InitPCI4 LEA DX,msg2 ;读地址出错时给出出错信息 JMP InitPCI1 ;InitPCI4: AND CX,0FFFCH ;屏蔽cx寄存器中最后两位的信息 MOV IO_Bit8_BaseAddress,CX ;并保存其它位信息 RET;返回到CALL ModifyAddress InitPCI ENDP将虚地址转化为物理地址ModifyAddress PROC NEAR ADD COM_ADD,CX ADD PA_ADD,CX ADD PB_ADD,CX ADD PC_A

19、DD,CX RET ;8255芯片初始化 ModifyAddress ENDP Exit: MOV AH,4CH INT 21H END START四上机调试过程1硬件调试首先要进行连线,我们要将PC机的数据总线插入与实验箱的对应接口中。再在实验箱的相应位置插入PCI卡。8255芯片的C口接逻辑开关,B口接LED的B口作段选,C口接LED的A口作位选。8255芯片的CS片选信号线接PCI卡上的CS0, ,8255芯片A0、A1接在PCI卡的A0、A1上。这些连线不可随意连接,它的连接都有一定的根据和需要,所以要注意不能连错了。在实验之前我们在进行调试,由C口在开关处置数,然后观察数码管显示的数

20、据是否与初始状态的数相对应,或者是否有数据显示,如果数据显示正确的话,表示所接的硬件连线是正确的,可以正常使用了;否则表示接线有问题,需要进行相应改正,直至能正常使用。2软件调试在此部分,我们知道程序分为,8255初始化部分,读入开关量部分和显示出数字量部分。在实验前我们要做充分的准备,写出设计思路,画出程序流程图,然后编写正确的汇编程序,最后在与实验箱配套的集成环境下调试程序,当我们的程序编译链接通过后,便可以准备联机调试。在调试过程中如果发现有错误,则要返回程序中进行修改,完成后再次编译和链接,就这样的重复进行,直到没有出现编译错误之后就可以运行了。运行的时候也有可能出现问题,比如对寄存器

21、的使用不合法,程序的结构出现问题,或者是对于寄存器的重复使用导致数据混乱,循环不能正常的结束,以及死循环等问题。要解决这些问题就要对汇编有深入的理解,我们尽量使用结构简单的循环,分布编写程序,这样有助于我们程序的正确性,最后添加注释出可以减少问题的出现。3联机调试当软件和硬件都调试成功后,我们就要把二者连接起来调试,称之为联机调试,调试正确所得的结果就是程序设计的最终结果了。由于各个部件都单独调试正常,如果出现的结果和理论的有所不同,那么就要分析是硬件的问题还是软件的问题,并对相应的地方做出改动。首先将实验箱总电源开关打开,打开PC机上的集成软件。编译程序,编译通过后,单步调试,同时观察并记录

22、相关现象,以及各寄存器中值的变化。这样有利于我们发现错误并易于我们的修改。4调试的结果及问题的提出1)调试结果我们利用二进置逻辑开关来置数,分4次进行置数,每次可置4位二进制数据。以8位逻辑开关的低4位设置数据,第5位表示是否置入新的16位的二进制数据,6、7位设置数据对应数码管的位置。数据设置好后将第八位开关置1,使8255A可以从C口读入数据,LED显示器上会在相应位显示对应10进制的字型码,在此后当我们把第8位的开关再打到0时,我们会发现此时显示的是对应的16进制数。我们可循环再置另16位二进制数据。全速运行后,可以观测到数码管显示的数据。根据程序的设置,可以在全速运行时任意改变数据。2

23、)问题的提出(1)调试过程中LED没有反应?解决办法:检查PCI卡的位置有没有插错,再检查8255端口连线是否出错,C口接逻辑开关,B口作段选,A口作位选。在最后发现是由于粗心把连线接错位了,当把连线接正确后LED就有显示了。(2)LED显示器显示全为暗红色8字型,几乎不能辨认?在程序运行的过程中我们没有意识到指令运行的速度是很快的,所以导致新旧数据有重影,就是说前一次显示数据时为亮的二极管没有显示结束,导致新显示的数据看不清楚。在老师的指导下修改了程序,在每次输出段选和位选之前加禁止显示的指令mov dx,PA_ADD mov al,0ffh out dx ,al 使LED显示器显示为全灭,

24、这样再显示数据时会比较清楚,不会有重影出现了,显示也比较清淅。(3)LED显示时比较暗淡,数据显示的不清楚?增大了延时时间,设置 push cx ;mov cx,10h ,后改为100h,现象比较明显,显示的数据很清淅。(4)如何将二进制数对应的10进制数值和16进制值数值都显示,并且为交替显示? 解决办法:在程序中做了一点修改,在PC7为0的时候,我们不是什么都不做,而是在LED上显示begin单元的内容,即它对应的16进制数。五、设计总结及问题讨论1总结在本次课程设计中,题目是数字二进制编码器,实现的是不同进制数字值的转换。完成此次课程设计我用到了逻辑开关,8255和LED等芯片,其中10

25、进制数的转换和16进制数的转换通过汇编程序实现。在课程设计结果中,逻辑开关的最高位有着非常重要的作用。当分4次输入不同位置上的4位数据时,逻辑开关的最高位为1,则表示置数,此时LED上显示的是它对应的10进制数;而再次将逻辑开关的最高位置为0时,LED上显示的就是它对变的16进制数,也就是说通过最高位的切换来完成一个二进制数同时转换为10进制数和16进制数,并交替显示。2问题讨论在调试的过程中,刚开始的时候LED没有反应,在检查过后发现原来是三个端口的连线接错了,当把线重新接好之后就行了。开始时候LED显示器显示全为暗红色8字型,这是由于前一次显示数据时为亮的二极管没有显示结束,导致新显示的数

26、据看不清楚。在老师的指导下修改了程序,最后程序终于调试成功。3. 体会与建议在课程设计的过程中我学会了微机原理的一些应用思想,设计思路,加深的对芯片功能与技术参数等的理解,这不仅巩固了我的微机方面的知识,也让我学到了许多相关的其它知识,这对我来说非常受用,还有一个大的体会就是课程设计也提高了我的思考和解决问题,以及动手的能力。此次课程设计是数字二进制编码器的实现,不仅用到了硬件方面的知识,又用到了软件方面的知识,我更深入的了解了8255芯片的功能,熟悉了它的使用方法,对LED显示器也有了比较深入的对其构造及功能的了解。这对于我们计算机学科的学生来说,这是非常有用的。由于使用集成的实验箱,使得本实验减少了很多复杂的连线,不同功能的芯片也使编程实现变得简单,减少了解决问题需要的时间。总之这是学习计算机基础且典型的综合应用型的设计。此次课程设计让我明白,要做好一件事要细心,有耐心,有好奇心和同学之间的有效合作以及向老师的请教都是不可缺少的,要将书本知识与实际操作紧密联系起来,提高我们的动手能力,在实践中更好的发现和解决问题,还有就是不懂得一定要善问,自己独立思考也很重要。设计者:程苏秦 完成时间:2009年2月

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1