微机原理的一道题,求过程
已知8254计数器0的端口地址为40H,控制字寄存器的端口地址为43H,计数时钟频率为2MHz,利用这一通道设计当计数到0时发出中断请求信号,其程序段如下,则中断请求信号...
已知8254计数器0的端口地址为40H,控制字寄存器的端口地址为43H,计数时钟频率为2MHz,利用这一通道设计当计数到0时发出中断请求信号,其程序段如下,则中断请求信号的周期是________ms。
展开
1个回答
展开全部
根据题目中的信息,计数器的时钟频率为2MHz,也就是说,计数器每计数1次所需的时间为1/2MHz=0.5us。如果要在计数到0时发出中断请求信号,则需要设置计数器的初值为计数器计数到0所需的计数次数,即所需的时间除以计数器的时钟频率,即:
计数次数 = 所需的时间 / 计数器的时钟频率
程序中使用了二进制的控制字,控制字中的低8位表示计数器的初值,因此需要将计数次数转换为计数器的初值,并将初值分别写入计数器的低8位和高8位寄存器中,即:
初值 = 计数次数 / 0.5us = 2000 × 所需的时间
低8位 = 初值 mod 256
高8位 = 初值 / 256
因此,程序中的计算周期的代码如下:
MOV AL, 00110110B ; 控制字,选择计数器0、工作方式3(二进制),计数器初值使用计数器本身
OUT 43H, AL ; 将控制字写入控制字寄存器
MOV AX, 2000 ; 计数次数 = 所需的时间 / 计数器的时钟频率
MOV CX, AX ; 将计数次数存入CX寄存器
MOV AL, AH ; 将初值的高8位存入AL寄存器
OUT 40H, AL ; 将初值的高8位写入计数器高8位寄存器
MOV AL, CL ; 将初值的低8位存入AL寄存器
OUT 40H, AL ; 将初值的低8位写入计数器低8位寄存器
; 计算周期
MOV AX, CX
MUL 500 ; 将计数次数乘以0.5us得到所需的时间
DIV 1000 ; 将时间转换为毫秒
因此,中断请求信号的周期为所需的时间除以计数器计数1次所需的时间,即:
周期 = 所需的时间 / 0.5us = (2000 × 所需的时间) / 0.5us = 4000 × 所需的时间
程序中计算周期的代码已将所需的时间转换为毫秒,因此,中断请求信号的周期为4000乘以计算出的时间,即:
周期 = 4000 × (所需的时间,单位为ms)
需要注意的是,程序中没有给出计算所需的时间的代码,因此需要根据具体情况进行计算。
计数次数 = 所需的时间 / 计数器的时钟频率
程序中使用了二进制的控制字,控制字中的低8位表示计数器的初值,因此需要将计数次数转换为计数器的初值,并将初值分别写入计数器的低8位和高8位寄存器中,即:
初值 = 计数次数 / 0.5us = 2000 × 所需的时间
低8位 = 初值 mod 256
高8位 = 初值 / 256
因此,程序中的计算周期的代码如下:
MOV AL, 00110110B ; 控制字,选择计数器0、工作方式3(二进制),计数器初值使用计数器本身
OUT 43H, AL ; 将控制字写入控制字寄存器
MOV AX, 2000 ; 计数次数 = 所需的时间 / 计数器的时钟频率
MOV CX, AX ; 将计数次数存入CX寄存器
MOV AL, AH ; 将初值的高8位存入AL寄存器
OUT 40H, AL ; 将初值的高8位写入计数器高8位寄存器
MOV AL, CL ; 将初值的低8位存入AL寄存器
OUT 40H, AL ; 将初值的低8位写入计数器低8位寄存器
; 计算周期
MOV AX, CX
MUL 500 ; 将计数次数乘以0.5us得到所需的时间
DIV 1000 ; 将时间转换为毫秒
因此,中断请求信号的周期为所需的时间除以计数器计数1次所需的时间,即:
周期 = 所需的时间 / 0.5us = (2000 × 所需的时间) / 0.5us = 4000 × 所需的时间
程序中计算周期的代码已将所需的时间转换为毫秒,因此,中断请求信号的周期为4000乘以计算出的时间,即:
周期 = 4000 × (所需的时间,单位为ms)
需要注意的是,程序中没有给出计算所需的时间的代码,因此需要根据具体情况进行计算。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询