MOV AL,03H INT 10H
MOV AH,0B1H MOV AL,01H INT 1AH CMP AH,0 JZ InitPCI2 LEA DX,msg0
;清屏
MOV AH,0B1H MOV AL,09H INT 1AH
;读取该卡PCI9052基地址
JNC InitPCI4 LEA DX,msg2 JMP InitPCI1
InitPCI4: AND CX,0FFFCH
MOV IO_Bit8_BaseAddress,CX
RET
ENDP
InitPCI1:
MOV AH,09H INT 21H JMP Exit
InitPCI
InitPCI2:
MOV AH,0B1H MOV AL,02H MOV CX,Device_ID MOV DX,Vendor_ID MOV SI,0 INT 1AH JNC InitPCI3
ModifyAddress
PROC NEAR
ADD Con_8255,CX ADD PB_8255,CX ADD PC_8255,CX ADD PA_8255,CX RET
ENDP
ModifyAddress Exit:
;是否存在Star PCI9052板卡
LEA DX,msg1 JMP InitPCI1
MOV AH,4CH
INT 21H END START
InitPCI3: MOV DI,PCIBAR3
5、上机调试过程
5.1 硬件调试
20
按照硬件原理图连线后,通过手去触摸DS18B20测量温度,得到串行数字量,从C口采集数据,经8255A进行串并转换,转换后的数据到达8255A的A口,经LED的A口进行段选,B口进行位选。从而使数据在LED上显示。连线时要注意不要带电插拔,因为在带电插拔时的电流有可能将部件烧坏。
5.2 软件调试
设计的程序是使用汇编语言编写的。程序完成后就可以对它进行编译和链接,如果发现有错误,则返回程序中修改,完成后再次编译和链接,就这样周而复始的重复进行,直到没有出现编译错误之后就可以运行了。
运行的时候也有问题出现。例如程序的结构有问题,对于寄存器的使用不合理,或对于寄存器的重复使用导致数据混乱,循环不能正常的结束等问题。要解决这些问题就要对汇编用深入的理解,画清楚流程图,使用结构简单的循环,分布编写程序,同时注意对程序的注释可以减少问题。对于寄存器的使用问题可以才用入栈出栈来保存部分寄存器的值来安排寄存器的使用。
对于循环,注意结束循环的条件,避免在程序中产生无限循环的情况,无限循环显示的除外。对于一些寄存器的隐含用法要引起注意,对于控制端口地址的写入,数据的输出,都有特定的寄存器提供使用。
5.3 联机调试
联机运行时,用手触摸DS18B20数字温度计并不能得到预期效果,LED只是显示了一个数字,不能根据温度的变化转换成不同的数字,经检查,问题出在编写的程序上。需要重新转到程序开始处运行,重新读取模拟量才能进行转换。
另外,在调试时发现出现的温度与寄存中的数据不同,显然在程序中受到了改变,需要在程序中保存寄存中的温度值,不使其受到循环移位的影响。
5.4调试结果
用手指握住DS18B20,测量手指的温度,随温度的变化,七段LED显示管显示的数字随之改变。在开始时,会看到数字不断变大,经过一段时间后,温度会一个较为稳定的数字左右变换。
5.5实验过程遇到的问题及解决办法
(1)联机调试,无任何现象?
解决办法:首先检查了8255A端口连线是否出错,C口接逻辑开关,B口作段选,A口作位选。判断无误后再做相关测试,在老师的帮助下发现为PCI卡的位置插错,属于接线人马虎造成,后解决了此问题。
21
(2)全速运行时LED显示器显示全为暗红色8字型?
解决办法:由于指令运行的速度很快,导致新旧数据有重影(前一次显示数据时为亮的二极管没有显示结束,导致新显示的数据看不清楚)。后来修改程序,在每次输出段选和位选之前加禁止显示的指令mov dx,PA_ADD mov al,0ffh out dx ,al 使LED显示器显示为全灭,再显示数据时会比较清楚。 (3)当手触摸ds18b20时,反应速度慢?
解决办法:减小了延时时间,设置 push cx ;mov cx,100h ,后改为10h,现象很明显。
6、实验分析及问题讨论
6.1结果分析及改进设想
本课程设计(温度转换器)实现的是温度转换转换,利用到了DS18B20,8255A和LED等芯片,主要的转换通过汇编程序实现,如在本程序中一条强大的指令(换码—XLAT),可以说其实现的功能是“一言难尽”。
在完成相应的任务后,我试着将十六进制中的大写字母A~Z转换为小写字母a~z,:修改程序的代码段中的定义十六进制数字符的7段代码表。例如:将A修改为a,只需要将7段代码表中的db 77h改写为db 0dch即可。同理,将db 39h改写为db 58h,就实现了C改为c;将db 79h改写为db 7bh,就实现了E改为e。 在老师的提议下,又将十六进制改为十进制,是将测量的温度值除以10,取余数。有关小数是将最低四位除以16再乘10,结果是小数位。
6.2 体会及建议
在设计的过程中,我学会了微机原理的一些应用思想,设计思路,加深的对芯片功能与技术参数等的理解。编码器的实现,既用到了硬件方面的知识,又与软件方面紧密的结合,是计算机科学与技术专业基础且典型的综合应用型的设计。本课题其原理和设计思想可以作为许多功能强大的课题中的基本素材。
同时我明白,要做好一个课题,细心,耐心,好奇心和同学之间的有效合作都是不可缺少的,要将书本知识与实际操作紧密联系起来,在实践中发现和解决问题是非常重要的。同样预习报告和实验报告对课程设计是非常重要也是必不可少的,特别是画原理图等方面要花一定工夫;在实验的过程中也出现了一些问题,大部分来自自身的疏忽与对知识掌握的不牢固,这些方面是要加强的!
通过老师提出问题,再解决问题的过程,可以使我们对问题的认知更加深刻,这将有益于学到更多更为有用的东西。同时也知道了团队合作的重要性,在实验中,同组成员在一起发现问题、讨论问题,大大提高了解决问题的速度,同时也学到他们解决问题的思想。
由于实验仪器的更新换代,简化了硬件的连线,利于实验者的操作,希望以后可以体验到更先进的实验设备;同时,通过课程设计大家得到了很好的锻炼,也期待我们应该有更多实际操作的机会,加强合作与创新方面的能力。
22