微机原理与接口技术实验报告

实验一  8255A应用—数码管动态显示

一、实验目的

1、掌握8255A的工作方式、编程原理和微机接口方法。

2、了解LED数码管动态显示的工作原理及编程方法。

二、实验内容

编制程序,使数码管显示“DICE88”字样。

三、实验程序框图

图6-1 实验程序流程图

四、实验步骤  

联机模式:

  (1)在PC机和实验系统联机状态下,运行实验系统dj8086k.exe(双击桌面OTA图标或通过开始-程序-dj8086k-DJ8086k微机原理与接口技术),新建文件并在编辑窗口输入汇编源程序,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。

  (2)数码管显示“DICE88”字样。

脱机模式:

(1)在P.态下,通过单板机小键盘,从2DF0地址开始输入机器码(参见附录三),完成后返回监控,输入起始地址2DF0,再按EX键执行。

(2)数码管显示“DICE88”字样。

五、实验程序清单

CODE        SEGMENT           ; display "DICE88"

    ASSUME CS:CODE

    ORG 2DF0H

START:      JMP START0

PA      EQU 0FF20H    ;字位口

PB      EQU 0FF21H    ;字形口

PC      EQU 0FF22H    ;键入口

BUF DB ?,?,?,?,?,?

data1:             

db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h

db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H

START0: CALL BUF1

CON1:       CALL DISP

    JMP CON1

DISP:       MOV AL,0FFH             ;00H

    MOV DX,PA

    OUT DX,AL

    MOV CL,0DFH             ;显示子程序 ,5ms

    MOV BX,OFFSET BUF

DIS1:      MOV AL,[BX]

   MOV AH,00H

    PUSH BX

    MOV BX,OFFSET DATA1

   ADD BX,AX

   MOV AL,[BX]

    POP BX

    MOV DX,PB

    OUT DX,AL

    MOV AL,CL

    MOV DX,PA

    OUT DX,AL

    PUSH CX

DIS2:       MOV CX,00A0H

   LOOP $

   POP CX

    CMP CL,0FEH                 ;01H

    JZ LX1

   MOV AL,0FFH                 ;00H

    MOV DX,PA

    OUT DX,AL

    INC BX

    ROR CL,1                    ;SHR CL,1

    JMP DIS1

LX1:   MOV AL,0FFH

    MOV DX,PB

    OUT DX,AL

    RET

BUF1:       MOV BUF,0DH             ;实验修改 mov buf,0ah

       MOV BUF+1,01H

       MOV BUF+2,0CH

       MOV BUF+3,0EH

       MOV BUF+4,08H                ;实验修改mov buf+4,00h

       MOV BUF+5,08H                ;实验修改mov,buf+5,09h

       RET

CODE ENDS

END  START

六、思考题

    修改程序使之可以显示其他字符,如“AHUt09”。

实验二  8259单级中断控制器实验实验报告

 

实验三  8253、8255、8259综合实验

1.8253计数器实验

要求:计数器1方式0计数,计满3个数产生中断,中断5次后结束。

实验线路见图6-6:

图6-6  8253计数器实验电路图

实验程序:

INTPORT1  EQU 0FF80H  ;8259A的偶地址入口

INTPORT2  EQU 0FF81H  ;8259A的偶地址入口

INTQ3      EQU INTREEUP3    ;INTREEUP3地址

TCONTR0   EQU 0043H ;8253端口地址

TCON1     EQU 0041H ;8253端口地址

PA        EQU 0FF20H ;字位口

PB        EQU 0FF21H ;字形口

PC        EQU 0FF22H ;键入口

code      segment

          assume cs:code

           ORG 12D0H ;源地址

START:    JMP START0 ; 跳转到START0

BUF       DB ?,?,?,?,?,? ;六字节缓冲区

intcnt    db ? ;一字节的缓冲区

data1   

db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h     

        db 0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH;七段码定义

START0: CLD;置方向位

            CALL BUF1 ;调用子程序BUF1

            CALL WRINTVER                ;WRITE INTRRUPT

            MOV AL,13H ;写ICW1,边沿触发,单片,需要ICW4

            MOV DX,INTPORT1

            OUT DX,AL

            MOV AL,08H;ICW2,中断类型号高5位

            MOV DX,INTPORT2

            OUT DX,AL

MOV AL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统

            OUT DX,AL

          

            MOV AL,0F7H

            OUT DX,AL

            MOV intcnt,01H  ;TIME=1

            MOV DX,TCONTR0;指向控制口

            MOV AL,51H ;8253控制字,通道1,方式0,只读/写低字节,BCD码计数

            OUT DX,AL;送控制字

            MOV DX,TCON1;指向控制口

            MOV AL,03;计数值低字节

            OUT DX,AL;送控制字

            MOV DX,0FF23H;指向8255A控制口

            MOV AL,80;A口方式0,输出,C口上半部输出,B口方式0,输出,C口下半部输出

            OUT DX,AL;送控制字

            STI;         开中断

WATING:     CALL DISP           ;DISP 825359

            JMP WATING

WRINTVER:   MOV AX,0H

            MOV ES,AX

            MOV DI,002CH;目的地址

            LEA AX,INTQ3;INTQ3的偏移地址

            STOSW;存字

            MOV AX,0000h;清零

            STOSW

            RET;中断返回

INTREEUP3: push ax;入栈

          push bx

          push cx

          push dx

          MOV DX,TCON1;指向控制口

            MOV AL,03;计数值低字节

            OUT DX,AL

            MOV AL,INTCNT

            CALL CONVERS

            MOV BX,OFFSET BUF 

            MOV AL,10H

            MOV CX,05H;置循环数

INTRE0:   MOV [BX],AL;将Al中的值存在[BX]中

            INC BX;BX加1

            LOOP INTRE0;循环

            ADD INTCNT,01H;循环数是五次

            CMP INTCNT,06H

            JNA INTRE2

          CALL BUF2     ;DISP:good

INTRE1:   CALL DISP

            JMP INTRE1

CONVERS:  AND AL,0FH;显示次数

            MOV BX,offset buf   

            MOV [BX+5],AL

            RET

INTRE2:   MOV AL,20H

            MOV DX,INTPORT1

            OUT DX,AL

            pop dx

            pop cx

            pop bx

            pop ax

            IRET;软中断返回

DISP:       MOV AL,0FFH         ;00H

            MOV DX,PA;清零

            OUT DX,AL

            MOV CL,0DFH     ;20H         

            MOV BX,OFFSET BUF

DIS1:       MOV DX,PC

            OUT DX,AL

            MOV AL,[BX]

            MOV AH,00H

            PUSH BX

            MOV BX,OFFSET DATA1

            ADD BX,AX

            MOV AL,[BX]

            POP BX

            MOV DX,PB

            OUT DX,AL

            MOV AL,CL

            MOV DX,PA

            OUT DX,AL

            PUSH CX

DIS2:       MOV CX,00A0H

            LOOP $

            POP CX

            CMP CL,0FEH  ;01H

            JZ LX1

            INC BX

            ROR CL,1     ;SHR CL,1

            JMP DIS1

LX1:        MOV AL,0FFH

            MOV DX,PB

            OUT DX,AL

            RET

BUF1:       MOV BUF,08H

            MOV BUF+1,02H

            MOV BUF+2,05H

            MOV BUF+3,03H

            MOV BUF+4,05H

            MOV BUF+5,09H

            RET

BUF2:       MOV BUF,09H

            MOV BUF+1,00H

            MOV BUF+2,00H

            MOV BUF+3,0dH

            MOV BUF+4,10H

            MOV BUF+5,10H

            RET

CODE        ENDS

END     START

思考:计数器0方式0计数,计满5个数产生中断,中断3次后结束。

     1、将8253控制字由MOV AL,51H改为 MOV AL,11H

     2、计数值低字节将  MOV AL,03改为MOV AL,05

      3、将CMP INTCNT,06H改为CMP INTCNT,04H;

2、8253定时器实验

要求:用8253定时器1通道定时,每隔1秒使PA口的指示灯的状态右移一位。主程序反复游走显示8253-A。

8253定时器实验线路见图6-7:

图6-7  8253计数器实验电路图

实验程序:

CODE      SEGMENT            ;

ASSUME CS:CODE

INTPORT1  EQU       0FF80H;8259A的偶地址入口

INTPORT2  EQU       0FF81H;8259A的奇地址入口

INTQ3      EQU      INTREEUP3

TCONTR0   EQU   0043H;8253端口地址

TCON1     EQU       0041H;8253端口地址

IOCONPT   EQU       0FF2BH;8255A 的端口地址

IOBPT     EQU       0FF29H;8255A 的端口地址

IOAPT     EQU      0FF28H;8255A 的端口地址

PA        EQU           0FF20H ;字位口

PB        EQU           0FF21H ;字形口

PC        EQU           0FF22H ;键入口

           ORG 12D0H;源地址

START:    JMP START0

BUF       DB ?,?,?,?,?,?;6字节缓冲区

intcnt    db ? ;1字节缓冲区

WEIKONG   DB  ? ;1字节缓冲区

data1

db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h     

        db 0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH

START0: CLD;置方向位

           CALL BUF1

            CALL WRINTVER                ;WRITE INTRRUPT

            MOV AL,13H;写ICW1,边沿触发,单片,需要ICW4

            MOV DX,INTPORT1

            OUT DX,AL

            MOV AL,08H;ICW2,中断类型号高5位

MOV DX,INTPORT2

            OUT DX,AL

            MOV AL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统

            OUT DX,AL

            MOV AL,0F7H

            OUT DX,AL

            MOV intcnt,50           ;软件计数50(1秒=20ms*50)

            MOV DX,TCONTR0

            MOV AL,74H;通道1,先读/写低字节,再读/写高字节,方式2,二进制数

            OUT DX,AL

            MOV DX,TCON1             ;计数器1定时20ms

            MOV AX,40000

            OUT DX,AL

          MOV  AL,AH;读入计数值的高字节

          OUT DX,AL

            MOV DX,0FF2BH

            MOV AL,82H;A口方式0,输出,C口上半部输出,B口方式0,输入,C口下半部输出

            OUT DX,AL

           MOV  WEIKONG, 0FEH       ;初始PA0对应位亮

           MOV  AL, WEIKONG                

           MOV  DX, 0FF29H

           OUT DX,AL

            STI ;开中断

WATING:     CALL DISP                 ;DISP 8253-A

            JMP WATING

WRINTVER:   MOV AX,0H

            MOV ES,AX

            MOV DI,002CH;目的地址

            LEA AX,INTQ3;INTQ3的偏移地址

            STOSW

            MOV AX,0000h

            STOSW

            RET

INTREEUP3: DEC  INTCNT;INTCNT减1

           JNZ   INTRE2

           MOV   INTCNT, 50

           ROL  WEIKONG, 1

           MOV  DX, IOAPT 

             MOV AL, WEIKONG

             OUT DX,AL

INTRE2:   MOV AL,20H

            MOV DX,INTPORT1

            OUT DX,AL

          IRET;软中断返回

DISP:       MOV AL,0FFH                   ;00H

            MOV DX,PA

            OUT DX,AL

            MOV CL,0DFH                   ;20H        

            MOV BX,OFFSET BUF

DIS1:       MOV DX,PC

            OUT DX,AL

            MOV AL,[BX]

            MOV AH,00H

            PUSH BX

            MOV BX,OFFSET DATA1

            ADD BX,AX

            MOV AL,[BX]

            POP BX

            MOV DX,PB

            OUT DX,AL

            MOV AL,CL

            MOV DX,PA

            OUT DX,AL

            PUSH CX

DIS2:       MOV CX,0000H

            LOOP $

            POP CX

            CMP CL,0FEH  ;01H

            JZ LX1;相等转LX1

            INC BX

            ROR CL,1 ;循环 右移一位,指示灯又移变亮  

            JMP DIS1

LX1:        MOV AL,0FFH;指示灯全灭

            MOV DX,PB

            OUT DX,AL

            RET

BUF1:       MOV BUF,08H

            MOV BUF+1,02H

            MOV BUF+2,05H

            MOV BUF+3,03H

            MOV BUF+4,17H

            MOV BUF+5,0AH

            RET

CODE   ENDS

        END    START

思考::用8253定时器0通道定时,每隔1秒使PA口的指示灯的状态左移一位。主程序反复游走显示8253-B。

1、将MOV AL,74H改为MOV AL,34H;

2、将ROR CL,1 改为ROL CL,1

3、将MOV BUF+5,0AH改为MOV BUF+5,0CH

实验五  A/D转换实验

一、实验目的

了解模/数转换基本原理,掌握ADC0809的使用方法;
    掌握定时数据采集程序的编制方法。

二、实验内容

1、A/D转换实验

利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。

(1)  实验接线图

ADC0809接线见图6-9

图6-9  ADC0809接线图

(2)编程指南

ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号,实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,其输入控制信号为CS和WR,故启动A/D转换只须如下两条指令:

MOV DX,ADPORT         ; ADC0809端口地址        

OUT DX,AL            ;  发CS和WR信号并送通道地址

用延时方式等待A/D转换结果,使用下述指令读取A/D转换结果。    

MOV DX,ADPORT         ; ADC0809端口地址                   
IN AL,DX 

循环不断采样A/D转换的结果,边采样边显示A/D转换后的数字量。

(3)实验程序框图

A/D转换流程见图6-10

图6-10  A/D转换流程

(4)实验步骤

① 将0809 CS4插孔连到译码输出FF80H插孔。

② 将通道0模拟量输入端IN0连电位器W1的中心插头AOUT1(0-5V)插孔,8MHZ→T。

③ 运行实验程序,系统上显示“0809 XX”。“XX”表示输入模拟量转换后的数字量。

④ 调节电位器Wl, 显示器上会不断显示新的转换结果。

模拟量和数字量对应关系的典型值为:

0V→00H +2.5V→80H  +5V→FFH

⑤ 按RST键退出。

(5)实验程序清单

CODE        SEGMENT            ;

ASSUME CS:CODE

ADPORT  EQU 0FF80h       ;8259A偶地址入口

PA      EQU 0FF20H      ;字位口

PB      EQU 0FF21H      ;字形口

PC      EQU 0FF22H      ;键入口

       ORG 1000H ;源地址

START:      JMP START0 ;跳转到START0

BUF         DB ?,?,?,?,?,? ;定义6字节缓冲区

data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,

0c6h,0a1h ;定义七段码

       db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH

START0:     CALL BUF1 ;调用BUF1子程序

ADCON:      MOV AX,00

                MOV DX,ADPORT ; ADC0809端口地址  

                    OUT DX,AL ;  发CS和WR信号并送通道地址

MOV CX,0500H ;置循环数

;DELAY:     LOOP DELAY ;空循环,延时

          MOV DX,ADPORT ; ADC0809端口地址

          IN AL,DX

          CALL CONVERS;调用子程序CONVERS

          CALL DISP ;调用显示子程序DISP

          JMP ADCON ;跳转到ADCON

CONVERS:    MOV AH,AL;将 ax中的低字节赋给高字节

              AND AL,0FH ;保留al中的低四位

              MOV BX,OFFSET BUF;buf的偏移地址

          MOV [BX+5],AL;将al中的值给[Bx+5]

          MOV AL,AH ;取al中的高四位

          AND AL,0F0H

          MOV CL,04H ;值移位数

          SHR AL,CL;右移四位

          MOV [BX+4],Al ;将Al中的值给[BX+4]

          RET;返回

DISP:       MOV AL,0FFH ;PA端口全置1,使其灯无显示                        MOV DX,PA

        OUT DX,AL

        MOV CL,0DFH ;将0DFH给CL              

        MOV BX,OFFSET BUF;取BUF的偏移地址 给BX

DIS1:       MOV AL,[BX];将[BX]中的内容取出给Al

        MOV AH,00H

    PUSH BX;BX入栈

    MOV BX,OFFSET DATA1;取DATA1的偏移地址给BX

          ADD BX,AX;BX与Ax相加

          MOV AL,[BPBX];将[BX]的内容取到AL中

    POP BX;BX出栈

    MOV DX,PB;Al中得内容在PB端口输出

    OUT DX,AL

    MOV AL,CL;显示

    MOV DX,PA

    OUT DX,AL

    PUSH CX;CX入栈

DIS2:      MOV CX,00A0H;循环00A0H次,延时

              LOOP $

              POP CX;CX出栈

        CMP CL,0FEH;Cl 与0FEH比较                      

        JZ LX1 ;Cl与00A0H相等,则程序跳转到LX1

        INC BX ;BX自加1

        ROR CL,1;Cl循环左移1位                       

        JMP DIS1;循环显示

LX1:        MOV AL,0FFH;PB端口清零

        MOV DX,PB

        OUT DX,AL

        RET;中断返回

BUF1:       MOV BUF,00H

          MOV BUF+1,08H

          MOV BUF+2,00H

          MOV BUF+3,09H

          MOV BUF+4,00H

          MOV BUF+5,00H

          RET

CODE ENDS

END  START

2、数据采集实验

  要求:用8253定时器1通道定时,每隔半秒使从ADC0809的0通道IN0采集一个数据,若模拟电压在0-2V范围内(0-102),则使LED显示器L7-L4亮;若模拟电压大于2V,小于3V,则使L5-L2亮;若模拟电压大于等于3V,则使LED显示器L3-L0亮。

(主程序重复所采集的数据)

(1)实验接线图

数据采集实验系统接线图见图6-11

图6-11  数据采集系统接线图

(2)程序流程图

主程序流程见图6-12

图6-12  主程序流程图

中断服务程序流程见图6-13

图6-13  中断服务程序流程

(3)实验程序清单

CODE        SEGMENT            ;

ASSUME CS:CODE

INTPORT1    EQU     0FF80H ;8259A偶地址入口

INTPORT2    EQU     0FF81H  ;8259A奇地址入口

INTQ3       EQU     INTREEUP3 ;中断源IR3地址

TCONTR0     EQU     0043H;8253端口地址

TCON1       EQU     0041H;8253端口地址

IOCONPT     EQU     0FF2BH

IOBPT       EQU     0FF29H

IOAPT       EQU    0FF28H

PA        EQU     0FF20H    ;字位口

PB        EQU     0FF21H    ;字形口

PC        EQU     0FF22H    ;键入口

ADPORT    EQU     0FE00H ;ADC0809端口地址

ORG 12D0H;源地址

START:    JMP START0;跳转到START0

BUF       DB ?,?,?,?,?,?;定义6字节的缓冲区

intcnt    db ?

RES       DB  ?

data1 db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h     

        db 0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH;

定义七段码

START0:     CLD;置方向位

            CALL    BUF1;调用BUF1

            CALL    WRINTVER ;调用 WRINTVER             

            MOV     AL,13H;初始化ICW1,单片,边沿触发,设置ICW4

            MOV     DX,INTPORT1

            OUT     DX,AL

            MOV     AL,08H;写ICW2,允许IR3中断

            MOV     DX,INTPORT2

            OUT     DX,AL

            MOV     AL,09H;写ICW4,8259A在缓冲方式下工作,8086/8088系统

            OUT     DX,AL

            MOV     AL,0F7H;写OCW1,允许中断源IR3,其余均被屏蔽

            OUT     DX,AL

            MOV     intcnt,25         

            MOV     DX,TCONTR0

            MOV     AL,74H;8253工作通道1,先读(写)低字节,再读(写)高字节,方式4,二进制计数

            OUT     DX,AL

            MOV     DX,TCON1             

            MOV     AX,40000;8253初始值40000

            OUT     DX,AL

            MOV     AL,AH;写初值的高字节

            OUT     DX,AL

MOV     DX,0FF2BH;8255初始化,PA口方式0,输出

            MOV     AL,82H

            OUT     DX,AL

            STI;开中断

WATING:     CALL    DISP;调用显示程序             

            JMP     WATING;循环,延时

WRINTVER:   MOV     AX,0H

            MOV     ES,AX;ES指向AX

            MOV     DI,002CH;置DI初值为002CH

            LEA     AX,INTQ3;取INTQ3的初值

            STOSW

            MOV     AX,0000h

            STOSW

            RET;中断返回

INTREEUP3:  DEC     INTCNT;INTCNT自减1

            JNZ   INTRE2;不相等跳转到INTRE2

            MOV   INTCNT, 25

ADCON:      MOV     AX,00;设定输入电压值

            MOV     DX,ADPORT

            OUT     DX,AL

            MOV     CX,0500H;循环值,延时

DELAY:      LOOP    DELAY

            MOV     DX,ADPORT;读电压值

            IN      AL,DX

            MOV    RES,AL;将Al中值存入到RES中

            CALL    CONVERS;调用CONVERS

MOV      AL,RES

            CMP     AL, 66H;Al与66H比较

            JA      NEXT1;若大于,跳转到NEXT1

             MOV     AL, 0F0H

                MOV     DX, IOAPT;输出

                OUT     DX,AL

                JMP     INTRE2;跳转到INTRE2

NEXT1:          CMP     AL, 99H;AL与99H比较

                JA      NEXT2;跳转到NEXT2(灯L7-L10亮)

                MOV     AL, 0C3H

                MOV     DX, IOAPT

                OUT     DX,AL

                JMP     INTRE2;跳转到INTRE2

NEXT2:          MOV     AL, 0FH

                MOV     DX, IOAPT

                OUT     DX,AL

INTRE2:         MOV     AL,20H;中断

                MOV     DX,INTPORT1

                OUT     DX,AL

                IRET;中断返回

CONVERS:        MOV     AH, AL;取Al中得低四位

                AND     AL, 0FH

                MOV     BX, OFFSET BUF;取BUF的偏移地址给BX

                MOV     [BX+5], AL;将Al中得值给[BX+5]

                MOV     AL,AH;取Al中的高四位

                AND     AL, 0F0H

                MOV     CL, 04H

                SHR     AL, CL;Al中的内容右移4位

                MOV     [BX+4], AL;将Al中的内容给[BX+4]

                RET;中断返回

DISP:           MOV     AL, 0FFH ;PA端口清零       

                MOV     DX, PA

                OUT     DX, AL

                MOV     CL, 0DFH ;显示        

                MOV     BX, OFFSET BUF;取BUF的偏移地址

DIS1:           MOV     DX, PC;将Al中的 内容输出到PC端口

                OUT     DX, AL

           MOV     AL, [BX]

                MOV     AH, 00H

                PUSH    BX;BX入栈

                MOV     BX, OFFSET DATA1;取DATA1得偏移地址

               ADD     BX, AX

               MOV     AL, [BX];将对应的七段码给Al

                POP     BX;BX出栈

                MOV     DX, PB;输出到PB口

                OUT     DX, AL

                MOV     AL, CL显示

                MOV     DX, PA

                OUT     DX, AL

                PUSH    CX;CX出栈

DIS2:           MOV     CX, 00A0H;空循环,延时

                LOOP    $

                POP     CX

                CMP     CL,0FEH 

                JZ      LX1

                INC     BX

                ROR     CL, 1    

                JMP     DIS1

LX1:            MOV     AL, 0FFH;PB口清零

                MOV     DX, PB

                OUT     DX, AL

                RET;中断返回

BUF1:           MOV     BUF, 00H

                MOV     BUF+1, 08H

                MOV     BUF+2, 00H

                MOV     BUF+3 ,09H

                MOV     BUF+4, 00H

                MOV     BUF+5, 00H

                RET

CODE            ENDS

                END    START

实验八8250 串口实验

一、实验目的

(1)系统扩展以8250 为核心的可编程串行异步通讯接口芯片。

(2)对扩展的串行通讯接口实现自发自收。

二、实验内容

将寄存器AH 的内容从10H 开始通过8250 发送、接收,每次收发后AH 的内

容自动增1 直到FFH 为止,同时将每次接收到的数据,依次写到内存4000H~

40EFH 单元中,实现自发自收。

三、编程指南

1、通讯协议

1 个起始位,8 位数据位,1 个停止位,波特率:4800。

2、8250 的内部寄存器的端口地址

* 通讯线控制寄存器第7 位(DLAB)=0 ,** DLAB=1

3、8250 的内部寄存器格式(见课本)

4、波特率除数锁存器的值与波特率的对应关系(16 进制数)

5、8250 的初始化编程

(1)设置波特率

(2)设置通讯数据格式

(3)设置操作方式

(4)设置中断允许寄存器

四、实验接线图

五、实验步骤

1.连FF80H 孔到CS7,连TXD 到RXD(8250 实验区)。

2.编辑、调试、运行程序。

3.当系统显示“8250——good”表示自发自收结束,按RST 键,系统返回

P 态,用内存读写命令检查4000H~40EFH 内容是否为10H~FFH,验证其正确性。

六、参考程序

CODE SEGMENT ;H8250.ASM

ASSUME CS: CODE ;H8250.ASM

DATA EQU 0ff80H ;BTS-LSB

MSB EQU 0ff81H

LINE EQU 0ff83H

LSTAT EQU 0ff85H

PA EQU 0FF20H ;字位口

PB EQU 0FF21H ;字形口

PC EQU 0FF22H ;键入口

ORG 29A0H;源地址

START: JMP START0;跳转到START0

BUF DB ?,?,?,?,?,?;定义6字节缓冲区

data1:

db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0

c6h,0a1h;定义七段码

db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH

START0: MOV AL,80H ;DLAB=1

MOV DX,LINE

OUT DX,AL

MOV AL,18H ;BTS=4800;置波特率因子低8位

MOV DX,DATA ;ff80H

OUT DX,AL

MOV DX,MSB;置波特率因子高8位

MOV AL,00

OUT DX,AL

MOV AL,03H ;8- BIT ,1-STOP

MOV DX,LINE

OUT DX,AL

MOV AL,00 ;NO-INT

MOV DX,MSB ;8001H

OUT DX,AL

MOV AH,10H;AH中的内容

MOV BX,4000H

MAIN: CALL TXD;调用TXD

CALL RCV;调用RCV

MOV [BX],AL

INC BX;BX自加

INC AH;AH自加

CMP AH,00H;AH 与00H作比较

JNZ MAIN;不相等,跳转到MAIN

CALL BUF1;调用BUF1

MOV CX,00FFH;将00FFH初始给CX,循环次数

S3:

 PUSH CX;CX入栈

CALL DISP;显示

POP CX;CX出栈

LOOP S3;循环

CALL BUF3

S1: CALL DISP;显示

JMP S1;跳转到S1

TXD:   MOV DX,LSTAT;

WAIT1:  IN AL,DX;读取LSTAT中的值(读取线路状态寄存器)

TEST AL,20H;检验D5位是否为1,即检查发送保持器是否为空,不为空则等待

JZ WAIT1;不为空等待

MOV AL,AH;从AH中取出发送数据

MOV DX,DATA

OUT DX,AL

RET;中断返回

RCV:    MOV DX,LSTAT

WAIT2:    IN AL,DX;读线路状态寄存器

TEST AL,01H;查接收缓冲器是否为满,不满则继续等待

 JZ WAIT2

TEST AL,0EH

JNZ ERR;不相等,显示err

MOV DX,DATA

IN AL,DX;读取DATA端口值

RET;中断返回

ERR: CALL BUF2;调用BUF2程序

S2: CALL DISP;调用显示程序

JMP S2;循环显示

DISP: MOV AL,0FFH ;00H

MOV DX,PA

OUT DX,AL

MOV CL,0DFH ;20H ;显示子程序,5ms

MOV BX,OFFSET BUF;将BUF的偏移值送BX

DIS1: MOV AL,[BX];将[AL]中的内容读到Al中

MOV AH,00H

PUSH BX;BX入栈

MOV BX,OFFSET DATA1;将DATA1的偏移地址给BX

ADD BX,AX

MOV AL,[BX];读取对应的七段码

POP BX

MOV DX,PB;输出到PB端口

OUT DX,Al

MOV AL,CL;显示

MOV DX,PA

OUT DX,AL

PUSH CX

DIS2: MOV CX,00A0H;循环,延时

DELAY: LOOP DELAY

POP CX

CMP CL,0FEH ;01H

JZ LX1;相等跳转到LX1

INC BX;BX自加,地址后移一位

ROR CL,1 ;SHR CL,1

JMP DIS1;跳转到DIS1,循环显示

LX1: MOV AL,0FFH;PB端口清零

MOV DX,PB

OUT DX,AL

RET;中断返回

BUF1: MOV BUF,08H;显示8250——

MOV BUF+1,02H

MOV BUF+2,05H

MOV BUF+3,00H

MOV BUF+4,17H

MOV BUF+5,17H

RET

BUF2: MOV BUF,08H;显示err

MOV BUF+1,02H

MOV BUF+2,05H

MOV BUF+3,00H

MOV BUF+4,0EH

MOV BUF+5,18H

RET

BUF3: MOV BUF,09H;显示good--

MOV BUF+1,00H

MOV BUF+2,00H

MOV BUF+3,0DH

MOV BUF+4,10H

MOV BUF+5,10H

RET

CODE ENDS

END START

思考题

如果使用通讯协议:

1 个起始位,7 位数据位,2 个停止位,波特率:9600。系统将如何实现。

解:将MOV AL,18H

MOV DX,DATA

OUT DX,AL

MOV DX,MSB

MOV AL,00

OUT DX,AL

MOV AL,03H

MOV DX,LINE

OUT DX,AL

改为:

 MOV AL,0CH

MOV DX,DATA ;ff80H

OUT DX,AL

MOV DX,MSB

MOV AL,00

OUT DX,AL

MOV AL,06H

MOV DX,LINE

OUT DX,AL

实验感想:

     经过这几次的实验,我对一些接口芯片有了更深入的理解,动手能力也大大的提高了,在老师细心指导下,这几次的实验都比较顺利。

相关推荐