1.可编程并行接口实验

实验目的与任务
1、理解可编程并行接口8255的基本工作原理;
2、熟悉8255的初始化编程方法;
3、掌握8255方式0的工作原理及使用。
基本原理
8255A端口A通过20芯偏平线连接J5、J6已与8个LED灯连接。8255A端口A工作在方式0,输出。通过端口A控制LED发光。
在这里插入图片描述

实验内容
编写程序,要求利用8255的A口控制8个发光二极管的发光,并产生一定的艺术效果,验证实验的正确性。

可编程并行接口8255的地址分配:
A300H 
B301H
C302H
控制寄存器端口	     303H


控制字为:10000000B

线路连接:模块电源跳JP8。20线扁平线J5,J6连接。

程序详单:

CODE SEGMENT
	ASSUME CS:CODE
START:
	MOV DX,303H;初始化
	MOV AL,80H;方式0
	OUT DX,AL
P0:	
	MOV CX,1
P1:
	MOV DX,300H;A口
	MOV AL,00000001B
	OUT DX,AL
	INC CX
	CMP CX,20000;其实就是延时,不然一闪而过
	JNZ P1

	MOV CX,1
P2:
	MOV DX,300H
	MOV AL,00000010B
	OUT DX,AL
	INC CX
	CMP CX,20000
	JNZ P2

	MOV CX,1
P3:
	MOV DX,300H
	MOV AL,00000100B
	OUT DX,AL
	INC CX
	CMP CX,20000
	JNZ P3

	MOV CX,1
P4:
	MOV DX,300H
	MOV AL,00001000B
	OUT DX,AL
	INC CX
	CMP CX,20000
	JNZ P4

	MOV CX,1
P5:
	MOV DX,300H
	MOV AL,00010000B
	OUT DX,AL
	INC CX
	CMP CX,20000
	JNZ P5

	MOV CX,1
P6:
	MOV DX,300H
	MOV AL,00100000B
	OUT DX,AL
	INC CX
	CMP CX,20000
	JNZ P6

	MOV CX,1
P7:
	MOV DX,300H
	MOV AL,01000000B
	OUT DX,AL
	INC CX
	CMP CX,20000
	JNZ P7

	MOV CX,1
P8:
	MOV DX,300H
	MOV AL,10000000B
	OUT DX,AL
	INC CX
	CMP CX,20000
	JNZ P8

JMP P0

MOV AH,4CH
INT 21H
CODE ENDS
END START

咋运行呢?
masm.exe和link.exe必不可少!
来吧!一大波资源
windows下快捷键win+R输入cmd进入你写的文件名.asm目录下:
(忘了win10要dosbox

然后masm 文件名.asm
然后enter

然后link 文件名.obj

生成文件名.exe则完成了
在这里插入图片描述

运行情况:

在这里插入图片描述
差点忘了基础不好的同学请再记一遍:
数据从低位到高位是从右往左。

10000000-----

但地址是左低右高

例如:

10001001
1002
1003

对应数据:12345678

7856
34
12

如果这样存进去就是小端模式啦。

1000781001  		56
1002		34
100312

小端模式低低高高
低地址对应低字节
高地址对应高字节

则相应的大端模式:低高高低
低地址对应高字节
高地址对应低字节

再来虚拟仿真机上来个不同的:(其实啥也没变,就由8位变成了24位,0就灭,1就亮
在这里插入图片描述

端口地址变了:
8255四个端口 400H ~ 403H

data   segment
portA  equ 400H        ; PA口地址
s      db "twenty four LEDs flicker crosswise. Press any key to exit ...",0dh,0ah,"$"    ;程序功能提示
data   ends

code   segment
       assume cs:code,ds:data
       
go:    mov ax,data
       mov ds,ax
      mov dx,offset s    ;显示提示
      mov ah,9
      int 21h
      
       mov dx,porta+3;控制字端口初始化
       mov al,80h
       out dx,al         ; 三端口均初始化为方式0输出
       mov bx,5555H     ;5H转换为0101B 
       mov cl,55H 
               
L0:    mov ah,0bH
        Int 21h         ; 有无按键,按了就退出
        Cmp al,0ffH
        Jz  exit 
              
        mov dx,portA  
        mov al,bl
        out dx,al   ; 输出01010101B到A口
        
        Inc  dx
        mov al,bh
        out dx,al   ; 输出01010101B到B口
        
        Inc  dx
        mov al,cl
        Out dx,al  ; 输出01010101B到C口
        
        Call delay05      ; 延时
        Xor  bx,0ffffH    ; 异或 各位取反
        xor  cl,0ffH          
        Jmp  L0
                 
Exit:   mov ah,4ch
        Int 21h
        
delay05 proc near        ; 循环延时子程序
        push cx
        push bx
        mov cx,300H
d1:     mov bx,1200
d2:     dec bx
        jnz d2
        loop d1
        pop bx
        pop cx
        ret
delay05 endp

Code   ends
        End go

一词:redeem 补救,弥补

在这里插入图片描述

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值