第13次作业参考解答
70 .某PC/XT的D/A接口使用DAC0832。有关信号接线如图,其输出电压Vout和输入数字量之间的对应关系如表所列(线性关系)。欲使V out周期性变化如波形图所示(周期可以自定),请用汇编语言编写有关控制部分程序。
解:此题训练两方面的能力:
⑴硬件
①对系统总线的接线能分析该芯片及其中每个端口的I/O地址(用符号表示)。 ②对DAC0832根据接线知道是工作于两级缓冲方式。 ⑵软件
①对所有I/O接口的IN/OUT指令都要结合接口电路理解指令的执行效果。此处CPU用POT0执行OUT指令将待转换字节送到DAC0832的输入寄存器,CPU再用POT1执行OUT指令将DAC0832输入寄存器的内容送到转换寄存器并启动转换。
② DAC0832输入的数值变化规律决定其输出的波型,分析此题的波型,先从零点逐次递增,达到最大值后变为递减减到最小值后又重复递增……从表中可查出起点、最高点、最低点对应的数字量。至于波型的周期,可以在相邻的两次数值输出指令之间,加进若干条指令循环执行,实现软件延时,调整循环次数即改变了波型的周期。
MOV AL, 7FH ;初始电压0
LP: MOV BL, 1 ;用寄存器来作增减比直接用增减1指令便于调解步距,
; 比用立即数加减执行快,但要注意寄存器的保护。
MOV BH, -1 ;用于下降波形阶段
- 1 -
UP: MOV DX, POT0
OUT DX, AL ;从接线图看出,0832在这里工作于双缓冲方式,用POT0输出 MOV DX, POT1 ;只是把数据送到0832的输入寄存器,须再用POT1输出一次
OUT DX, AL ;才真正启动一次转换。应是加1的循环,
; 加到最大值FFH后才变成减1,减到最小值0后又重复做加1。
CALL DELAY ;把延时定义成一个过程便于调整波形周期 ADD AL, BL
CMP AL, 0FFH ;AL=FFH这个数值没有输出就转到减1 JNZ UP
DOWN: MOV DX, POT0 ; 下降。不是用POT1输出下降。同上解释,是双缓冲
OUT DX, AL MOV DX, POT1 OUT DX, AL CALL DELAY
ADD AL, BH
CMP AL, 0 JNZ DOWN
JUMP UP ;波形不停止
DELAY: MOV CX, 40 ;延时子程序 DLA: DEC CX JNE DLA RET
- 2 -