书城工业技术智能仪器设计基础
19100400000014

第14章 数据采集系统设计(4)

4.7.1.2程序清单

转换结果送20H和21H。(20.7H为符号位、20.4为千位、20.(0~3)H为百位、21.

(4~7)H为十位、21.(0~3)H为个位),量程出错送10H。

INITI:SETBIT1;初始化有关部分

SETBEA;IT1=1外部中断l为边沿触发

SETBEX1;EA=1,EX1=1允许外部中断1中断

外部中断1中断服务程序:

PINT1:MOVA,P1

JBACC.4,PINT1;DS1=“1”千位被选通

JBACC.0,PER;Q0=“0”量程出错

JBACC.2,PL1;Q2表示极性“1”为正,“0”为负

SETB07H;20.7H为量程符号位,正为“l”

AJMPPL2

PL1:CLR07H;20.7H为量程符号位,负为“0”

PL2JBACC.3,PL3;SETB04H;千位为1

AJMPPL4;PL3:CLR04H:千位为0

PL4:MOVA,P1;输入转换结果

JNBACC.5,PL4;DS2=“1”百位被选通

MOVR0,#20H:

XCHDA,@ R0;读百位→(20H)0~3

PL5:MOVA,P1;输入转换结果

JNBACC.6,PL5;DS3=“1”十位被选通

SWAPA

INCR0

MOV @ R0,A;读十位→(21H)4~7

PL6:MOVA,P1;输入转换结果

JNBACC.7,PL6;DS4=“1”个位被选通

XCHDA,@ R0:读个位→(21H)0~3

RETI;中断返回

PER:SETB10H;置量程出错标志

RETI

4.7.2ICL7135及其接口

ICL7135为4位半双积分A/D转换器,是动态分时轮流输出BCD码,数据输出为非总线形式,具有精度高、价格低的特点。

4.7.2.1ICL7135特性与输出波形

ICL7135为高精度ADC,其主要特性如下:

(1)总读数为±20000,精度为±1;

(2)输入阻抗大于109Ω;

(3)自校零,保证零电压输入时读数为零;

(4)采用BCD码扫描输出;

(5)设有6个I/O辅助信号,可与设有UART的微处理器或其他复杂电路接口;

(6)输出与TTL电路兼容。

ICL7135为28线双列直插式封装。

ICL7135由±5V电源供电,V+接+5V,V-接-5V,DGND为数字地,即接±5V电源的地。VR为基准电压高电位输入端,AGND为模拟地,它既是模拟信号的地又是基准电压的低电位端。INT为积分器输出,接积分电容。BUF为缓冲放大器的输出,接积分电阻。AZ为自动调零输入端,接自动调零电容。CR+为基准电容的高电位端,CR-为基准电容低电位端。INHI为模拟信号输入的正端,INLO为模拟信号输入的负端。CLK为时钟信号输入端,R/H为运行或保持操作端。D1、D2、D3、D4、D5为位扫描输出端,其中D1为个位,D5为万位。B1、B2、B3、B4为BCD码数据,B1为低位,B4为高位。POL为信号极性输出,信号为正时,POL为“1”,OR为超量程状态输出,UR为欠量程输出。

BUSY为忙信号输出,它指示A/D是正在进行转换还是已转换完毕。ST为数字选通输出,用以通知微处理器或其他器件准备读取ICL的输出数据。

ICL7135在工作期间总是从B8、B4、B2、B1引脚将转换后五位数字的BCD码从高位到低位依次循环扫描输出;同时,引脚D5~D1不断送出相应扫描信号,每个位扫描信号宽度为200个时钟周期。数字输出选通信号ST在每个转换周期内出现一次,一次转换共有5个负脉冲,ST总是出现在每个扫描信号的中部,其宽度为二分之一时钟周期。

4.7.2.2ICL7135与MCS51单片机I/O直接连接接口

只画出了数据线(B8,B4,B2,B1)、位控线(D1~D5)及相应的标志、状态控制线。

89C51只能用本身的I/O口线与ICL7135相连。为了减少I/O口线的占用,使用了74LS157(4选1数据选择器)。使“万”位数及其标志信号B8、B4、B2、B1与P1.3~P1.0共用I/O口线。其分时传送通过D5控制74LS157的选择端SEL实现。SEL输入低电平时,选择1A~4A输入端;SEL输入高电平时,选择1B~4B输入端。当每一个转换周期结束后ST端发出5个负脉冲信号分别与D5(万位)、D4(千位)、D3(百位)、D2(十位)、D1(个位)位选通信号相对应,在位选通信号(D5~D1)控制下,从B8、B4、B2、B1端送出相应位的BCD码。万位数只能输出B1的0或1,其余三位为OR(过量程)、UR(欠量程)和POL(正、负)标志信号。R为自动转换/停止控制。悬空状态时自行产生高电平,按自动转换方式工作。R/H输入低电平时,本次转换完后进入停止状态,输出值保持不变。

根据对ST和D1的处理方法不同,可以有三种接口和软件处理方法。

(1)查询法:由89C51的10根I/O口线与ICL7135的D5~D1、R/H、B8、B4、B2、B1、OR、UR、POL相连。这种方法程序结构简单,但占用CPU时间。

(2)中断查询法:这种方法使用较为普通。ST选通信号与89C51的INT0/INT1相连。在主程序中用P3.3来启动ICL7135A/D转换,并开放外部中断。在中断处理中再对D5~D1进行查询,每个采样周期中输出结果要经过5次中断处理。

(3)中断计数法:这种方法是依据ST脉冲序列的序号与万、千、百、十、个位BCD码有严格的对应关系来设计的。用一内存单元存入除D5外尚待读入的BCD码位数(#04H),然后每中断一次位数减1,位数减至零则个位数BCD码读完。这种方法可以省去D1~D4的接线,从而简化硬件结构。具体程序如下:

MOVR1,#20H

CJNE @ R1,#00H,INT2

LJMPINT5

INT2:ADDA,23H

MOV23H,A

DJNZ20H,RL4

RETI

INT5:JBACC.3,OR;过量程处理,OR略

JBACC.2,UR;欠量程处理,UR略

CLRF0;F0为符号标志

JBACC.1,INT4

SETBF0

INT4:ANLA,#01H

SWAPA

MOV23H,A

MOV20H,#4H

RETI

RL4:MOVR7,#04H

RL5:MOVR1,#23H

MOVR2,#03H

CLRC

RL6:MOVA,@ R1

RLCA

MOV @ R1,A

DECR1

DJNZR2,RL6

DJNZR7,RL5

RETI

4.7.2.3ICL7135通过8155连接接口

在较为复杂的应用系统中,采用8155构成ICL7135的接口电路较为方便。在这样的接口电路中,单片机硬件资源开销最少,而且8155中的计数器还可提供ICL的时钟要求。

当ICL7135的高位选通信号D5输出为高电平,万位数B1和极性(POL)、过量程(OVER)、欠量程(UNDER)标志送入8155的PA0~PA3;当D5输出为低电平时,ICL7135的B1、B2、B4、B8输出低位BCD码,仍然送入PA0~PA3。

8155的A口工作于选通输入方式,ICL7135的数据输出选通脉冲线ST接至8155A口的数据选通信号线ASTB(PC2)上,8155PA口中断请求线AINTR(PC0)反向后接89C51INT1端。当ICL7135完成一次A/D转换后,产生5个数据选通脉冲,分别将各位BCD码和位标志送至PA口。PA口接收到一个数据后,中断标志线AINTR(PC0)变为高电平。

向89C51申请中断,中断响应后将8155A口的数据读入内存。

A/D转换时钟由8155定时器输出。8155定时器置成方波发生器,若89C51晶振为12MHz,ALE输出2MHz频率信号给8155定时器输入端TIN,定时器进行16分频后由输出端(TOUT)输出,125kHz方波作为ICL7135的时钟。

由于ICL7135的A/D转换是自动进行的,完成一次A/D转换后,选通脉冲的产生和89C51的中断开放是异步的,为了保证读出数据的完整性,只对最高位(万位)中断请求做出响应,而低位数据输入采取查询方法。

它将A/D转换结果送入89C51片内RAM的20H、21H、22H单元中。

主程序清单:

MAIN:MOVDPTR,#7F04H;8155定时器初始化

MOVDA,#10H;16分频

MOVX @ DPTR,A

INCDPTR

MOVA,#40H;16分频连续方波

MOVX @ DPTR,A;

MOVDPTR,#7F00H;控制字D6H→8155

MOVA,#0D6H;

MOVX @ DPTR,A;

MOVSP,#60H;设堆栈

MOV20H,#00H;20H清零

MOVP2,#7EH;指向8155RAM

MOVR0,#00H;8155RAM首地址

MOVR7,#55H;置8155RAM个数为3→85=225

MOV1E,#84H;开放外部中断1及CPU中断

WDIN:JBCPSW.5,TRAN;判A/D结果缓冲器装满数据否?

AJMPWDIN;

TRAN:MOVA,20H;A/D结果传送到外部RAM

MOVX @ R0,A;

INCR0

MOVA,21H

MOVX @ R0,A

INCR0

MOVA,22H

MOVX @ R0,A

INCR0

DJNZR7,WDIN;

ACALLPDATA;调用数据处理子程序,处理方法因实际系统而异,这里从略

MOVR0,#00H:重置8155RAM首地址

MOVR7,#55H;重置存数个数

中断服务程序程序清单:

PINTI:MOVDPTR,#7F0lH;读8155A口的A/D结果

MOVXA,@ DPTR;

MOVR2,A;万字位入R2

ANLA,#0F0H;

JNZPRI;D5=0,返回

MOVR1,#20H;

MOVA,R2;

ANLA,#01H;

XCHDA,@ R1;

MOVA,R2;

ANLA,#0EH;

SWAPA

XCHDA,@ R1;

MOV @ R1,A

INCR1

MD4:MOVXA,@ DPTR;读千位

JNBACC.7,WD4

SWAPA

MOV @ Rl,A;千位→(21).4~7

WD3:MOVXA,@ DPTR;读百位

JNBACC.6,WD3

XCHDA,@ R1;百位→(21).0~3

INCR1

WD2:MOVXA,@ DPTR;

JNBACC.5,WD2

SWAPA

MOV @ Rl,A;十位→(22).4~7

WD1:MOVXA,@ DPTR

JNBACC.4,WD1

XCHDA,@ R1;个位→(22).0~3

SETBPSW.5;置一次A/D结果读出标志

PRI:RETI