一、实验目的:
1、掌握Proteus软件绘制原理图。
2、掌握Proteus软件的MASM32编译器编写汇编程序和调试。
3、掌握8253A可编程接口芯片的使用。
二、实验内容和实验原理图
1、用虚拟示波器观察8253A的输出波形
设8253A的时钟频率为100KHZ,设置8253A的计数器0为16位计数、方式3(方波发生器)、十进制计数、生成100HZ的方波;8253A的计数器1为16位计数、方式2(分频器)、十进制计数,分频系数取100。在8086芯片中编写汇编语言,注意将芯片开始的起始地址设置为10000H,此时代码才可以正常运行。
2、用8253定时/计数器控制8位LED循环移动
用8253A可编程定时/计数器作定时器,每隔1sLED向左循环移动1位。设8253A可编程定时/计数器输入时钟为100KHZ,设定时/计数器0的计数初值为100,工作在方式3,即方波发生器,其输出的1KHZ方波作定时/计数器2的时钟。定时/计数器2的初值设为1000,工作在方式0,即每隔1s计数结束产生中断,用此信号作为不可屏蔽中断的申请信号,在中断服务程序中设置每中断一次LED向左循环移动1位。在8086芯片中编写汇编语言,注意将芯片开始的起始地址设置为10000H,此时代码才可以正常运行。
三、实验步骤:
1、对于实验1,首先在proteus上面布置8253A芯片,然后,需要将芯片放置在原来的实验原理图上面,需要使用到8086芯片用作主控芯片。
2、在D0~D7布置总线,与8086连接,之后,分别连接左边下面的引脚,与前面的8086芯片连接起来。
3、在8253A芯片的时钟输出连接显示波形的示波器,将频率的情况显示出来,此外,在每个时钟的输入地方,要输入100KHZ的时钟信号。
4、对于实验2,首先在proteus上面布置8253A芯片,布置7427和74273,然后,需要将芯片放置在原来的实验原理图上面,需要使用到8086芯片用作主控芯片。
5、之后,参照布置2,连接各个引脚,同样输入时钟信号,并在OUT2连接中断信号。
6、在74273的Q0~Q7连接8个LED灯泡,以实现流水灯的效果图。
四、实验代码:
实验1代码:
.MODEL SMALL
.8086
.STACK
.CODE
.STARTUP
START:
MOV DX,406H ;写入控制字寄存器
MOV AL,00110111B ;00计数器0,11为16位,011方式3,1十进制
OUT DX,AL
MOV DX,400H ;写计数器0
MOV AL,00H ;计数初值1000,先写低8位
OUT DX,AL
MOV AL,10H ;后写高8位
OUT DX,AL
MOV DX,406H ;写入控制字寄存器
MOV AL,01110101B ;01计数器1,11为16位,010方式2,1十进制
OUT DX,AL
MOV DX,402H ;写计数器1
MOV AL,00H ;计数初值100,先写低8位
OUT DX,AL
MOV AL,01H ;后写高8位
OUT DX,AL
MOV AX, 4CH
INT 21H
END
实验2代码:
.MODEL SMALL
.8086
.STACK
.CODE
.STARTUP
NMI_INIT:
SUB AX,AX ;清零AX
MOV ES,AX ;中断向量表段地址为0
MOV AX,OFFSET NIMI_SERVICE ;获取NIMI_SERVICE的偏移地址
MOV ES:008H,AX ;008H为中断在中断向量表中的位置
MOV AX,SEG NIMI_SERVICE;获取NMI_SERVICE的段地址
MOV ES:00AH,AX
;计数器8253A初始化---两个计数器
MOV AL,00110111B ;计数器0 16位 方式3 十进制
MOV DX,0406H ;写入控制字
OUT DX,AL
MOV DX,0400H ;计数器地址 16位
MOV AL,00H ;两次发送 100KHZ 100分频 1kHZ
OUT DX,AL
MOV AL,01H ;高字节
OUT DX,AL
MOV AL,10110001B ;计数器2 16位 方式3 十进制
MOV DX,0406H
OUT DX,AL
MOV DX,0404H ;16位 两次发送
MOV AX, 00H ;1KHZ 1000分频 1HZ
OUT DX,AL
MOV AL, 10H ;高字节发送
OUT DX,AL
MOV BL,0FEH ;LED初始状态
MOV DX,0200H ;273地址
MOV AL,BL
OUT DX,AL
JMP $ ;等待中断
NMI_SERVICE: ;不可屏蔽中断服务程序
ROL BL,1 ;左循环移位1位
MOV AL,BL
MOV DX,0200H ;74273地址
OUT DX,AL
MOV DX,0404H ;16位 两次发送
MOV AL, 00H ;1KHZ 1000分频 1HZ
OUT DX,AL
MOV AL, 10H ;高字节发送
OUT DX,AL
EXIT:
IRET ;中断返回指令
.DATA
END
五、实验结果:
实验1结果:
在下面的现象中,可以在Proteus软件中调用示波器看到,此时将会存在两个波形,上面的是频率为100HZ的方波,下面是一个频率为1000HZ的分频器。二者都是采用一定的分频系数,从100KHZ上面进行分频得到的波形,前者是1000的系数,后者是100的系数。
实验2结果:
在程序中加入中断服务程序之后,其主要实现灯的移位操作和重新装载计数器2的初值,因为在完成一次1s的计数之后,其初值会清除,需要重新装载。计数器2每到1s时,将会从中断服务程序返回,同时,灯也会向下移位一次,实现1s的流水灯。因此,在下面的现象中,能够看到灯的向下移位的速度是1s。
此外,掌握本例程的中断控制程序,将在以后的程序中有很大的作用,可以在中断中来设置计数器的初值,用于下一次的循环计数。