电子信息与通信工程专业《微机原理与接口》课程
微机原理与接口实验报告
姓名: 赵紫路
班级: 电子信息0902
学号: 0909091830
指导教师: 张金焕
中南大学·信息科学与工程学院
20##年
实验一 8255A可编程并行口实验
一、实验目的
1、掌握并行接口芯片8255A和微机接口的连接方法。
2、掌握并行接口芯片8255A的工作方式及其编程方法。
二、实验内容
1、实验原理
如实验原理图4-3所示,PC口8位接8个开关K1~K8,PB口8位接8个发光二极管,从PC口读入8位开关量送PB口显示。拨动K1~ K8,PB口上接的8个发光二极管L0~ L7对应显示K1~ K8的状态。
2、实验线路连接
(1) 8255A芯片PC0~ PC7插孔依次接K1~ K8。
(2) 8255A芯片PB0~PB7插孔依次接L0~ L7。
(3) 8255A的片选插孔8255CS接译码输出Y7插孔。
图4-3
三、实验软件框图
四、实验步骤
1、按图4-3连好线路。
2、运行实验程序,拨动K1~8,L0~L7会跟着亮灭
五、程序代码
CODE SEGMENT
ASSUME CS:CODE
IOCONPT EQU 0073H //定义各接口地址
IOCPT EQU 0072H
IOBPT EQU 0071H
START:
MOV AL,89H
MOV DX,IOCONPT //定义B口出,C口入
OUT DX,AL
NOP
NOP
NOP
IOLED1: MOV DX,IOCPT
IN AL,DX //从C口录入数据
MOV AH,AL
ROL AH,1
XOR AL,AH //将录入的值和其值得循环移位的值异或
MOV DX,IOBPT
OUT DX,AL
JMP IOLED1
CODE ENDS
END START
六、实验结果
拨动一位开关,将会点亮相邻的两个LED灯,这是应为用了异或后的结果。
实验二 8253A定时/计数器实验
一、实验目的
学习8253A可编程定时/计数器与8088CPU的接口方法;了解8253A的工作方式; 掌握8253A在各种方式下的编程方法。
二、 实验内容
本实验原理图如图5-3所示,8253A的A0、A1接系统地址总线A0、A1,故8253A 有四个端口地址,如端口地址表5-1所示。8253A的片选地址为48H~ 4FH。 因此, 本实验板中的8253A四个端口地址为48H、49H、4AH、4BH,分别对应通道0、通道1、通道2和控制字。采用8253A通道2,工作在方式3(方波发生器方式),输入时钟CLK2 为1MHZ, 输出OUT2 要求为1KHZ的方波,并要求用接在GATE2引脚上的导线是接地(“0”电平)或甩空(“1”电平)来观察GATE对计数器的控制作用,用示波器观察输出波形。
图 5-3
三、 实验线路连接
1、 8253A芯片(就在主板上)的CLK2引出插孔连主板上的分频输出插孔T1(1MHZ)。
四、 实验软件框图
五、 实验步骤
1、按图5-3连好实验线路
2、 运行实验程序
用示波器测量8253A的OUT2输出插孔,应有频率为1KHZ的方波输出,幅值0~4V。
六、程序代码
CODE SEGMENT
ASSUME CS:CODE
TCONTRO EQU 004BH //定义各个接口的地址
TCON2 EQU 004AH
START: MOV DX,TCONTRO
MOV AL,0B7H //使用计数器2,先写高字节,再写低字节,工作在方式三,十进制
OUT DX,AL
MOV DX,TCON2
MOV AL,00H
OUT DX,AL
MOV AL,10H //定义计数的值为1000,并输出波形
OUT DX,AL
CODE ENDS
END START
七、实验结果
可以从屏幕上看到,计数器产生了频率为1KHZ的方波,这是因为计数器将1MHZ的分频为了1KHZ的波,且其工作在方式3,所以输出为方波。
实验三 使用8259A的单级中断控制实验
一、实验目的
1、掌握中断控制器8259A与微机接口的原理和方法。
2、掌握中断控制器8259A的应用编程。
二、实验内容
本系统中已设计有一片8259A中断控制芯片,工作于主片方式,8个中断请求输入端IR0~IR7对应的中断型号为8~F,其和中断矢量关于如下表6-1所示。
根据实验原理图6-1,8259A和8088系统总线直接相连,8259A 上连有一系统地址线A0,故8259A 有2 个端口地址, 本系统中为20H、21H。 20H 用来写ICW1, 21H 用来写ICW2、ICW3、ICW4,初始化命令字写好后, 再写操作命令字。OCW2、OCW3 用口地址20H,OCW1用口地址21H。图6-1中,使用了3号中断源,IRQ3插孔和SP插孔相连,中断方式为边沿触发方式,每按一次AN按钮产生一次中断信号,向8259A发出中断请求信号。如果中断源电平信号不符规定要求则自动转到7号中断,显示“Err”。CPU响应中断后,在中断服务中, 对中断次数进行计数并显示,计满5次结束,显示器显示“8259Good”。
表6-1
四、实验线路连接
1)将单级中断模块中8259A的IRQ3插孔和脉冲发生器单元SP1插孔相连。SP1插孔初始电平置为低电平。
2)将单级中断模块中8259A的片选插孔8259CS1连主板的CS6(对58B机型该线不连)。
4) 将8279接口模块上的插座DU(JB51)(a-h)用8芯线连接至数码管模块插座DU (a-h),8279接口模块上插座BIT(JB53)连接至数码管模块插座BIT。
3) 8279接口模块上的插孔8279ClK连至上面主板的CLOCK(对58B机型该线不连)。
4)8279接口模块上的插孔8279CS连至上面主板的CS5(对58B机型该线不连)。
图6-2
五、实验软件框图
六、程序代码
CODE SEGMENT
ASSUME CS:CODE
INTPORT1 EQU 0020H //8259端口
INTPORT2 EQU 0021H
INTQ3 EQU INTREEUP3 //3号中断入口
INTQ7 EQU INTREEUP7 //7号中断入口
CONTPORT EQU 00DFH //显示端口
DATAPORT EQU 00DEH
DATA0 EQU 0580H
DATA1 EQU 0500H
DATA2 EQU 0508H
DATA3 EQU 0518H
DATA4 EQU 0520H
ORG 1000H
START: JMP Tint1
Tint1: CLI //清方向标志位
MOV AX,0H
MOV DS,AX
MOV DX,CONTPORT
MOV AL,00H
OUT DX,AL ;KEYBORD DISPLY MODE
MOV AL,2AH
OUT DX,AL ;8279 CLOCK
MOV AL,0d0h
OUT DX,AL ;8279 CLEAR
MOV AL,90h
OUT DX,AL ;READ FIFO RAM COMMAND
TEST1: IN AL,DX
AND AL,80H
JNZ TEST1
CALL FORMAT
CLI
MOV DI,DATA0
MOV CX,08H
XOR AX,AX //数据区0580H-0587H清零
REP STOSW
MOV SI,DATA3
CALL LEDDISP ;DISP 8259-1
MOV AX,0H
MOV DS,AX
CALL WRINTVER ;WRITE INTRRUPT
MOV AL,13H //8259初始化,单片8259,边沿触发,ICW4=1
MOV DX,INTPORT1
OUT DX,AL
MOV AL,08H //设置起始中断类型码:08H
MOV DX,INTPORT2 //写ICW2
OUT DX,AL
MOV AL,09H // ICW4:一般完全嵌套方式,缓冲工作方式
OUT DX,AL //非AEOI(一般EOI方式)方式
MOV AL,0F7H // OCW1,对IR3开放中断,其它都屏蔽
OUT DX,AL
MOV BYTE PTR DS:[0601H],01H ; //DS:[0601H]为按键按下次数计数器
STI //IF=1,开中断
WATING: JMP WATING //等待中断
WRINTVER:MOV AX,0H //写中断向量子程序
MOV ES,AX
MOV DI,002CH //在中断向量表中的位置
LEA AX,INTQ3 //写3号中断向量
STOSW
MOV AX,CS
STOSW
MOV DI,003CH
LEA AX,INTQ7
STOSW
MOV AX,CS
STOSW
RET
INTREEUP3:CLI //关中断
MOV AL,DS:[0601H] //取中断次数转换成显示代码
CALL CONVERS
MOV SI,DATA0
CALL LEDDISPD
MOV AL,20H //20H,一般EOI方式
MOV DX,INTPORT1 //写入OCW2控制字
OUT DX,AL
ADD BYTE PTR DS:[0601H],01H //将按键按下计数器+1
CMP BYTE PTR DS:[0601H],06H //计数器是否到了5次
JNA INTRE1
MOV SI,DATA4
CALL LEDDISP
INTRE3: JMP INTRE3 //程序死循环,结束
CONVERS:MOV BH,0H //将按键次数转换为要显示的数据
AND AL,0FH
MOV BL,AL
MOV AL,CS:[BX+DATA2]
MOV BX,DATA0
MOV DS:[BX],AL
RET
INTRE1: MOV AL,20H //不满5次,开中断返回
MOV DX,INTPORT1 //写入OCW2控制字:
OUT DX,AL //一般EOI方式
STI
IRET //中断返回
INTREEUP7: CLI
MOV SI,DATA1
CALL LEDDISP
MOV AL,20H
MOV DX,INTPORT1
OUT DX,AL
IRET
LEDDISP:MOV AL,90H
MOV DX,CONTPORT
OUT DX,AL
MOV BYTE PTR DS:[0600H],00
LED1: CMP BYTE PTR DS:[0600H],07H
JA LED2
MOV BL,DS:[0600H]
MOV BH,0H
MOV AL,CS:[BX+SI]
MOV DX,DATAPORT
OUT DX,AL
ADD BYTE PTR DS:[0600H],01H
JNZ LED1
LED2: RET
LEDDISPD:MOV AL,90H
MOV DX,CONTPORT
OUT DX,AL
MOV BYTE PTR DS:[0600H],00
LEDD1: CMP BYTE PTR DS:[0600H],07H
JA LEDD2
MOV BL,DS:[0600H]
MOV BH,0H
MOV AL,DS:[BX+SI]
MOV DX,DATAPORT
OUT DX,AL
ADD BYTE PTR DS:[0600H],01H
JNZ LEDD1
LEDD2: RET
FORMAT: MOV BX,0
MOV WORD PTR DS:[BX+0500H],5050H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],0079H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],0000H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],0000H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],063FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],4F5BH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6D66H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],077DH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6F7FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7C77H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],5E39H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7179H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],4006H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],4040H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6D6FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7F5BH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],3F5EH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],5C3FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6D6FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7F5BH
RET
CODE ENDS
END START
七、实验结果
按下AN,产生一次中断,按满五次后,显示8259good,证明程序运行正确,实验成功。
实验四 存贮器读写实验
一、实验目的
1、熟悉静态RAM的使用方法,掌握8088微机系统扩展RAM的方法。
2、熟悉静态RAM读写数据编程方法。
二、实验内容
对指定地址区间的RAM(2000H~23FFH)先进行写数据55AAH, 然后将其内容读出再写到3000H~33FFH中。
三、硬件电路(系统中已连接好)
四、实验步骤
1、运行实验程序
2、稍后按RESET键退出, 用存贮器读方法检查2000H~ 23FFH 中的内容和3000~33FF中的内容应都是55AA。
五、程序代码
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,0H
MOV DS,AX //段基址
MOV BX,2000H //要写入数据的地址
MOV AX,55AAH //写入的内容存入AX
MOV CX,03FFH //2000H-23FFH单元需写入内容
RAMW1: MOV DS:[BX],AX //通过寄存器间接寻址将55AAH写入地址20000H
ADD BX,0002H //地址向后两位
LOOP RAMW1 //2000H-23FFH顺序写入
MOV DX,3000H //应转移到的地址
MOV BX,2000H
MOV CX,03FFH
MOV AX,0H
MOV DS,AX //段基址为0;
RAMW2: MOV AX,DS:[BX] //将2000H-23FFH中的内容读出到3000H-33FFH中
MOV DS:[DX],AX
ADD BX,0002H
ADD DX,0002H
LOOP RAMW2
CODE ENDS
END START
六、实验结果
按RESET键退出, 用存贮器读方法检查2000H~ 23FFH 中的内容和3000~33FF中的内容,可以看到两段内存中的值都为55AA,证明程序运行正确,实验成功。
实验总结
通过本次微机接口实验,给了我一次在实际操作中接触各个芯片的机会,加深了我对8253、8255、8259A的认识,同时也让我明白了微型计算机中的数据的存取方式。其实只要认真看书后并在实际操作中多仔细观察,这些实验还是比较容易理解和操作的。本次实验让我受益匪浅,使我对微机的认识不仅仅局限于书本上的知识,给了我一次实际操作的机会。
总而言之,本次试验我所在的小组还算成功,基本弄懂了软件的使用方法,各个芯片的控制方法,对自身知识有了一个不错的提升。