微机原理实验报告

计算机学院微机接口实验报告

专业:计算机科学与技术

班级:

姓名:

学号:

实验一  汇编语言程序设计实验

一、  实验目的

 熟悉汇编语言程序设计及TD-PITE80X86实验环境的使用。

二、  实验设备

PC机一台,TD-PITE实验装置或TD-PITC实验装置一套。

三、  实验内容

在数据段定义10个无符号数据,求出其中的最大和最小值,并显示。

四、 实验步骤

(1)完成汇编程序格式,编写实验程序。

(2)编译、链接无误后装入系统。

(3)先运行程序,待程序运行停止。

(4)通过键入D命令查看程序运行的结果。

(5)可以反复测试几组数据,观察结果,验证程序的正确性。

五、汇编程序:

DATA SEGMENT

       ARRY1 DB 24H,0F7H,82H,01H,0BAH,42H,98H,0BFH,78H,92H

       MAX DB ?

       MIN DB ?

DATA ENDS

SSTACK SEGMENT STACK

       DB 256 DUP(?)

SSTACK ENDS

CODE SEGMENT

       ASSUME CS:CODE,DS:DATA,SS:SSTACK

START:

       MOV AX,DATA

       MOV DS,AX

       MOV CX,10

       MOV AL,ARRY1

       MOV BL,ARRY1

       XOR SI,SI

       INC SI

       DEC CX

LOOPS:

       MOV DL,[ARRY1+SI]

       CMP AL,DL

       JB LARG

       CMP BL,DL

       JA SMA

       JMP NEXT

LARG:

       MOV AL,DL

       JMP NEXT

SMA:

       MOV BL,DL

       JMP NEXT

NEXT:

       INC SI

       LOOP LOOPS

       MOV MAX,AL

       MOV MIN,BL

       MOV AX,4C00H

       INT 21H

CODE ENDS

       END START

实验二   8259中断控制实验

一、  实验目的

1. 掌握8259中断控制器的工作原理。

2. 学习8259的应用编程方法。

3. 掌握8259级联方式的使用方法。

二、  实验设备

PC机一台,TD-PITE实验装置或TD-PITC实验装置一套。

三、 实验内容:

单次脉冲和主片IR6、IR7相连,实现按动KK1+屏幕显示字符串,按动KK2+屏幕显示字符。

四、实验步骤

(1)连接实验线路。

(2)编写实验程序,经编译、链接无误后装入系统。

(3)运行程序,重复按单次脉冲开关KK1+与KK2+,显示屏会显示相应字符或字符串,说明响应了中断。

五、汇编程序:

SSTACK SEGMENT STACK

              DW 32 DUP(?)

SSTACK ENDS

DATA SEGMENT

       BUF DB 'THIS IS MIR7 $'

DATA ENDS

CODE         SEGMENT

            ASSUME CS:CODE

START: PUSH DS

              XOR AX,AX

              MOV DS,AX                                                                                                                                      

              MOV DX,OFFSET MIR7                                

              MOV AX,SEG MIR7                               

              MOV DS:38H,DL                      

              MOV DS:39H,DH

              MOV DS:3AH,AL

              MOV DS:3BH,AH

              MOV DX,OFFSET MIR6

              MOV AX,SEG MIR6

              MOV DS:3CH,DL

              MOV DS:3DH,DH

              MOV DS:3EH,AL

              MOV DS:3FH,AH

             

             

              CLI

              POP DS

              MOV AL,11H              

              OUT 20H,AL

        NOP

        MOV AL,08H

        OUT 21H,AL

        NOP

        MOV AL,04H

        OUT 21H,AL

        NOP

        MOV AL,01H

        OUT 21H,AL

        NOP

       

        MOV AL,3FH

        OUT 21H,AL

        NOP

       

              STI

AA1:             NOP

              JMP AA1

             

MIR6:

              STI

              PUSH AX

              PUSH DX

              MOV DL,36H

              MOV AH,02H

              INT 21H

              MOV AL,20H

              OUT 20H,AL

              NOP

              POP AX

              POP DX

              IRET

                    

MIR7:     STI

              ;CALL DELAY

             

        PUSH AX

        PUSH DX

        

        MOV AX,SEG DATA

        MOV DS,AX

        MOV DX,OFFSET BUF

        MOV AH,09H

        INT 21H

        MOV AL,20H

        OUT 20H,AL

        NOP

        POP AX

        POP BX                              

              IRET

CODE            ENDS

              END  START

六、实验遇到问题及解决:

1、未遇到使实验失败型错误。但有小的有疑问处。在给中断矢量赋值时未用在地址处用格式“段偏移:【地址】”,而是用“段偏移:地址”,猜测是因为有了段偏移前缀,所以默认为后面十六进制数作为地址解析,而不是数据。

2、根据程序标号所示应该是IR6触发的中断显示字符,IR7显示字符串,但是由于前面中断矢量赋值反了,所以显示方式正好反过来了。

实验三  8255并行接口实验

一、  实验目的

1.  学习并掌握8255的工作方式及其应用。

2.  掌握8255典型应用电路的接法。

二、  实验设备

PC机一台,TD-PITE实验装置或TD-PITC实验装置一套。

三、  实验内容

 流水灯显示实验。编写程序,使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。

四、  实验原理

图4.1  8255内部结构及外部引脚图

并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图4. 1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图4. 2所示。

图4. 2  8255控制字格式

8255实验单元电路图如图4. 3所示:

图4. 3  8255实验单元电路图

五、  实验步骤

流水灯显示实验

使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。实验接线图如图4. 5所示。实验步骤如下所述:

(1)按图4. 5连接实验线路图。

(2)编写实验程序,经编译、链接无误后装入系统。

(3)运行程序,观察LED灯的显示,验证程序功能。

(4)自己改变流水灯的方式,编写程序。

图4. 5  8255流水灯实验接线图

六、汇编程序:

SSTACK SEGMENT STACK

              DW 32 DUP(?)

SSTACK ENDS

CODE         SEGMENT

            ASSUME CS:CODE

           

DELAY PROC

       PUSH BX

       PUSH CX

       MOV BX,01H

DELAY1:

       XOR CX,CX

DELAY2:

       LOOP DELAY2

       DEC BX

       JNZ DELAY1

       POP CX

       POP BX

       RET

DELAY ENDP    

           

START:

       MOV AL,80H

       MOV DX,0606H

       OUT DX,AL

AGAIN:

       MOV AH,01H

       MOV AL,80H

      

       MOV CX,08H

LOOP1:

       MOV DX,0600H

       OUT DX,AL

       CALL DELAY

       MOV DX,0602H

       XCHG AH,AL

       OUT DX,AL

       CALL DELAY

       XCHG AH,AL

       ROR AL,01H

       ROL AH,01H

       LOOP LOOP1

JMP AGAIN                

CODE            ENDS

              END  START

七、实验遇到问题及解决:

1、由于8255上的CS引脚接到了系统总线的IOY1引脚,所以导致寻址错误,灯不亮,将IOY0引脚接到8255的CS引脚上,问题解决。

2、DELAY子程序编译错误,开始时DELAY子程序放在了程序段的最后,后来改在主程序之前,问题解决。另外,将DELAY子程序的循环次数减少,使延迟时间缩短。

实验三  8254定时/计数器应用实验

一、  实验目的

1. 掌握8254的工作方式及应用编程。

2. 掌握8254典型应用电路的接法。

二、  实验设备

PC机一台,TD-PITE实验装置或TD-PITC实验装置一套,示波器一台。

三、  实验内容

计数应用实验。编写程序,应用8254的计数功能,将系统的1MHz时钟分频为1Hz,并接到LED灯上,使其亮0.5秒,灭0.5秒,并在每次灯亮时屏幕上显示一个字符。

四、  实验原理

8254是Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更优良的性能。8254具有以下基本功能:

(1)有3个独立的16位计数器。

(2)每个计数器可按二进制或十进制(BCD)计数。

(3)每个计数器可编程工作于6种不同工作方式。

(4)8254每个计数器允许的最高计数频率为10MHz(8253为2MHz)。

(5)8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。

(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为:

n=fCLKi÷fOUTi其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。

图3.1是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。8254的工作方式如下述:

(1)方式0:计数到0结束输出正跃变信号方式。

(2)方式1:硬件可重触发单稳方式。

(3)方式2:频率发生器方式。 

(4)方式3:方波发生器。

(5)方式4:软件触发选通方式。  

(6)方式5:硬件触发选通方式。

图3.1  8254的内部接口和引脚

8254的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。控制字格式如表3.1—3.3所示。

表3.1  8254的方式控制字格式

表3.2  8254读出控制字格式

表3.3 8254状态字格式

8254实验单元电路图如下图所示:

图3.2  8254实验电路原理图

五、  实验步骤

图3.3  8254计数应用实验接线图

定时应用实验:

利用8254的2个计数器T0、T1,将系统主时钟1MHZ分频成1HZ(可用LED灯观察)。

实验步骤:

1.参考图3.3,自行修改实验电路。

2.编写实验程序,经编译、链接无误后装入系统。

3.运行程序,观察实验现象。

4.改变计数值,验证8254的定时功能。

六、汇编程序:

SSTACK  SEGMENT STACK

        DW 32 DUP(?)

SSTACK  ENDS

CODE        SEGMENT

        ASSUME CS:CODE, SS:SSTACK

START:

    MOV DX,06C6H

    MOV AL,01110111B

    OUT DX,AL

    MOV DX,06C2H

    MOV AX,1000H

    OUT DX,AL

    MOV AL,AH

    OUT DX,AL

   

    MOV DX,06C6H

    MOV AL,00110111B

    OUT DX,AL

    MOV DX,06C0H

    MOV AX,1000H

    OUT DX,AL

    MOV AL,AH

    OUT DX,AL

AGAIN: 

    MOV DX,06C0H

CHECK:

    IN AL,DX

    JNZ CHECK

   

    MOV DL,'T'

    MOV AH,02H

    INT 21H

    JMP AGAIN

CODE        ENDS

        END  START

七、实验遇到问题及解决:

1、实验箱串口通讯不通,换实验箱。

2、检查到汇编程序循环方式不对,应该不停地循环检测计数器0值是否为0,即使检测到一次,执行完后续屏幕打印字符的命令后也要继续循环,因此修正汇编程序。

3、LED灯持续亮,没有亮暗变换过程。最开始设置的计数器工作方式为2,但是方式2工作时,只有最后一千分之一秒时间输出为低电平,眼睛分辨不清。因此,至少要让其中连接LED灯的那个计数器的工作方式设置为方式3(或者两个都设置),是输出为方波。问题解决。

 

第二篇:微机原理实验报告四

微型计算机原理与接口技术

实验报告

一、    实验内容

实验4 循环结构、子程序结构的设计

实验题目 编程实现对1~50 累加求和;编写统计X 数据(AL)中的“1”

的个数子程序,并编写主程序调用;编程实现代码转换程序,实现十进制到

十六进制的转换,并显示输出。

内容提要 掌握循环程序的设计,观察循环计数器的变化;掌握子程序的设

计,观察IP、SP 的变化。

二、    实验的源代码(.asm文件内容)

第一部分:编程实现对1~50 累加求和  程序如下:

DATAS SEGMENT

SUM   DW  ?

DATAS ENDS

CODE SEGMENT

     ASSUME CS:CODE,DS:DATAS

START:MOV AX,DATAS

      MOV DS,AX

      MOV AX,0

      MOV CX,50

AGAIN:ADD AX,CX

      DEC CX

      JNZ AGAIN

      MOV SUM,AX

       MOV AH,4CH

       INT 21H

CODE ENDS

 END START

第二部分:编写统计X 数据(AL)中的“1”的个数子程序,并编写主程序调用程序如下:

DATAS SEGMENT

X     DB 31H

RESULT DW ?

DATAS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS

   

    MAIN PROC FAR

START:PUSH DS

      MOV AX,0

      PUSH AX

      MOV AX,DATAS

      MOV DS,AX

      CALL FAR PTR COUNT

      RET

MAIN  ENDP

COUNT PROC FAR

      MOV CX,0

      MOV AL,X

     

AGAIN:AND AL,AL

      JZ EXIT

      SHL AL,1

      JNC NEXT

      INC CX

NEXT:JMP AGAIN

EXIT:MOV RESULT,CX

     RET

COUNT ENDP

CODES ENDS

      END START

第三部分:编程实现代码转换程序,实现十进制到十六进制的转换,并显示输出   程序如下:

DECTOHEX  SEGMENT

          ASSUME CS:DECTOHEX

MAIN  PROC FAR

REPEAT1: CALL KEYDTOB

         CALL CRLF

         CALL BTOHSCR

         CALL CRLF

         JMP REPEAT1

MAIN ENDP

KEYDTOB  PROC NEAR

         MOV BX,0

KEYIN:MOV AH,1

      INT 21H

      SUB AL,30H

      JL EXIT

      CMP AL,9

      JG EXIT

      CBW

      XCHG AX,BX

      MOV CX,10

      MUL CX

      XCHG AX,BX

      ADD BX,AX

      JMP KEYIN

EXIT: RET

KEYDTOB ENDP

BTOHSCR  PROC NEAR

         MOV CH,4

ROTATE: MOV CL,4

        ROL BX,CL

        MOV AL,BL

        AND AL,0FH

        ADD AL,30H

        CMP AL,3AH

        JL PRINT

        ADD AL,07H

PRINT:MOV DL,AL

      MOV AH,2

      INT 21H

      DEC CH

      JNZ ROTATE

      RET

BTOHSCR ENDP

CRLF  PROC NEAR

      MOV DL,0DH

      MOV AH,2

      INT 21H

      MOV DL,0AH

      MOV AH,2

      INT 21H

      RET

CRLF  ENDP

DECTOHEX  ENDS

      END MAIN

三、    实验的(显示)结果

    第一部分和第二部分显示均为:Press any key to continue

第三部分可以从键盘输入一个数字,以非数字键结束即可,屏幕上就会以十六进制显示出来,可以重复输入,重复显示,每个数据占一行。

第一部分CV调试结果如下:

第二部分CV调试结果如下:

第三部分CV调试结果如下:

四、    实验(调试)心得

第一部分:编程实现对1~50 累加求和

    这个一个典型的循环程序,循环体AGAIN包含循环处理和循环控制部分,完成累加计数,计满50,结束存和,循环结束。

第二部分:编写统计X 数据(AL)中的“1”的个数子程序,并编写主程序调用

    本实验是进行子程序的设计与调用。子程序用过程来描述,用过程定义伪指令PROC/ENDP进行定义,需用时,用调用指令CALL调用,子程序执行完毕,应该返回到调用指令的下一条指令继续执行。子程序COUNT和调用程序MAIN在同一模块中,故子程序可直接访问模块的数据区。在子程序内部,应将用到的寄存器数据用入栈指令PUSH亚如堆栈保护,待子程序返回调用程序之前应将保护起来的寄存器数据用弹出指令POP按后进先出的原则弹回原来寄存器中。

第三部分:编程实现代码转换程序,实现十进制到十六进制的转换,并显示输出  

    本程序使用了子程序结构,整个程序包括一个主程序和三个子程序KEYDTOB、 CRLF、BTOHSCR。程序开始运行后,调用KEYDTOB从键盘区的十进制数存入BX中,再调用CRLF显示回车和换行,保证一个数据占一行,然后调用BTOHSCR,,以十六进制数显示BX中的数据,最后再调用一次CRLF显示回车和换行,一个数据的输入输出显示就完成了。在子程序中还使用了循环语句,使一个数据的输入输出结束之后可以进行下一个数据,是该程序可以重复输入和输出。

相关推荐