版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品word 名师归纳总结 - - - - - - - - - - - -试验一:简洁程序设计试验(1)编写一个32 位无符号数除法的程序,要求将存放在NUM1中的 32 位无符号数与存放在 NUM2 中的 16 位无符号数相除,结果存放在NUM3 和 NUM4中;程序流程图略;参考源程序:DATASEGMENTNUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW .NUM4 DW .DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX,DATA;数据段寄存器初始化 MOV DS,AXMOV AX, WORD P
2、TR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2MOV NUM3,AX MOV NUM4,DXMOV AH,4CH;正常返回 DOS 系统INT 21HCODEENDS END START(2)编写一个拆字程序;要求将存放在ARY 单元的 2 位十六进制数X 1X 2 拆为 X 1 和 X 2 两部分,并以0X 1 和 0X 2 的形式分别存入ARY+1和 ARY+2 单元中;程序流程图略;参考源程序:DATASEGMENT ARY DB 2AH,.,.DATAENDSCODESEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX,
3、DATAMOV DS,AXMOV SI,OFFSET ARY;取ARY 的偏移地址MOV AL,SI;取16进制数至 AL精选名师 优秀名师 - - - - - - - - - -第 22 页,共 31 页 - - - - - - - - - -MOV BL,ALAND AL,0F0H;取16进制数的高四位,即X1SHR AL,4MOV SI+1,ALMOV AL,BL;存0X 1AND AL,0FH;取16进制数的低四位,即X2MOV SI+2,AL;存0X 2MOV AH,4CHINT 21HCODEENDS END START试验二:分支程序设计试验(1)编写一个字符比较程序,比较3 个
4、无符号字节数A ,B, C 的大小,并依据比较结果对变量 K 赋值:假如 3 个数不相等,就K=0 ;假如 3 个数中有两个相等,就K=1 ;假如 3 个数都相等,就K=2 ;程序流程图略;参考源程序:DATASEGMENT;定义待比较数A 、B 、C,比较结果 K A DB 20HB DB 20H C DB 20H K DB .DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,ACMP AL,B;对 A 、B进行比较,不相等就转到COMP2JNE COMP2;相等就比较A 、CCMP AL,CJ
5、NE K1 JMP K2; A 、C不相等就 K=1; A 、C相等就 K=2COMP2:MOV BL,B CMP BL,CJE K1;对 B、 C进行比较,相等就K=1CMP AL,CJE K1;对 A 、C进行比较,相等就K=1K0:MOV K,0 JMP EXITK1:MOV K,1K2:JMP EXIT MOV K,2EXIT:MOV AH,4CHINT 21HCODEENDS END START(2)编写一个能实现以下表达式的程序:.N = .A + BA B设 A, B, C 为小于 128 的正整数;. A - B + C程序流程图略;参考源程序:A BDATASEGMENTA
6、DB 22H;定义A 、B 、C、NB DB 10HC DB 01HN DB .DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL, A CMP AL, BJG CALCUL;A小于或等于B 就 N=A+BADD AL,BJMP EXITCALCUL: SUB AL, BADC AL, CEXIT:MOV N, AL MOV AH,4CH INT 21HCODEENDSEND START试验三循环程序设计试验(1)将字符串 STRN (以 “ $结”尾)中的每一个字符均加上偶校验位,并统计有多少个
7、字符因含有奇数个“ 1而”加上了校验位;统计结果存于N单元中;程序流程图略;参考源程序:DA TASEGMENTSTRN DB What$;任意定义一个字串,以“$”结尾COUNT EQU $-STRN N DB .BUF DB COUNT DUP.DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA START:MOV AX, DATAMOV DS, AX MOV AX, DATA MOV ES, AXLEA SI, STRN LEA DI, BUF MOV CX, COUNT MOV AL, 0LP1:MOV BL, SI;逐个取字符进行判定AND BL,
8、BL;自己和自己做与运算JP NEXT;依据 PF 标志位的变化进行跳转INC ALORBL, 80H NEXT:MOV DI, BLINC SIINC DI LOOP LP1MOV N, ALMOV AH, 4CH INT 21HCODEENDSEND START(2)在 FIRST开头的一片连续的数据区中存放着100 个数据,编写一个程序,统计第1个数据 0之前的数据个数;程序流程图略;参考源程序:DA TASEGMENTFIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H;任取 9 个数做演示 COUNT EQU $-FIRSTNUM DB .DAT
9、AENDSCODESEGMENTASSUME CS:CODE, DS:DATA START:MOV AX,DATAMOV DS,AXMOV DL, 0;计数值初始为0MOV CX,COUNTMOV BX, OFFSET FIRSTLP1:MOV AL, BX;每次取一个数,与0 比较CMP AL, 00H JNE NEXTJMP EXIT;找到 0 就退出NEXT:INC DL;没找到 0 就计数值加1 INC BXLOOP LP1EXIT:MOV NUM, DLMOV AH, 4CH INT 21HCODEENDS END START试验四:子程序设计试验将BUF 开头的 10个单元中两位十
10、六进制数转换成ASCII 码,并在屏幕上显示出来;要求码型转换通过子程序HEXASC 实现,参数传送采纳寄存器传送方式;程序流程图略;参考源程序 :1 实现方法一:远过程调用DA TA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF;定义任意长度的一段BUF DA TA ENDSSTACK1 SEGMENT STACKDB 100 DUP.;设置足够深度的栈区STACK1 ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DA
11、TAMOV DS,AXMOV SI,OFFSET BUF MOV CX,COUNTAGAIN:MOV AL,SI MOV BL,AL;逐个取数SHR AL,4AND AL,0FH;先对高字节部分转换(寄存器AL传参)CALL FAR PTR HEXASC;调用子程序MOV DL,ALMOV AH,02H INT 21H;显示高字节部分对应的字符MOV AL,BLAND AL,0FH;再对低字节部分转换(寄存器AL传参)CALL FAR PTR HEXASC;调用子程序MOV DL,ALMOV AH,02H INT 21H;显示低字节部分对应的字符MOV DL,20HMOV AH,02H;显示空
12、格INT 21HINC SILOOP AGAINMOV AH,4CH INT 21HCODEENDSCODEBSEGMENTASSUME CS:CODEB HEXASCPROC FARCMP AL,09H;判定是不是数字JA HEXATOF;是字母就转到HEXATOFADD AL,30H;是数字就对应到数字的ASCII 码JMP ENDHEXHEXATOF:ADD AL,37H;是字母就对应到字母的ASCII 码ENDHEX: RET HEXASCENDP CODEBENDSEND START2 实现方法二:近过程调用DA TA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,
13、33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF;定义任意长度的一段BUF DA TA ENDSSTACK1 SEGMENT STACKDB 100 DUP.;设置足够深度的栈区STACK1 ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUF MOV CX,COUNTAGAIN:MOV AL,SI MOV BL,AL;逐个取数SHR AL,4AND AL,0FHCALL HEXASC;先对高字节部分做转换MOV DL,AL;显示高字
14、节部分对应的字符MOV AH,02H INT 21HMOV AL,BLAND AL,0FH;再对低字节部分做转换CALL HEXASCMOV DL,AL;显示低字节部分对应的字符MOV AH,02H INT 21HMOV DL,20H;显示空格MOV AH,02H INT 21HINC SI;连续循环或退出LOOP AGAINMOV AH,4CH INT 21HHEXASCPROC NEARCMP AL,09H JAHEXATOF ADDAL,30H JMP ENDHEXHEXATOF:ADD AL,37H ENDHEX: RET HEXASCENDPCODEENDS END START试验五
15、:DOS 中断调用试验(1)假如从键盘上依次输入的是一个数字和一个字母,就输出“ RIGHT ”标记后终止程序,否就输出标记“ERROR ”后转向原出错处重做;试编程实现该功能;程序流程图略;参考源程序 :DA TASEGMENTMSG DB 0AH,0DH,RIGHT,0AH,0DH,$ WRN DB 0AH,0DH,ERROR,0AH,0DH,$DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA START:MOV AX,DATAMOV DS,AXAGAIN:MOV AH,01H;等待用户输入1 个字符并显示INT 21H CMP AL,39H JA EM
16、SG CMP AL,30HJB EMSG;判定输入是否是数字,不是就报错MOV AH,01H;等待用户输入1 个字符并显示INT 21H CMP AL,A JB EMSGCMP AL,Z;判定输入是否是大写字母,不是就连续JB EXIT;判定是不是小写字母CMP AL,a JB EMSG CMP AL,zJB EXIT;不是字母就报错,是字母就转到EXITEMSG:LEA DX,WRNMOV AH,09H INT 21HJMP AGAINEXIT:MOV DX,OFFSET MSGMOV AH,09H;显示 “ RIGHT”并退出 INT 21HMOV AH,4CHINT 21HCODEEND
17、S END START( 2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字符串用回车作为终止),并按数字、字母和其它字符分类计数,然后将结果存入digit 、letter和other 3 个储备单元中,并显示结果;程序流程图略;参考源程序 :DA TASEGMENTMSG1 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 0
18、DB 50 DUP.;设置足够深的栈区DIGIT DB . LETTER DB . OTHER DB .DATAENDSSTACK1SEGMENT STACKDB 100 DUP. STACK1ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATAMOV DS,AXMOV AH,0AH;等待用户输入字符串并显示MOV DX,OFFSET BUF INT 21HMOV SI, OFFSET BUF MOV CL,SI+1MOV CH,00H MOV AL,00H MOV AH,00H MOV BH,00HAGAIN:MO
19、V BL,SI+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; ASCII 码大于等于61H 小于 7BH 就归类为 “
20、字母 ”OTH:INC AL; “其它 ”计数器加1 JMP ENDLPDIG:LET:INC AH; “数字 ”计数器加1JMP ENDLPINC BH; “字母 ”计数器加1ENDLP:INC SILOOP AGAIN;连续循环MOV DIGIT, AH;统计各类个数MOV LETTER, BH MOV OTHER, ALMOV DX, OFFSET MSG1 MOV AH,09HINT 21HMOV AL, DIGIT CALL DISP;显示 “数字 ”有多少个MOV DX, OFFSET MSG2 MOV AH,09HINT 21HMOV AL, LETTER CALL DISP;显
21、示 “字母 ”有多少个MOV DX, OFFSET MSG3 MOV AH,09HINT 21HMOV AL, OTHER CALL DISP;显示 “其它 ”有多少个MOV AH,4CH INT 21HDISPPROC NEAR;显示子程序MOV AH,00H MOV DH,0AH DIV DHMOVCH,AH ADDAL,30H MOVDL,AL MOV AH, 02H INT 21HADD CH,30HMOV DL, CH MOV AH, 02H INT 21HRETDISPENDPCODEENDS END START试验六:扩展定时器 / 计数器接口试验( 1)计数器 0工作于方式 3
22、,编写初始化程序,观看其输出 OUT0 信号的波形;修改计数初值,观看 OUT0 信号的变化情形; 硬件连接方法: 8254计数器 0的CLK0 端接规章的脉冲输入(频率自选), OUT0 接示波器的 正极;示波器负极接地;程序流程图略;参考源程序:DATA SEGMENTDB 100 DUP. DATA ENDSCODESEGMENTSTART:ASSUME CS:CODE, DS:DATAMOV AX,DATAMOV DS,AXMOV DX,20FH;写入计数器 0的掌握字MOV AL,00010110BOUT DX,ALMOV DX,20CH;写入计数器 0的计数初值MOV AL,05H
23、OUT DX,ALMOV AH,4CHINT 21HCODEENDSEND START( 2)将计数器1和计数器 0 级联起来,二者均工作于方式3,编写初始化程序,观看OUT1 和OUT0 信号的波形,说明二者的关系;修改计数初值,观看OUT0 和 OUT1 输出波形的变 化情形;硬件连接方法:8254 计数器 1的CLK1 端接规章的脉冲输入(频率自选),OUT1 接8254计数 器0的CLK0 ,计数器 0的输出 OUT0 接示波器正极;示波器负极接地;程序流程图略;参考源程序:DATASEGMENT DB 100 DUP.DATAENDSCODESEGMENTSTART:ASSUME C
24、S:CODE,DS:DATAMOV AX,DATAMOV DS,AXMOV DX,20FHMOV AL,00010110B;写入计数器0的掌握字OUT DX,ALMOV DX,20CH;写入计数器0的计数初值MOV AL,05HOUT DX,ALMOV DX,20FHMOV AL,01010110B;写入计数器1的掌握字OUT DX,ALMOV DX,20DH;写入计数器1的计数初值MOV AL,02HOUT DX,ALMOV AH,4CHINT 21HCODEENDSEND START试验七:并行输入 / 输出接口 8255A简洁编程试验(1)利用 8255A 的 B 口输出掌握两组发光二级
25、管L1,L3,L5,L7和 L2,L4,L6,L8亮灭交替变化;分析:依据题目要求,当 8255A 的 B 口输出为 01010101B55H 时,发光二极管 L1,L3,L5,L7 会被点亮,当 8255A 的 B 口输出为 10101010B 0AAH 时,发光二极管 L2,L4,L6,L8 会被点亮;因此,通过延时转变 8255A 的 B 口输出,即可实现两组发光二极管的亮灭交替变化;由于 LED 随时出于预备好的状态,因此 8255A 的 B 口可工作于方式0 输出, 其它端口未使用,无需考虑;因此,8255A 的方式掌握字为:10000000B80H ;硬件连接方法:8255A 的
26、B 口 PB0PB7 分别连接L1L8 ;程序流程图略;参考源程序:.486DATASEGMENTPORTA DW 208H;8255A 端口 A地址 PORTB DW 209H;8255A 端口 B地址 PORTC DW 20AH;8255A 端口 C地址 PORT_CTR DW 20BH;8255A 掌握端口地址DATAENDSSTACK1SEGMENT STACKDB 100 DUP. STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1 START:MOV AX,DATAMOV DS,AXMOV DX, PORT_CTR MOV
27、 AL, 10000000B OUT DX, ALMOV DX, PORTB MOV AL, 00H OUT DX, AL;8255A 初始化;掌握字;8255A 端口 B 清零, LED 初始化 全灭 LP0:MOV BL, 01010101B MOV AL, BLOUT DX, AL CALL DELAYNOT ALMOV BL, ALMOV AH, 01H;调用 BIOS 的 16H 功能判定键盘是否有输入INT 16HJNZ EXITJMP LP0EXIT:MOV AH, 4CH INT 21HDELAYPROC NEAR;延时子程序 可通过修改 NOP 指令数量转变延时时间MOV E
28、CX, 0FFFFFFFHLP2:NOPLOOPD LP2RETDELAYENDPCODEENDSEND 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 口进行掌握;分析:依据题
29、目要求,可以通过查询的方式读取8255A 的 B 口状态,并依据查询的结果给A 口送出相应数据,A 口工作在方式0 的输入状态, B 口工作在方式0 输出状态, C 口不需要考虑,所以8255A 的方式掌握字为:10010000B )硬件连接方法:( 1) 8255A 的 A 口 PA0PA7 对应连接K1K8 ;( 2) 8255A 的 B 口 PB0PB7 对应连接L1L8 ;源代码:DATASEGMENTLISTDB 01H, 03H, 07H, 0FH, 1FH, 3FH, 7FH, 0FFH DATAENDSSTACK1SEGMENT STACKDB 100 DUP. STACK1E
30、NDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1 START:MOV AX, DATAMOV DS, AXMOV DX, 20BH;8255A 初始化MOV AL, 10010000B OUT DX, ALMOV DX, 209H;8255A 的B口清零, LED 初始化 全灭 MOV AL, 00H OUT DX, ALL0:MOV DX, 208H;读8255A 的A口,获得开关状态INAL, DXMOV BL, 00H MOV CX, 8MOV SI, OFFSET LISTL1:INC BLCMP AL, SI JZFIND INC SI
31、 LOOP L1 JMP L0FIND:MOV AL, BL MOV DX, 209H OUT DX, AL CMP AL, 08H JNZ L0MOV AH, 4CH INT 21HCODEENDS END START;当前开关状态为表中所列状态之一;显示 LED 状态试验八:并行输入 / 输出接口 8255A综合应用试验( 1)利用 8254计数器 0、计数器 1和8255A的B口实现对发光二极管的定时掌握,让8个发光二极管每隔 1s从左到右依次点亮;(要求计数器1的时钟脉冲频率为250kHz );分析: 依据题目要求,需要利用8254进行定时 1s掌握,定时到后,转变8255A 的B口输
32、出;可以利用中断的方式实现,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/
33、4 s=5000D ;方式掌握字为:01110100B 74H8254计数器 0的计数初值为:N=50D ;方式掌握字为:00010100B 14H8255A 的方式掌握字:10000000B( 80H ); C口按位置位/复位掌握字:00001110B0EH 使PC7复位,答应 8254的OUT0 中断到达系统8259的IRQ3 端此外,利用中断方式实现题目要求的功能仍需要设置系统8259芯片的中断屏蔽字和系统储备器中的中断向量表(修改中断类型号为0BH 的中断向量);硬件连接方法:(1) 250kHz 脉冲输出接 8254的CLK1 , OUT1 接CLK0 , OUT0 接IRQ ;(2
34、) 8255A 的B口PB0PB7 对应连接 L1L8 ;程序流程图略;参考源程序:DATASEGMENTPORT0 DW 20CH;8254计数器 0端口地址PORT1 DW 20DH;8254计数器 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口端口地址DATAPORT_CTR DW 20BH ENDS;8255A 的掌握寄存器端口地址STACK1SEGMENT
35、STACKDB 100 DUP0 STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1START:MOV AX, DATAMOV DS, AX MOV ES, AXMOV AL, 80H; 8255初始化 , B 口方式 0输出, C口高 4位输出 MOV DX, PORT_CTROUT DX, ALMOV AL, 0EH;PC7清零,答应 8254中断到 IRQ3 OUT DX, ALMOV AL, 00H;发光二极管初始化全灭 MOV DX, PORTBOUT DX, ALMOV AX, 350BH;储存系统原有0
36、BH 号中断的中断向量至堆栈INT 21H PUSH ES PUSH BXMOV AX, SEG INTPROC MOV DS, AXMOV DX, OFFSET INTPROCMOV AX, 250BH;将程序要求的中断向量写入 INT 21HIN AL, 21H;设置 8259的IMR 寄存器,答应IRQ3 中断 AND AL, 0F7HOUT 21H, ALSTI;开中断, CPU 可以响应外部可屏蔽中断MOV DX, PORT3;8254 计数器 0初始化 MOV AL, 14HOUT DX, ALMOV DX, PORT0;计数器 0写入计数初值50D MOV AL, 50DOUT
37、DX, ALMOV DX, PORT3;8254 计数器 1初始化 MOV AL, 74HOUT DX, ALMOV DX, PORT1;计数器 1写入计数初值5000D MOV AX, 5000DOUT DX, AL MOV AL, AH OUT DX, ALMOV BH, 80H MOV AL, BH MOV DX, PORTB OUT DX, AL;BH 存放当前 8255A 的B 口输出;8255A 的B口输出WAIT0:N OP NOPNOPMOV AH, 01H INT 16HJNZ EXIT JMP WAIT0;判定键盘上是否有键按下,如有就终止程序EXIT:POP DX;复原中
38、断向量表中的原有0BH 号中断向量POP DSMOV AX, 250BHINT 21HMOV AH, 4CH INT 21HINTPROC PROC NEARMOV AL, BH ROR AL,1 MOV BH, ALMOV DX, PORTB;向8255A 的B口写出数据,点亮对应LEDOUT DX, ALMOV AL, 20H;向8259发出中断终止命令 OUT 20H, ALIRETINTPROC ENDP CODEENDSEND START(2)8255A 的A口与 8个开关相连,工作于方式 1下,要求:利用当前的开关状态通过 B口掌握L1L8 的亮或灭; A口的 /STB A选通信号
39、由按键 K 发出,每按一次 K 键,读入当前开关状态;分析:8255A 的B 口用来掌握 LED 的亮灭,可工作在方式0下; 依据题意,可以通过查询方式不断读取 8255A 的C口状态确定 K 键是否按下,也可以利用中断方式,当K 键按下时,由INTRA ( PC3)向 CPU 申请中断;当判定K 键按下后,读取8255A 的 A口状态,并通过B口显示到 LED 上;利用查询方式实现时,仅需要给定方式挑选 掌握字;利用中断方式实现时,除掌握字外仍需设定INTEA 为1,答应 INTRA 申请中断;因此, 8255A 的方式掌握字为:10110000B0B0H ;使 I NTEAPC4 置 1,
40、其掌握字为00001001B ( 09H ); 留意:利用中断方式实现时仍需要置PC7为0,使 INTRA 能到达 8259的IRQ3硬件连接与参考源程序:(1)利用查询方式实现硬件连接:1) 8255A 的A 口 PA0PA7 与K1K8 对应相连;2) 8255A 的B口 PB0PB7与L1L8 对应相连;3)按键 K接 8255A 的C口PC4;参考源程序:CODESEGMENT ASSUME CS:CODESTART:MOV AL, 0B0H; 8255A 初始化,方式掌握字10110000BMOV DX, 20BH OUT DX, ALMOV DX, 209H;LED 初始化MOV
41、AL, 00H OUT DX, ALAGAIN:MOV AH, 01H;判定运算机键盘上是否有键按下,如有终止程序 INT 16HJNZ EXITMOV DX, 20AH;读入 8255A 的C口状态 IN AL, DXTEST AL, 00010000B;判定 PC4=1 ? K 键是否按下 JNZ AGAINMOV DX, 208H;读入 8255A 的A 口状态IN AL, DXMOV DX, 209H;将A 口状态送 8255A 的B 口 OUT DX, ALJMP AGAINEXIT:MOV AH, 4CHINT 21HCODEENDS END START(2)利用中断方式实现硬件连
42、接:1) 8255A 的A 口 PA0PA7 与K1K8 对应相连;2) 8255A 的B口 PB0PB7与L1L8 对应相连;3)按键 K接 8255A 的C口PC4;4) 8255A 的C口 PC3( INTRA )接 IRQ ;参考源程序:精品word 名师归纳总结 - - - - - - - - - - - -DATASEGMENTPORTA DW 208H; 8255A 的A 口地址PORTB DW 209H; 8255A 的B 口地址PORTC DW 20AH; 8255A 的C口地址DATAPORT_CTR DW 20BH ENDS; 8255A 的掌握口地址STACK1SEGM
43、ENT STACKDB 100 DUP0 STACK1ENDSCODESEGMENTASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK1 START:MOV AX, DATAMOV DS, AX MOV ES, AXMOV DX, PORT_CTR;写入 8255A 方式掌握字 0B0HMOV AL, 0B0H OUT DX, ALMOV AL, 09H;写入 C口按位置位掌握字,PC4置“ 1”OUT DX, ALMOV AL, 0EH;写入 C口按位复位掌握字,PC7置“ 0” ,开IRQOUT DX, ALMOV AX, 350BH;储存系统原有中断号为
44、0BH 的中断向量到堆栈INT 21HPUSH ESPUSH BXMOV AX, SEG INTPROCMOV DS, AX;向0BH 号中断写入新的中断向量MOV DX, OFFSET INTPROCMOV AX, 250BHINT 21HIN AL, 21H;答应 8259 的IRQ3 中断AND AL, 0F7HOUT 21H, ALSTI;答应 CPU 响应可屏蔽中断WAIT0:MOV AH, 01H;判定是否有键按下,如有就终止程序,如无就等待INT 16HJZ WAIT0POP DX;复原系统中断向量表精选名师 优秀名师 - - - - - - - - - -第 23 页,共 31
45、 页 - - - - - - - - - -精品word 名师归纳总结 - - - - - - - - - - - -POP DSMOV AX, 250BH INT 21HMOV AH, 4CH INT 21HINTPROC PROC NEARMOV DX, PORTA;读入 8255A 端口 A 的状态(开关状态) IN AL, DXMOV DX, PORTB;从8255A 的B口输出开关状态,由对应的LED 显示OUT DX, ALMOV AL, 20H;给8259发中断终止指令 OUT 20H, ALIRET INTPROC ENDPCODEENDS END START精选名师 优秀名师
46、 - - - - - - - - - -第 28 页,共 31 页 - - - - - - - - - -试验九: LED 显示器接口试验(1)编制一个从左到右循环显示字符“ 8的”程序, 要求每个字位的停留时间约为1s,当从标准键盘上按下任意键时终止程序;分析: 依据题意要求, 试验板上的 6位8段数码管的段选信号均相同,为字符“8”的段码( 80H );为了实现从左到右循环显示且每个字位停留约1s的功能,只需要每隔一秒给位选信号赋值,选通 /断开相应的位即可;当循环显示到最右端时,延时1s再从最左端开头显示;为此,在该题中我们利用8255A 的A 口作为 6位LED 显示器的段选口(地址
47、208H ),8255A 的 B口作为 6位LED 显示器的位选口(地址209H); 8255A 的掌握字为: 10000000B ( 80H)硬件连接:(1) 8255A 的A 口PA0PA7 分别对应连接LED 显示器的段选输入ah.(2) 8255A 的B口PB0PB5 分别对应连接 LED1LED6 显示器的位选输入;程序流程图略;参考源程序:.486STACK1SEGMENT STACKDB 100 DUP0 STACK1ENDSCODESEGMENTASSUME CS:CODE, SS:STACK1START:MOV AL, 80HMOV DX, 20BH; 8255A 工作方式初
48、始化,A 口方式 0输出, B口方式 0输出OUT DX, ALMOV AL, 80H;8255A 的A 口输出字符“8”的段码 80HMOV DX, 208HOUT DX, ALL1:MOV BL, 20H;LED 显示器位选信号存放在BL 中, 20H 表示最左边一位L2:MOV AL, BL;将LED 位选信号输出到8255A 的B口MOV DX, 209HOUT DX, ALCALL DELAY;调研软件延时程序MOV AH, 01H;判定标准键盘上是否有键按下,如有就终止程序INT 16HJNZ EXITSHR BL, 1JNZ L2;LED 位选信号右移一位,选中下一位LEDJMP L1;当循环到最右边一位LED 时,重新填充BL 值,开头新一轮循环EXIT:MOV DX, 208HMOV AL, 0FFH OUT DX, AL MOV DX, 209H MOV AL, 00HOUT DX, AL;关闭全部 LEDMOV AH, 4CH INT 21HDELAYPROC NEARMOV ECX, 0FFFFFFFHLP:LOOPDLP RETDELAYENDPCODEENDS END START(2)完成多位 LED 显示器的显示, 即设计一个显示字符串1234.56 的程序, 当标准键盘上有任意键按下时终止程序;基本思想:借助动态扫描、 分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 株洲市房屋买卖合同中的合同违约调解
- 清算后期服务协议
- 小红书:教你打造小红书蓝V专业号【互联网】【蓝V运营】
- 九年级化学上册 第六单元 碳和碳的化合物 课题1 金刚石、石墨、C60教案 (新版)新人教版
- 二年级体育上册 2.2出升的太阳教案
- 2024秋八年级英语下册 Module 1 Feelings and impressions Unit 3 Language in use教案含教学反思(新版)外研版
- 2024-2025学年学年高中英语 Module2 A job worth doing教案 外研版必修5
- 2024-2025学年高中英语下学期第18周教学设计
- 2024秋八年级英语上册 Unit 7 Will people have robots教案 (新版)人教新目标版
- 2023七年级地理上册 第一章 地球和地图 第四节 地形图的判读说课稿 (新版)新人教版
- (完整版)电子科技大学微电子器件习题
- 实验室审核检查表参照模板
- 三年级上册语文课程纲要.doc
- 幼小衔接的主要内容
- 做新时代好队员竞选小队长演示PPT课件
- Linux网络管理
- 生命成长,责任担当——主题班会(共26张PPT)
- 混凝土结构连接化学螺栓锚栓计算表
- 兴趣小组活动
- 第五章预应力混凝土工程
- 危大工程台账
评论
0/150
提交评论