永发信息网

帮忙做一道微机原理题

答案:6  悬赏:0  手机版
解决时间 2021-04-03 09:50
  • 提问者网友:了了无期
  • 2021-04-03 03:52
某一8253的端口地址84H—87H,其中87H为控制口,84H—86H分别为通道0、通道1和通道2。现要求设置通道0的功能为:在外部脉冲信号的作用下,OUT端产生一个宽度为20ms的负脉冲,外部时钟fCLK=40kHz。采用BCD计数,试完成其编程。

谢谢大家咯!

miniflydreamer 可否简单讲解一下???
最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-04-03 05:26
8253初始化编程,重点有二:
1、确定控制字
2、计数器计数初值
把这两个搞准了,编程就很简单了。

首先确定控制字。8253芯片有一个8位的控制字寄存器(D7D6D5D4D3D2D1D0),其中,D7D6:计数器(通道)选择,D5D4:计数器读/写方式,D3D2D1:计数器工作方式,D0:计数方式(二进制或BCD计数)。依题意,
D7D6:00(计数器0)
D5D4:11(先读/写低8位,后读/写高8位)
D3D2D1:001(数字单稳)
D0:1(BCD计数)
这样,控制字确定为:00110011B
然后再确定计数器初值。外部时钟fCLK=40kHz,要OUT端产生一个宽度为20ms的负脉冲,则计数初值=40kHz x 20ms=800(十进制)。

下面就可以写初始化程序了,
mov al,33H ;控制字:00110011B
out 87H,al ;写入控制字
xor al,al
out 84H,al ;向计数器0写低8位初值
mov al,8
out 84H,al ;向计数器0写高8位初值
全部回答
  • 1楼网友:一把行者刀
  • 2021-04-03 11:29
不会做,哈哈…… 等待高手。
  • 2楼网友:神也偏爱
  • 2021-04-03 09:52
MOV AL,33H OUT 87H,AL MOV AL,00H OUT 84H,AL MOV AL,08H OUT 84H,AL fclk = 40KHz 和tc=20ms 则计数器初值为:N=800(十进制)所以应置初值为800(十进制) OUT 87H,AL ;设置计数器 0的操作方式 OUT 84H,AL ;对计数0置低 8位初值 OUT 84H,AL ;置高 8位初值
  • 3楼网友:躲不过心动
  • 2021-04-03 08:13

不用解释ax sp ss是啥了吧?

push ax就是sp-2  可得sp=0ffeh

寄存器ax的地址为2000:0ffe

ax内容压入()字节单元中就是问你堆栈顶部的物理地址

其物理地址为2000h左移4位=20000h+0ffeh=20ffeh

  • 4楼网友:末日狂欢
  • 2021-04-03 06:42
回答者: miniflydreamer - 七级 2010-1-14 13:09 写的不错,满足LZ的需求了,但是对我来说不是很全面。 如果我是LZ的微机老师,你提交他写的东西给我,我最多给你63分。
  • 5楼网友:爱难随人意
  • 2021-04-03 06:12
fclk = 40KHz 和tc=20ms 得计数器初值为:N=800(十进制) 所以应置初值为800(十进制) 程序如下: MOV AL,31H OUT 87H,AL ;设置计数器 0的操作方式 MOV AL,00H OUT 84H,AL ;对计数0置低 8位初值 MOV AL,08H OUT 84H,AL ;置高 8位初值 【分析】:本题考查的知识点是8253的编程,计算计数初始值:TC=800(十进制),所以应置初值为800(十进行)进行计数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯