北邮微机原理硬件实验报告完整版

时间:2024.4.14

微机原理硬件实验

I/O地址译码

&

简单并行接口

班级:

姓名:

学号:

一 实验目的

实验一:掌握I/O地址译码电路的工作原理。

实验二:掌握简单并行接口的工作原理及使用方法。  

二、实验原理和内容

实验一:

1、实验电路如图4-1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。

例如:执行下面两条指令

MOV DX,2A0H

OUT DX,AL(或IN AL,DX)

Y4输出一个负脉冲,执行下面两条指令

MOV DX,2A8H

OUT DX,AL(或IN AL,DX)

Y5输出一个负脉冲。

图4-1-1

利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。

2、接线: Y4/IO地址 接 CLK/D触发器

Y5/IO地址 接 CD/D触发器

D/D触发器 接 SD/D角发器 接 +5V

Q/D触发器 接 L7(LED灯)或 逻辑笔

实验二:

1、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。

2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。

图4-2-1

3、接线:

按图4-2-1接线(图中虚线为实验所需接线,74LS32为实验台逻辑或门)

三 硬件接线图及软件程序流程图

1硬件接线图

实验一:

实验二:

2软件程序流程图

实验一:

实验二:

四 源程序

实验一:

DATA       SEGMENT

DATA       ENDS

STACK SEGMENT STACK 'STACK'

           DB 100H DUP(?)

STACK ENDS

CODE       SEGMENT

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

;延时子程序

DELAY1     PROC   NEAR

           MOV    BX,500H

           PUSH   CX

LOOP2:     MOV    CX,0FFFH

WAIT1:     LOOP   WAIT1

           DEC    BX

           JNZ    LOOP2

           POP    CX

           RET

DELAY1     ENDP

;L7闪烁

START:     MOV    CX,0FFFFH

LOOP1:     MOV    DX,2A0H    ;灯亮

           OUT    DX,AL

           CALL   DELAY1

   

           MOV    DX,2A8H ;灯灭

           OUT    DX,AL

           CALL   DELAY1

   

           LOOP   LOOP1   ;循环闪烁

CODE       ENDS

END    START

实验二:

DATA       SEGMENT

DATA       ENDS

STACK      SEGMENT STACK 'STACK'

           DB 100 DUP(?)

STACK      ENDS

CODE       SEGMENT

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

START:     MOV    AH,1       ;键盘输入

           INT    21H

           CMP    AL,27      ;判断是否为ESC键

           JZ     EXIT

           MOV    DX,2A8H   

           OUT    DX,AL       ;输出

           JMP    START

;返回DOS

EXIT:      MOV   DX,2A8H

           MOV   AL,0

           OUT   DX,AL       ;所有灯灭

           MOV    AX,4C00H

           INT    21H

CODE       ENDS  

           END    START

五 实验结果

实验一:L7闪烁

实验二:从键盘输入字符或数字,若不是Esc键,则二极管显示其ASCII码情况,若按下ESC,则返回dos,且各LED灯灭。

六:实验总结

1主要问题是对题目中所给的硬件接线图不是很理解,如第二个实验中或门的作用。向老师请教后明白了硬件接线图的原理,做实验就容易许多。

2在第一个实验中起先对AL进行了赋值,后来发现是没必要的,不对AL赋值对产生负脉冲无影响,后来删掉了相应的赋值语句,精简了代码。

七 实验收获与心得体会

这是第一次接触微原硬件实验,实验板比小学期单片机实验更丰富,但也会导致刚开始的时候不知道该把线接在哪。在明白了硬件接法,将自己的代码反映在硬件上时,觉得非常有趣。之前一直以为微原实验不如C++等高级语言编程有趣,现在看来丝毫不逊色。且通过自己动手实验,使我对理论课所学知识有了更好的理解。期待通过这几次微原实验能让我收获更多知识。

微机原理硬件实验

可编程并行接口8255

&

七段数码管

&

键盘显示控制实验

班级:

姓名:

学号:

一 实验目的

实验三:通过实验,掌握8255工作于方式0以及设置A口为输出口,C口为输入口的方法。

实验四:掌握数码管显示数字的原理。

实验五:掌握8255控制键盘及显示电路的基本功能及编程方法。 掌握一般键盘和显示电路的工作原理。

 二 实验原理和内容

实验三:

1、实验电路见硬件连接图,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。

2、编程从8255C口输入数据,再从A口输出。

实验四:

静态显示:按下图连接好电路,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~dp相连,位码驱动输入端S0、S1 、S2、S3接PC0、PC1、PC2、PC3,编程在数码管显示自己的学号的后四位。

实验五:

编程:使得在小键盘上每按一个健,4位数码管上显示出相应字符。

三 硬件接线图及软件程序流程图

1硬件接线图

实验三:

实验四:

2软件程序流程图

实验三:(引用讲义上已给出的图)

实验四:

(引用讲义上已给出的图)

实验五:

 

四 源程序

实验三

DATA  SEGMENT

DATA  ENDS

STACK SEGMENT STACK 'STACK'

           DB 100 DUP(?)

STACK ENDS

CODE   SEGMENT

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

START: MOV    AX,DATA

      MOV    DS,AX

      MOV    DX,28BH       ;8255初始化,10001001,C口输入,A口输出

       MOV     AL,89H

       OUT     DX,AL

LOOP1: MOV    DX,28AH              ;C口输入

       IN AL,DX

       MOV     DX,288H             ;A口输出

       OUT     DX,AL

       MOV    AH,01H

       INT     16H

       JNZ     EXIT               ;ZF=0说明有按键输入,故退出

       JMP     LOOP1

EXIT:  MOV AX,4C00H

        INT    21H

CODE   ENDS

        END       START

实验四

DATA  SEGMENT

DATA  ENDS

STACK SEGMENT STACK 'STACK'

           DB 100 DUP(?)

STACK ENDS

CODE   SEGMENT

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

START: MOV    AX,DATA

      MOV     DS,AX

      MOV    DX,28BH                  ;8255控制寄存器端口地址28BH

        MOV    AL,80H                  ;工作方式为0

        OUT    DX,AL                   ;初始化8255

       

DIGITAL:MOV   DX,28AH               ;熄灭数码管

         MOV   AL,00H

         OUT   DX,AL

        MOV    DX,288H                 ;A口显示5

        MOV    AL,6DH

        OUT    DX,AL

       MOV     DX,28AH                 ;C口00000001(位码)

       MOV     AL,01H

       OUT     DX,AL

                          

       MOV     DX,28AH                 ;熄灭数码管

       MOV     AL,00H

       OUT     DX,AL

       MOV     DX,288H                 ;A口显示2

       MOV     AL,5BH

       OUT     DX,AL

       MOV     DX,28AH                 ;C口00000010(位码)

       MOV     AL,02H

       OUT     DX,AL

                          

       MOV     DX,28AH                 ;熄灭数码管

       MOV     AL,00H

       OUT     DX,AL

       MOV     DX,288H                 ;A口显示6

       MOV     AL,7DH

       OUT     DX,AL

       MOV     DX,28AH

       MOV     AL,04H                  ;C口00000100(位码)

       OUT     DX,AL

      

       MOV     DX,28AH                 ;熄灭数码管

       MOV     AL,00H

       OUT     DX,AL

       MOV     DX,288H                 ;A口显示0

       MOV     AL,3FH

       OUT     DX,AL

       MOV     DX,28AH            

       MOV AL,08H                  ;C口00001000(位码)

       OUT     DX,AL

       MOV     DX,28AH                 ;熄灭数码管

       MOV     AL,00H

       OUT     DX,AL

       MOV     AH,01H

       INT     16H

       JNZ     EXIT                    ;ZF=0说明有按键输入,故退出

       JMP     DIGITAL

EXIT:  MOV AX,4C00H

        INT    21H

CODE   ENDS

        END       START

 实验五

DATA      SEGMENT

TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H  ;数码管显示 0123456789ABCDEF

NUM       DB 70H,0B0H,0D0H,0E0H ;用于扫描键盘 70H=01110000,0B0H=10110000,0D0H=11010000,0E0H=11100000

DATA      ENDS

STACK     SEGMENT  STACK 'STACK'

           DB 100 DUP(?)

STACK     ENDS

CODE       SEGMENT

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

;延时子程序

DELAY  PROC       NEAR

       PUSH       CX

       MOV        CX,100H

WAIT1: LOOP       WAIT1

       POP        CX

       RET

DELAY  ENDP

;获取键盘的输入数字的子程序,通过BX寄存器传递

KEY    PROC       NEAR

        PUSH      AX         ;保护现场

        PUSH      CX

        PUSH      DX

        MOV       CX,00H                  ;从第一行开始扫描

CHECK:  MOV       DX,28AH                 ;C口地址给DX

        MOV       BX,OFFSET NUM

        ADD       BX,CX

        MOV       AL,[BX]

        OUT       DX,AL

;防抖

          IN      AL,DX      ;判断是否有键盘按下

          MOV     AH,AL

          CALL    DELAY   

          IN      AL,DX

          CMP     AL,AH

          JNZ     CHECK           ;不相等说明为抖动,重新检测

;判断按下的列

          AND     AL,0FH          

          CMP     AL,0FH

          JZ      NEXT    ;这一行的所有列都没有按下的则跳到下一行扫描

          CMP     AL,0EH

          JZ      NEXT1

          CMP     AL,0DH

          JZ      NEXT2

          CMP     AL,0BH

          JZ      NEXT3

          MOV    BX,00H

          JMP     GOT

NEXT:     INC     CX          ;修改变量扫描下一行

          CMP     CX,04H

          JNZ     JUMP1

          MOV     CX,00H

JUMP1:    JMP     CHECK

NEXT1:    MOV     BX,03H

          JMP     GOT

NEXT2:    MOV     BX,02H

          JMP     GOT

NEXT3:    MOV     BX,01H

;计算按下键盘的数值

GOT:      MOV     AL,CL

          MOV   DL,04H

          MUL   DL

          ADD   BL,AL           ;此时BX中所存即为对应的偏移量 

          POP   DX     ;恢复现场

          POP   CX

          POP   AX

          RET        

KEY    ENDP

;主程序

START:     MOV   AX,DATA

          MOV   DS,AX     

          MOV   DX,28BH         ;8255初始化

          MOV   AL,81H          ;C口输入

          OUT   DX,AL

          MOV   DX,289H         ;B口位选数码管

          MOV   AL,01H

          OUT   DX,AL

;扫描键盘

LOOP1:    CALL   KEY

;数码管显示字符

           MOV    AX,BX

           MOV    BX,OFFSET TABLE

           ADD    BX,AX           ;此时BX即为对应的地址

           MOV    AL,[BX]

          CMP BX,OFFSET TABLE   ;按下的为0则退出

          JZ EXIT

           MOV    DX,288H         ;A口输出

           OUT    DX,AL

           MOV    DX,28AH         ;C口输入

           IN     AL,DX

;检测键盘是否弹起

           MOV    AH,AL

LOOP2:     CALL  DELAY

           IN     AL,DX

           CMP    AL,AH

           JZ     LOOP2

           JMP    LOOP1

;返回DOS

 EXIT:     MOV AL,00H

           MOV    DX,288H         ;A口输出

           OUT    DX,AL

            MOV   AX,4C00H

            INT   21H                                  

CODE     ENDS

           END  START

五 实验结果

实验三:拨动K0~K7,对应的L0~L7亮,有按键输入则退出。

实验四:数码管显示学号的后四位:0625。有按键输入则退出。

实验五:按小键盘1~F则数码管显示对应的字符,按下0则结束。

六:实验总结

本次实验课做了三个实验,每个实验也都变换了端口重新操作以加深理解,觉得比第一次做的更熟练。本次实验遇到问题的主要是实验五,键盘扫描及防抖程序较为复杂,需要考虑很多。在添加按小键盘0则退出时起初代码位置不对导致有逻辑错误,修改了两次才正确。

七 实验收获与心得体会

这次实验觉得和小学期的单片机实验有很多的想通之处。小学期使用的键盘扫描方法就是行扫描法,所以这次对扫描方法的理解更轻松一些。通过这次实验,我对8255的应用有了更深的了解。这次实验我更加注意了代码优化,每个实验都添加了退出的代码,觉得更可靠。实验三和四相对来说更容易,几乎是静态的,而实验五由于一直随着按键而变化所以需要考虑多种情况和变化,增加了难度,这也提高了我编程时考虑多种情况的意识,相信对我以后的编程也有很多的好处。

微机原理硬件实验

可编程定时器/计数器

(8253/8254)

班级:

姓名:

学号:

一、 实验目的

学习掌握8253用作定时器的编程原理;

二、 实验原理和内容

1.完成一个音乐发生器,通过喇叭或蜂鸣器放出音乐,并在数码管上显示乐谱。

2.扩展部分:利用小键盘实现弹琴功能,并显示弹奏的乐谱。

注意:8253输入频率应小于2MHz。

三 硬件接线图及软件程序流程图

1 硬件接线图

2 软件程序流程图

四 源程序

DATA      SEGMENT

FENPIN    DW 0001H,3906,3472,3125,2932,2604,2344,2083,1953;分频比1(do)-i(do)

DIGITAL   DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH;数码管

MUSIC     DB 0,1,2,3,1,1,2,3,1,0,3,4,5,0,3,4,5,0,5,6,5,4,3,1,0,5,6,5,4,3,1,0,1,5,1,0,1,5,1,0  ;存放播放的乐曲音符0是空拍

NUM       DB 00H,070H,0B0H,0D0H,0E0H ;检测键盘输入

DATA      ENDS

STACK     SEGMENT  STACK 'STACK'

          DB 100 DUP(?)

STACK     ENDS

CODE     SEGMENT

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

;延时子程序

DELAY     PROC  NEAR

          PUSH  CX

          MOV   CX,100H

WAIT0:    LOOP  WAIT0

          POP   CX

          RET

DELAY     ENDP

;延时子程序2

DELAY1   PROC   NEAR

         PUSH   CX

         MOV    CX,0FFFFH

WAIT1:   LOOP   WAIT1

         POP CX

         RET

DELAY1   ENDP

;获取键盘输入值的子程序

KEY       PROC  NEAR

          PUSH  AX      ;保护现场

          PUSH  CX

          PUSH  DX

          MOV   CX,01H

CHECK:    MOV   DX,28AH ;C口地址给DX

          MOV   BX,OFFSET NUM

          ADD    BX,CX

          MOV    AL,[BX]

          OUT    DX,AL

;防抖

          IN    AL,DX   ;判断是否有键盘按下

          MOV    AH,AL

          CALL  DELAY

          IN    AL,DX

          CMP    AL,AH

          JNZ   CHECK   ;不相等说明为抖动,重新检测

;判断按下的列

          AND   AL,0FH

          CMP   AL,0FH

          JZ    NEXT

          CMP   AL,0EH

          JZ    NEXT1

          CMP   AL,0DH

          JZ    NEXT2

          CMP   AL,0BH

          JZ    NEXT3

          MOV    BX,01H

          JMP   GOT

NEXT:     INC   CX      ;修改变量扫描下一行

          CMP   CX,05H

          JNZ   JUMP1

          MOV    CX,01H

JUMP1:    JMP   CHECK

NEXT1:    MOV    BX,04H

          JMP   GOT

NEXT2:    MOV    BX,03H

          JMP   GOT

NEXT3:    MOV    BX,02H

;计算按下键盘的数值

GOT:      SUB   CX,01H

          MOV    AL,CL

          MOV    DL,04H

          MUL   DL

          ADD   BL,AL

          SUB   BL,01H  ;此时BX中所存即为对应的偏移量

          POP   DX      ;恢复现场

          POP   CX

          POP   AX

          RET        

KEY       ENDP

;主程序

START:    MOV    AX,DATA

          MOV    DS,AX

          ;8253初始化

          MOV    DX,283H

          MOV    AL,36H

          OUT    DX,AL

          ;8255初始化

          MOV    DX,28BH 

          MOV    AL,81H  ;C口输入

          OUT    DX,AL      

          MOV    DX,289H ;B口位选数码管

          MOV    AL,01H

          OUT    DX,AL

;扫描键盘

LOOP1:    CALL   KEY

          CMP     BX,0   ;按0播放音乐

          JZ      PLAY0

          CMP     BX,9   ;按9退出

          JZ      EXIT

;按1~8发出对应音

          MOV    CX,BX  

          MOV    BX,OFFSET DIGITAL ;数码管显示音符

          ADD    BX,CX

          MOV    AL,[BX]

          MOV    DX,288H  ;A口输出

          OUT    DX,AL

          ;播放该音符

          MOV   BX,OFFSET FENPIN

          MOV   AX,CX

          ADD   AX,AX

          ADD   BX,AX

          ;计数,先低八位后高八位

          MOV   AX,[BX]

          MOV   DX,280H

          OUT   DX,AL

          MOV   AL,AH

          OUT   DX,AL

          CALL  DELAY1

          CALL  DELAY1

          MOV   DX,28AH   ;C口输入

          IN     AL,DX

;检测键盘是否弹起

          MOV    AH,AL

LOOP2:    CALL   DELAY

          IN     AL,DX

          CMP    AL,AH

          JZ     LOOP2

          ;初始化8253,停止播放音乐

          MOV    AX,0H

          MOV    DX,283H

          MOV    AL,36H

          OUT    DX,AL        

          JMP    LOOP1                              

         

;播放音乐

PLAY0:    MOV    CX,01H

PLAY:     PUSH  CX 

          ;读取音符,存于CX中

          MOV   BX,OFFSET MUSIC

          ADD   BX,CX

          MOV   AL,[BX]

          MOV   CL,AL

          MOV   CH,0H

          ;数码管显示

          MOV   BX,OFFSET DIGITAL

          ADD   BX,CX

          MOV   AL,[BX]

          MOV   DX,288H

          OUT   DX,AL

           ;播放该乐符

          MOV   BX,OFFSET FENPIN

          MOV   AX,CX

          ADD   AX,AX

          ADD   BX,AX

          ;计数,先低八位后高八位

          MOV   AX,[BX]

          MOV   DX,280H

          OUT   DX,AL

          MOV   AL,AH

          OUT   DX,AL

          POP   CX

          ;延时,持续播放

          MOV   AX,90H

LOOP3:    CALL  DELAY1

          DEC   AX

          JNZ   LOOP3 

          ;乐曲未结束时,CX加1               

          INC   CX

          CMP   CX,28H;共40个音符

          JNZ   JUM

          JMP    LOOP1

JUM:      JMP   PLAY

EXIT:     MOV   AL,0

          MOV   DX,288H

          OUT   DX,AL

          MOV    AX,4C00H

          INT    21H    

CODE       ENDS

          END    START 

五 实验结果

按小键盘的0时,播放预置音乐《两只老虎》,同时数码管显示相应的音符;

按小键盘的1~8时,分别发出do,re,mi,fa,so,la,si,高音do,数码管显示按下的音符;

按小键盘的9时,熄灭数码管,回到dos

六:实验总结

由于小学期单片机实验做的就是电子琴,原理上比较熟悉,所以这次实验比较容易。在调试时,主要是调整延时以使音乐播放更准确。延时程序是保证本次实验成功的关键。在弹奏时,发声时长即为按键时长,按键弹起时停止播放音乐(但为保证按键很短时发声不至于太急促,仍在此处加入了一点延时)。

七 实验收获与心得体会

这次实验的主要收获是熟悉了可编程定时器/计数器的使用。可以利用8253/8254工作于方式三来产生相应频率的方波,送给喇叭后发出相应的音。这次实验也使我对查表调用的使用更得心应手。本实验只使用了0~9,后面的键没有应用。在以后如果有机会进一步完善,可以给其他键赋予功能,如播放更多音乐、使数码管显示更丰富等等。在本次实验调试时主要是调整延时,这使我更加体会到了延时的重要性,看似不起眼的几行代码在整个电子琴程序中起到了很重要的作用,可以检测防抖时使用,可以调整音乐时使用等等。在程序中,真的是失之毫厘差之千里。以后的编程中我也会注意每一个细节,使程序更加优化。

八 思考题

写出8253计数初值,输入频率和输出频率的关系:

答:输出频率 = 输入频率/8253计数初值

微机原理硬件实验

串行通讯8251

班级:

姓名:

学号:

一、实验目的

1、了解串行通讯的基本原理。

2、掌握串行接口芯片8251的工作原理和编程方法。

二、实验原理和内容

基础功能:

1、按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。

2、编程: 从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。)实现自发自收。

扩展功能:

双机通信,将发送端用小键盘发送数据,接收端用数码管显示接收的数据。

三、硬件接线图及软件程序流程图

1硬件接线图(引用讲义上的流程图)

2软件程序流程图(引用讲义上的流程图)

四 源程序

1单机通信:

DATA      SEGMENT

STRING    DB 'TRANSLATE  ','$'

STRING1   DB 'RECEIVE    ','$'

STRING2   DB 0DH,0AH,'$'

DATA      ENDS

STACK     SEGMENT  STACK  'SATCK'

           DB 100 DUP(?)

STACK     ENDS

CODE      SEGMENT

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

;延时子程序

DELAY     PROC  NEAR

          PUSH  CX

          MOV   CX,100H

WAIT0:    LOOP  WAIT0

          POP   CX

          RET

DELAY     ENDP

START:    MOV     AX,DATA

          MOV     DS,AX

      ;8254初始化

          MOV     DX,283H   

          MOV     AL,16H  ;计数器0,只读低字节,方式0,二进制

          OUT     DX,AL

          CALL    DELAY

          MOV     DX,280H    ;计数器0,初值为52

          MOV     AL,34H 

          OUT     DX,AL

          CALL    DELAY

          ;8251初始化

          MOV     DX,2B9H    ;控制端口

          MOV     AL,40H ;内部复位命令

          OUT     DX,AL

          NOP

          CALL    DELAY

          MOV     AL,5EH ;方式控制字

          OUT     DX,AL

          MOV     AL,37H ;命令控制字

          OUT     DX,AL

          CALL    DELAY

          

      ;发送数据

GOON:     MOV     DX,2B9H    ;读状态字

          IN      AL,DX

          TEST    AL,01H

          JZ      GOON

      ;显示提示语句

          MOV     AH,09H

          MOV     DX,OFFSET STRING

          INT     21H  

          MOV     AH,01H

          INT     21H

      ;检测是否为ESC键

          CMP     AL,1BH

          JZ      EXIT

          INC     AL;加1

          MOV     DX,2B8H

          OUT     DX,AL

      ;接收数据

RECEIVE:  MOV     DX,2B9H   

          IN      AL,DX

          TEST    AL,02H

          JZ      RECEIVE

      ;显示提示语句

          MOV     AH,09H

          MOV     DX,OFFSET STRING2

          INT     21H 

          MOV     AH,09H

          MOV     DX,OFFSET STRING1

          INT     21H 

          MOV     DX,2B8H   

          IN      AL,DX             

          MOV     DL,AL

          MOV     AH,02H ;显示接收的数据

          INT     21H

          MOV     AH,09H

          MOV     DX,OFFSET STRING2

          INT     21H 

          JMP     GOON              

EXIT:     MOV     AX,4C00H

          INT     21H             

CODE      ENDS

          END     START

双机通信

DATA    SEGMENT

STRING  DB 'Please put in a word',0DH,0AH,'$'

TABLE   DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H ;数码管显示

NUM     DB 70H,0B0H,0D0H,0E0H

DATA    ENDS

STACK   SEGMENT  STACK  'SATCK'

        DB 100 DUP(?)

STACK   ENDS

CODE    SEGMENT

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

;延时子程序

DELAY   PROC      NEAR

        PUSH      CX

        MOV       CX,100H

WAIT0:  LOOP      WAIT0

        POP       CX

        RET

DELAY   ENDP

;延时子程序2

DELAY1  PROC NEAR

                PUSH CX

                PUSH BX

                MOV BX,250   

        LP2:    MOV CX,0FFFFH

        LP1:    LOOP LP1

                DEC BX

                JNZ LP2

                POP BX

                POP CX

                RET

DELAY1   ENDP

input  PROC NEAR

 LOOP1: MOV DX,28AH

        mov al,01111111b

        out dx,al

        in al,dx   

        and al,00001111b 

        cmp al,00000111b 

        jz case0

        CMP AL,00001011B

        JZ CASE1

        CMP AL,00001101B

        JZ CASE2

        CMP AL,00001110B 

        JZ CASE3

        mov al,10111111b 

        out dx,al

        in al,dx  

        and al,00001111b 

        cmp al,00000111b 

        jz case4

        CMP AL,00001011B 

        JZ CASE5

        CMP AL,00001101B 

        JZ CASE6

        CMP AL,00001110B 

        JZ CASE7

        mov al,11011111b 

        out dx,al

        in al,dx   

        and al,00001111b 

        cmp al,00000111b 

        jz case8

        CMP AL,00001011B 

        JZ CASE9

        CMP AL,00001101B 

        JZ CASE10

        CMP AL,00001110B 

        JZ CASE11

        mov al,11101111b 

        out dx,al

        in al,dx 

        and al,00001111b 

        cmp al,00000111b

        jz case12

        CMP AL,00001011B 

        JZ CASE13

        CMP AL,00001101B 

        JZ CASE14

        CMP AL,00001110B 

        JZ CASE15

        MOV AL,16

        JMP OUTINPUT 

   ;根据判断的按键状态,给al赋相应的偏移值

  CASE0:MOV AL,0   

        JMP OUTINPUT

  CASE1:MOV AL,1

        JMP OUTINPUT

  CASE2:MOV AL,2

        JMP OUTINPUT

  CASE3:MOV AL,3

        JMP OUTINPUT

  CASE4:MOV AL,4

        JMP OUTINPUT

  CASE5:MOV AL,5

        JMP OUTinput

  CASE6:MOV AL,6

        JMP OUTINPUT

  CASE7:MOV AL,7

        JMP OUTINPUT

  CASE8:MOV AL,8

        JMP OUTINPUT

  CASE9:MOV AL,9

        JMP OUTINPUT

  CASE10:MOV AL,10

        JMP OUTINPUT

  CASE11:MOV AL,11

        JMP OUTINPUT

  CASE12:MOV AL,12

        JMP OUTINPUT

  CASE13:MOV AL,13

        JMP OUTINPUT

  CASE14:MOV AL,14

        JMP OUTINPUT

  CASE15:MOV AL,15

OUTINPUT:RET

input  ENDP

;主程序

START:    MOV     AX,DATA

          MOV     DS,AX

          ;8255初始化

          MOV   DX,28BH

          MOV   AL,81H;C口输入

          OUT   DX,AL

          CALL DELAY

          MOV   DX,289H;B口位选数码管

          MOV   AL,01H

          OUT   DX,AL

          CALL DELAY

          ;8254初始化

          MOV     DX,283H

          MOV     AL,16H

          OUT     DX,AL

          CALL DELAY

          MOV     DX,280H

          MOV     AL,34H

          OUT     DX,AL

          CALL DELAY

          ;8251初始化

          MOV     DX,2B9H

          MOV     AL,40H

          OUT     DX,AL

          NOP

          CALL DELAY

          MOV     AL,5EH

          OUT     DX,AL

          MOV     AL,37H

          OUT     DX,AL

          CALL DELAY

         ;显示提示语句

          MOV     AH,09H

          MOV     DX,OFFSET STRING

          INT     21H              

          ;发送数据

GOON:     MOV     DX,2B9H    ;读状态字

          IN      AL,DX

          TEST    AL,01H

          JZ      RECEIVE

          CALL    input      

CMP AL,16

JZ  CHUSHI

          INC     AL ;加1

          MOV     DX,2B8H

          OUT     DX,AL

CALL DELAY

          JMP RECEIVE

CHUSHI:   MOV AL,16

          MOV     DX,2B8H

          OUT     DX,AL

CALL DELAY

          JMP RECEIVE

          ;接收数据

RECEIVE:  MOV     DX,2B9H    ;读状态字

          IN      AL,DX

          TEST    AL,02H    

          JZ      GOON

          MOV     DX,2B8H      

          IN      AL,DX             

      ;数码管显示

          MOV     AH,0

          MOV     BX,OFFSET TABLE

          ADD     BX,AX

          MOV     AL,[BX]

          MOV     DX,288H;A口输出

          OUT     DX,AL 

CALL DELAY1

          JMP     GOON              

CODE      ENDS

          END     START

五 实验结果

自发自收:键盘输入字符后,加一发送,本机接收后在屏幕显示加一后的字符,按ESC退出。

拓展功能:小键盘输入,接收端数码管显示加1后的结果,可双机通信,支持连续发送。

六 实验总结

在编程时,由于使用的芯片较多,所以在编程顺序上发生了一定的混乱,有一些考虑不周导致的问题。本次实验除了8251A的发送接收外,大多数的知识在之前的实验中有了一定的基础,比如键盘扫描程序等,可以直接从之前的实验中移植过来,但怎样正确地控制好各个芯片有序工作是这个实验的重点。

在单机通信时,起初输入字符后没有反应,后来在每个控制字后添加了延时程序,显示正常。

双机调试花了许多时间,之前是发送后必须接收方按键后数码管才能显示,后来采取的措施是将原本的小键盘扫描程序中循环扫描改成只扫描一次。这样程序可以不断执行GOON和 RECEIVE,不需要接收方再按一次键即可实现连续通信,数码管实时显示。在发现问题解决问题的过程中还有很多细节问题的改动,在此不再细说。每一次改动都能感觉到代码有了优化,直到最终出现正确的效果。

七 实验收获与心得体会

通过这次实验,我对8251A有了更好的理解。本实验中不止使用了8251,还使用了其他芯片,使我对各芯片的综合使用能力有了一定的提高。在之前课上学习8251A理论知识时,我对这个芯片没有很理解,只知道是串行可编程接口,甚至对某些部分的理解是错误的,经过了自己的实际体验才对之有了较多的理解,明白了它的使用原理。

这次的单机通信很简单,在进行了双机通信后才对8251双机通信的握手问题有了更好的了解。同时感觉到知识的交流很重要,在实验室时,开始时遇到问题就是自己去修改代码,始终没有找到问题的根源,在与老师和做成功的同学交流后才找到问题并最终修改成功。本实验代码中的键盘扫描程序使用了张煜昊的,因为自己的扫描程序解决不了这个问题,只有根本改变算法才行。

通过这四次的微原硬件实验,我的收获很大。虽然通过小学期对汇编语言有了一定的了解,但微原课本中的好多知识都是全新的,不自己去编程、调试很难能够真正去了解这其中的原理。

八 思考题

在实验中,你如何确定RxC,TxC的值,写出计算公式

答:RxC=TxC=8253输出时钟频率=8251波特率*波特率因子

更多相关推荐:
微机原理 实验报告

微机原理与接口技术实验指导书班级学号099074姓名安徽工业大学计算机学院实验一存贮器读写实验一实验内容对指定地址区间的RAM4000H4FFH先进行写数据55AAH然后将其内容读出再写到5000H5FFH中二...

微机原理完整实验报告+程序

实验题目8253定时计数器实验一实验目的与要求1学会8253芯片和微机接口原理和方法2掌握8253定时器计数器的工作方式和编程原理二实验内容1实验原理本实验原理图如图1所示8253A的A0A1接系统地址总线A0...

微机原理实验报告

微机原理实验报告实验一两个多位十进制数相加的实验一实验目的学习数据传送和算术运算指令的用法熟悉在PC机上建立汇编链接调试和运行汇编语言程序的过程二实验内容将两个多位十进制数相加要求被加数和加数均以ASCII码形...

答案版_微机原理实验报告

微机原理及接口技术实验报告20xx20xx学年第一学期班级姓名学号指导教师实验一Emu8086软件的使用一实验目的1熟悉汇编语言开发环境2掌握Emu8086软件使用方法3理解寻址方式的意义二实验环境1硬件环境微...

微机原理实验报告

大连理工大学本科实验报告课程名称计算机原理课程设计学院系电气工程学院专业电气工程及其自动化班级学号学生姓名20xx年12月30日大连理工大学实验报告实验时间年月日星期四时间13001505实验室房间号实验台号码...

微机原理实验报告1

微机原理实验报告班级:电气93姓名:学号:实验一:顺序程序的设计一、实验目的:1.学习8086/8088指令系统中一些基本指令的用法和程序设计的基本方法。2.熟悉在PC机上建立、汇编、链接、调试和运行8086、…

微机原理实验报告一

西安郵電學院微机原理实验报告一题目寻址方式与基本指令实验院系名称计算机学院专业名称软件工程专业班级软件0902学生姓名许艳莉学号8位040950581实验目的1熟悉80x86寻址方式及基本指令的功能进一步理解和...

微机原理实验报告 单赟吉 11211105

微机原理实验报告单赟吉11211105通信11091目录一IO地址译码与交通灯控制实验3二可编程定时器计数器82538三中断实验纯DOS13四模数转换器19五串行通讯22六课程综合实验抢答器29八参考文献332...

微机原理实验报告

21显示程序实验1实验目的1掌握在PC机上以十六进制形式显示数据的方法2掌握部分DOS功能调用使用方法3熟悉Windows集成操作软件Tdpit的操作环境和操作方法2实验设备PC微机一台TDPITD实验系统一套...

北邮微机原理硬件实验报告完整版

微机原理硬件实验IO地址译码amp简单并行接口班级姓名学号一实验目的实验一掌握IO地址译码电路的工作原理实验二掌握简单并行接口的工作原理及使用方法二实验原理和内容实验一1实验电路如图411所示其中74LS74为...

微机原理实验报告

姓名:XXX学号:XXXXXX指导教师:XXX实验一Debug命令及汇编指令和寻址的应用一、实验内容1、设堆栈段指针SP=1000H,AX=4000H,BX=8000H;请编写一段程序将AX和BX的内容进行交换…

微机原理实验报告

计算机学院微机接口实验报告专业计算机科学与技术班级姓名学号实验一汇编语言程序设计实验一实验目的熟悉汇编语言程序设计及TDPITE80X86实验环境的使用二实验设备PC机一台TDPITE实验装置或TDPITC实验...

微机原理实验报告(31篇)