博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
现代计算机接口实验 (三)8255实验
阅读量:5023 次
发布时间:2019-06-12

本文共 5853 字,大约阅读时间需要 19 分钟。

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

转载于:https://www.cnblogs.com/xujiayu/p/4947211.html

你可能感兴趣的文章
安卓动画有哪几种?他们的区别?
查看>>
Nodejs学习总结 -Express入门(一)
查看>>
web前端优化
查看>>
ssh 连接原理及ssh-keygen
查看>>
vs2013编译qt程序后中文出现乱码
查看>>
【转】IOS数据库操作SQLite3使用详解
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
设计网站大全
查看>>
JVM CUP占用率过高排除方法,windows环境
查看>>
【转】JAVA字符串格式化-String.format()的使用
查看>>
【转】ButterKnife基本使用--不错
查看>>
【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”...
查看>>
函数中关于const关键字使用的注意事项
查看>>
微信架构(转)
查看>>
Web项目中的路径问题
查看>>
js随机数的取整
查看>>
关于解析漏洞
查看>>
十大经典预测算法(六)---集成学习(模型融合算法)
查看>>
用php做一个简单的注册用户功能
查看>>
一款基于css3的3D图片翻页切换特效
查看>>