2022年《计算机硬件技术基础》实验答案程序 .pdf

上传人:C****o 文档编号:12294601 上传时间:2022-04-24 格式:PDF 页数:32 大小:372.77KB
返回 下载 相关 举报
2022年《计算机硬件技术基础》实验答案程序 .pdf_第1页
第1页 / 共32页
2022年《计算机硬件技术基础》实验答案程序 .pdf_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《2022年《计算机硬件技术基础》实验答案程序 .pdf》由会员分享,可在线阅读,更多相关《2022年《计算机硬件技术基础》实验答案程序 .pdf(32页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、实验一:简单程序设计实验(1)编写一个32 位无符号数除法的程序,要求将存放在NUM1 中的 32 位无符号数与存放在 NUM2 中的 16 位无符号数相除,结果存放在NUM3 和 NUM4 中。程序流程图略。参考源程序:DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR

2、 NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回 DOS系统INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在ARY 单元的 2 位十六进制数X1X2 拆为 X1 和 X2 两部分,并以0X1 和 0X2 的形式分别存入ARY+1 和 ARY+2 单元中。程序流程图略。参考源程序:DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX M

3、OV SI,OFFSET ARY ;取ARY 的偏移地址MOV AL,SI ;取16进制数至 AL精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 32 页 - - - - - - - - - - MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1SHR AL,4 MOV SI+1,AL ;存0X1MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2MOV SI+2,AL ;存0X2MOV AH,4CH INT 21H CODE ENDS END ST

4、ART 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 32 页 - - - - - - - - - - 实验二:分支程序设计实验(1)编写一个字符比较程序,比较3 个无符号字节数A,B,C 的大小,并根据比较结果对变量 K 赋值:如果 3 个数不相等,则K=0 ;如果 3 个数中有两个相等,则K=1;如果 3 个数都相等,则K=2 。程序流程图略。参考源程序:DATA SEGMENT ;定义待比较数A、B、C,比较结果 KA DB 20H B DB 20H C DB 20H K DB ? D

5、ATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,A CMP AL,B ;对 A、B进行比较,不相等则转到COMP2 JNE COMP2 ;相等则比较A、CCMP AL,C JNE K1 ;A、C不相等则 K=1JMP K2 ;A、C相等则 K=2COMP2: MOV BL,B CMP BL,C JE K1 ;对 B、 C进行比较,相等则K=1 CMP AL,C JE K1 ;对 A、C进行比较,相等则K=1K0: MOV K,0 JMP EXIT K1: MOV K,1 JMP E

6、XIT K2: MOV K,2 EXIT: MOV AH,4CH 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 32 页 - - - - - - - - - - INT 21H CODE ENDS END START (2)编写一个能实现下列表达式的程序:?N = ?A + BA B设 A,B, C 为小于 128 的正整数。?A - B +C程序流程图略。参考源程序:DATA SEGMENTA BA DB 22H ;定义 A、B、C、N B DB 10H C DB 01H N DB ? D

7、ATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL, A CMP AL, B JG CALCUL ;A 小于或等于B 则 N=A+B ADD AL,B JMP EXIT CALCUL: SUB AL, B ADC AL, C EXIT: MOV N, AL MOV AH,4CH INT 21H CODE ENDS END START 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 3

8、2 页 - - - - - - - - - - 实验三循环程序设计实验(1)将字符串 STRN (以 “ $”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“ 1”而加上了校验位。统计结果存于N单元中。程序流程图略。参考源程序:DATA SEGMENT STRN DB What$ ;任意定义一个字串,以“ $” 结尾COUNT EQU $-STRN N DB ? BUF DB COUNT DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AX, D

9、ATA MOV ES, AX LEA SI, STRN LEA DI, BUF MOV CX, COUNT MOV AL, 0 LP1: MOV BL, SI ;逐个取字符进行判断AND BL, BL ;自己和自己做与运算JP NEXT ;根据 PF 标志位的变化进行跳转INC AL OR BL, 80H NEXT: MOV DI, BL INC SI INC DI LOOP LP1 MOV N, AL MOV AH, 4CH INT 21H CODE ENDS END START (2)在 FIRST 开始的一片连续的数据区中存放着100 个数据,编写一个程序,统计第1精品资料 - - -

10、欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 32 页 - - - - - - - - - - 个数据 0之前的数据个数。程序流程图略。参考源程序:DATA SEGMENT FIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H ;任取 9 个数做演示COUNT EQU $-FIRST NUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV DL, 0 ;计

11、数值初始为0 MOV CX,COUNT MOV BX, OFFSET FIRST LP1: MOV AL, BX ;每次取一个数,与0 比较CMP AL, 00H JNE NEXT JMP EXIT ;找到 0 则退出NEXT: INC DL ;没找到 0 则计数值加1INC BX LOOP LP1 EXIT: MOV NUM, DL MOV AH, 4CH INT 21H CODE ENDS END START 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 32 页 - - - - - -

12、 - - - - 实验四:子程序设计实验将BUF 开始的 10个单元中两位十六进制数转换成ASCII 码,并在屏幕上显示出来。要求码型转换通过子程序HEXASC 实现,参数传送采用寄存器传送方式。程序流程图略。参考源程序 : (1)实现方法一:远过程调用DATA SEGMENT BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H COUNT EQU $-BUF ;定义任意长度的一段BUF DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) ;设置足够深度的栈区STACK1 ENDS CODE SEGMENT

13、 ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF MOV CX,COUNT AGAIN: MOV AL,SI ;逐个取数MOV BL,AL SHR AL,4 AND AL,0FH ;先对高字节部分转换(寄存器AL 传参)CALL FAR PTR HEXASC ;调用子程序MOV DL,AL MOV AH,02H ;显示高字节部分对应的字符INT 21H MOV AL,BL AND AL,0FH ;再对低字节部分转换(寄存器AL 传参)CALL FAR PTR HEXASC ;调用子程

14、序MOV DL,AL MOV AH,02H ;显示低字节部分对应的字符INT 21H MOV DL,20H MOV AH,02H ;显示空格INT 21H 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 32 页 - - - - - - - - - - INC SI LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS CODEB SEGMENT ASSUME CS:CODEB HEXASC PROC FAR CMP AL,09H ;判断是不是数字JA HEXATOF

15、 ;是字母则转到HEXATOFADD AL,30H ;是数字则对应到数字的ASCII 码JMP ENDHEX HEXATOF:ADD AL,37H ;是字母则对应到字母的ASCII 码ENDHEX: RET HEXASC ENDP CODEB ENDS END START (2)实现方法二:近过程调用DATA SEGMENT BUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H COUNT EQU $-BUF ;定义任意长度的一段BUF DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) ;设置足够深度的栈区

16、STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF MOV CX,COUNT AGAIN: MOV AL,SI ;逐个取数MOV BL,AL SHR AL,4 AND AL,0FH ;先对高字节部分做转换CALL HEXASC 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 32 页 - - - - - - - - - - MOV DL,

17、AL ;显示高字节部分对应的字符MOV AH,02H INT 21H MOV AL,BL AND AL,0FH ;再对低字节部分做转换CALL HEXASC MOV DL,AL ;显示低字节部分对应的字符MOV AH,02H INT 21H MOV DL,20H ;显示空格MOV AH,02H INT 21H INC SI ;继续循环或退出LOOP AGAIN MOV AH,4CH INT 21H HEXASC PROC NEAR CMP AL,09H JA HEXATOF ADD AL,30H JMP ENDHEX HEXATOF:ADD AL,37H ENDHEX: RET HEXASC

18、ENDP CODE ENDS END START 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 32 页 - - - - - - - - - - 实验五:DOS 中断调用实验(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“ RIGHT” 标记后结束程序,否则输出标记“ ERROR ” 后转向原出错处重做。试编程实现该功能。程序流程图略。参考源程序 : DATA SEGMENT MSG DB 0AH,0DH,RIGHT,0AH,0DH,$ WRN DB 0AH,0DH,ERROR,0

19、AH,0DH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX AGAIN: MOV AH,01H ;等待用户输入1 个字符并显示INT 21H CMP AL,39H JA EMSG CMP AL,30H JB EMSG ;判断输入是否是数字,不是则报错MOV AH,01H ;等待用户输入1 个字符并显示INT 21H CMP AL,A JB EMSG CMP AL,Z ;判断输入是否是大写字母,不是则继续JB EXIT ;判断是不是小写字母CMP AL,a JB EMSG CMP AL,

20、z JB EXIT ;不是字母则报错,是字母则转到EXIT EMSG: LEA DX,WRN MOV AH,09H INT 21H JMP AGAIN EXIT: MOV DX,OFFSET MSG MOV AH,09H ;显示 “ RIGHT”并退出INT 21H MOV AH,4CH 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 32 页 - - - - - - - - - - INT 21H CODE ENDS END START (2)编写一程序分类统计字符个数:即接收键入的一串字

21、符(字符个数不超过50个,该字符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit、letter 和other 3个存储单元中,并显示结果。程序流程图略。参考源程序 : DATA SEGMENT MSG1 DB 0AH, 0DH, Number of digit:,20H,$ MSG2 DB 0AH, 0DH, Number of letters:, 20H,$ MSG3 DB 0AH, 0DH, Number of other characters:, 20H, $ BUF DB 50 DB 0 DB 50 DUP(?) ;设置足够深的栈区DIGIT DB ? L

22、ETTER DB ? OTHER DB ? DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV AH,0AH ;等待用户输入字符串并显示MOV DX,OFFSET BUF INT 21H MOV SI, OFFSET BUF MOV CL,SI+1 MOV CH,00H MOV AL,00H MOV AH,00H MOV BH,00H AGAIN: MOV BL,SI+2 CM

23、P BL,30H JB OTH ;ASCII 码小于 30H 则归类为 “ 其它 ”CMP BL,3AH 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 32 页 - - - - - - - - - - MOV LETTER, BH MOV OTHER, ALMOV DX, OFFSET MSG1 MOV AH,09H INT 21H MOV AL, DIGIT CALL DISP;显示 “ 数字 ” 有多少个MOV DX, OFFSET MSG2 MOV AH,09H INT 21H MO

24、V AL, LETTER CALL DISP;显示 “ 字母 ” 有多少个MOV DX, OFFSET MSG3 MOV AH,09H INT 21H MOV AL, OTHER CALL DISP;显示 “ 其它 ” 有多少个MOV AH,4CH INT 21HDISPPROC NEAR;显示子程序JB DIG ;ASCII 码大于等于30H 小于 3AH 则归类为 “ 数字 ” CMP BL,41H JB OTH ; ASCII 码大于等于3AH 小于 41H 则归类为 “ 其它 ” CMP BL,5BH JB LET ;ASCII 码大于等于41H 小于 5BH 则归类为 “ 字母 ”

25、CMP BL,61H JB OTH ; ASCII 码大于等于5BH 小于 61H 则归类为 “ 其它 ” CMP BL,7BH JB LET ;ASCII 码大于等于61H 小于 7BH 则归类为 “ 字母 ”OTH:INC AL;“ 其它 ” 计数器加 1DIG:JMP ENDLP INC AH;“ 数字 ” 计数器加1LET:JMP ENDLP INC BH;“ 字母 ” 计数器加1ENDLP: INC SI LOOP AGAIN ;继续循环MOV DIGIT, AH ;统计各类个数精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - -

26、 - - - - - - -第 12 页,共 32 页 - - - - - - - - - - MOV AH,00H MOV DH,0AH DIV DH MOV CH,AH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H ADD CH,30H MOV DL, CH MOV AH, 02H INT 21H RET DISP ENDP CODE ENDS END START 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 32 页 - - - - - - -

27、 - - - 实验六:扩展定时器 /计数器接口实验(1)计数器 0工作于方式 3,编写初始化程序,观察其输出OUT0 信号的波形。修改计数初值,观察 OUT0 信号的变化情况。硬件连接方法:8254计数器 0的CLK0 端接规则的脉冲输入(频率自选),OUT0接示波器的正极;示波器负极接地。程序流程图略。参考源程序:DATA SEGMENT DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,20FH ;写入计数器 0的控制字MOV AL,0001011

28、0B OUT DX,AL MOV DX,20CH ;写入计数器 0的计数初值MOV AL,05H OUT DX,AL MOV AH,4CH INT 21H CODE ENDS END START (2)将计数器1和计数器 0级联起来,二者均工作于方式3,编写初始化程序,观察OUT1 和OUT0 信号的波形,说明二者的关系。修改计数初值,观察OUT0 和 OUT1 输出波形的变化情况。硬件连接方法:8254计数器 1的CLK1 端接规则的脉冲输入(频率自选),OUT1接8254计数 器0的CLK0 ,计数器 0的输出 OUT0 接示波器正极;示波器负极接地。程序流程图略。参考源程序:DATA S

29、EGMENT DB 100 DUP(?) DATA ENDS CODE SEGMENT 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 32 页 - - - - - - - - - - ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,20FH MOV AL,00010110B ;写入计数器 0的控制字OUT DX,AL MOV DX,20CH ;写入计数器 0的计数初值MOV AL,05H OUT DX,AL MOV DX

30、,20FH MOV AL,01010110B ;写入计数器 1的控制字OUT DX,AL MOV DX,20DH ;写入计数器 1的计数初值MOV AL,02H OUT DX,AL MOV AH,4CH INT 21H CODE ENDS END START 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 32 页 - - - - - - - - - - 实验七:并行输入 /输出接口 8255A 简单编程实验(1)利用 8255A 的 B 口输出控制两组发光二级管L1,L3,L5,L7 和

31、L2,L4,L6,L8 亮灭交替变化。分析:按照题目要求,当8255A 的 B 口输出为01010101B(55H) 时,发光二极管L1,L3,L5,L7 会被点亮,当8255A 的 B 口输出为10101010B (0AAH) 时,发光二极管L2,L4,L6,L8 会被点亮。因此,通过延时改变8255A 的 B 口输出,即可实现两组发光二极管的亮灭交替变化。由于 LED 随时出于准备好的状态,因此 8255A 的 B 口可工作于方式0 输出, 其它端口未使用,无需考虑。因此,8255A 的方式控制字为:10000000B(80H) 。硬件连接方法:8255A 的 B 口 PB0PB7 分别连

32、接L1L8 。程序流程图略。参考源程序:.486 DATA SEGMENT PORTA DW 208H ;8255A端口 A地址PORTB DW 209H ;8255A端口 B地址PORTC DW 20AH ;8255A 端口 C地址PORT_CTR DW 20BH ;8255A 控制端口地址DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV DX, PORT_CTR MO

33、V AL, 10000000B;8255A初始化;控制字OUT DX, ALMOV DX, PORTB MOV AL, 00H OUT DX, AL;8255A 端口 B清零, LED 初始化 (全灭 )LP0:MOV BL, 01010101B MOV AL, BL OUT DX, AL CALL DELAY精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 32 页 - - - - - - - - - - NOT AL MOV BL, AL MOV AH, 01H ;调用 BIOS的 16H

34、功能判断键盘是否有输入INT 16H JNZ EXIT JMP LP0 EXIT: MOV AH, 4CH INT 21H DELAY PROC NEAR ;延时子程序 (可通过修改 NOP指令数量改变延时时间) MOV ECX, 0FFFFFFFH LP2: NOP LOOPD LP2 RET DELAY ENDP CODE ENDS END START (2)利用8255A 的 A 口读入8 个开关K1K8 的状态,当只有K1 合上时, L1L8 显示00000001B;当只有K1 和 K2 合上时, L1L8 显示 00000010B;当只有K1,K2 和 K3 合上时, L1L8 显示

35、 00000011B;当只有K1,K2,K3 和 K4 合上时, L1L8 显示 00000100B; 直到所有开关合上时,L1L8 显示00001000B,并结束程序的运行。发光二极管的状态通过 8255A 的 B 口进行控制。分析:按照题目要求,可以通过查询的方式读取8255A 的 B 口状态,并根据查询的结果给A 口送出相应数据,A 口工作在方式0 的输入状态, B 口工作在方式0 输出状态, C 口不需要考虑,所以8255A 的方式控制字为:10010000B)硬件连接方法:(1)8255A 的 A 口 PA0PA7 对应连接K1K8 ;(2)8255A 的 B 口 PB0PB7 对应

36、连接L1L8 ;源代码:DATA SEGMENT LIST DB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH, 0FFH DATA ENDS STACK1 SEGMENT STACK DB 100 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK1 START: MOV AX, DATA 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 17 页,共 32 页 - - - - - - - - - - M

37、OV DS, AX MOV DX, 20BH ;8255A 初始化MOV AL, 10010000B OUT DX, AL MOV DX, 209H ;8255A 的B口清零, LED 初始化 (全灭 ) MOV AL, 00H OUT DX, AL L0: MOV DX, 208H ;读8255A 的A口,获得开关状态IN AL, DX MOV BL, 00H MOV CX, 8 MOV SI, OFFSET LIST L1: INC BL CMP AL, SI JZ FIND INC SI LOOP L1 JMP L0FIND:MOV AL, BL MOV DX, 209H;当前开关状态为

38、表中所列状态之一;显示 LED 状态OUT DX, AL CMP AL, 08H JNZ L0MOV AH, 4CH INT 21HCODE ENDS END START 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 18 页,共 32 页 - - - - - - - - - - DATASEGMENTPORT0 DW 20CH;8254计数器 0端口地址PORT1 DW 20DH;8254计数器 1端口地址PORT2 DW 20EH;8254计数器 2端口地址PORT3 DW 20FH;8254控制寄

39、存器端口地址PORTA DW 208H;8255A的A口端口地址PORTB DW 209H;8255A的B口端口地址PORTC DW 20AH;8255A 的C口端口地址DATAPORT_CTR DW 20BH ENDS;8255A 的控制寄存器端口地址实验八:并行输入 /输出接口 8255A 综合应用实验(1)利用 8254计数器 0、计数器 1和8255A的B口实现对发光二极管的定时控制,让8个发光二极管每隔 1s从左到右依次点亮。(要求计数器1的时钟脉冲频率为250kHz )。分析: 根据题目要求,需要利用8254进行定时 1s控制,定时到后,改变8255A的B口输出。可以利用中断的方式

40、实现,8254定时到时向 CPU申请中断, CPU相应中断后在中断程序中改变8255A的B口输出。由于题目要求8254的输入脉冲频率为250kHz ,所以需要级联计数器1和计数器 0实现 1s 定时 (参考程序中利用计数器1进行 20ms定时,计数器 0进行 50次计数,计数次数到时由OUT0 向CPU申请中断)。8255A的B口控制 LED ,可工作在方式0输出, A口未使用,为了选通实验板上的中断输入C口的 PC7须输出低电平,因此C口的高四位工作在方式0输出。综合上述要求, 8254和8255A的初始化参数为:8254计数器 1的计数初值为:N=20ms/4 s=5000D;方式控制字为

41、:01110100B (74H)8254计数器 0的计数初值为:N=50D ;方式控制字为:00010100B (14H)8255A 的方式控制字:10000000B ( 80H); C口按位置位/复位控制字:00001110B (0EH)( 使PC7复位,允许 8254的OUT0中断到达系统8259的IRQ3端) 此外, 利用中断方式实现题目要求的功能还需要设置系统8259芯片的中断屏蔽字和系统存储器中的中断向量表(修改中断类型号为0BH的中断向量)。硬件连接方法:(1)250kHz 脉冲输出接 8254的CLK1 ,OUT1接CLK0 ,OUT0接IRQ;(2)8255A的B口PB0PB7

42、对应连接 L1L8 。程序流程图略。参考源程序:STACK1 SEGMENT STACK DB 100 DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 19 页,共 32 页 - - - - - - - - - - START: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AL, 80H ; 8255初始化 , B口方式

43、0输出, C口高 4位输出MOV DX, PORT_CTR OUT DX, AL MOV AL, 0EH ;PC7清零,允许 8254中断到 IRQ3 OUT DX, AL MOV AL, 00H ;发光二极管初始化(全灭 ) MOV DX, PORTB OUT DX, AL MOV AX, 350BH ;保存系统原有0BH 号中断的中断向量至堆栈INT 21H PUSH ES PUSH BX MOV AX, SEG INTPROC MOV DS, AX MOV DX, OFFSET INTPROC MOV AX, 250BH ;将程序要求的中断向量写入INT 21H IN AL, 21H ;

44、设置 8259的IMR 寄存器,允许IRQ3中断AND AL, 0F7H OUT 21H, AL STI ;开中断, CPU可以响应外部可屏蔽中断MOV DX, PORT3 ;8254计数器 0初始化MOV AL, 14H OUT DX, AL MOV DX, PORT0 ;计数器 0写入计数初值50D MOV AL, 50D OUT DX, AL MOV DX, PORT3 ;8254计数器 1初始化MOV AL, 74H OUT DX, AL MOV DX, PORT1 ;计数器 1写入计数初值5000D MOV AX, 5000D OUT DX, AL MOV AL, AH OUT DX

45、, AL 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 20 页,共 32 页 - - - - - - - - - - MOV BH, 80H ;BH 存放当前 8255A 的B口输出MOV AL, BH MOV DX, PORTB ;8255A 的B口输出OUT DX, AL WAIT0: NOP NOP NOP MOV AH, 01H ;判断键盘上是否有键按下,若有则结束程序INT 16H JNZ EXIT JMP WAIT0 EXIT: POP DX ;恢复中断向量表中的原有0BH号中断向量POP

46、 DS MOV AX, 250BH INT 21H MOV AH, 4CH INT 21H INTPROC PROC NEAR MOV AL, BH ROR AL,1 MOV BH, AL MOV DX, PORTB ;向8255A 的B口写出数据,点亮对应LED OUT DX, AL MOV AL, 20H ;向8259发出中断结束命令OUT 20H, AL IRET INTPROC ENDP CODE ENDS END START (2)8255A的A口与 8个开关相连,工作于方式1下,要求:利用当前的开关状态通过B口控制L1L8 的亮或灭。 A口的 /STBA选通信号由按键K发出,每按一

47、次 K键,读入当前开关状态。分析:8255A 的B口用来控制 LED 的亮灭,可工作在方式0下。 根据题意,可以通过查询方式不断读取 8255A的C口状态确定 K键是否按下,也可以利用中断方式,当K键按下时,由INTRA (PC3)向 CPU申请中断。当判断K键按下后,读取8255A的 A口状态,并通过B口显示到 LED上。利用查询方式实现时,仅需要给定方式选择控制字;利用中断方式实现时,除控制字外还需设定INTEA 为1,允许 INTRA 申请中断。因此, 8255A 的方式控制字为:10110000B(0B0H) ;使 INTEA(PC4) 置 1,其控制字为精品资料 - - - 欢迎下载

48、 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 21 页,共 32 页 - - - - - - - - - - 00001001B(09H)。 注意:利用中断方式实现时还需要置PC7为0,使 INTRA 能到达 8259的IRQ3硬件连接与参考源程序:(1)利用查询方式实现硬件连接:1)8255A的A口 PA0PA7与K1K8 对应相连;2)8255A的B口 PB0PB7与L1L8 对应相连;3)按键 K接 8255A的C口PC4。参考源程序:CODE SEGMENT ASSUME CS:CODE START: MOV AL, 0B0

49、H ; 8255A 初始化,方式控制字10110000B MOV DX, 20BH OUT DX, AL MOV DX, 209H ;LED 初始化MOV AL, 00H OUT DX, AL AGAIN: MOV AH, 01H ;判断计算机键盘上是否有键按下,若有结束程序INT 16H JNZ EXIT MOV DX, 20AH ;读入 8255A 的C口状态IN AL, DX TEST AL, 00010000B ;判断 PC4=1?(K键是否按下 ) JNZ AGAIN MOV DX, 208H ;读入 8255A 的A口状态IN AL, DX MOV DX, 209H ;将A口状态送

50、 8255A 的B口OUT DX, AL JMP AGAIN EXIT: MOV AH, 4CH INT 21H CODE ENDS END START (2)利用中断方式实现硬件连接:1)8255A的A口 PA0PA7与K1K8 对应相连;2)8255A的B口 PB0PB7与L1L8 对应相连;3)按键 K接 8255A的C口PC4;4)8255A的C口 PC3( INTRA )接 IRQ。参考源程序:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 22 页,共 32 页 - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com