硬件接线如图1-1,用排线将i386内部1#定时器输出OUT1连接到8259的一个中断请求端IRQ7。
8254与8253类似,它们的编程方式是兼容的,其控制字格式如下: D7 D6 D5 D4 D3 D2 D1 D0 SC SC 0 RW1 RW0 M2 M1 M0 BCD 1
SC1 SC0——所选计数器 M2 M1M0——工作方式选择 0 0 计数器0 0 0 0 方式0 0 1 计数器1 0 0 1 方式1 1 0 计数器2 X 1 0 方式2 1 1 无意义 X 1 1 方式3 RW1 RW0——读/写格式 1 0 0 方式4 0 0 锁定当前计数值(供CPU读取) 1 0 1 方式5 0 1 只读/写低8位 BCD——计数格式 1 0 只读/写高8位 0 计数器按二进制格式计数 1 1 先读/写低8位,后读/写高8位 1 计数器按BCD码格式计数
实验程序2(采用定时中断方式) CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,OFFSET IRQ7;填写8259的7号中断矢量入口地址的偏移量 MOV SI,003CH ;填写8259中断7的中段矢量 MOV [SI],AX ;填偏移量矢量 MOV AX,CS ;填写8259中断矢量入口地址的段地址 MOV SI,003EH ;填写7号中断段地址矢量 MOV [SI],AX
CLI ;关系统总中断 CALL SYSINTI ;调用系统初始化子程序 MOV DX,0F043H MOV AL,076H ;初始化1#定时器 OUT DX,AL
MOV DX,0F041H
MOV AL,10H ;定时10ms时间常数低8位 OUT DX,AL ;写1#定时器定时常数的低字节 MOV X,0F041H MOV AL,27H ;定时10ms时间常数高8位
OUT DX,AL ;写1#定时器定时常数的高字节 MOV BX,64H
MOV AH, 01 MOV AL, 13
INT 10H ;显示换行 AGAIN: STI ;打开系统总中断 HLT ;停机等待直到有中断产生 JMP AGAIN ;继续
15
IRQ7: DEC BX JNZ FINISH MOV BX,64H MOV CX,001AH MOV AL,41H AGAIN1: MOV AH,01 INT 10H
INC AL LOOP AGAIN1
MOV AH, 01 FINISH: SYSINTI: MOV AL, 13 INT 10H MOV AL,20H OUT 20H,AL IRET
MOV AX,8000H OUT 23H,AL XCHG AL,AH OUT 22H,AL OUT 22H,AX MOV DX,0F822H MOV AL,70H OUT DX,AL MOV DX,0F824H MOV AL,0B2H OUT DX,AL MOV DX,0F832H MOV AL,0AH OUT DX,AL MOV DX,0F834H MOV AL,15H OUT DX,AL MOV AL,11H OUT 20H,AL MOV AL,08H OUT 21H,AL MOV AL,04H OUT 21H,AL MOV AL,01H OUT 21H,AL
MOV AL,6FH OUT 21H,AL MOV AL,11H OUT 0A0H,AL MOV AL,30H OUT 0A1H,AL MOV AL,02H
;中断结束 ;中断返回 ;系统初始化子程序(已保存在机器中) ;扩展IO使能 ;初始化管脚配置P2CFG,配置CS0# ;初始化管脚配置P3CFG,配置主片IRQ7 ;初始化管脚配置INTCFG ;初始化管脚配置TMRCFG ;将GATE1接VCC ;初始化主片8259 ;写主片8259的中断屏蔽字,允许主片的IRQ7(用 户程序使用)和IRQ4(系统通讯用) ;初始化从片8259 16
OUT 0A1H,AL MOV AL,01H OUT 0A1H,AL MOV AL,0FFH OUT 0A1H,AL RET CODE ENDS
END START
实验步骤
1.打开微机及实验系统电源。
2.如提示联机有问题,检查USB及串口通讯线是否正常连接,并按复位按钮(置于实验面板上的i386EX 系统小板上)。
3.编辑程序1。然后编译链接并加载,如中间出现错误,则按提示进行修改,直至加载成功。
4.按工具栏上的“RUN”按钮执行程序。
5.观察输出窗口的显示内容并记录。如结果不正确,使用单步、跳过、断点方式运行调试程序。
6.试用单步、跳过、断点方式运行调试程序,记录运行中间寄存器变化及显示结果。 7.编辑程序2。其中系统初始化子程序已保存在机器上,文件名:c:\\shiyan\\csh.asm。打开该文件,将该文件复制粘贴到编辑程序2中。
8.用排线连接控制计算机上的IRQ7与OUT1信号。 9.同步骤5。
10.改变编辑程序2中软件计数器BX的值,调整两行字母之间的显示时间间隔,重复以上步骤。
预习报告要求
1.写明实验目的、内容、步骤等。 2.根据实验程序画出程序框图。 3.回答思考问题。
思考题
1.集成到i386EX芯片内部的主要外围接口电路有哪些?
2.扩展I/O 接口地址信号/IOY0、/IOY1,以及内部1#定时器控制寄存器TMRCON、数据寄存器TMR1的地址分别为多少?
3.程序中用“INT 10H”输出的结果显示在主界面窗口的哪个区?
4.生成可执行文件需要经过哪些步骤?要使可执行文件能够运行还需要经过哪个步骤?
5.阅读程序2,写出计数器时间常数的计算过程。按照该程序显示两行字母之间的时间间隔是多少?
6.如何判断程序的段地址,从而得到程序加载的物理地址?是否可由Debug显示程序的机器码?写出操作步骤。
实验报告要求
1.整理实验结果,包括使用单步、跳过、断点方式运行调试程序时,记录的中间寄存器变化及运行结果。
2.对实验中使用的命令进行小结。
17
3.实验过程中遇到的问题进行分析、总结。
实验二 D/A转换实验
实验目的
1.学习掌握D/A转换的基本原理及TLC7528 芯片的性能。 2.学习利用DAC产生连续波形的编程方法。
实验设备
PC 机一台,TD-ACC+实验系统一套
实验内容
编写实验程序,实现D/A转换产生周期性同步的锯齿波和方波(如图2-1),并用虚拟示波器观察波形。
图2-1
实验原理
本实验采用TLC7528 芯片,它是8 位、并行、两路、电压型输出数模转换器。其主要参数如下:转换时间100ns,满量程误差1/2 LSB,参考电压-10V ~ +10V,供电电压+5V~+15V,输入逻辑电平与TTL 兼容。
方法一:软件延时
控制计算机按一定规律连续输出数据到DAC转换器,转换后产生相应的连续波形。实验中的锯齿波由数据00H~FFH连续循环输出产生,上升幅度为01个数据量,即每输出一次后数据加一,数据输出的时间间隔由软件延时控制;方波由两个数据00H和FFH交替输出产生,每当锯齿波数据由FFH变到00H(用加一指令即可)时方波变换为另一个数据(00H变为FFH或FFH变为00H),从而实现两波形的同步效果。
实验平台中的TLC7528 的八位数据线、写信号线和通道选择控制线已接至控制计算机的总线上。片选线预留出待实验中连接到相应的I/O 片选上,具体如图2-2。
18
图2-2
以上电路是TLC7528 双极性输出电路,输出范围-5V ~ +5V。“W101”和“W102”分别为A路和B路的调零电位器,实验前先调零,用DEBUG命令直接往TLC7528 的A口和B口中送入数字量80H,分别调节“W101”和“W102”电位器,用万用表分别测“OUT1”和“OUT2”的输出电压,应在0mV 左右。
控制计算机-IOW → 数模转换器-WR: IOW为D/A的写信号;
控制计算机-IOY1→数模转换器-CS: IOY1为D/A转换器片选信号,其地址可选为0640H~0641H;
控制计算机-XD0~XD7→数模转换器- D0~D7:控制计算机的八位数据线接至D/A转换器的八位数据输入端;
控制计算机-A0→数模转换器- A0:A0为0选中通道A,为1选中通道B。 参考流程: 开始 变量1 、2=0 变量2送D/A通道 B 变量1送D/A通道A 调用延时子程序 变量1加一 N 变量1是否为0? Y 变量 2取反
19