分别编写8253初始化程序及控制程序,完成如下功能:
要求:(1)通过三态门循环坚持OUTO端的状态,若为低电平,则等待;若为高电平,则读取波段开关的当前位置。并将开关的当前位置状态用七段数码管显示出来。
(2)有任意键按下时,工作结束。
(3)画出8253两级分频的连接图。
提示:(1)假设8253的输入频率为2MHz
(2)需要多级分频才能实现要求的1Hz,计算判断需要几级
8086微机原理与接口技术习题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- CSDN专家-sinJack 2023-06-01 18:09关注
8253初始化程序:
ORG 100H ; 程序入口地址 MOV AL, 00110110B ; 初始化控制字寄存器 OUT 43H, AL ; 将控制字写入8253的控制寄存器 MOV AL, 0FFH ; 初始化计数器0的初值 OUT 40H, AL ; 将初值写入计数器0的数据寄存器 OUT 40H, AL MOV AL, 0FFH ; 初始化计数器1的初值 OUT 41H, AL ; 将初值写入计数器1的数据寄存器 OUT 41H, AL MOV AL, 0FFH ; 初始化计数器2的初值 OUT 42H, AL ; 将初值写入计数器2的数据寄存器 OUT 42H, AL HLT ; 程序结束
8253控制程序:
ORG 100H ; 程序入口地址 MOV DX, 378H ; 设置并打开端口 MOV AL, 00000001B ; 设置三态门的控制字 OUT DX, AL MOV DX, 379H ; 设置并打开端口 MOV AL, 11111111B ; 设置计数器0的控制字 OUT DX, AL MOV DX, 37AH ; 设置并打开端口 MOV AL, 00000110B ; 设置计数器1的控制字 OUT DX, AL MOV DX, 37BH ; 设置并打开端口 MOV AL, 00000000B ; 设置计数器2的控制字 OUT DX, AL MOV DX, 37CH ; 设置并打开端口 IN AL, DX ; 读取波段开关的当前位置 MOV DX, 3F8H ; 设置并打开端口 CALL DISPLAY ; 将开关的当前位置状态用七段数码管显示出来 WAIT: ; 等待任意键按下 IN AL, 60H ; 读取键盘状态 CMP AL, 0 ; 判断是否有键按下 JE WAIT ; 如果没有键按下,则继续等待 MOV DX, 378H ; 设置并打开端口 MOV AL, 00000000B ; 关闭三态门 OUT DX, AL HLT ; 程序结束 DISPLAY: ; 显示函数 PUSH AX ; 保存寄存器 PUSH BX PUSH CX PUSH DX MOV BX, 0 ; 初始化循环计数器 MOV CX, 4 ; 设置循环次数 LOOP1: ; 循环读取每一位 MOV AL, DL ; 将读取到的位置状态存入AL AND AL, 00000001B ; 取出最低位 ADD AL, 30H ; 将数字转换为ASCII码 MOV DL, AL ; 将转换后的数字存回DL MOV AH, 0EH ; 设置显示光标 MOV BH, 0 ; 设置显示页面 MOV CX, 1 ; 设置显示次数 INT 10H ; 调用BIOS中断显示数字 SHR DL, 1 ; 右移一位,准备读取下一位 INC BX ; 增加计数器 CMP BX, 4 ; 判断是否已经读取完所有位 JL LOOP1 ; 如果没有,则继续循环 POP DX ; 恢复寄存器 POP CX POP BX POP AX RET ; 返回主程序
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 求大神教题,这个代码和讲解思路都怎么写呀,完全卡住了
- ¥15 基于ffmpeg 编码成yuv420p nv12的问题
- ¥15 python随机森林对两个excel表格读取,shap报错
- ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
- ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
- ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
- ¥15 VFP如何使用阿里TTS实现文字转语音?
- ¥100 需要跳转番茄畅听app的adb命令
- ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
- ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗