已知8253各端口地址分别为200H、201H、202H和203H,CLK0接有1MHz的时钟,OUT0接通道1时钟输入CLK1,现有OUT1输出一个高电平为200ms、低电平为1ms的连续信号,编写初始化程序。
求一个有解释的初始化程序每一步怎么来的,学不明白这块儿
微机原理与接口技术的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 星浩前进中 2023-04-13 00:52关注
在编写8253定时器的初始化程序时,需要考虑以下几个步骤:
步骤1:设置定时器模式
步骤2:设置计数器初值
步骤3:启动定时器步骤1:设置定时器模式
定时器模式是指8253的三个计数器如何工作。8253有6种模式,每个模式下,计数器的工作方式都不同。在本例中,我们需要使用模式3来产生一个方波输出。模式3是工作在方波发生器模式下的计数器,当计数器计数到0时,会将输出状态取反。因此,我们需要将计数器初始化为一个非零值,以使计数器在计数到0之前保持输出为高电平状态。
8253的控制字寄存器是一个8位寄存器,其中包含了定时器模式、计数器选择和读/写等信息。我们需要将控制字写入端口200h以设置定时器模式。
进行举例,在本例中,我们需要使用控制字
00110110b 控制字的各位含义如下 bit 7-6: 00 (选择计数器0) bit 5-4: 11 (选择模式3) bit 3 : 0 (不启用BCD计数) bit 2-0: 110 (写入计数器初值的方式为先低位后高位)
我们可以将控制字写入端口200h,代码如下:
mov al, 00110110b out 200h, al
步骤2:设置计数器初值
计数器初值是指计数器需要计数的值,也就是在计数器计数到0之前需要计数的次数。在本例中,我们需要产生一个高电平为200ms、低电平为1ms的方波。因此,我们需要计算出计数器需要计数的次数。
计数器的计数频率由时钟输入频率决定。在本例中,时钟输入频率为1MHz,也就是计数器每秒钟需要计数1000000次。因此,我们可以先计算出需要产生多长的方波周期,再计算出计数器需要计数的次数。
一个完整的方波周期为:
200ms + 1ms = 201ms
因此,每秒钟需要产生的方波周期数为:
1s / 201ms = 4.975s^-1
每个方波周期需要计数的次数为:
1000000 / 4.975 = 200803
因为计数器是16位的,所以我们需要将计数器初值设置为:
65536 - 200803 = 45333
然后,我们可以将计数器初值写入端口202H,代码如下
mov ax, 45333 out 202h, al ; 先写入低位 mov al, ah out 202h, al ; 再写入高位
步骤3:启动定时器
在完成了定时器模式和计数器初值的设置后,我们需要启动计数器,使其开始计数。我们可以使用控制字的bit 4来控制计数器的启动。
我们需要将控制字的bit 4设置为1,以启动计数器。因此,我们可以先将控制字读出来,再将bit 4设置为1,最后将修改后的控制字写回端口200h,代码如下:
in al, 200h ; 读取控制字 or al, 00010000b ; 启动计数器 out 200h, al ; 写回控制字
到这里,我们已经完成了8253定时器的初始化程序。将以上三个步骤的代码整合起来,我们得到的完整的初始化程序如下:
; 8253定时器初始化程序 mov al, 00110110b ; 设置定时器模式 out 200h, al mov ax, 45333 ; 设置计数器初值 out 202h, al ; 先写入低位 mov al, ah out 202h, al ; 再写入高位 in al, 200h ; 读取控制字并启动计数器 or al, 00010000b out 200h, al
这个程序可以在8086或类似的x86处理器上运行,通过向8253的端口写入指定的数据,设置8253定时器的模式和计数器初值,然后启动计数器,使其按照指定的频率进行计数和输出。
希望对你能有所帮助
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度