微机原理实验:定时器_计数器.doc
4页可编程定时器 / 计数器( 8253 )一、实验目的掌握 8253 的基本工作原理和编程方法二、实验内容1. 按下图虚线连接电路, 将计数器 0 设置为方式 0,计数器初值为 N(N≤0FH),用手动 逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察 OUT0电平变化(当输入 N+1 个脉冲后 OUT0 遍高电平) 2.按下图连接电路,将计数器 0、计数器 1 分别设置为方式 3,计数初值设为 1000,用逻辑笔观察 OUT1输出电平的变化 ( 频率 1Hz)三、编程提示8253 控制寄存器地址: 283H— 0C403H 计数器 0 地址: 280H — 04C400H 计数器 1 地址: 281H — 04C401H CLK0连接时钟: 1MHz2、程序参考流程图开始设置计数器 0 为工作方式 0送计数器初值读计数器值显示计数值向计数器 1 送初值 1000结束结束实验 2实验 1四、程序设计及实验调试 程序设计的思想及注意事项: 第一个实验,在编程时要注意机器识别的 ASCII 码和输入数据数字的区别,可以根据书上 ASCII 码和输入数据的转换关系,当数据在 0— 9 之间,对数据加 30H 即可对应机器识别的 ASCII 码,对于 A—F 之间则加 37H。
编程时采用了二号功能键输出显示,六号功能键进行 输入操作第二个实验, 在向计数器 0 和计数器 1 送初始值时, 要注意先送低字节后送高字节, 送入的 数据应是 1000 而非 1000H,否则最后出现逻辑笔跳变的时间不是 1s实验一:CODE SEGMENTASSUME CS:CODE START: MOV DX,0C403HMOV AL,00010000B ;计数器 0 工作方式为 0OUT DX,ALMOV DX,0C400HMOV AL,09H ;送计数器初值OUT DX,ALXUNHUAN: MOV DX,0C400HIN AL,DX ;读计数器的值CMP AL,9 JG BIGADD AL,30HJMP JUDGEBIG: ADDAL,37HJMP JUDGE JUDGE: MOV DL,ALMOV AH,02HINT 21HMOV DL,0FFHMOV AH,06H INT 21HJZ XUNHUANMOV AH,4CHINT 21H CODE ENDS;0 到 9,显示 ASCII 码;大于 9,显示 ASCII 码;使用 02H 功能输出显示;执行键盘输入操作;返回操作系统END START 实验中遇到问题及分析: 编写程序时, 由于要将结果显示在屏幕上, 所以要对写入的值读出来, 编写 MOV DX,0C400H在硬件调试过程中,总体来说很顺利。
当计数结果由9 减到 0 时,有逻辑跳变,同时屏幕显示下一个 ASCII 字符 老师说过不能使用拨码开关,否则会出现几个脉冲, 从而不是减一计数,我在实验时试过拨码开关,将开关上下拨一次,减数的结果是随机的, 所以不适合使用实验二:CODE SEGMENTASSUME CS:CODE START:MOV AL,00110110BMOV DX,0C403H OUT DX,ALMOV AX,1000MOV DX,0C400H OUT DX,ALMOV AL,AH OUT DX,ALMOV AL,01110110BMOV DX,0C403H OUT DX,ALMOV AX,1000MOV DX,0C401H OUT DX,ALMOV AL,AH OUT DX,ALMOV AH,4CH;计数器 0,工作方式 3;写控制口;计数器 0 送初值 1000;计数器 1,工作方式 3;计数器 1 送初值 1000IN AL,DX 语句即可实现INT 21HCODE ENDSEND START实验中遇到问题及分析:由于在软件编程时注意到了送初始值为 1000,而不是 1000H,所以这方面没有产生错误 在编程向计数器 0和计数器 1 送值,由于疏忽了 MOV DX,0C400H ,MOV DX,0C401H 两条语 句,在运行之后,系统没有报错,也生成了执行文件,但是一打开执行文件,文件马上就返 回 DOS 系统。
而逻辑笔也没有任何跳变 我开始觉得自己是否将初始值送进了两个计数器, 后来发现,两个计数器的端口地址忘了写入五、实验结果及分析:1. 对于实验一,设计数器 0 为工作方式 0,执行计数功能输入计数初值 9, 并手动逐个 输入单脉冲,输入前 9 个脉冲时,逻辑笔绿灯亮, 此时为低电平, 屏幕上显示数字由 9逐个 递减,当输入第十个脉冲时,计数完毕,逻辑笔红灯亮,此时为高电平屏幕上快速连续显 示计数值, 因为程序中并没有写入控制屏幕输出的部分, 由于计算机执行频率较快, 导致屏 幕不停输出计数值2.计数器 0 和计数器 1 均为工作方式 3,执行方波发生器的功能输入计数初值 1000,从计数器 0的 clk0 端输入 1MHZ脉冲,经过计数器 0的 1000分频变为 1KHZ脉冲将计数器 0 的输出端与计数器 1 的 clk1 相连接,再经计数器 1 的 1000 分频,从 out1 输出 1HZ 脉冲 因此,逻辑笔的绿灯和红灯交替闪亮,频率均为 1HZ若实验时写入均 1000H,结果就是每隔 2.56s 亮一次六、实验总结: 这个实验是我第一次使用实验箱这次微机实验连线很简单,我都是自己不看书,争取 弄懂连线的原理, 如在第二个小实验, 将 out0 接 clock1 是为了达到两次分频的结果。
编写 程序前,我先复习了微机原理与接口技术课本中与 8253 相关的知识,之后按照流程图认真 编程序,编程时,注意到将小于 9 的数加 30H,大于 9 小于 16 的数加 37H 转化为 ASCII 码, 并调用了 DOS的 2 号功能输出字符接下来的第二个程序也遇到了一些困难,在编程向计数器 0和计数器 1 送值,由于疏忽 了 MOV DX,0C400H , MOV DX,0C401H 两条语句,在运行之后,系统没有报错,也生成了 执行文件,但是一打开执行文件,文件马上就返回 DOS 系统而逻辑笔也没有任何跳变, 后来通过软硬件结合找原因,最后得到了满意的结果经过上机实验,我掌握了上机调试的初步经验,编程能力也得到了一次验证,此外还加 深了对课本理论知识的理解同时我学会了软硬件结合的办法调试程序。





