26 IA-32 & Intel64微机原理与接口技术(第三版) 布置的习题参考答案
CMP AL,DLV JA REPLP2 JMP REPLP1
2Vref?D?Vref2n
INCDV: INC AL
对于双极应用由式(10-2)知Vo=
D=51时,Vref=5V,因此Vo=2*5/256*51-5=-3V,
D=205时,Vref=5V,因此Vo=2*5/256*205-5=3V,因此程序不变时输出波形为-3V至+3V的三角波,输出波形如图所示。
3V0V-3V
10-5基于16位总线的压力检测系统如图10.21所示,已知8255的PA口作为A/D转换器ADC0809的接口;ADC0809的500KHz CLK时钟由8254 OUT1产生,已知8254的CLK1端接2MHz的时钟信号,GATE1接8255的PC7;DAC0832作为后向输出通道,各地址关系及与系统总线连接如图所示。系统工作过程为:采集8路压力,将其转换后的数字量一方面存放到内存缓冲区(由DATABUF指示),然后取8路压力的平均值,把平均值数字量通过逻辑取反后由DAC0832变换成模拟量输出,如果采集平均值超过Pmax值,则通过在8254的OUT0输出正脉冲为5ms的方波,如果低于Pmin,则让在8254的OUT2输出最大的负脉冲(不需要硬件触发)。
试按以下要求用编写有关程序片段:
(1) 写出8255在本应用系统中的初始化程序片段 (2) 写出供ADC0809的CLK端500KHZ方波的程序片段 (3) 根据系统工作过程写出满足要求的程序片段
(4)通过该电路,还可以扩展应用,请自行设计,说明要求,并给出参考答案。
A9A8A7
12U3374AS11654321A0A1U774AS138E3E2E1CBAY7Y6Y5Y4Y3Y2Y1Y079101112131415U8343332313029282753698356+5C1U2D0D1D2D3D4D5D6D7RDWRA0A1RESETCSPA0PA1PA2PA3PA4PA5PA6PA7PC0PC1PC2PC3PC4PC5PC6PC7PB0PB1PB2PB3PB4PB5PB6PB7432140393837141516171312111018192021222324251714158181920212524239622lsb2-82-72-62-52-42-32-2msb2-1ADDAADDBADDCOESTARTALEADC080926272812345A6A5A4A3A2IORCIOWC2MHzD7~D012U5A374AS32IN0IN1IN2IN3IN4IN5IN6IN7压力1压力2压力3压力4压力5压力6压力7压力8信号调理电路模拟信号输入+5710EOCCLOCKref(+)ref(-)121687654321222391110D0D1D2D3D4D5D6D7RDWRCLK0GATE0OUT0A0A1U18254CSCLK1OUT1GATE1OUT2GATE2CLK21920211513141716188255R1U1276541615141312lsbDI0DI1DI2DI3DI4DI5DI6msbDI7CSWR1DAC0832RfbIout1Iout2VrefXferILEWR29+511128171918-5+5U9Vo压力传感器RW模拟输出VCCVCC
图10.21 一数据采集与处理系统原理示意图
解:地址分配: 8254:300H~303H 8255:304H~307H
微机原理与接口技术(第三版)课堂布置及需要关注习题参考答案 27
DAC0832:314H~317H任何一个地址均可 P8254_0 P8254_1 P8254_2 P8254_C P8255A P8255B P8255C PDAC0832
EQU 300H EQU 301H EQU 302H EQU 304H EQU 305H EQU 306H EQU 314H
; 8254-0通道 ; 8254-1通道 ; 8254-2通道 ; 8255A口 ; 8255B口 ; 8255C口 ;DAC0832地址
;8255控制端口 ;92H
EQU 303H ; 8254控制口
P8255Ctrl EQU 307H ; 8255控制口
(1)8255初始化要做的工作就是确定工作方式:A方式0输入、B方式0输入、C口输出
MOV DX,P8255Ctrl MOV AL,10010010B OUT DX,AL
计数值初=2MHz/500KHz=2000/500=4 MOV DX,P8255Ctrl MOV AL,00001111B OUT DX,AL
;PC7=1(GATE1=1) ;8254控制端口地址
;8254通道1设置为8位读写,二进制计数 ;初值
MOV DX,P8254_C MOV AL,01010110B OUT DX,AL MOV AL,4 OUT DX,AL
MOV DX,P8254_1 ;8254通道1口地址
(2)8254产生500KHz方波
(3)
对ADC0809的操作依据三个步骤进行,即启动并锁存地址、查询EOC状态以及转换读取结果,然参考程序如下:
PROC MOV MOV MOV MOV INC OUT MOV MOV OUT MOV
NEAR CX,8 DX, P8255C BL,80H AL,BL BL
DX,AL
;8255的C端口地址
;通道0(低3位,高位1为GATE1) ;选择ADC0809通道 ;指向下一通道
;ALE、START、OE=0,选中INi
MOV SI,OFFSET DATABUF
后根据结果确定DAC0832的输出波形。假设初始化工作已经做完如(1)和(2) ADCS
START:
REPEATL:
DX,P8255Ctrl
AL,00001011B ;ALE=1 DX,AL
AL,00001001B ;START=1
28 IA-32 & Intel64微机原理与接口技术(第三版) 布置的习题参考答案
OUT NOP NOP MOV OUT MOV OUT MOV DX,AL
AL,00001010B ;ALE=0 DX,AL
AL,00001000B ;START=0 DX,AL DX,P8255B AL,DX
;指向8255的B端口
ADCWAIT: IN
RP2:
CALLSUB1:CALLSUB2:AND AL,01 JZ ADCWAIT
;判断EOC是否为1
MOV DX,P8255Ctrl
MOV AL,00000111B ;OE=1 MOV DX,P8255A ;8255的A口地址 IN AL,DX ;读取转换结果 MOV [SI],AL
;存结果 INC SI LOOP REPEATL MOV SI,OFFSET DATABUF MOV CX,8 MOV AX,0
MOV BH,0 MOV AL,[SI] ADD AX,BX INC SI LOOP RP2
MOV BL,8 DIV BL
CMP AL,Pmin JB CALLSUB1 ;低于Pmin产生最大的负脉冲 CMP AL,Pmax
;
JA CALLSUB2
;超过Pmax产生5ms为高电平的方波JMP START NOT AL
MOV DX,PDAC0832 ;DAC0832口地址(E14H~E17H) OUT DX,AL JMP START CALL SUB1 JMP
START CALL
SUB2 JMP
START
微机原理与接口技术(第三版)课堂布置及需要关注习题参考答案 29
DATABUF DB 8 DUP(?)
RET
ADCS SUB2 SUB1
PROC
NEAR
MOV DX,P8254Ctrl ;8254控制端口地址
MOV AL,10110000B ;方式0中断信号发生器方式,产生最大负脉冲 OUT DX,AL MOV DX,P8254_2 MOV AL,0 OUT DX,AL OUT DX,AL RET ENDP
;8254计数通道2地址 ;最大常数0(65536)
ENDP
NEAR ;8254 OUT0产生5ms正脉冲的方波,方波周期为10ms
PROC
MOV DX,P8254Ctrl MOV AL,00110110B OUT DX,AL MOV DX,P8254_0
MOV AX,20000 ;2MHz*(5ms*2)=20000 OUT DX,AL MOV AL,AH OUT DX,AL RET ENDP
SUB2
SUB1
(4)没有使用的译码输出可接其它I/O接口,没有使用的PC6可接LED指示,没有使用的PB1~PB7可以接按键作为输入。具体略。