实验八 32 位LED 显示实验
一、实验目的
1.使用32位汇编语言,掌握对32位的IO端口进行读写操作,并且体会8位与32位总线如何在同一系统中兼容。体会32位指令的速度优势。
2.学习使用74LS273来扩展输出端口。
二、实验要求
根据配置空间的原理,通过编程将PCI卡开放给用户的IO端口读出。
分别编写32位与8位的汇编程序对4片74LS237进行操作,点亮32个LED发光管,体会32 位程序的速度。在实验时实现控制32个LED左移、右移、交叉点亮。
三、实验原理
使用8芯的扁平电缆按连线表将信号相连,这样在实验系统的32 位总线上就有4片
74LS273(地址00H)对应了32位LED,可用一条32位指令 OUT DX,EAX 将32位数据写入74LS273中,LED 即显示出74LS273 中锁存的数据。当然也可以使用4条8位指令OUT DX,AL 将32个LED点亮(4 片74LS273 的地址分别对应00H、01H 、02H、03H)。
四、实验程序例程及框图
示例程序:LED32.ASM
框图:
32 位LED 显示实验
五、实验步骤
1.接线:用8位数据线对应连接32位CPU接口模块的JD1、JD2、JD3、JD4到32位LED显示模块的JD3B、JD2B、JD1B、JD4B。
2.把BIN文件夹复制到硬盘根目录下,如:D:\BIN ;把LED32.ASM文件复制到BIN 路径
下。
3.在Windows98下打开MS-DOS,使用CD命令到BIN 路径下,输入下面命令后回车。
4.编译:tasm /zi LED32.ASM (注:“.ASM”可省略)
5.连接:tlink /v/3 LED32.OBJ (注:“.OBJ”可省略)
6.运行:LED32.EXE (注:“.EXE”可省略)
运行结果如下图所示:
从PC键盘输入1,32位LED显示,左移;
从PC键盘输入2,32位LED显示,右移;
从PC键盘输入3,32位LED显示,闪烁;
从PC键盘输入4,程序退出。
7.把BIN文件夹下的“LED32.ASM”源程序及生成的“.map”、“.obj”、“.exe”文件删除掉。
实验九 8255模拟交通灯实验
一、实验目的
1.学习8255 芯片的使用方法;
2.学习模拟交通灯控制的方法;
3.学习双色灯的使用。
二、实验要求
编写程序,以8255 的C 口作为输出口,控制4 个双色LED 灯(可发红,绿,黄光),模拟十字路口交通灯管理。
三、实验原理
双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。使用8255的端口C 控制双色灯。8255的CS由CPLD输出,决定了8255的起始地址为40H。8255的A0,A1地址线分别接了32位总线A2,A3,决定了A、B、C和状态口地址分别为40H、44H、48H和4CH。
假设一个十字路口为东西南北走向。初始状态0 为东西红灯,南北红灯。然后转状态1 南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。
注意:LED灯亮灭的间隔时间是由延时程序来控制的,如果计算机的速度过快,LED灯亮灭的间隔时间就比较短,实验现象就不明显。可通过调整延时程序使实验现象更明显。四、实验程序例程及框图
示例程序:Traffic.asm1.
五、实验步骤
1.接线:用8位数据线将8255模块的JD3D连接到32位LED显示模块的JD4B。
2.把BIN文件夹复制到硬盘根目录下,如:D:\BIN ;把Traffic.asm文件复制到BIN 路径下。
3.在Windows98下打开MS-DOS,使用cd命令到BIN 路径下,输入下面命令后回车。
4.编译:tasm /zi Traffic.ASM (注:“.ASM”可省略)
5.连接:tlink /v/3 Traffic.OBJ (注:“.OBJ”可省略)
6.运行:Traffic.EXE (注:“.EXE”可省略)
运行结果如下图所示:
按PC键盘(任意键),启动交通灯,再按PC键盘任意键,则程序退出。
7.把BIN文件夹下的“Traffic.ASM”源程序及生成的“.map”、“.obj”、“.exe”文件删除掉。
N
8255模拟交通灯实验
D1 EQU 1000H
D2 EQU 5000H
D3 EQU 0ffffH
DA TA SEGMENT
C8255 DW 04CH ;8255控制字的地址
D8255C DW 048H ;8255的C口地址
PB DB ?
MESS2 DB 'ENTER ANY KEY CAN EXIT TO DOS!',0DH,0AH,'$' MESS1 DB 'ENTER ANY KEY TO BEGIN!',0DH,0AH,'$'
DIS1 DB 'PCI ADDRESS 0 $';
DIS5 DB 'BIOS NOT SUPPER!$'
DIS6 DB 'READ PCI BOARD FAIL!$'
;-------PCI Configuration Space Registers------------------------------- PCI_CS_VENDOR_ID EQU 0
PCI_CS_DEVICE_ID EQU 2
PCI_CS_COMMAND EQU 4
PCI_CS_STATUS EQU 6
PCI_CS_REVISION EQU 8
PCI_CS_CLASS_CODE EQU 9
PCI_CS_CACHE_LINE_SIZE EQU 0CH
PCI_CS_MASTER_LATENCY EQU 0DH
PCI_CS_HEADER_TYPE EQU 0EH
PCI_CS_BIST EQU 0FH
PCI_CS_BASE_ADDRESS_0 EQU 10H
PCI_CS_BASE_ADDRESS_1 EQU 14H
PCI_CS_BASE_ADDRESS_2 EQU 18H
PCI_CS_BASE_ADDRESS_3 EQU 1CH
PCI_CS_BASE_ADDRESS_4 EQU 20H
PCI_CS_BASE_ADDRESS_5 EQU 24H
PCI_CS_EXPANSION EQU 30H
PCI_CS_INTERRUPT_LINE EQU 3CH
PCI_CS_INTERRUPT_PIN EQU 3DH
PCI_CS_MIN_GNT EQU 3EH
PCI_CS_MAX_LAT EQU 3FH
ADDRESS_IO_0 DW ?
ADDRESS_IO_1 DW ?
DA TA ENDS
STACK1 SEGMENT STACK
STA DW 50 DUP(?)
TOP EQU LENGTH STA
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK1 START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,0B1H
MOV AL,1H
INT 1AH
CMP AH,0
JZ AA1
MOV DX,OFFSET DIS5
MOV AH,9
INT 21H
JMP QUIT
AA1: MOV AH,0B1H
MOV AL,02H
MOV CX,5406H
MOV DX,10B5H
MOV SI,0
INT 1AH
JNC AA
MOV DX,OFFSET DIS6
MOV AH,9
INT 21H
JMP QUIT
AA: MOV AH,0B1H
MOV AL,09H
MOV DI,PCI_CS_BASE_ADDRESS_1
INT 1AH
CMP AH,0
JZ BB1
MOV DX,OFFSET DIS1
MOV AH,9
INT 21H
JMP QUIT
BB1:
MOV AH,0B1H
MOV AL,09H
MOV DI,PCI_CS_BASE_ADDRESS_3
INT 1AH
CMP AH,0
JZ CC
MOV DX,OFFSET DIS1
MOV AH,9
INT 21H
JMP QUIT
CC: AND CX,0FFFCH
MOV AX,CX
ADD C8255,AX
ADD D8255C,AX
MOV DX,C8255 ;设置为全输出
MOV AL,80H
OUT DX,AL
MOV DX,D8255C
MOV AL,00
OUT DX,AL ;清LED
MOV AH,09H
LEA DX,MESS1
INT 21H
MOV AH,08H
INT 21H
MOV AH,09H
LEA DX,MESS2
INT 21H
MOV DX,D8255C ;全红
MOV AL,0F0H
OUT DX,AL
MOV BX,D2
CALL DL Y
BG: MOV AL,01011010B ;南北绿,东西红OUT DX,AL
MOV BX,D3
CALL DL Y
MOV BX,D3
CALL DL Y
MOV CX,03H
XH1: AND AL,050H ;绿灭
OUT DX,AL
MOV BX,D1
CALL DL Y
OR AL,0AH ;绿亮
OUT DX,AL
MOV BX,D1
LOOP XH1
OR AL,0A0H ;南北黄
OUT DX,AL
MOV AL,10100101B ;南北绿,东西红
OUT DX,AL
MOV BX,D3
CALL DL Y
MOV BX,D3
CALL DL Y
MOV CX,03H
XH2: AND AL,0A0H ;绿灭
OUT DX,AL
MOV BX,D1
CALL DL Y
OR AL,05H ;绿亮
OUT DX,AL
MOV BX,D1
CALL DL Y
LOOP XH2
OR AL,50H ;东西黄
OUT DX,AL
MOV BX,D2
CALL DL Y
PUSH AX
PUSH DX
MOV AH,06H
MOV DL,0FFH
INT 21H
JNZ QUIT
POP DX
POP AX
JMP BG
QUIT: MOV AX,4C00H
INT 21H
DL Y PROC NEAR
PUSH CX
DDD: MOV CX,0FFFFH
LOOP $
DEC BX
CMP BX,0
POP CX
RET
DL Y ENDP
CODE ENDS END START