微机实验一到八问题详解

上传人:m**** 文档编号:74160108 上传时间:2022-04-13 格式:DOC 页数:39 大小:1.22MB
收藏 版权申诉 举报 下载
微机实验一到八问题详解_第1页
第1页 / 共39页
微机实验一到八问题详解_第2页
第2页 / 共39页
微机实验一到八问题详解_第3页
第3页 / 共39页
资源描述:

《微机实验一到八问题详解》由会员分享,可在线阅读,更多相关《微机实验一到八问题详解(39页珍藏版)》请在装配图网上搜索。

1、2013 2014学年第二学期药学院实验报告实验课程名称:微型计算机技术及应用专业班级:电子信息工程 12 组号:第一组小组成员:谭浩敏( 1205520131)润强( 1205520106)赏源( 1205520107)实验指导老师:何永玲(第一组) 实验二 汇编语言指令仿真组长:谭浩敏 组员:赏源、润强实验目的1. 学会用实验的方法验证理论,用理论来指导实验,进一步熟悉汇编语言开发环境。2. 深刻理解寻址方式的意义以及 80X86 指令的各种寻址方式。3. 深刻理解 80X86 各种指令的真正含义及功能。4. 掌握与数据有关的不同寻址方式。5. 继续熟悉实验操作软件的环境及使用方法。 实验

2、容及要求一、 在 emu8086 中仿真简单指令1. 仿真简单指令,请按要求写出程序代码及实验步骤。2. 将实验结果与理论结果进行比较,以便深入理解 80X86 指令的各种寻址方式。3. 实验过程中遇到的问题及解决办法。4. 写出心得体会及还未理解的知识点。DS=1000H,SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1350H, SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H, (11354H)=52H,(11355H)=0E7H,(126 a 4H)=9DH,(

3、126 a 5H)=16H, (21350H)=88H,(21351H)=51H.下列各指令都在此环境下执行,在下列各小题的空格中填入相应个指令的执行结 果。实验代码:MOV AX,1000HMOV DS,AX;不能直接给 DS,SS赋值,只能通过通用寄存器MOV AX,2000HMOV SS,AXMOV AX,1A2BHMOV BX,1200HMOV CX,339AHMOV BP,1200HMOV SP,1350HMOV SI,1354HMOV 0150HBX,0A5HMOV 0151HBX,3CHMOV 0152HBX,0FFHMOV 0153HBX,26HMOV SI,52HMOV 1H

4、SI,0E7HMOV 26A4H,9DHMOV 26A5H,16HMOV SS:1350H,88HMOV SS:1351H,51H; 在上面的环境下,以下一行行的运行MOV AX, 1352HMOV AX, 1352HMOV 0150H BX, CHMOV AX, 0150HBPPOP AXADD SI, CXSUB BH, 0150H BXSIINC BYTE PTR 0152H BXINC WORD PTR 0150H BXSAR BYTE PTR 0150H BX, 1SAL BYTE PTR 0150H BX, 1实验结果:(1)MOV AX,1352HAX=1352H(2)MOV A

5、X,1352HAX=26FFH(3)MOV 0150HBX,CH(11350H)= 33H ,(11351H)=3CH(4)MOV AX,0150HBPAX=5188H(5)POP AXAX= 5188H ,SP= 1352H6)ADDSI , CX(11354H)= ECH ,(11355H)= 1AHSF= 0 ,ZF= 0 ,PF= 0 ,CF= 1 ,OF= 0(7) SUB BH,0150HBXSIBH= 75H ,SF= 0 ,ZF= 0 ,PF= 0 ,CF= 1 ,OF= 0(8) INC BYTE PTR 0152HBX(11352H)=00H ,(11353H)= 26H

6、,CF= 0 ,(9) INC WORD PTR 0150HBX(11352H)= FFH ,11353H=26H ,CF=0(10) SAR BYTE PTR 0150HBX,1(11350H)=D2H ,CF=1 ,OF=0(11)SAL BYTE PTR O150HBX,1(11350H)=4AH ,CF=1 ,OF=1思考题】 指出下列指令中 源操作数和目的操作数 的寻址方式: ( 一定要注意分开写寻址方式 )1)MOV AX, 0AH (2)ADD BX, DX3)PUSH CS( 4)POP DS5)MUL BL (6)MOV D,X 1200H7) MOVSB( 8)SUB AX

7、,5BP+DI解:( 1) SRC为立即数寻址, DEST为寄存器寻址;( 2) SRC为寄存器寻址, DEST为寄存器间接寻址;( 3) SRC为寄存器寻址, DEST为隐含堆栈指针寄存器间接寻址;( 4) SRC为隐含堆栈指针寄存器间接寻址,DEST为寄存器寻址;( 5) SRC为寄存器寻址, DEST为寄存器寻址;( 6) SRC为直接寻址, DEST为寄存器寻址;( 7) SRC为寄存器间接寻址, DEST为寄存器间接寻址;( 8) SRC为基址变址相对寻址, DEST为寄存器寻址;实验心得与体会: 本次实验考察的是 8086 指令的寻址方式,我们组在实验课的时候准备不 够充分, 导致

8、当堂实验效果不明显, 不过我们在课后有一起讨论每条语句的意思, 并且在听 过老师课堂上的讲解后, 逐步地理解了这个实验, 希望在下次实验过程中做好更充分的准备, 以便在实验的过程中达到好的效果。实验三 综合程序设计第一组:谭浩敏、赏源、润强【实验目的】1. 通过简单编程来理解 80X86 指令系统2. 掌握汇编语言程序的特点及格式3. 掌握定义和使用汇编语言的常量、标示符和表达式4. 掌握汇编语言编程技巧和编程方法。【实验容 一】实验容 1:用 MOV指令实现两存字节单元容的交换代码: MOV 2035H,01HMOV 2045H,02HMOV AX,2035HMOV BX,2045HMOV

9、2035H,BXMOV 2045H,AX实验容 2:把 2060H地址开始的 40 个字节单元的容与 2080H地址开始的 40 个字节 单元容互换。代码:DATA SEGMENTDATA ENDSSTACK SEGMENTME1 DW 80H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS DATA,SS:STACK,ES:DATASTART: MOV AX,1000HMOV DS,AXMOV AX,2000HMOV ES,AXMOV DI,2060H ; 循环赋值,从偏移量 2060H 开始MOV BX,1HMOV CX,28H ; 循环次数 4

10、0 次,28H 是 16 进制LOOP1: MOV DI,BXINC BXINC DIDEC CXJNZ LOOP1MOV DI,2080HMOV BX,2080HMOV CX,8TEMP: MOV DX,BX ; 此循环用来保存被覆盖的 8 个存单元MOV ES:DI,DX ; 的数据,放在 ES段中INC DIINC BXDEC CXJNZ TEMPMOV DI,2080HMOV BX,50HMOV CX,28HLOOP2: MOV DI,BXINC BXINC DIDEC CXJNZ LOOP2; 给后 40 个存单元循环赋值,; 从偏移量 2080H 开始。MOV SI,00H ; 交

11、换 40 个字节容MOV DI,00HMOV CX,28HR: MOV BL,SI+2060HMOV BH,DI+2080HMOV DI+2080H,BLMOV SI+2060H,BHINC SIINC DIDEC CXJNZ RCODE ENDSEND实验容 3:如果 X50,转移到 TOO-HIGH,在 TOO-HIGH中将 X 显示出来 ; 如果带 符号减法 XY引起溢出,则转移到 OVERFLO,W在 OVERFLOW中将X 、Y 和 X-Y的结果显示出来 ; 否则,计算 |X-Y| , 并将结果存放在 RESULT 中 。 ( 其 中 , X,Y,RESULT均为字变量)代码:DAT

12、A SEGMENTDAI DB X = : $DAI2 DB Y = : $DAI3 DB |X-Y| = : $X DW -32768Y DW 32RESULT DW 0 DATA ENDSSTACKS SEGMENTDW 128 DUP(?)STACKS ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV AX,XCMP AX , 50 ; 比较JG TOO-HIGH; 如果(X) 大于 50, 则转向 TOO-HIGHSUB AX,YJO OVERFLOW; 溢出则转移JNS NONNEG; 无符号,则转

13、NEG AX ;X Y为正时,补码为其本身,为负时取补码刚好是它的相反数。NONNEG: MOV RESULT , AX ; 无溢出,取绝对值,并将结果存入 RESULT HLT ;暂停TOO-HIGH:MOV DX,OFFSET DAIMOVAH,09HINT21HMOV AX,X; CALL SHOW1 ; MOV AH,7 ; INT 21H MOV AX,4C00H ; INT 21H取存数到 AX 显示十进制形式 暂停退出程序SHOW1:XOR CX ,CX MOV BX ,10NX1:XOR DX,DXDIV BXOR DX,0e30HINC CX PUSH DXCMP AX,0J

14、NZ NX1NX2: POP AX INT 10HLOOP NX2RETOVERFLOW: MOVMOVINTMOV AX,X; CALL SHOW2 ; MOV AH,7 ; INT 21H MOV AX,4C00H ; INT 21HDX,OFFSET DAIAH,09H21H取存数到 AX 显示十进制形式 暂停退出程序显示 XSHOW2:XOR CX ,CX MOV BX ,10 NX3:XOR DX,DXDIV BXOR DX,0e30HINC CX PUSH DX CMP AX,0 JNZ NX3 NX4: POP AXINT 10H显示 YLOOP NX4 MOV DL,0AH M

15、OV AH,02H INT 21HMOV DX,OFFSET DAI2MOV AH,09HINT 21HMOV AX,Y;CALL SHOW3 ;MOV AH,7 ;INT 21HMOV AX,4C00H ;INT 21H取存数到 AX 显示十进制形式 暂停退出程序SHOW3:XOR CX ,CXMOV BX ,10NX5:XOR DX,DXDIV BXOR DX,0e30HINC CXPUSH DXCMP AX,0JNZ NX5NX6: POP AXINT 10HLOOP NX6MOV DL,0AHMOV AH,02HINT 21H显示 |X-Y|MOV DX,OFFSET DAI3MOV

16、AH,09HINT 21HMOV BX ,XSUB BX,YMOV X,BXMOV AX,X;CALL SHOW4 ;MOV AH,7 ;INT 21HMOV AX,4C00H ;INT 21HSHOW4:XOR CX ,CXMOV BX ,10NX7:XOR DX,DXDIV BXOR DX,0e30HINC CXPUSH DXCMP AX,0JNZ NX7NX8: POP AXINT 10HLOOP NX8取存数到 AX 显示十进制形式 暂停退出程序HLTCODE ENDSEND START【实验总结】容一和容二相对来说比较好理解,通过看一些实例,我们最终知道了应该怎么做,而容三比较复杂,

17、我们用了许多时间,不过最后经过组的学习和讨论,终于做出来了。我们都从中收获到了许多新知识。实验四 存块移动实验组长 : 谭浩敏 组员:赏源,润强一、实验目的1、熟悉实验系统的编程和使用。2、了解存的移动方法。3、加深对存储器读写的认识。二、实验容实验容 1:用汇编语言编写程序实现以下运算, 并将最终结果显示在屏幕上 假设变量 X、 Y、Z、 V均为有符号的 16 位二进制。(V-(X*Y+Z-540)/X代码:DATA SEGMENTDAI1 DB 0AH,0DH,INPUT X,Y,Z,V ORDERLY, EG:+XXXX:$DAI2 DB 0AH,0DH,TYPE IN THE NUMB

18、ER:$DAI3 DB 0AH,0DH,NUMBER X,Y,Z,V ARE : $DAI4 DB 0AH,0DH,RESULT W IS:$DAI5 DB 0AH,0DH,EXTRA IS:$BUF DB 10DB 0NUM DB 200 DUP(0)X DW 0Y DW 0Z DW 0V DW 0 W DW 2 DUP(0)DATA ENDSSTACK SEGMENT DB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACKStart:MOV AX,DATAMOV DS,AXMOV DX,OFFSET DAI1MO

19、V AH,09H INT 21HINPUT: MOV CH,04H MOV DI,OFFSET XDU04: MOV DX,OFFSET DAI2 MOV AH,09H INT 21HMOV DX,OFFSET BUFMOV AH,0AHINT 21HMOV CL,BUF1DEC CLMOV AX,0MOV SI,3H1: MOV BX,10 MUL BXMOV BL,BUFSISUB BL,30H ADD AX,BX INC SIDEC CLJNZ H1CMP BUF2,- JNE NONEGX NEG AXNONEGX: MOV DI,AXINC DIINC DIDEC CHJNZ DU0

20、4MOV DX,OFFSET DAI3MOV AH,09HINT 21HMOV AX,XCALL SHOWMOV DL,MOV AH,02HINT 21HMOV AX,YCALL SHOWMOV DL,MOV AH,02HINT 21HMOV AX,ZCALL SHOWMOV DL,MOV AH,02HINT 21HMOV AX,VCALL SHOWMOV AX,XIMUL YMOV CX,AXMOV B X,DXMOV A X,ZCWDADD CX,AXADC BX,DXSUB CX,540SBB BX,0MOV A X,VCWDSUB AX,CX SBB DX,BXIDIV XMOV W,

21、AXMOV W+2,DXMOV DX,OFFSET DAI4MOV AH,09HINT 21HMOV AX,WCALL SHOWMOV DX,OFFSET DAI5MOV AH,09HINT 21HMOV AX,W+2CALL SHOWMOV AH,4CHINT 21HSHOW:CMP AX,0JG LOOP1PUSH AXMOV DL,-MOV AH,02HINT 21HPOP AXNEG AXLOOP1: XOR CX,CX MOV BX,10Q0:XOR DX,DXDIV BXOR DX,0E30H PUSH DXINC CXCMP AX,0JNE Q0Q1:POP AXINT 10HL

22、OOP Q1RETCODE ENDSEND START三、实验体会 这次实验的难点主要在于各个数的输入与输出,汇编的数字输入要考虑很多问题,比 如有符号数与无符号数,这对于不熟悉汇编的我们相对较难。实验五 循环程序设计组长:谭浩敏 组员:赏源、润强实验目的】:1. 学会思考程序的不足,并找出改进办法2. 熟悉使用 DOS和 BIOS功能调用。3掌握汇编语言循环程序的编写。实验容】:1. “第 3 章(3)汇编程序设计 .ppt ”中的作业。2. 参考“第 3章( 3)汇编程序设计 .ppt ”关于排序的程序并完善和修改完 成如下功能程序:能通过键盘随机地输入几个数据 (16 位有符号数 ) ,

23、然后进行 从小到大进行排序,最后结果显示在屏幕上。DATA SEGMENTDAI1 DB 0AH,0DH,Please type in the number:$DAI2 DB 0AH,0DH, The sort is:,0AH,0DH,$BUF DB 10DB 0NUMDB 200 DUP(0)buf1DW 10 dup(0)N EQU 4DATA ENDSSTACK SEGMENTDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACKStart:MOV AX,DATAMOV DS,AXINPUT: MOV CH,N

24、MOV DI,OFFSET buf1DU04: MOV DX,OFFSET DAI1MOV AH,09HINT 21HMOV DX,OFFSET BUF ;键盘输入四个数MOV AH,0AHINT 21HMOV CL,BUF1DEC CLMOV AX,0MOV SI,3H1: MOV BX,10MUL BXMOV BL,BUFSISUB BL,30HADD AX,BXINC SIDEC CLJNZ H1CMP BUF2,+JZ NONEGXNEG AXNONEGX: MOV DI,AXINC DIINC DIDEC CHJNZ DU04 ;开始从小到大排序MOV CX,NDEC CXLOOP1

25、: MOV DX,CXMOV BX,0LOOP2: MOV AX,BUF1BX CMP AX,BUF1BX+2 JLE LXCHG AX,BUF1BX+2 MOV BUF1BX,AXL: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1; 完成排序 MOV DX,OFFSET DAI2 MOV AH,09H INT 21H MOV DI,0 MOV CX,NA:push axpush dxpush bxpush cxMOV AX,BUF1DICALL SHOW pop cxc: MOV DL, MOV AH,2 INT 21H pop bxpop d

26、xpop bxINC DIINC DILOOP Aexit: MOV AH,4CHINT 21HSHOW:CMP AX,0 JG L1PUSH AX MOV DL,-MOV AH,02HINT 21HPOP AXNEG AXL1: XOR CX,CXMOV BX,10Q0:XOR DX,DX DIV BX OR DX,0E30H PUSH DX INC CX CMP AX,0 JNZ Q0Q1:POP AXINT 10HLOOP Q1RETb:inc cxjmp cCODE ENDSEND START3. (选做)权限管理:通过键盘输入六位数字, 要求屏幕上显示的全都是 “* 号,只有知道密码

27、的人才能看到刚刚输入的六个数字。 ( 提示:该程序实现的功 能类似银行里的存折密码管理系统 ) 。data segmentdai1 db =please input your psssword:,$dai2 db 0ah,0dh,=your password is right!$dai3 db 0ah,0dh,=your password is wrong!$dai4 db 0ah,0dh,=please input numbers!,not words!$buf1 db 6 dup(0)password db 123456data ends stack segment dw 100 dup(

28、0) stack ends code segmentassume cs:code,ss:stack,ds:datastart:mov ax,datamov ds,ax;= 完成密码的输入,将密码存入数组 buf1=lea dx,dai1mov ah,09hint 21hmov cx,6mov di,0a: mov ah,08h ; 循环输入六次密码 ,调用八号无回显输入功能 int 21hmov buf1di,almov dl,2ah ;显示* 号mov ah,02hint 21hinc diloop a ;= 检查是否有出现非数字输入的错误 =; 只要输入的字符的 ascii 的值不再 30

29、39 之间就提示错误 mov cx,6mov di,0c: cmp buf1di,30hjb Notnumberscmp buf1di,39hja Notnumbersinc diloop c;= 进行数字密码的匹对 = mov cx,6mov di,0mov si,0b:mov ah,buf1simov al,passworddicmp ah,aljne wrong ; 一旦匹配错误马上提示输入错误,转到 exit inc diinc siloop bjmp right;= 显示错误输入错误信息、以及正确信息 = wrong:lea dx,dai3mov ah,09hint 21h jmp

30、exitright:lea dx,dai2mov ah,09hint 21h jmp exitNotnumbers:lea dx,dai4mov ah,09h int 21h jmp exitexit:mov ah,4ch int 21hcode endsend start 初始密码为: 123456实验六存储器扩展实验一、实验要求利用 PROTEUS平台, 进行存储器扩展。要求按照图 6-1 画图,并编写程序,实现存储器 的写操作和读操作。要求从头到未组织一遍,包括建立asm 文件,建立 DSN文件,生成 EXE文件(参阅本册实验指导 P1520 页容)。二、实验目的1、熟练掌握 Prote

31、us 软件的使用。2、理解存储器扩展原理及编程技巧。3、加深对存储器读写的理解。三、实验容【实验容 1】在 Proteus 环境中完成程序仿真: 程序要求把存中一数据区 (称为源数据块) 传送到存另一 数据区(称为目的数据块) 。源数据块和目的数据块在存贮中可能有三种情况, 如下图所示。 当源数据块首址大于目的块首址时, 从数据块首地址开始传送数据。 当源数据块首址小于目 的块首址时,从数据块末址开始传送数据。 ( 这是为什么 ?)答:当源数据块首址小于目的块首址时,为防止数据段过长,超出源数据块首址和目 的块首址之间的差值, 造成数据传输过程中使源数据端的部分数据被改变, 所以从源数据块 末

32、址开始传输。步骤 1:存为“存块移动 .DSN”在 Proteus 中打开一个空白设计文档,完成如图 6-1 的原理图制作,保步骤 2:在 emu8086中编程,生成 exe 文件,存为 memory.exeCODE SEGMENTASSUME CS:CODESTART:MOV AX,0MOV DS,AXMOV SI,1000HMOV CX,100MOV AL,1PU_IN: MOV SI,AL ; 先存入 1000H开始的 100个字节数据为 1到 100 INC ALINC SILOOP PU_INMOV CX,100MOV SI,1000HMOV DI,1100H ;FADR: MOV

33、AL,SIMOV DI,ALINC SIINC DIDEC CXJNE FADRJMP $CODE ENDSEND START步骤 3: Proteus 仿真3、实验报告要求:(1)说说程序在对那些存储器单元(物理地址表示)进行移动数据,以及 整个程序的功能是什么 ?答:程序在对 1000H-1063H 存储单元进行移动数据,整个程序的功能是 对1000H-1063H 这 100个存储单元从 1 开始赋值到 100,然后把这 100个 存储单元的数据移动到 1100H 1163H 这 100 个存储单元。(2)修改参考程序,完成将地址从 2300H单元开始的 1000 个存储单元的数 据(数据

34、从 100 到 1100之间从小到大顺序排列。 请回答 ,这一千个存储单元最 终存放了 100 到哪个数据之间的数据?) 移动到 2000H单元开始的存储区存放功能 答:这一千个存储单元最终放了 100-255 之间的数据,之后又从 0-255 从小到 大排序。因为是以字节定义的,一个字节最大只为 255.( 3)把这些程序放在 emu8086中去远行,会有什么效果?对比一下这两个软件。可以看出,用 protues 观察存情况比 emu8086的围大,而且方便。【实验容 2】1. 请照着图 5-1 存储器奇偶存储体扩展图画好图。在 8086 芯片中编程,其代码如下:ORG 0100HMOV C

35、X,0064H ;循环 100 次MOV DX,0000H ;置初值MOV BX,8001H ;MOV AX,0000HMOV DS,AX ;DS 置零SIM:MOV BX,DLINC DLINC BXLOOP SIMINT 3H ; 停止在 INT 3H 运行的截图如下:回答如下问题:(1)两片 6264 的片选信号( CE和 CS)是如何产生的?他们的地址围是多 少?答:CE和 CS是 6264的片选端,低电平有效,当 8086 地址总线输入地址值符合 条件时,就会使译码器从 Y0 输入 CE 信号,其地址围为: 8000H0BFFFH(00000 111B(2)他们的数据线为何连接不同?

36、答:因为 8086 在访问外存是有一个特性,当 AD0=0时,访问偶地址单元,数据 从总线低八位传输;当 AD0=1(BHE=0时) ,访问奇地址单元,数据从总线的高八 位传输。3)地址线为何不直接与 CPU的 AD0相连?答: AD0是片选端,作为 8086 访问奇偶地址单元的判别端(4)图 5-1 中 6264 的外部地址从 8000H开始,编程时应该怎么写 ?此时仿 真时 U4 O7引脚为什么出现高电平代码如下:ORG 0100HMOV CX,0064H ;循环 100 次MOV DX,0000H ;置初值MOV BX,8001H ;MOV AX,0000HMOV DS,AX ;DS 置

37、零SIM:MOV BX,DLINC DLINC BXLOOP SIMINT 3H ; 停止在 INT 3HU4 O7端属于使能端,当它为高电平时才能正常工作(5)如果 6264 的外部地址从 C000H开始,图中应作哪些修改? 答:若外部地址从 C000H开始,则 A15A16A17A18为1100,对 CBA=111111B=7 ,所以图中芯片 74LS138 中的输出端口应接在 Y7.实验七 8255 并行 I/O 扩展实验(一)一、实验要求利用8255 可编程并行口芯片,实现输入、输出实验,实验中用 8255PA 口作读取开关状态输入,8255PB 口作控制发光二极管输出、实验目的1、了

38、解 8255 芯片结构及编程方法。2、了解 8255 输入、输出实验方法。三、实验电路及连线图 6-1 8255 并行 I/O 扩展实验 Proteus 实验电路四、实验说明1、8255A 芯片简介: 8255A可编程外围接口芯片是 INTEL 公司生产的通用并行接口芯片, 它具有 A、B、C三个并行接口,用 +5V 单电源供电,能在以下三种方式下工作:方式 0:基本输入 / 输出方式方式 l :选通输入 / 输出方式方式 2:双向选通工作方式2、使 8255A端口 A工作在方式 0 并作为输入口,读取 Kl-K8 个开关量, PB口工作在方 式 0 作为输出口。五、实验程序流程图开始初始化

39、8255,设置工作方式读 PA 口 置 PB 口图 6-2 实验程序流程图 其程序代码为: CODE SEGMENT控制端口地址 端口 A 地址ASSUME CS:CODEIOCON EQU 8006H IOA EQU 8000H ;IOB EQU 8002H ; 端口 B 地址IOC EQU 8004H ; 端口 C 地址START:MOV AL,90H ; 设置 A口为输入, B口为输出, 10010000B MOV DX,IOCONOUT DX,ALNOP ; 空指令,用于延时STAR1:NOPNOPMOV AL,0MOV DX,IOAIN AL,DX ;将 A口的状态存入 AL 之中N

40、OPNOPMOV DX,IOBOUT DX,AL ; 将 AL的状态输出到 IOB 口中JMP STAR1CODE ENDSEND START六、思考题(1) 如果使8255 的A口为输出, B口为输入,应该怎样修改程序? 答:代码修改:将代码中的第 8行MOV AL,90H改为MOV AL,82H;第16行改为MOV DX,IOB第; 20行代码改为 MOV DX,IOA即可 电路修改:将口和口的电路元件互换即可。(2) 如果修改 8255的地址为 6000H60006H,应如何修改电路和程序? 答:电路图修改如下:代码修改只需修改第 03行第06行即可,其余不用修改: 03. IOCON

41、EQU 6006H 04. IOA EQU 6000H 05. IOB EQU 6002H06. IOC EQU 6004H(3) 如何修改程序,使得显示灯不需要拨动,也能自动亮灭? 其代码如下:STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODEIOCON EQU 8006HIOA EQU 8000HIOB EQU 8002HIOC EQU 8004HSTART:MOV AL,80H ; 设置 A口为输出, B口为输出MOV DX,IOCON ; 定义 8255工作方式OUT DX,ALMOV DX,IO

42、BSTAR1:MOV AL,0OUT DX,ALCALL DALLYMOV AL,0FFHMOV DX,IOBOUT DX,AL ;将 AL的状态输出到 IOB口中JMP STAR1DALLY PROC NEAR ; 软件延时子程序PUSH CXPUSH AXMOV CX,0FHD1: MOV AX,0FH ; 该值不能太大,否则在 proteus 中看结果很慢 D2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDPCODE ENDEND START(4)流水灯显示实验。编写程序,使 8255 的A 口和 B 口均为输出,实现 16 位数据灯的相对循环

43、显示。电路图修改如下:其代码修改如下:IOY0 EQU 8000H ;#MY8255AEQUIOY0+00H*2;8255MY8255BEQUIOY0+01H*2;8255MY8255CEQUIOY0+02H*2;8255MY8255_MODE EQU IOY0+03H*2 ;8255对应 8255的片选 IOY0端口地址 的A口地址 的B口地址 的C口地址 的控制寄存器地址STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENTLA DB 0LB DB 0DATA ENDS定义数据变量CODE SEGMENTASSUME CS:COD

44、E,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODEMOV AL,80H ;OUT DX,ALMOV DX,MY8255_AMOV AL,0FFHOUT DX,ALMOV DX,MY8255_BMOV AL,0FFHOUT DX,ALLOOP3:MOV LB,0FEHMOV CX,8LOOP1:MOV AL,LBMOV DX,MY8255_BOUT DX,ALCALL DALLYROL LB,1 ;LOOP LOOP1MOV AL,0FFHMOV DX,MY8255_B OUT DX,AL ;B定义 8255工作方式工作方式 0,A口和

45、B口为输出写A口发出的起始数据写B口发出的起始数据将 B口起始数据左移再写入 B口全暗MOV LA,0FEHMOV CX,8LOOP2:MOV AL,LAMOV DX,MY8255_AOUT DX,ALCALL DALLYROL LA,1LOOP LOOP2 ; 跳回继续循环全暗MOV AL,0FFH;AMOV DX,MY8255_AOUT DX,ALJMP LOOP3QUIT: MOV AX,4C00H ; 结束程序退出INT 21HDALLY PROC NEAR ; 软件延时子程序PUSH CXPUSH AXMOV CX,0FFHD1: MOV AX,0FFH ; 该值不能太大,否则在 p

46、roteus 中看结果很慢D2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDPCODE ENDSEND START(5) 实验室检查问题提问: 灯为什么会亮?怎么亮的?开关开的时候对应 的灯是亮还是灭?为什么 B口会随着 A口变化而变化?答:如图 LED灯是共阳极的,另一端只要是低电平,灯就会亮。开关开的时 候,对应的灯是亮的。由程序可以知道, A口为输入, B口为输出,输入控制 输出,所以 B口会随 A口变化而变化。实验八 8255 并口控制器应用实验(二)一、实验要求 流水灯显示实验。编写程序,使 8255 的A 口和 B 口均为输出,实现 16

47、 位 数据灯的相对循环显示。二、实验目的(1) 掌握 8255 的工作方式及应用编程。(2) 掌握 8255 的典型应用电路接法。三、实验电路及连线参考图 6-1设置正确的连线电路图。四、实验说明及程序流程首先分别向 A 口和B 口写入7FH 和FEH,然后分别将该数右移和左移一位, 再送到端口上,这样循环下去。 从而实现流水灯的显示。 参考实验程序流程如图 7-1 所示。图7-1 8255 并口应用实验 (2) 参考程序流程图五、思考题(1)分别向 A 口和B 口写入 7FH 和FEH,为什么要写入这两个数,其他的数字 可以吗?如果输入其他的数字,会出现什么现象呢?答: A口的7FH=011

48、1 1111,即第一个灯亮,其他灯灭, B口的FEH=1111 1110,即 最后一个灯亮,其他灯灭。可以输入其他数字,数字不一样,相对位置的灯亮灭 情况也不一样。(2)如果要求两组灯从中间开始显示,又如何修改程序?IOY0 EQU 8000H ;#对应 8255的片选 IOY0端口地址MY8255_AEQUIOY0+00H*2;8255的A口地址MY8255_BEQUIOY0+01H*2;8255的B口地址MY8255_CEQUIOY0+02H*2;8255的C口地址MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址STACK1 SEGMENT STACK DW

49、 256 DUP(?)STACK1 ENDS定义数据变量DATA SEGMENTLA DB 0LB DB 0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODEMOV AL,80H ;OUT DX,ALMOV DX,MY8255_AMOV AL,0FEHOUT DX,ALMOV LA,ALMOV DX,MY8255_BMOV AL,7FHOUT DX,ALMOV LB,ALLOOP1:MOV AL,LA ;AROL AL,1MOV LA,ALMOV DX,MY8255_A

50、OUT DX,ALMOV AL,LB ;BROR AL,1MOV LB,ALMOV DX,MY8255_BOUT DX,ALCALL DALLYJMP LOOP1QUIT: MOV AX,4C00HINT 21HDALLY PROC NEARPUSH CXPUSH AX定义 8255工作方式工作方式 0,A口和 B口为输出写A口发出的起始数据写 B口发出的起始数据口的灯从中间 ( 右八个 ) 往右移口的灯从中间 ( 左八个 ) 往左移结束程序退出软件延时子程序MOV CX,0FFHD1: MOV AX,0FFH ; 该值不能太大,否则在 proteus 中看结果很慢 D2: DEC AXJNZ

51、 D2LOOP D1POP AXPOP CXRETDALLY ENDPCODE ENDSEND START(3)如果要求每个灯亮的时间为1S, 应该怎样修改程序?答: DALLY PROC NEAR; 软件延时子程序PUSH CXPUSH AXMOV CX,0FFHD1: MOV AX,0FFH ; 该值不能太大,否则在 proteus 中看结果很慢D2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDP根据延时函数的计算公式, 2*AX*CX=10000 00 000us=1s,设置 AX,CX的值即可 如果计算的结果不足 1s, 可以写多一个循环,不

52、过要参考三重循环的计算公式, 设置AX,CX的值。(4)可以按同时两个灯的移动规律显示吗?可以的话,应如何修改程序? 答:可以,对 AB口初始化时,先让两个灯亮,再进行移位就可以实现两个灯移 动了。例如 0011 1111=3FH实验九可编程定时 / 计数器 8253 实验一、 实验要求利用 8086 外接 8253 可编程定时 / 计数器,可以实现方波的产生。二、实验目的1、学习 8086 与 8253 的连接方法。2、学习 8253 的控制方法。3、掌握 8253定时器 / 计数器的工作方式和编程原理三、实验电路及连线图 8-1 8253 方波发生器实验 Proteus 实验电路四、实验说

53、明8253 芯片介绍8253 是一种可编程定时 / 计数器,有三个十六位计数器,其计数频率围为0-2MHz,用+5V单电源供电。8253 的功能用途:延时中断 实时时钟可编程频率发生器数字单稳事件计数器复杂的电机控制器二进制倍频器8253 的六种工作方式:方式0:计数结束中断方式 3:方波频率发生器方式 l:可编程频率发生方式 4:软件触发的选通信号方式 2:频率发生器方式 5:硬件触发的选通信号五、实验程序流程图图 8-2 8253 方波发生器实验程序流程图实验代码为:CODE SEGMENTASSUME CS:CODETCON0 EQU 0A000HTCON1 EQU 0A002HTCON

54、2 EQU 0A004HTCONT EQU 0A006HSTART: MOV DX,TCONTMOV AL,16HOUT DX,ALMOV DX,TCON0MOV AX,20OUT DX,ALJMP $CODE ENDSEND START六、实验步骤1、参照图 8-1 设置正确的实验电路,在 proteus 中完成原理图的绘制。2、参考图 8-2 的流程,编写产生方波的程序。3、在 proteus 中仿真检查验证结果。注意: clk 输入端是放置一个波形发生器, ,要设置他的参数,2.out 端和 clk 端通过示波器观察波形,示波器是3. 仿真开始后在 debug 菜单中选择示波器观察信号七

55、、思考题:1、8253的片选信号地址为多少?答:片选信号地址围为 0A000H-0AFFFH在, 图中,我们设置为 0A000H。2、如果修改输入频率,如何保持输出不变?怎样可以输出其他频率的方波 信号呢?如果输入频率为 18.432KHz,输出方波信号的频率围是多大?答:( 1)修改输入频率,若要保持输出不变,要改变其计数器的计数 值(2)若要输出其他频率的方波,只需保持输入频率的方波不变,改变计算值即可,也满足公式 fi fo 计数值 ;(3)若输入的频率为 f=18.432KHz,则输出频率应为1/f* 计数周期数( 1-65536 )3、能否与 8255 实验联系起来,对流水灯实现精确的定时控制呢?本实验结 果如果用 led 灯的显示验证, 应怎样添加 led 灯,实验结果又如何体现? 答:如

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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