版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一:简单程序设计实验(1)编写一个 32 位无符号数除法的程序, 要求将存放在 NUM1 中的 32 位无符号数与 存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序:DATA SEGMENTNUM1 DD 2A8B7654H NUM2 DW 5ABCHNUM3 DW ?NUM4 DW ? DATAENDSCODE SEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX,DATA;数据段寄存器初始化MOV DS,AXMOV AX, WORD PTR NUM1MOV DX, WORD PTR N
2、UM1+2DIV NUM2MOV NUM3,AX MOV NUM4,DXMOV AH,4CH;正常返回 DOS 系统INT 21H CODEENDSEND START(2)编写一个拆字程序。要求将存放在ARY 单元的 2 位十六进制数 X1X2 拆为 X1 和 X2两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。程序流程图略。 参考源程序:DATASEGMENT ARY DB 2AH,?,?DATA ENDSCODE SEGMENTASSUME DS:DATA, CS:CODE START: MOVAX,DATAMOV DS,AXMOV SI,OFF
3、SET ARY;取 ARY 的偏移地址MOV AL,SI;取 16进制数至 ALMOV BL,ALAND AL,0F0H;取 16进制数的高四位,即 X1SHR AL,4MOV SI+1,AL;存 0X1MOV AL,BLAND AL,0FH;取 16进制数的低四位,即 X2MOV SI+2,AL;存 0X2MOV AH,4CHINT 21HCODEENDSEND START实验二:分支程序设计实验 (1)编写一个字符比较程序,比较 3 个无符号字节数 A, B,C 的大 小,并根据比较结果 对变量 K 赋值:如果 3 个数不相等,则 K=0 ;如果 3 个数中有两个相等,则K=1; 如果 3
4、 个数都相等,则K=2。 程序流程图 略。 参考源 程序:DATASEGMENTA DB 20H B DB 20H C DB 20H;定义待比较数 A、B、C,比较结果KK DB ?DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,ACMP AL,B;对A、B进行比较,不相等则转到 C0MP2JNE COMP2;相等则比较 A 、 CCMP AL,CJNE K1;A、C不相等则K=1JMP K2; A 、 C 相等则 K=2COMP2:MOV BL,BCMP BL,CJE K1;对B、C进行比较,
5、相等则 K=1CMP AL,CJE K1;对A、C进行比较,相等则 K=1K0:MOV K,0JMP EXITK1:MOV K,1JMP EXITK2:MOV K,2EXIT:MOV AH,4CHINT 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, DS
6、: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;任意定义一个字串,以 “$”结尾;逐个取字符进行判断;自己和自己做与运算;根据 PF 标志位的变化进行跳转实验三 循环程序设计实验(1)将字符串STRN (以“ $结尾)中的每一个字符均加上偶校验位,并 统计有多少个字符 因含有奇数个“ 1而加上了校验位。统计
7、结果存于 N单 元中。程序流程图 略。 参考源 程序:DATA SEGMENTSTRN DB What$ COUNT EQU $- STRN N DB ?BUF DB COUNT DUP(?) DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX, DATAMOV DS, AXMOV AX, DATA MOVES, AXLEA SI,STRN LEADI, BUFMOV CX, COUNT MOVAL, 0LP1: MOV BL, SI AND BL, BL JP NEXTINC ALOR BL,80H NEXT: MOV DI
8、, BLINC SIINC DILOOPLP1MOV N, ALMOV AH,4CHINT 21HCODE ENDSEND START( 2)在 FIRST 开始的一片连续的数据区中存放着 100 个数据,编写一 个程序,统计第 1个数据 0之前的数据个数。 程序流程图 略。 参考源程序:DATA SEGMENTFIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H数做演示 COUNT EQU $FIRST NUM DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX,DATAMOV D
9、S,AXMOV DL, 0MOV CX,COUNTMOV BX, OFFSET FIRSTLP1: MOV AL, BXCMP AL,00H JNENEXTJMP EXITNEXT: INC DLINC BXLOOPLP1EXIT: MOV NUM,DL MOV AH,4CH INT21HCODE ENDSEND START;任取 9 个;计数值初始为 0;每次取一个数,与 0 比较;找到 0 则退出 ;没找到 0 则计数值加 1实验四:子程序设计实验将BUF幵始的10个单元中两位十六进制数转换成 ASCII码,并在屏幕上显 示出来。 要求码型 转换通过子程序 HEXASC 实现,参数传送采用
10、寄存器 传送方式。程序流程图略。 参考源程序 : ( 1 )实现方法一:远过程调用 DATASEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF;定义任意长度的一段BUF DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?);设置足够深度的栈区STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOV DS,AX MOV SI,OFFSETBUF MOVCX,COUNTAGAIN:
11、MOV AL,SIMOV BL,ALSHR AL,4AND AL,0FH 传参)CALL FAR PTR HEXASCMOV DL,ALMOV AH,02HINT 21HMOV AL,BLAND AL,0FH 传参)CALL FAR PTR HEXASCMOV DL,ALMOV AH,02HINT 21HMOV DL,20HMOV AH,02HINT 21H;逐个取数;先对高字节部分转换(寄存器 AL;调用子程序;显示高字节部分对应的字符;再对低字节部分转换(寄存器 AL;调用子程序;显示低字节部分对应的字符;显示空格INC SILOOP AGAIN MOVAH,4CHINT 21H CODE
12、 ENDS CODEB SEGMENTASSUMECS:CODEB HEXASC PROC FAR;判断是不是数字; 是字母则转到 HEXATOF; 是数字则对应到数字的 ASCII 码; 是字母则对应到字母的 ASCII 码CMP AL,09HJA HEXATOFADD AL,30HJMP ENDHEX HEXATOF:ADD AL,37H ENDHEX: RET HEXASCENDP CODEBENDSEND START (2)实现方法二:近过程调用 DATA SEGMENTBUF DB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU
13、 $-BUF;定义任意长度的一段BUF DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?) ;设置足够深度的栈区 STACK1 ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOVAX,DATAMOV DS,AXMOV SI,OFFSETBUF MOVCX,COUNT;逐个取数AGAIN: MOV AL,SIMOV BL,ALSHR AL,4AND AL,0FH ;先对高字节部分做转换 CALL HEXASCMOV DL,AL 的字符 MOV AH,02H INT 21H MOVAL,BLAN
14、D AL,0FH 转换 CALL HEXASC MOV DL,AL 的字符 MOV AH,02H INT 21HMOV DL,20H 格 MOV AH,02H INT 21H INC SI 退出 LOOP AGAINMOV AH,4CH INT 21H HEXASCPROC NEAR CMP AL,09H JA HEXATOF ADD AL,30H JMP ENDHEX HEXATOF:ADD AL,37H ENDHEX:;显示高字节部分对应;再对低字节部分做;显示低字节部分对应;显示空;继续循环或RETHEXASC ENDPCODE ENDS END START实验五:DOS中断调用实验(1
15、)如果从键盘上依次输入的是一个数字和一个字母,则输出“ RIGHT”标记后结束程序, 否则输出标记 “ERROR ”后转向原出错处重做。试编程 实现该功能。程序流程图 略。 参考源 程序:DATA SEGMENTMSG DB 0AH,0DH,RIGHT,0AH,0DH,$WRN DB0AH,0DH,ERROR,0AH,0DH,$DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX,DATAMOV DS,AX AGAIN: MOV AH,01HINT 21H CMP AL,39H JA EMSG CMP AL,30H JB EMS
16、G 报错 MOV AH,01HINT 21H CMP AL,A JB EMSG CMP AL,Z 则继续 JB EXIT CMP AL,a JB EMSG CMP AL,z JB EXIT;等待用户输入 1 个字符并显示;判断输入是否是数字,不是则;等待用户输入 1 个字符并显示;判断输入是否是大写字母,不是;判断是不是小写字母;不是字母则报错,是字母则转到EXITEMSG: LEADX,WRNMOVAH,09H INT21HJMP AGAINEXIT:MOV DX,OFFSET MSGMOV AH,09H;显示 “ RIGHT并退出INT 21HMOV AH,4CHINT21H CODEEN
17、DSEND START( 2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数 不超过 50个,该字 符串用回车作为结束) ,并按数字、字母和其它字符分 类计数,然后将结果存入 digit 、letter 和 other 3个存储单元中,并显示结 果。程序流程图略。 参考源程序:DATASEGMENTMSG1 DB 0AH, 0DH, Number ofdigit:,20H,$ MSG2 DB 0AH, 0DH,Number of letters:, 20H,$MSG3 DB 0AH, 0DH, Number of othercharacters:, 20H, $ BUF DB 50
18、DB0DB 50 DUP(?);设置足够深的栈区DIGIT DB ?LETTERDB ?OTHERDB ?DATAENDSSTACK1 SEGMENTSTACK DB 100DUP(?)STACK1ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOVAX,DATAMOV DS,AXMOV AH,0AH ;等待用户输入字符串并显示MOV DX,OFFSETBUF INT 21HMOV SI, OFFSETBUF MOVCL,SI+1MOVCH,00HMOVAL,00HMOVAH,00HMOVBH,00HAGAIN: MOVBL,SI+
19、2CMP BL,30HJB OTH ;ASCII 码小于 30H 则归类为 “其它 ” CMP BL,3AHJB DIG;ASCII 码大于等于 30H 小于 3AH 则归类为 数字” CMP BL,41HJB OTH;ASCII 码大于等于 3AH 小于 41H 则归类为 其它” CMP BL,5BHJB LET;ASCII 码大于等于 41H 小于 5BH 则归类为 字母” CMP BL,61HJB OTH;ASCII 码大于等于 5BH 小于 61H 则归类为 其它” CMP BL,7BHJB LET 为“字母”OTH: INC ALDIG:JMPENDLPLET: JMPENDLPEN
20、DLP: INC SILOOP AGAINMOV DIGIT, AHMOV LETTER,BH MOVMOV DX, OFFSETMSG1MOVAH,09HINT 21HMOV ADLX, OFFSETMSG2MOVAH,09HINT 21HMOV ADLX, OFFSETMSG3MOVAH,09HINT 21H MOV AL,AH,4CH;ASCII 码大于等于 61H 小于 7BH 则归类;“其它”计数器;加“1数字”计数器加;1字母”计数器 加1;继续循环 ;统计各类个数;显示“数字”有多少个;显示“字母”有多少个;显示“其它”有多少个;显示子程序DISP IPNRTO2C1HNEARD
21、ISPPCODEMOV 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 RETENDENDS END START实验六:扩展定时器 / 计数器接口实验(1)计数器 0工作于方式 3,编写初始化程序,观察其输出OUT0 信号的波形。修改计数初 值,观察 OUT0 信号的变化情况。 硬件连接方法: 8254计数器0的CLKO端接规则的脉冲输入(频率自选),OUTO接示波器的 正极;示波器负极接地。程序流程图略
22、。 参考源程序: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 START( 2)将计数器 1和计数器 0级联起来,二者均工作于方式 3,编写初始化 程序,观察0UT1和OUTO信号的波形,说明二者的关系。修改
23、计数初 值,观察OUTO和OUT1输出波形的变 化情况。硬件连接方法:8254计数 器1的CLK1端接规则的脉冲输入(频率自选), OUT1接8254计数器0的 CLK0,计数器0的输出OUTO接示波器正极;示波器负极接地。程序流程图略。 参考源程序:DATA SEGMENTDB 1OO DUP(?)DATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,20FHMOV AL,00010110B;写入计数器0的控制字OUT DX,ALMOV DX,20CH;写入计数器0的计数初值MOV AL,05H
24、OUT DX,ALMOV DX,20FHMOV AL,01010110B;写入计数器1的控制字OUT DX,ALMOV DX,20DH;写入计数器1的计数初值MOV AL,02HOUT DX,ALMOV AH,4CHINT 21HCODE ENDSEND START实验七:并行输入/输出接口 8255A简单编程实验 ( 1)利用 8255A 的 B 口输出控制两组发光二级管 L1,L3,L5,L7 和 L2,L4,L6,L8 亮灭交替变 化。分析:按照题目要求,当 8255A 的 B 口输出为 01010101B(55H) 时,发光二 极管 L1,L3,L5,L7 会被点亮,当 8255A 的
25、 B 口输出为 10101010B (0AAH) 时,发光二极管 L2,L4,L6,L8 会被点 亮。因此,通过延时改变 8255A 的 B 口输出,即可实现两组发光二极管的亮灭交替变化。 由于 LED 随时出于 准备好的状态,因此 8255A 的 B 口可工作于方式 0 输出,其它端口未使 用,无需考虑。因此, 8255A 的方式控制字为: 10000000B(80H) 。 硬件连接方法: 8255A 的 B 口 PB0PB7 分别连接 L1L8 。 程序流程图略。参考源程序:.486DATA SEGMENTPORTA DW 208HPORTB DW 209HPORTC DW 20AHPOR
26、T_CTR DW 20BH;8255A端口 A地址;8255A 端口 B 地址;8255A端口 C地址;8255A 控制端口地址DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1START: MOV AX,DATA;8255A初始化; 控制字MOV DS,AXMOV DX, PORT_CTRMOV AL, 10000000BOUT DX, ALMOV DX, PORTBMOV AL, 00H;8255A端口 B清零,LED初始化(全灭)OUT DX
27、, ALLP0:MOV BL, 01010101BMOV AL, BLOUT 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 ENDPCODE ENDSEND START(2)利用 8255A 的 A 口读入 8 个开关 K1K8 的状态,当只有 K1 合上
28、 时, 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 输出状态, C 口不需要考虑,所以 8255A
29、 的方式控制字为: 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:STACK1START: MOV AX, DATAL0:L1:FIND:CODEMOV DS, AX
30、MOV DX, 20BHMOV AL, 10010000BOUT DX, ALMOV DX, 209HMOV AL, 00HOUT DX, ALMOV DX, 208HIN AL, DXMOV BL, 00HMOV CX, 8MOV SI, OFFSET LISTINC BLCMP AL, SI JZ FIND INC SILOOP L1 JMP L0 MOV AL, BL MOV DX, 209H OUT DX, AL CMP AL, 08H JNZ L0MOV AH, 4CHINT 21HENDSEND START;8255A 初始化;8255A的B口清零,LED 初始化 (全灭 );读8
31、255A的A口,获得开关状态; 当前开关状态为表中所列状态之一; 显示 LED 状态实验八:并行输入/输出接口 8255A综合应用实验(1)利用8254计数器0、计数器1和8255A的B 口实现对发光二极管的定时 控制,让8个发光二极管每隔1s从左到右依次点亮。(要求计数器 1的时 钟脉冲频率为 250kHz )。分析:根据题目要求,需要利用8254进行定时1s控制,定时到后,改变8255A的B 口输出。可以利用中断的方式实现,8254定时到时向CPU申请中断,CPU相应中断后 在中断程序中改变8255A的B 口输出。由于题目要求8254的输入脉冲频率为250kHz,所以需 要级联计数器1和计
32、数器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 ;方式控制字为: 01110100B (74H)8254计数器0的计数初值为:N=50D ;方式控制字为:00010100B (14H)8255A的方式控制字:10000000B ( 80H) ; C
33、 口按位置位/复位控制 字:00001110B (0EH)(使PC7复位,允许8254的OUT0中断到达系统8259的 IRQ3 端)此外,利用中断方式实现题目要求的功能还需要设置系统8259芯片的中断屏蔽字和系统 存储器中的中断向量表(修改中断类型号为0BH的中断向量)。硬件连接方法:(1) 250kHz脉冲输出接 8254的CLK1,OUT1 接CLK0,OUT0接IRQ;(2) 8255A 的 B 口 PB0PB7对应连接L1L8 。程序流程图略。 参考源程序:SEGMENTSTACK1PSOERGTM0EDNWT 2S0TCAHCK;8254计数器 0端口地址PDOBR1T001 DW
34、UP2(0)DH;8254计数器 1端口地址STACK1PEONRDTS2 DW 20EH;8254计数器 2端口地址CODEPOSERGT3MDEWNT20FH;8254控制寄存器端口地址PASOSRUTMA EDWCS2:C08OHDE, DS:DATA,悬嫩的 A口端口濫址PORTB DW 209H;8255A的B 口端口地址PORTC DW 20AH;8255A的C口端口地址DATAPORT_CTR DW 20BH;8255A的控制寄存器端口地址ENDS;8255初始化,B 口方式0输岀,C 口高4位输岀;PC7清零,允许8254中断到IRQ3;发光二极管初始化 (全灭 );保存系统原
35、有 0BH 号中断的中断向量至堆栈START: MOV AX, DATA MOV DS, AX MOV ES, AXMOV AL, 80HMOV DX, PORT_CTROUT DX, AL MOV AL, 0EH OUT DX, AL MOV AL, 00H MOV DX, PORTB OUT DX, AL MOV AX, 350BH INT 21H PUSH ES PUSH BX MOV AX, SEG INTPROC MOV DS, AXMOV DX, OFFSET INTPROC MOV AX, 250BHINT 21H IN AL, 21HAND AL, 0F7H OUT 21H,
36、AL STI MOV DX, PORT3 MOV AL, 14H OUT DX, AL MOV DX, PORT0 MOV AL, 50D OUT DX, AL MOV DX, PORT3 MOV AL, 74H OUT DX, AL MOV DX, PORT1 MOV AX, 5000D OUT DX, AL MOV AL, AH OUT DX, AL;将程序要求的中断向量写入;设置8259的IMR寄存器,允许IRQ3中断;开中断,CPU可以响应外部可屏蔽中断;8254计数器 0初始化;计数器 0 写入计数初值 50D;8254计数器 1初始化;计数器 1写入计数初值 5000D;BH存放当
37、前8255A的B 口输岀;8255A的B口输岀; 判断键盘上是否有键按下,若有则结束程序; 恢复中断向量表中的原有 0BH 号中断向量;向8255A的B口写岀数据,点亮对应 LED;向8259发岀中断结束命令MOV BH, 80HMOV AL, BHMOV DX, PORTBOUT DX, ALWAIT0: NOPNOPNOPMOV AH, 01H INT 16HJNZ EXITJMP WAIT0EXIT:POP DXPOP DSMOV AX, 250BH INT 21HMOV AH, 4CH INT 21H INTPROC PROC NEARMOV AL, BHROR AL,1MOV BH,
38、 ALMOV DX, PORTB OUT DX, ALMOV AL, 20HOUT 20H, AL IRET INTPROC ENDPCODE ENDSEND START(2) 8255A的A 口与8个幵关相连,工作于方式1下,要求:利用当前的幵 关状态通过B 口控制L1L8的亮或灭。A 口的/STBa选通信号由按键K发出, 每按一次K键,读入当前幵关状态。分析:8255A的B 口用来控制LED的亮灭,可工作在方式0下。根据题意,可 以通过查询方式不断读取 8255A的C 口状态确定K键是否按下,也可以 利用中断方式,当K键按下时,由INTRA ( PC3)向CPU申请中断。当判断 K 键按下
39、后,读取8255A的A 口状态,并通过B 口显示到LED上。利用查询方式实现时,仅 需要给定方式选择 控制字;利用中断方式实现时,除控制字外还需设定INTEA 为1,允许 INTRA 申请中断。因此,8255A的方式控制字为:10110000B(0B0H);使INTEA(PC4)置1 ,其控制字为00001001B (09H)。注意:利用中断方式实现时还需要置PC7为0,使INTRA 能到达 8259的 IRQ3硬件连接与参考源程序:( 1)利用查询方式实现 硬件连接:1) 8255A的A 口 PA0PA7与K1K8对应相连;2) 8255A 的 B 口 PB0PB7与 L1L8 对应相连;3
40、) 按键K接8255A的CDPC4。 参考源程序:CODESEGMENTASSUME CS:CODESTART:MOV 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 键是否按下 )MOV
41、DX, 208HIN AL, DX;读入8255A的A 口状态MOV DX, 209HOUT DX, ALJMP AGAIN;将A 口状态送8255A的B 口EXIT:MOV AH, 4CHINT 21HCODEENDSEND START(2)利用中断方式实现 硬件连接:1) 8255A 的 A 口 PA0PA7 与 K1K8 对应相连;2) 8255A 的 B 口 PB0PB7与 L1L8 对应相连;3) 按键 K接8255A的CD PC4;4) 8255A的CDPC3 (INTRA )接IRQ o参考源程序:DATASEGMENTPOP DX;恢复系统中断向量表;8255A的A 口地址;8
42、255A的B 口地址;8255A的C 口地址;8255A的控制口地址MOV DX, PORT_CTRMOV AL, 0B0HOUT DX, ALMOV AL, 09HOUT DX, ALMOV AL, 0EHOUT DX, ALMOV AX, 350BHINT 21HPUSH ESPUSH BXMOV AX, SEG INTPROCMOV DS, AXMOV DX, OFFSET INTPROCMOV AX, 250BHINT 21HIN AL, 21HAND AL, 0F7HOUT 21H, ALSTIWAIT0:MOV AH, 01HINT 16HJZ WAIT0PORTA DW 208H
43、PORTB DW 209HPORTC DW 20AHDATA PORT_CTR DW 20BHENDSSTACK1 SEGMENT STACKDB 100 DUP(O)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1START: MOV AX, DATAMOV DS, AXMOV ES, AX;写入8255A方式控制字OBOH;写入C 口按位置位控制字,PC4置“ 1 ”;写入C 口按位复位控制字,PC7置“ 0”,开IRQ;保存系统原有中断号为 0BH的中断向量到堆栈;向0BH号中断写入新的中断向量;允许82
44、59的IRQ3中断;允许CPU响应可屏蔽中断;判断是否有键按下,若有则结束程序,若无则等待POP DSMOV AX, 250BH INT 21H;读入8255A端口 A的状态(开关状态);从8255A的B 口输岀开关状态,由对应的;给8259发中断结束指令LED 显示MOV AH, 4CH INT 21H INTPROC PROC NEARMOV DX, PORTA IN AL, DXMOV DX, PORTB OUT DX, ALMOV AL, 20HOUT 20H, ALIRETINTPROC ENDPCODE ENDSEND START实验九:LED显示器接口实验(1)编制一个从左到右循
45、环显示字符 “ 8的”程序,要求每个字位的停留时 间约为1s,当从标准键盘上按下任意键时结束程序。分析: 根据题意要求, 实验板上的 6位 8段数码管的段选信号均相同, 为字符 “ 8”的段码(80H)0为了实现从左到右循环显示且每个字位停留约1s的功能,只需要每隔一秒给位选信号赋值, 选通/断开相应的位即可0当循环显示到最右端时,延 时1s再从最左端幵始显示。为此,在该题中我们利用8255A的A 口作为6位LED显示器的段选口(地址 208H), 8255A的B 口作为6位LED显示器的位 选口(地址 209H) o 8255A的控制字为:10000000B (80H)硬件连接:(1)825
46、5A的A 口 PA0PA7分别对应连接LED显示器的段选输入 ah.(2)8255A的B 口 PB0PB5分另U对应连接LED1LED6显示器 的位选输入0 程序流程图略0参考源程序:.486STACK1 SEGMENT STACKDB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK1START: MOV AL, 80H MOV DX, 20BH OUT DX, ALMOV AL, 80HMOV DX, 208H OUT DX, AL L1:MOV BL, 20HL2:MOV AL, BLMOV DX, 209H OUT DX
47、, AL CALL DELAYMOV AH, 01H INT 16H JNZ EXIT SHR BL, 1 JNZ L2JMP L1MOV DX, 208HEXIT:;8255A工作方式初始化, A 口方式0输岀,B 口方式0输岀;8255A的A 口输岀字符“ 8”的段码80H;LED显示器位选信号存放在 BL中,20H表示最左边一位 ;将 LED位选信号输岀到 8255A的B 口; 调研软件延时程序;判断标准键盘上是否有键按下,若有则结束程序;LED 位选信号右移一位,选中下一位 LED;当循环到最右边一位 LED时,重新填充BL值,开始新一轮循环MOV AL, 0FFHOUT DX, AL
48、MOV DX, 209HMOV AL, 00HOUT DX, AL;关闭所有 LEDMOV AH, 4CHINT 21HDELAYPROC NEARMOV ECX, 0FFFFFFFHLP: LOOPD LPRETDELAY ENDPCODE ENDSEND START( 2)完成多位 LED 显示器的显示,即设计一个显示字符串 1234.56的程 序,当标准键盘上有 任意键按下时结束程序。基本思想: 借助动态扫描、 分时显示的办法, 利用人眼视觉的滞留效应, 实现人眼看上去的各位 “同时”显示。 分 析:利用实验操作面板上引出的 8255A的分别A 口和B 口作为6位8段LED显 示器的位选
49、口和 段选口, 从段选口依次输出待显示字符的段码, 并选通相 应的位实现对多位LED显示器的刷 新。8255A的A 口和B 口均工作在方式0 的输出方式,方式控制字为: 1000000B(80H)。 硬件连接:(1)8255A的A 口 PA0PA5对应连接LED1LED6的位选;(2)8255A的B 口 PB0PB7对应连接段选ah;程序流程图略。参考源程序:DATA SEGMENTSEGTAB DB 0C0H, 0F9H, 0A4H, 0B0H;定义 0F 的段码存储区DB 99H, 92H, 82H, 0F8HDB 80H, 98H, 88H, 83HDB 0C6H, 0A1H, 86H,
50、 8EHDISPMEM DB 01H, 02H, 03H, 04H, 05H, 06H;定义显示缓冲区DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1START:MOV AX, DATAMOV DS, AXMOV AL, 80HMOV DX, 20BHOUT DX, AL;8255A 初始化, A 口输出, B 口输出L1:MOV AH, 20H;预置位选信号LEA SI, DISPMEM;SI指向显示缓冲区LEA BX, SEGTAB;BX 指
51、向段码存储区L2:MOV AL, SIXLATCMP AH, 04HJNE NEXTAND AL, 7FH; 第 4位 LED 显示小数点NEXT:MOV DX, 209HOUT DX, AL; 输出段码MOV DX, 208HMOV AL, AHOUT DX, AL; 输出位选信号MOV CX, 4000; 延时LP2:LOOP LP2PUSH AXMOV AH, 01HINT 16HJNZ EXITPOP AX; 判断标准键盘上是否有键按下,若有键按下则结束程序INC SI; 修改显示缓冲区指针SHR AH, 1JNZ L2JMP L1; 修改位选信号EXIT:MOV DX, 208HMOV AL, 00HOUT DX, ALMOV DX, 209HMOV AL, 0FFHOUT DX, ALMOV AH, 4CHINT 21H; 关闭所有 LEDCODEENDSEND START实验十:键盘接口实验编制1个用键盘控制模拟电动机转动的程序,即用非编码键盘上的A和B两个键作转、停控制,并在数码显示器上显示F表示电机转动,计算机屏幕上显 示笑脸符表示电机停,按回车键结 束程序执行(笑脸符的 ASCII 码为 02H)。分析:根据题目的要求,需要不断扫描 4 4非编码键盘
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防治职业病试题及答案
- 高考总复习优化设计二轮用书物理浙江专版 第1讲 物体的平衡
- 办公楼出租委托合同协议2025年规范版
- 墨脱县气候条件
- 2025年全国小学生禁毒知识竞赛练习题库及答案(共60题)
- 初中历史填空题真题及答案
- 2025年贵阳科学素养试卷及答案
- 《儿童抗生素相关性腹泻诊断、治疗和预防专家共识》的详细解读2026
- 2025年地球概论期末试卷及答案
- 软水器合同范本
- 2025民生银行总行资产经营管理部社会招聘笔试题库带答案解析
- 公益性公墓建设项目竣工验收报告
- 2025黑龙江大兴安岭地区韩家园林业局工勤岗位人员招聘40人备考考点试题及答案解析
- 2025年陕煤澄合矿业有限公司招聘(570人)笔试备考题库附答案解析
- 2025年保密观知识竞赛题库(含参考答案)
- 2025山西朔州市两级法院司法辅助人员招聘16人笔试考试备考试题及答案解析
- 危险化学品应急救援员岗位招聘考试试卷及答案
- 物业餐饮安全协议书
- 梁截面加高加固施工方案
- 2025学年人教版小学三年级数学上册期末试卷(含答案解析)
- 第3章桩基工程课件
评论
0/150
提交评论