《计算机硬件技术基础》实验答案程序.._第1页
《计算机硬件技术基础》实验答案程序.._第2页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 1 页 共 31 页实验一:简单程序设计实验(1)编写一个32位无符号数除法的程序, 要求将存放在NUM1中的32位无符号数与存放 在NUM2中的16位无符号数相除,结果存放在NUM3和NUM4中。程序流程图略。参考源程序:DATASEGMENTNUM1 DD 2A8B7654HNUM2 DW 5ABCHNUM3 DW ?NUM4 DW ?DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX,DATA; 数据段寄存器初始化MOV DS,AXMOV AX, WORD PTR NUM1MOV DX, WORD PTR NUM1+2DIV

2、NUM2MOV NUM3,AXMOV NUM4,DXMOV AH,4CH;正常返回 DOS 系统INT 21HCODEENDSEND START(2)编写一个拆字程序。要求将存放在ARY单元的2位十六进制数X1X2拆为X1和X2两部分,并以0X1和0X2的形式分别存入ARY+1和ARY+2单元中。程序流程图略。参考源程序:DATASEGMENTARY DB 2AH,?,?DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARY;取 ARY 的偏移地址MOV AL,SI;取 16 进

3、制数至 AL第 2 页 共 31 页;取 16 进制数的高四位,即 X1;存 0X1; 取 16 进制数的低四位,即 X2;存 0X2CODEMOV BL,ALAND AL,0F0HSHR AL,4MOV SI+1,ALMOV AL,BLAND AL,0FHMOV SI+2,ALMOV AH,4CHINT 21HENDSEND START第 3 页 共 31 页实验二:分支程序设计实验(1)编写一个字符比较程序,比较3个无符号字节数A,B,C的大小,并根据比较结果对变量K赋值:如果3个数不相等,则K=0;如果3个数中有两个相等,则K=1;如果3个数都相等,则K=2。 程序流程图略。参考源程序:

4、DATA SEGMENTA DB 20HB DB 20HC DB 20HK DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,ACMP AL,BJNE COMP2CMP AL,CJNE K1JMP K2COMP2: MOV BL,BCMP BL,CJE K1CMP AL,CJE K1K0:MOV K,0JMP EXITK1:MOV K,1JMP EXITK2:MOV K,2EXIT:MOV AH,4CH;定义待比较数 A、B、C,比较结果 K;对 A、B 进行比较,不相等则转到 C0

5、MP2;相等则比较 A 、 C;A、C 不相等则 K=1 ;A 、 C 相等则 K=2;对 B、C 进行比较,相等则 K=1;对 A、C 进行比较,相等则 K=1第 4 页 共 31 页第 5 页 共 31 页INT 21HCODE ENDSEND START(2)编写一个能实现下列表达式的程序:? A + BA WBN =?设A,B,C为小于128的正整数。?A - B +C A B程序流程图略。参考源程序:DATA SEGMENTA DB 22H;定义 A 、B、 C、NB DB 10HC DB 01HN DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, D

6、S:DATASTART: MOV AX,DATAMOV DS,AXMOV AL, ACMP AL, BJG CALCUL;A 小于或等于 B 则 N=A+BADD AL,BJMP EXITCALCUL: SUB AL, BADC AL, CEXIT: MOV N, ALMOV AH,4CHINT 21HCODE ENDSEND START第 5 页 共 31 页实验三 循环程序设计实验(1)将字符串STRN(以 “$结”尾)中的每一个字符均加上偶校验位,并统计有多少个字符 因含有奇数个“1而加上了校验位。统计结果存于N单元中。程序流程图略。参考源程序:DATA SEGMENT STRN DB

7、What$COUNT EQU $-STRN NDB ?BUF DB COUNT DUP(?)DATA ENDS;任意定义一个字串,以“$”结尾CODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV AX, DATAMOV ES, AXLEA SI, STRNLEA DI, BUF MOVCX, COUNTMOV AL, 0LP1: MOV BL, SIAND BL, BL JPNEXTINC ALOR BL, 80HNEXT: MOV DI, BLINC SIINC DILOOP LP1;逐个取字符进行判断;自己和

8、自己做与运算;根据PF标志位的变化进行跳转MOV N, ALMOV AH, 4CHINT 21HCODE ENDSEND START2)在FIRST开始的一片连续的数据区中存放着100个数据,编写一个程序,统计第1第 5 页 共 31 页第 8 页 共 31 页个数据 0之前的数据个数。 程序流程图略。 参考源程 序:DATA SEGMENTFIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H;任取9个数做演示COUNT EQU $-FIRSTNUM DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART

9、: MOV AX,DATAMOV DS,AXMOV DL, 0MOV CX,COUNTMOV BX, OFFSET FIRSTLP1:MOV AL, BXCMP AL, 00HJNE NEXTJMP EXITNEXT: INC DLINC BXLOOP LP1EXIT: MOV NUM, DLMOV AH, 4CH INT 21HCODE ENDSEND START;计数值初始为0;每次取一个数,与0比较;找到0则退出;没找到0则计数值加1第 9 页 共 31 页实验四:子程序设计实验将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。 要求码型 转换通过子程序HE

10、XASC实现,参数传送采用寄存器传送方式。程序流程图略。 参考源程序: (1)实现方法一:远过程调用DATA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF DATA ENDS;定义任意长度的一段BUFSTACK1 SEGMENT STACKDB 100 DUP(?);设置足够深度的栈区STACK1 ENDSCODESTART:SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 MOV AX,DATAMOV DS,AXAGAIN:MOV SI,OFFSET BUFMOV

11、 CX,COUNTMOV AL,SIMOV BL,AL;逐个取数SHR AL,4AND AL,0FHCALL FAR PTR HEXASCMOV DL,ALMOV AH,02HINT 21H;先对高字节部分转换(寄存器;调用子程序;显示高字节部分对应的字符AL传参)MOV AL,BLAND AL,0FHCALL FAR PTR HEXASCMOV DL,ALMOV AH,02HINT 21H;再对低字节部分转换(寄存器;调用子程序;显示低字节部分对应的字符AL传参)MOV DL,20HMOV AH,02HINT 21H;显示空格第 10 页 共 31 页INC SILOOP AGAINMOV

12、AH,4CHINT 21HCODE ENDSCODEB SEGMENTASSUME CS:CODEBHEXASC PROC FAR CMPAL,09H JA HEXATOFADD AL,30H JMPENDHEXHEXATOF:ADD AL,37HENDHEX: RETHEXASC ENDPCODEB ENDS END START;判断是不是数字;是字母则转到HEXATOF;是数字则对应到数字的ASCII码;是字母则对应到字母的ASCII码(2)实现方法二:近过程调用DATA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCO

13、UNT EQU $-BUF;定义任意长度的一段BUF DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?)STACK1 ENDS;设置足够深度的栈区CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFMOV CX,COUNTAGAIN: MOV AL,SI;逐个取数MOV BL,ALSHR AL,4AND AL,0FHCALL HEXASC;先对高字节部分做转换第 11 页 共 31 页LOOP AGAINMOV AH,4CHINT 21H

14、HEXASC PROC NEARCMP AL,09HJA HEXATOFADD AL,30HJMP ENDHEX HEXATOF:ADD AL,37H ENDHEX: RET HEXASC ENDPCODE ENDSEND STARTMOV DL,ALMOV AH,02HINT 21H;显示高字节部分对应的字符MOVAL,BLAND AL,0FHCALL HEXASC;再对低字节部分做转换MOV DL,ALMOV AH,02HINT 21H;显示低字节部分对应的字符MOV DL,20H;显示空格MOV AH,02HINT 21HINC SI;继续循环或退出第 12 页 共 31 页实验五:DO

15、S 中断调用实验(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序,否则输出标记 “ERROR”后转向原出错处重做。试编程实现该功能。程序流程图略。参考源程序:DATA SEGMENTMSG DB 0AH,0DH,RIGHT,0AH,0DH,$WRN DB 0AH,0DH,ERROR,0AH,0DH,$ DATA ENDSEXIT:MOV DX,OFFSET MSGMOV AH,09H;显示 “RIGHT并退出INT 21HMOV AH,4CHCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMOV DS

16、,AXAGAIN: MOV AH,01HINT 21HCMP AL,39HJA EMSGCMP AL,30HJB EMSGMOV AH,01HINT 21HCMP AL,AJB EMSGCMP AL,ZJB EXITCMP AL,aJB EMSGCMP AL,zJB EXITEMSG: LEA DX,WRNMOV AH,09HINT 21HJMP AGAIN;等待用户输入1个字符并显示;判断输入是否是数字,不是则报错;等待用户输入1个字符并显示;判断输入是否是大写字母, 不是则继续;判断是不是小写字母;不是字母则报错,是字母则转到EXIT第 13 页 共 31 页INT 21HCODEENDS

17、END START(2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过5 0个 , 该 字符串用回车作为结束) ,并按数字、字母和其它字符分类计数,然后将结果存入digit、letter和other 3个存储单元中,并显示结果。程序流程图略。参考源程序:DATASEGMENTMSG1 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 50DB 0DB 5

18、0 DUP(?);设置足够深的栈区DIGIT DB ?LETTER DB ?OTHER DB ?DATAENDSSTACK1SEGMENT STACKDB 100 DUP(?)STACK1ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATAMOV DS,AXMOV AH,0AH;等待用户输入字符串并显示MOV DX,OFFSET BUFINT 21HMOV SI, OFFSET BUFMOV CL,SI+1MOV CH,00HMOV AL,00HMOV AH,00HMOV BH,00HAGAIN:MOV BL,SI+2

19、CMP BL,30HJB OTH;ASCII码小于30H则归类为 “其它 ”CMP BL,3AH第 14 页共 31 页JB DIGCMP BL,41HJB OTHCMP BL,5BHJB LETCMP BL,61HJB OTHCMP BL,7BHJB LET;ASCII码大于等于30H小于3AH则归类为;ASCII码大于等于3AH小于41H则归类为;ASCII码大于等于41H小于5BH则归类为;ASCII码大于等于5BH小于61H则归类为;ASCII码大于等于61H小于7BH则归类为“数字”“其它”“字母”“其它”字母”OTH:INC AL;“其它”计数器加1JMP ENDLPDIG:INC

20、 AH; “数字”计数器加1JMP ENDLPLET:INC BH; “字母”计数器加1ENDLP:INC SI;继续循环LOOP AGAINMOV DIGIT, AH;统计各类个数MOV LETTER, BHMOV OTHER, ALMOV DX, OFFSET MSG1MOV AH,09HINT 21H显示数字”有多少个MOV AL, DIGITCALL DISPMOV DX, OFFSET MSG2MOV AH,09HINT 21HMOV AL, LETTERCALL DISP显示字母”有多少个MOV DX, OFFSET MSG3MOV AH,09HINT 21H显示其它”有多少个MO

21、V AL, OTHERCALL DISPMOV AH,4CHINT 21HDISP PROC NEAR;显示子程序第 15 页 共 31 页MOV AH,00H MOV DH,0AH DIV DHMOV CH,AH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H ADD CH,30H MOV DL, CHMOV AH, 02H INT 21HRET ENDPENDSEND STARTDISPCODE第 16 页 共 31 页实验六:扩展定时器 / 计数器接口实验(1)计数器0工作于方式3,编写初始化程序,观察其输出OUT0信号的波形。修改计数初值,观察OU

22、TO信号的变化情况。硬件连接方法:8254计数器0的CLKO端接规则的脉冲输入(频率自选),OUT0接示波器的 正极;示波器负极接地。程序流程图略。参考源程序:DATA SEGMENTDB 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,20FH;写入计数器 0 的控制字MOV AL,00010110BOUT DX,ALMOV DX,20CH;写入计数器 0 的计数初值MOV AL,05HOUT DX,ALMOV AH,4CHINT 21HCODE ENDSEND S

23、TART(2)将计数器1和计数器0级联起来,二者均工作于方式3,编写初始化程序,观察OUT1和OUT0信号的波形,说明二者的关系。修改计数初值,观察OUTO和OUT1输出波形的变化情况。硬件连接方法:8254计数器1的CLK1端接规则的脉冲输入(频率自选),0UT1接8254计数 器0的CLK0,计数器0的输出OUT0接示波器正极;示波器负极接地。程序流程图略。参考源程序:DATASEGMENTDB 100 DUP(?)DATAENDSCODESEGMENT第 17 页 共 31 页ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,

24、20FHMOV AL,00010110B OUTDX,ALMOV DX,20CHMOV AL,05H OUT DX,ALMOV DX,20FHMOV AL,01010110B OUTDX,ALMOV DX,20DHMOV AL,02H OUT DX,ALMOV AH,4CHINT 21HCODE ENDSEND START;写入计数器 0 的控制字;写入计数器 0 的计数初值;写入计数器 1 的控制字;写入计数器 1 的计数初值第 18 页 共 31 页实验七:并行输入/输出接口 8255A 简单编程实验(1)利用8255A的B口输出控制两组发光二级管L1,L3,L5,L7和L2,L4,L6,

25、L8亮灭交替变 化。分析:按照题目要求,当8255A的B口输出为01010101B(55H)时,发光二极管L1,L3,L5,L7会被点亮,当8255A的B口输出为10101010B (0AAH)时,发光二极管L2,L4,L6,L8会被点 亮。因此,通过延时改变8255A的 由于LED随时出于准备好的状态, 用,无需考虑。因此, 硬件连接方法:8255A的B口PB0PB7分别连接L1L8。 程序流程图略。参考源程序:.486ASSUME CS:CODE, DS:DATA, SS:STACK1MOV AX,DATAMOV DS,AXMOV DX, PORT_CTRMOV AL, 10000000B

26、OUT DX, ALMOV BL, 01010101BMOV AL, BLB口输出, 即可实现两组发光二极管的亮灭交替变化。因此8255A的B口可工作于方式0输出, 其它端口未使8255A的方式控制字为:10000000B(80H)。DATASEGMENTPORTA DW 208HPORTB DW 209HPORTC DW 20AHPORT_CTR DW 20BH;8255A 端口 A 地址;8255A 端口 B 地址;8255A 端口 C 地址;8255A 控制端口地址DATAENDSSTACK1 SEGMENT STACKSTACK1DB 100 DUP(?)ENDSCODESEGMENT

27、START:;8255A 初始化MOV DX, PORTBMOV AL, 00HOUT DX, AL;8255A 端口 B 清零,LED 初始化(全灭)LP0:第 19 页 共 31 页OUT DX, ALCALL DELAYNOT ALMOV BL, ALMOV AH, 01H;调用 BIOS 的 16H 功能判断键盘是否有输入INT 16HJNZ EXITJMP LP0EXIT:MOV AH, 4CHINT 21HDELAY PROC NEAR;延时子程序(可通过修改 NOP 指令数量改变延时时间)MOV ECX, 0FFFFFFFHLP2:NOPLOOPD LP2RETDELAY END

28、PCODE ENDSEND START(2)利用8255A的A口读入8个开关K1K8的状态,当只有K1合上时,L1L8显示00000001B;当只有K1和K2合上时,L1L8显示00000010B;当只有K1,K2和K3合上 时,L1L8显示00000011B;当只有K1,K2,K3和K4合上时,L1L8显示00000100B; 直到所有开关合上时,L1L8显示00001000B,并结束程序的运行。发光二极管的状态通过8255A的B口进行控制。分析:按照题目要求,可以通过查询的方式读取8255A的B口状态,并根据查询的结果给A口送出相应数据,A口工作在方式0的输入状态,B口工作在方式0输出状态

29、,C口不需要 考虑,所以8255A的方式控制字为:10010000B)硬件连接方法:(1)8255A的A口PA0PA7对应连接K1K8;(2)8255A的B口PB0PB7对应连接L1L8;源代码:DATA SEGMENTLIST DB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH, 0FFHDATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1第 20 页共 31 页START: MOV AX, DATA第 21 页 共 31 页

30、MOV DS, AXMOV DX, 20BHMOV AL, 10010000BOUT DX, AL;8255A 初始化MOV DX, 209HMOV AL, 00HOUT DX, ALL0:MOV DX, 208HIN AL, DX;8255A 的 B 口清零,LED 初始化(全灭);读 8255A 的 A 口,获得开关状态MOV BL, 00HMOV CX, 8MOV SI, OFFSET LISTL1:INC BLCMP AL, SIJZ FINDINC SI LOOP L1JMP L0FIND:MOV AL, BL;当前开关状态为表中所列状态之一MOV DX, 209H;显示 LED 状

31、态OUT DX, ALCMP AL, 08HJNZ L0MOV AH, 4CHINT 21HCODE ENDSEND START第 22 页 共 31 页实验八:并行输入/输出接口 8255A 综合应用实验(1)利用8254计数器0、计数器1和8255A的B口实现对发光二极管的定时控制,让8个发光二极管每隔1s从左到右依次点亮。(要求计数器1的时钟脉冲频率为250kHz)。分析:根据题目要求,需要利用8254进行定时1s控制,定时到后,改变8255A的B口输出。 可以利用中断的方式实现,8254定时到时向CPU申请中断,CPU相应中断后在中断程序中改变8255A的B口输出。由于题目要求8254

32、的输入脉冲频率为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 pS=5000D;方式控制字为:01110100B (74H)8254计数器0的计数初值为:N=50D;方式控制字为:00010100B (14H)8255A的方式控制字

33、:10000000B(80H);C口按位置位/复位控制字:00001110B(0EH)(使PC7复位,允许8254的OUT0中断到达系统8259的IRQ3端)此外,利用中断方式实现题目要求的功能还需要设置系统8259芯片的中断屏蔽字和系统存储器中的中断向量表(修改中断类型号为0BH的中断向量)。硬件连接方法:(1)250kHz脉冲输出接8254的CLK1,OUT1接CLK0,OUT0接IRQ;(2)8255A的B口PB0PB7对应连接L1L8。程序流程图略。参考源程序:DATASEGMENTPORT0 DW 20CH;8254 计数器 0 端口地址PORT1 DW 20DH;8254 计数器

34、1 端口地址PORT2 DW 20EH;8254 计数器 2 端口地址PORT3 DW 20FH;8254 控制寄存器端口地址PORTA DW 208H;8255A 的 A 口端口地址PORTB DW 209H;8255A 的 B 口端口地址PORTC DW 20AH;8255A 的 C 口端口地址PORT_CTR DW 20BH;8255A 的控制寄存器端口地址DATAENDSSTACK1SEGMENT STACKDB 100 DUP(0)STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1第 23 页 共 31 页

35、START: MOV AX, DATAMOV DS, AXMOV ES, AXMOV AL, 80HMOV DX, PORT_CTROUT DX, ALMOV AL, 0EHOUT DX, ALMOV AL, 00HMOV DX, PORTBOUT DX, ALMOV AX, 350BHINT 21HPUSH ESPUSH BXMOV AX, SEG INTPROCMOV DS, AXMOV DX, OFFSET INTPROCMOV AX, 250BHINT 21HIN AL, 21HAND AL, 0F7HOUT 21H, ALSTIMOV DX, PORT3MOV AL, 14HOUT

36、DX, ALMOV DX, PORT0MOV AL, 50DOUT DX, ALMOV DX, PORT3MOV AL, 74HOUT DX, ALMOV DX, PORT1MOV AX, 5000DOUT DX, ALMOV AL, AHOUT DX, AL;将程序要求的中断向量写入;设置 8259 的 IMR 寄存器,允许 IRQ3 中断;开中断,CPU 可以响应外部可屏蔽中断;8254 计数器 0 初始化;计数器 0 写入计数初值 50D;8254 计数器 1 初始化;计数器 1 写入计数初值 5000D;8255初始化,B 口方式 0输岀,C口高 4位输岀;PC7清零, 允许 8254

37、中断到IRQ3第 24 页 共 31 页MOV BH, 80HMOV AL, BHMOV DX, PORTBOUT DX, AL;BH 存放当前 8255A 的 B 口输岀;8255A 的 B 口输岀WAIT0:NOPNOPNOPMOV AH, 01H;判断键盘上是否有键按下,若有则结束程序INT 16HJNZ EXITJMP WAIT0EXIT:POP DX;恢复中断向量表中的原有 0BH 号中断向量POP DSMOV AX, 250BHINT 21HMOV AH, 4CHINT 21HINTPROC PROC NEARMOV AL, BHROR AL,1MOV BH, ALMOV DX,

38、PORTBOUT DX, AL(2)8255A的A口与8个开关相连,工作于方式1下,要求:利用当前的开关状态通过B口控制L1L8的亮或灭。A口的/STBA选通信号由按键K发出,每按一次K键,读入当前开关状态。 分析:8255A的B口用来控制LED的亮灭,可工作在方式0下。根据题意,可以通过查询方式 不断读取8255A的C口状态确定K键是否按下,也可以利用中断方式,当K键按下时,由INTRA(PC3)向CPU申请中断。当判断K键按下后,读取8255A的A口状态,并通过B口显示到LED上。利用查询方式实现时,仅需要给定方式选择 控制字;利用中断方式实现时,除控制字外还需设定INTEA为1,允许IN

39、TRA申请中断。因此,8255A的方式控制字为:10110000B(0B0H);使INTEA(PC4)置1,其控制字为00001001B(09H)。注意:利用中断方式实现时还需要置PC7为0,使INTRA能到达8259的IRQ3;向 8255A 的 B 口写岀数据,点亮对应 LEDMOV AL, 20HOUT 20H, ALIRET INTPROC ENDPCODE ENDSEND START;向 8259 发岀中断结束命令第 25 页 共 31 页硬件连接与参考源程序:(1)利用查询方式实现硬件连接:1) 8255A的A口PA0PA7与K1K8对应相连;2) 8255A的B口PB0PB7与L

40、1L8对应相连;3)按键K接8255A的C口PC4。参考源程序:CODESTART:SEGMENTASSUME CS:CODEMOV AL, 0B0HMOV DX, 20BHOUT DX, AL; 8255A 初始化,方式控制字 10110000BMOV DX, 209HMOV AL, 00HOUT DX, AL;LED 初始化AGAIN:MOV AH, 01HINT 16HJNZ EXIT;判断计算机键盘上是否有键按下,若有结束程序MOV DX, 20AHIN AL, DX;读入 8255A 的 C 口状态TEST AL, 00010000BJNZ AGAIN;判断 PC4=1 ? (K 键

41、是否按下 )MOV DX, 208HIN AL, DX;读入 8255A 的 A 口状态MOV DX, 209HOUT DX, ALJMP AGAIN;将 A 口状态送 8255A 的 B 口EXIT:MOV AH, 4CHINT 21HCODEENDSEND START2)利用中断方式实现硬件连接:1) 8255A的A口PA0PA7与K1K8对应相连;2) 8255A的B口PB0PB7与L1L8对应相连;3)按键K接8255A的C口PC4;4) 8255A的CDPC3(INTRA)接IRQ。参考源程序:DATA SEGMENTPORTA DW 208HPORTB DW 209HPORTC D

42、W 20AHPORT_CTR DW 20BHDATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(O)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1START: MOV AX, DATAMOV DS, AXMOV ES, AXMOV DX, PORT_CTRMOV AL, 0B0HOUT DX, ALMOV AL, 09HOUT DX, ALMOV AL, 0EHOUT DX, ALMOV AX, 350BHINT 21HPUSH ESPUSH BXMOV AX, SEG INTPR

43、OCMOV DS, AXMOV DX, OFFSET INTPROCMOV AX, 250BHINT 21HIN AL, 21HAND AL, 0F7HOUT 21H, ALSTIWAIT0:MOV AH, 01HINT 16HJZ WAIT0;8255A 的 A 口地址;8255A 的 B 口地址;8255A 的 C 口地址;8255A 的控制口地址;写入 8255A 方式控制字 OBOH;写入 C 口按位置位控制字,PC4 置“ 1 ”;写入 C 口按位复位控制字,PC7 置“ 0”,开 IRQ;保存系统原有中断号为 0BH 的中断向量到堆栈;向 0BH 号中断写入新的中断向量;允许 82

44、59 的 IRQ3 中断;允许 CPU 响应可屏蔽中断;判断是否有键按下,若有则结束程序,若无则等待;恢复系统中断向量表POP DX第 23 页共 31 页第 28 页 共 31 页POP DSMOV AX, 250BHINT 21HMOV AH, 4CHINT 21HINTPROC PROC NEARMOV DX, PORTA IN AL, DXMOV DX, PORTB OUT DX, ALMOV AL, 20HOUT 20H, ALIRETINTPROC ENDPCODE ENDSEND START;读入 8255A 端口 A 的状态(开关状态);从8255A 的 B 口输岀开关状态,由

45、对应的;给 8259 发中断结束指令LED 显示第 29 页 共 31 页实验九:LED 显示器接口实验(1)编制一个从左到右循环显示字符“8的程序,要求每个字位的停留时间约为1s,当从标准键盘上按下任意键时结束程序。分析: 根据题意要求, 实验板上的6位8段数码管的段选信号均相同,为字符“8”的段码(80H)。为了实现从左到右循环显示且每个字位停留约1s的功能,只需要每隔一秒给位选信号赋值,选通/断开相应的位即可。当循环显示到最右端时,延时1s再从最左端开始显示。为此,在该题中我们利用8255A的A口作为6位LED显示器的段选口 (地址208H),8255A的B口作为6位LED显示器的位选口

46、(地址209H)。8255A的控制字为:10000000B(80H)硬件连接:(1)8255A的A口PA0PA7分别对应连接LED显示器的段选输入ah.(2)8255A的B口PB0PB5分别对应连接LED1LED6显示器的位选输入。程序流程图略。参考源程序:.486STACK1 SEGMENT STACKDB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK1START: MOV AL, 80H; 8255A 工作方式初始化, A 口方式 0 输岀,B 口方式 0 输岀MOV DX, 20BHOUT DX, ALMOV AL,

47、80H;8255A 的 A 口输岀字符“ 8”的段码 80HMOV DX, 208HOUT DX, AL;LED 显示器位选信号存放在 BL 中,20H 表示最左边一位 ;将 LED 位选信号输岀到 8255A 的 B 口; 调研软件延时程序;判断标准键盘上是否有键按下,若有则结束程序;LED 位选信号右移一位,选中下一位 LEDJMP L1;当循环到最右边一位 LED 时,重新填充 BL 值,开始新一轮循环L1:MOV BL, 20HL2:MOV AL, BLMOV DX, 209HOUT DX, ALCALL DELAYMOV AH, 01HINT 16HJNZ EXITSHR BL, 1

48、JNZ L2EXIT:MOV DX, 208H第 30 页 共 31 页MOV AL, 0FFHOUT DX, AL MOV DX, 209H MOV AL, 00H OUT DX, AL;关闭所有 LEDMOV AH, 4CHINT 21HDELAY PROC NEARMOV ECX, 0FFFFFFFHLP: LOOPD LPRET DELAY ENDP CODE ENDSEND START(2)完成多位LED显示器的显示, 即设计一个显示字符串1234.56的程序, 当标准键盘上有 任意键按下时结束程序。基本思想: 借助动态扫描、 分时显示的办法, 利用人眼视觉的滞留效应, 实现人眼看上

49、去的 各位 “同时”显示。 分析:利用实验操作面板上引出的8255A的分别A口和B口作为6位8段LED显示器的位选口和段选口,从段选口依次输出待显示字符的段码,并选通相应的位实现对多位LED显示器的刷新。8255A的A口和B口均工作在方式0的输出方式,方式控制字为:1000000B(80H)。硬件连接:(1)8255A的A口PA0PA5对应连接LED1LED6的位选;(2)8255A的B口PB0PB7对应连接段选ah;程序流程图略。参考源程序:DATASEGMENTSEGTAB DB 0C0H, 0F9H, 0A4H, 0B0H;定义 0F 的段码存储区DB 99H, 92H, 82H, 0F

50、8HDB 80H, 98H, 88H, 83HDB 0C6H, 0A1H, 86H, 8EHDISPMEM DB 01H, 02H, 03H, 04H, 05H, 06H;定义显示缓冲区DATAENDSSTACK1SEGMENT STACKDB 100 DUP(0)STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1第 31 页 共 31 页START: MOV AX, DATA MOVDS, AX MOV AL,80H MOV DX,20BH OUT DX, ALL1: MOV AH, 20HLEA SI, DISPMEMLEA BX

51、, SEGTAB L2: MOVAL, SIXLATCMP AH, 04H JNENEXT AND AL, 7FH NEXT:MOV DX, 209HOUT DX, AL MOVDX, 208H MOV AL,AH OUT DX, ALMOV CX, 4000LP2: LOOP LP2 PUSH AXMOV AH, 01H INT16H JNZ EXIT POPAX INC SI SHR AH,1 JNZ L2 JMP L1;8255A 初始化, A 口输出, B 口输出;预置位选信号;SI 指向显示缓冲区;BX 指向段码存储区; 第 4 位 LED 显示小数点; 输出段码; 输出位选信号;

52、延时; 判断标准键盘上是否有键按下,若有键按下则结束程序; 修改显示缓冲区指针; 修改位选信号EXIT:MOV DX, 208HMOV AL, 00HOUT DX, ALMOV DX, 209HMOV AL, 0FFHOUT DX, AL; 关闭所有 LEDMOV AH, 4CHINT 21HCODE ENDSEND START第 32 页 共 31 页实验十:键盘接口实验编制1个用键盘控制模拟电动机转动的程序,即用非编码键盘上的A和B两个键作转、停控制,并在数码显示器上显示F表示电机转动,计算机屏幕上显示笑脸符表示电机停,按回车键结 束程序执行(笑脸符的ASCII码为02H)。分析:根据题目

53、的要求,需要不断扫描4总非编码键盘,判断键盘上A或B键(控制停转,在 屏幕上显示笑脸)是否按下。若按下A键则在LED上显示F,表示电机转动;若按下B键则在计 算机屏幕(CRT显示器)上显示笑脸,表示电机停转。可以用8255A的C口作为非编码键盘的行扫描信号,同时作为LED的位选信号,B口作为非编码键盘的列扫描信号,A口作为LED的段选信号。8255A的C口工作在输出方式,B口工作在输入方式,A口工作在输出方式,8255A的方式控制字为:10000010B(82H)硬件连接:(1)8255A的A口的PA0PA7接段选信号af;(2)8255A的B口的PB0PB3接非编码键盘的列扫描端(J9)(3)8255A的C口的PC0PC5接LED的位选信号(同时也是非编码键盘的行扫描线) 程序流程图略。参考源程序:DATA SEGMENTDISPTAB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论