• 现代计算机接口实验 (三)8255实验


    1、A 口工作在方式0 输入方式,接8 个开关,B 口工作在方式0 输出方式,接
    8 个LED, PC7 接单脉冲发生器,输入负脉冲时,读一次A 口,存在TABLE 单
    元中,同时在B 口显示,读10 次结束。

    ;8255cs  288H~28BH
     ;pc7凹
     ;pB7~pB0-L7~L0
     ;pa7~pa0-k7~k0
     ;
     ;

     DATA SEGMENT
        PA EQU 288H
        PB EQU 289H
        PC EQU 28AH
        CTL55 EQU 28BH
        LTABLE DB 10 DUP(?)
    DATA ENDS

    STACK1 SEGMENT PARA STACK
        DW 20H DUP(0)
    STACK1 ENDS

    CSEG SEGMENT 
        ASSUME CS:CSEG,DS:DATA

    START:
        MOV AX,DATA
        MOV DS,AX
        MOV CX,10
        MOV SI,0
        MOV DX,CTL55
        MOV AL,10011000B
        OUT DX,AL

    WAT:   
        MOV DX,PC ;读C口
        IN AL,DX
        AND AL,80H ;检测PC7
        JNZ WAT

        MOV DX,PA ;PC7=0,读A口
        IN AL,DX
        MOV DX,PB ;送B口
        OUT DX,AL 
        MOV LTABLE[SI],AL;将读取的开关值存放到内存单元TABLE中
        INC SI

    WAT1:    
        MOV DX,PC ;读C口
        IN AL,DX
        AND AL,80H ;检测PC7
        JZ WAT1
        LOOP WAT
        MOV AH,4CH
        INT 21H
    CSEG ENDS
        END START

    2、A 口工作在方式0 输入方式,接8 个开关,B 口工作在方式0 输出方式,接

    8 个LED, PC0 接产生1s脉冲的8253, 8253 输入负脉冲时,读一次A 口,同时在B 口显示。

     ;8255cs  288H~28BH

     ;8253cs-280H~283H
     
    ;CLK0-2MHZ  ; CLK1-OUT0;  OUT1-PC0;
     ;pB7~pB0-L7~L0
     ;pa7~pa0-k7~k0
     ;
     ;

     DATA SEGMENT
        T0 EQU 280H ;T0--CTL为计数器0--控制寄存器的地址
        T1 EQU 281H
        T2 EQU 282H
        CTL1 EQU 283H
        PA EQU 288H
        PB EQU 289H
        PC EQU 28AH
        CTL55 EQU 28BH
        LTABLE DB 10 DUP(?)
     
    DATA ENDS

    STACK1 SEGMENT PARA STACK
        DW 20H DUP(0)
    STACK1 ENDS

    CSEG SEGMENT 
        ASSUME CS:CSEG,DS:DATA

    START:
        MOV AX,DATA
        MOV DS,AX
     
        MOV DX,CTL55
        MOV AL,10010001B;PC上输出PC下输入
        OUT DX,AL
        CALL Init_8253
        
    WAT:   
     
        MOV DX,PC ;读C口
        IN AL,DX
        AND AL,01H ;检测PC0
        JNZ WAT

        MOV DX,PA ;PC7=0,读A口
        IN AL,DX
        MOV DX,PB ;送B口
        OUT DX,AL

    WAT1:     
        MOV DX,PC ;读C口
        IN AL,DX
        AND AL,01H ;检测PC0
        JZ WAT1

        JMP WAT
        MOV AH,4CH
        INT 21H;初始化8253
    Init_8253 PROC
        PUSH DX
        PUSH AX
        ;/*8253产生1s的连续方波
        MOV DX,CTL1
        MOV AL,00100101B ;选择通道0,写入高字节,方式2,用BCD码
        OUT DX,AL
        MOV DX,T0
        MOV AL,20H
        OUT DX,AL
     
        MOV DX,CTL1
        MOV AL,01100111B ;选择通道1,写入高字节,方式3,用BCD码
        OUT DX,AL
        MOV DX,T1
        MOV AL,10H
        OUT DX,AL
        ;8253产生1S的连续方波*/

        POP AX
        POP DX
        RET
    Init_8253 ENDP
    CSEG ENDS
        END START

    3、A 口工作在方式0,输入,接8 个开关,B 口工作在方式0,输出,接八段

    显示器;由8253 产生1S 的脉冲,PC7 接该脉冲,来个脉冲将读取A 口,显示在

    屏幕上,同时;显示在八段显示器上,PC0,PC1 作为位码信号。

     ;8253cs-280H~283H
    ;8255cs288H~28BH
    ;8255pa7pa0-k7-k0;pb6~b0-gfedcba
    ;CLK0-2MHZ  ; CLK1-OUT0;  OUT1-PC7;PC0-S0;PC1-S1; 
    ;

    DATA SEGMENT
        T0 EQU 280H ;T0--CTL为计数器0--控制寄存器的地址
        T1 EQU 281H
        T2 EQU 282H
        CTL1 EQU 283H
        PA EQU 288H
        PB EQU 289H
        PC EQU 28AH
        CTL EQU 28BH
        LTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 
                    DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
                    ;存储0~F的段码
        DAT DB 21H
    DATA ENDS

    CODE SEGMENT 
        ASSUME CS:CODE,DS:DATA

    ;主程序
    START:
        MOV AX,DATA
        MOV DS,AX

        CALL Init_8253
        CALL Init_8255
    AGAIN:
        CALL READ_PA
        CALL DISP_DAT
        JMP AGAIN

        MOV AH,4CH
        INT 21H

    ;数码显示字符程序
    LED_1 PROC 
        LEA SI,LTABLE
        ADD SI,BX
        MOV AL,[SI]
        AND AL,7FH ;最高位设为0,以不显示小数点
        MOV DX,PB
        OUT DX,AL
        RET
    LED_1 ENDP

    LED_S PROC
        PUSH CX
        PUSH BX;保存

        MOV DX,PC ;熄位码
        MOV AL,0H
        OUT DX,AL;数码管熄灭
       

        MOV BH,0
        AND BL,0FH ;显示低四位~8421~0-F
        CALL LED_1
        MOV DX,PC ;选择低四位,即PC0置为1
        MOV AL,1H
        OUT DX,AL
        
        MOV DX,PC ;熄位码
        MOV AL,0H
        OUT DX,AL;数码管熄灭

        POP BX;调回保存的数,备用
        PUSH BX;重新保存

        MOV BH,0
        MOV CL,4
        SHR BL,CL
        AND BL,0FH ;显示高四位
        CALL LED_1
        MOV DX,PC ;选择高四位,即PC1置为1
        MOV AL,02H
        OUT DX,AL

        MOV DX,PC ;熄位码
        MOV AL,0H
        OUT DX,AL

        POP BX
        POP CX
        RET
    LED_S ENDP

    ;读取A口数据
    READ_PA PROC
        PUSH DX
        PUSH AX

    LOOP_CHECK:
        MOV BH,0
        MOV BL,DAT
        CALL LED_S
        MOV DX,PC ;8255 C口读入
        IN AL,DX
        TEST AL,80H ;判断1s脉冲
        JNZ LOOP_CHECK
        MOV DX, PA
        IN AL,DX
        MOV DAT,AL

        POP AX
        POP DX
        RET
    READ_PA ENDP

    ;电脑终端显示字符程序
    DISP_DAT PROC
        PUSH DX
        PUSH AX
        PUSH CX

        MOV AL,DAT
        MOV CL,4
        SHR AL,CL
        AND AL,0FH

        CMP AL,0AH;和10比较
        JC S1;BCD码 修正 ;〈10直接S1
        ADD AL,7H;>9 要+7,用于进位
    S1:
        ADD AL,30H;加上0的ASCII码
        MOV DL,AL ;高四位显示在屏幕上
        MOV AH,02H
        INT 21H

        MOV AL,DAT
        AND AL,0FH
        CMP AL,0AH
        JC S2
        ADD AL,7H
    S2:
        ADD AL,30H
        MOV DL,AL ;低四位显示在屏幕上
        MOV AH,02H
        INT 21H
        MOV DL,' ' ;显示空格
        MOV AH,02H
        INT 21H

        POP CX
        POP AX
        POP DX
        RET
    DISP_DAT ENDP

    ;初始化8253
    Init_8253 PROC
        PUSH DX
        PUSH AX
        ;/*8253产生1s的连续方波
        MOV DX,CTL1
        MOV AL,00100101B ;选择通道0,写入高字节,方式2,用BCD码
        OUT DX,AL
        MOV DX,T0
        MOV AL,20H
        OUT DX,AL
        ;
        MOV DX,CTL1
        MOV AL,01100111B ;选择通道1,写入高字节,方式3,用BCD码
        OUT DX,AL
        MOV DX,T1
        MOV AL,10H
        OUT DX,AL
        ;8253产生1S的连续方波*/

        POP AX
        POP DX
        RET
    Init_8253 ENDP

    ;初始化8255
    Init_8255 PROC
        PUSH DX
        PUSH AX

        MOV DX,CTL ;8255方式字控制字控制;10011000
        MOV AL,98H
        OUT DX,AL

        POP AX
        POP DX
        RET
    Init_8255 ENDP

    CODE ENDS
        END START

    4、A 口工作在方式0 输入方式,接4 个开关,B 口工作在方式0 输出方式,

    接1 个七段显示器,PC7 接单脉冲发生器,输入负脉冲时,读一次A 口,同时

    在B 口显示,读16 次结束。

     ;8253cs-280H~283H
    ;8255cs288H~28BH
    ;8255pa3pa0-k3-k0;pb6~b0-gfedcba
    ;8255PC7-凹,PC0-S1;
    ;

    DATA SEGMENT
        T0 EQU 280H ;T0--CTL为计数器0--控制寄存器的地址
        T1 EQU 281H
        T2 EQU 282H
        CTL1 EQU 283H
        PA EQU 288H
        PB EQU 289H
        PC EQU 28AH
        CTL EQU 28BH
        LTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 
                    DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
                    ;存储0~F的段码
        DAT DB 21H
    DATA ENDS

    CODE SEGMENT 
        ASSUME CS:CODE,DS:DATA

    ;主程序
    START:
        MOV AX,DATA
        MOV DS,AX
        
        MOV CX,16
        CALL Init_8255
    AGAIN:
        CALL READ_PA
        CALL DISP_DAT
        LOOP  AGAIN

        MOV AH,4CH
        INT 21H

    ;数码显示字符程序
    LED_1 PROC 
        LEA SI,LTABLE
        ADD SI,BX
        MOV AL,[SI]
        AND AL,7FH ;最高位设为0,以不显示小数点
        MOV DX,PB
        OUT DX,AL
        RET
    LED_1 ENDP

    LED_S PROC
        PUSH CX
        PUSH BX;保存
        MOV DX,PC ;熄位码
        MOV AL,0H
        OUT DX,AL;数码管熄灭
       

        MOV BH,0
        AND BL,0FH ;显示低四位~8421~0-F
        CALL LED_1
        MOV DX,PC ;选择低四位,即PC0置为1
        MOV AL,1H
        OUT DX,AL
        
        MOV DX,PC ;熄位码
        MOV AL,0H
        OUT DX,AL;数码管熄灭

       ; POP BX;调回保存的数,备用
       ; PUSH BX;重新保存

        
        POP BX
        POP CX
        RET
    LED_S ENDP

    ;读取A口数据
    READ_PA PROC
        PUSH DX
        PUSH AX
        PUSH CX

    LOOP_CHECK:
        MOV BH,0
        MOV BL,DAT
        CALL LED_S
        MOV DX,PC ;8255 C口读入
        IN AL,DX
        TEST AL,80H ;判断PC7
        JNZ LOOP_CHECK
        
        MOV DX,PA
        IN AL,DX
        MOV DAT,AL
       
       LOOP_C:
        MOV BH,0
        MOV BL,DAT
        CALL LED_S
        MOV DX,PC ;8255 C口读入
        IN AL,DX
        TEST AL,80H ;判断PC7
        JZ  LOOP_C
       
       
        POP CX
        POP AX
        POP DX
        RET
    READ_PA ENDP

    ;电脑终端显示字符程序
    DISP_DAT PROC
        PUSH DX
        PUSH AX
        PUSH CX

        MOV AL,DAT
        MOV CL,4
        SHR AL,CL
        AND AL,0FH

        CMP AL,0AH;和10比较
        JC S1;BCD码 修正 ;〈10直接S1
        ADD AL,7H;>9 要+7,用于进位
    S1:
        ADD AL,30H;加上0的ASCII码
        MOV DL,AL ;高四位显示在屏幕上
        MOV AH,02H
        INT 21H

        MOV AL,DAT;DFFGGFG
        AND AL,0FH
        CMP AL,0AH
        JC S2
        ADD AL,7H
    S2:
        ADD AL,30H
        MOV DL,AL ;低四位显示在屏幕上
        MOV AH,02H
        INT 21H
        MOV DL,' ' ;显示空格
        MOV AH,02H
        INT 21H

        POP CX
        POP AX
        POP DX
        RET
    DISP_DAT ENDP

    ;初始化8255
    Init_8255 PROC
        PUSH DX
        PUSH AX

        MOV DX,CTL ;8255方式字控制字控制;10011000
        MOV AL,98H
        OUT DX,AL

        POP AX
        POP DX
        RET
    Init_8255 ENDP

    CODE ENDS
        END START

  • 相关阅读:
    如何搭建PHP本地服务器
    load xml with xls
    t-sql read xlsx
    test js online link
    export to pdf
    silverlight browse information
    ckeditor link
    T-Sql操作Xml数据(转)
    Linq to Xml
    webpack -p压缩打包react报语法错误处理
  • 原文地址:https://www.cnblogs.com/xujiayu/p/4947211.html
Copyright © 2020-2023  润新知