您好,欢迎访问三七文档
浙江工业大学计算机学院实验报告一实验名称8253实验教师雷艳静日期2014.12.152一、实验内容与要求1.1实验内容(1)计数器0方式2实验将计数器0设置为方式2,计数器初值为任意数(二进制8位,实验中我们是24),将计数初值通过编程实现逐个的输出显示在屏幕上,而编程当中字符是ASCII码,我们要将其转换成十进制输出显示。手动开关输入单脉冲,通过编程计数初值就可以显示了,而且每输入一次单脉冲计数初值就减1。(2)计数器方式3将计数器0、计数器1分别设置为方式3,计数初值设为1000。实际上就是实现了8253的分频实验。实验内容相对简单,我们分别设置计数初值为16位,分两次读写,计数器0、计数器1工作于方式3,再用二进制格式计数,因为方式3的功能即为周期性输出方波,随着方波周期性的变化,引起电流的变化,实验中LED灯的闪烁变化就可以体现计数器0、计数器1分别写入时8253分频功能。1.2实验要求(1)实验效果:程序执行后应该在屏幕上显示出我们事先在程序里写好的计数初值,手动每按一次单脉冲开关,计数初值就在屏幕上减1显示一次,而且显示的是十进制数。(2)实验效果:程序执行后我们可以观察事先在硬件上连接的好LED灯,LED灯一闪一灭变化。二、实验原理与硬件连线2.1实验原理TPC-USB平台上有一块8253定时/计数芯片,除了片选引脚,其他信号都已接好。可编程的定时/计数器8253在硬件组成、外形引脚上都是兼容的。8253的内部有6个模块:数据总线缓冲、读/写控制逻辑、控制字寄存器和3个结构相同且完全独立的计数3器。①数据缓冲器:是8253与系统数据总线连接的接口电路,它能寄存3个数据:CPU向8253写入工作方式的命令字;CPU向计数寄存器写入的计数初值;从计数器读出的当前计数值。②读/写控制逻辑:用来接收CPU发出的读/写信号、片选信号和内部端口地址信号,选择读出或写入寄存器,并且确定数据传输的方向。③控制字寄存器:用来暂存CPU送来的控制字,用来选择计数器并确定该计数器的工作方式、读写格式和计数的数制。④计数器0~2:计数器的操作是相互独立的,每个计数器包含一个16位减1计数单元、16位计数初值寄存器和16位输出锁存器。计数器工作之前,首先要向计数器装入计数初值,这个计数初值存放在初值寄存器中,然后送到减1计数单元。当允许计数条件满足后,在时钟脉冲CLK的作用下,开始进行减1计数直至计数值减到0,由OUT输出结束信号,输出信号的波形由工作方式决定。(1)计数器工作之前,首先要向计数器装入计数初值,这个计数初值存放在初值寄存器中,然后送到减1计数单元。当允许计数条件满足后,在时钟脉冲CLK的作用下,开始进行减1计数直至计数值减到0,由OUT输出结束信号,输出信号的波形由工作方式决定。而方式2周期性输出负脉冲。在实验中我们设定计数器0计数初值,程序执行中这个计数初值保证了不会变化,再通过编程将字符读出,这时手动开关输入单脉冲,计数初值逐个输出在屏幕上,不断输入单脉冲,计数初值不断减1输出。(2)设置计数器0、计数器1分别工作在方式3,计数初值相同,其实两个计数器执行的操作相同,功能也相同,它们的联合计数实现了LED灯的亮灭变化,也就是实现了分频的功能。2.2硬件连线(1)实验中需要设置8253的计数器和工作方式,把方式控制字、计数初值送端口,所以8253的CS端应连接280H,工作方式2应送CLK负脉冲到8253芯片,GATE连接高电平允许计数,OUT输出端连接逻辑电平开关。硬件连接图如图2.1:4图2.1(2)和实验(1)一样,要连接8253芯片的端口CS,因为这里有两个计数器:计数器0和计数器1,所以分别有两个GATE连接高电平允许计数,计数器1OUT输出端连接LED灯,观察其变化,计数器0OUT输出端连计数器1CLK时钟负脉冲,计数器0连1MHz。硬件连接图如图2.2:图2.2三、设计思路、步骤和程序流程图3.1设计思路(1)实验一①首先设置8253为计数器0,工作方式为2,即14H,方式控制字送控制口a283H。然后将计数初值送端口b保存。②读出端口280H的计数初值,计数初值是8位数据。5③因为输入的计数初值是两位十进制数字,输出时要逐个输出,也就是要先输出计数初值中的2,再输出4,这样的输出方式是用除法除10取商再取余实现的。所以代码的设计思路是先将被除数10放在CL中,除法之后将商放在CX中,余数放在AL中。④因为程序进行除法计算时二进制进行计算,所以计算得到的是商和余数的ASCII码,所以要将它们的ASCII码进行一个转化操作,即程序中的需要调用的子程序PRINT,然后将转化后的数送DL寄存器,调用INT21H的2号功能,将DL寄存器中的字符在屏幕上显示出来。⑤如果不需要进行除法则将有效地址送DX,调用INT21H的9号功能在屏幕上显示出来。⑥调用INT16H的1号功能判断是否有键按下,这里用了INT16H的1号功能而不是INT21H的6号功能的原因是:INT16H的1号功能按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。如果按下的是Ctrl+Break组合键,则终止程序执行。1号功能调用无须入口参数,出口参数在AL中。而INT21H的6号功能执行键盘输入操作或屏幕显示输出操作,但不检查Ctrl+Break组合键是否按下。执行这两种操作的选择由DL寄存器中的内容决定。如果有键按下则跳转JZ。⑦最后调用INT21H的4CH功能退出程序。(2)实验二①首先写计数器0,向8253写方式控制字,工作方式3,即36H送到端口c保存。②然后写计数初值1000,送8253端口a保存。写入计数初值时,因为是16位计数初值,先写入8位低字节,后写入8位高字节。③写完计数器0后,以相同的思路写计数器1。只是写入端口c的方式控制字是76H。3.2实验步骤①仔细阅读实验内容和预期所要达到的执行效果。参考8253芯片的各种工作方式和计数器功能。然后根据实验内容选择工作方式,并会写8253的初始化编程。②熟悉各个硬件连接方式与8253芯片的连接。6③根据设计思路写好程序流程图,根据流程图编程。编程过程中可以根据程序适当的修改程序流程图。④运行并观察实验结果,看是否与实验内容,预期效果一致,如果一致,实验完成。如果不一致,修改程序并再次运行。⑤根据得到的实验结果了解8253芯片可以实现的各种功能,并考虑它可以配合使用其它芯片完成各种功能。3.3程序流程图实验(1)和实验(2)程序流程图分别如下:开始设置计数器0为工作方式2送计数器初值到端口读计数器初值逐个显示计数器初值两位十进制数除法取商再取余ASCII码转化显示到屏幕上判断是否有键按下结束7图3.3.1开始设置计数器0为工作方式3向计数器0送初值1000因为初值是16位,所以先写低8位,后写高8位设置计数器1为工作方式3向计数器1送初值1000因为初值是16位,所以先写低8位,后写高8位结束图3.3.2四、程序清单与执行结果4.1程序清单(1)实验一8DATASEGMENTchDB0AH,0DH,'$'CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;将DATA送DS保存MOVAL,14h;写计数器0工作于方式2MOVDX,283h;方式控制字送控制端口OUTDX,ALMOVAL,24;计数初值为24MOVDX,280hOUTDX,ALREAD:MOVDX,280h;读计数初值INAL,DXMOVAH,00MOVCL,10;如果是两位数进行除法计算,被除数10存在CL中DIVCLMOVCX,AX;商保存在CX中CALLPRINT;调用子程序9MOVAL,CH;余数放在AL中CALLPRINT;调用子程序显示在屏幕上LEADX,ch;如果是个位数,有效地址送DXMOVAH,9;直接输出在屏幕上INT21HMOVAH,1;判断是否有键按下INT16H;有,程序调转JZREADMOVAH,4CH;否,程序退出INT21HPRINTPROCNEAR;调用子程序,将除法后的数字进行ASCII码转化ADDAL,48MOVDL,ALMOVAH,2INT21HRETPRINTENDPCODEENDSENDSTART(2)实验二CODESEGMENTASSUMECS:CODE10START:MOVDX,283H;向8253写控制字MOVAL,36H;使0通道为工作方式3OUTDX,ALMOVAX,1000;写入循环计数初值1000MOVDX,280HOUTDX,AL;先写入低字节MOVAL,AHOUTDA,AL;后写入高字节MOVDX,283HMOVAL,76H;设8253通道1工作方式2OUTDX,ALMOVAX,1000;写入计数初值1000MOVDX,281HOUTDX,AL;先写低字节MOVAL,AHOUTDX,AL;后写高字节MOVAH,4CH;程序退出INT21HCODEENDSEDNSTART4.2执行结果(1)实验一11执行结果:手动开关逐个输入单脉冲,首先在屏幕上显示的是计数初值,之后每输入一次单脉冲,计数初值减1显示在屏幕上,直到为1停止。如图4.2(2)实验二执行结果:事先在硬件上连接的好LED灯,LED灯一闪一灭变化。五、程序调试说明和实验感想5.1调试说明实验(1)中其他的初始化过程差不多相同,就是后面的计数初值如果设定是两位数的,那么后面显示的时候就会有些麻烦,所以主要的程序调试问题都在这里。还有就是利用除法问题来输出十位和个位的时候,商和余数的保存有一定的问题。通过请教同学解决了问题。而且这里还是要进行ASCII码的转换。实验(2)中主要是将程序流程图写出来,然后根据流程图和8253A的初始化和工作方式编程就没有问题了,这里主要的内容就是调用INT16H的1号功能判断是否有键按下,按照这样编程调试程序就没有问题了。125.2实验感想与收获通过实验,学会8253芯片和微机接口原理和方法,掌握8253定时器/计数器的基本工作原理、工作方式和编程原理,熟悉汇编代码的编写。而且这里的定时器/计数器可以用于其他实验的完成,如中断系统实验中的计数功能等。实验中,连接电路,利用代码控制实验电路,加深了对课本理论的理解。5.3实验特色这里实验的主要特色就在于通过除法得到商值再取余来一次输出十位和个位。即显示计数初值不一样,还有就是如果计数初值是个位数的话调用了LEA指令将有效地址送DX,然后输出显示。而读计数器初值及工作方式的设置应该和别的同学的差不多。5.4展望因为8253A芯片有计数功能,所以如果可以的话想通过计数功能来做一个秒表来计数。秒表的设计应该要用到计数器0和计数器1两个计数器。嵌入式系统这门课程也有要做秒表,就可以利用这里的知识来把它完成。
本文标题:8253实验
链接地址:https://www.777doc.com/doc-7315847 .html