表3 ADC0832的配置位逻辑表
输入格式 配置位 CH0 CH1 L H L H 选择通道号 CH0 + - + CH1 - + + 差分 L L 单端 H H
表中“+”则说明输入通道的端点是正极性;“-”则说明输入端点是负极性,H表示高电平且L表示低电平。输入配置位时,低位(CH1)在后,高位(CH0)在前。 (3)ADC0832的工作时序图
由图可知,若当CS从高电平变为低电平的时候,那么就选择ADC0832。在时钟信号的上升沿时DI端的数据就会移入到ADC0832内部的多路地址移位寄存器。在第一个时钟信号期间,DI为高,则说明启动位,紧接着就会输入两位配置位。当输入启动位和配置位后,选通输入模拟通道,转换开始。转换开始后,经过一个时钟周期延接着在第一个时钟周期延迟,以使选定的通道稳定。ADC0832紧接着在第4个时钟下降沿输出转换数据。数据输出时先输出最高位(D7~D0),两次发送的最低位共用。当片选CS为高时,内部所有寄存器清0,输出变为高阻态。如果再进行一次模拟转换,片选必须再次从高向低跳变,后面再输入启动位和配置位。
[4]
图9 ADC0832的工作时序图
(4)单片机对ADC0832 的控制原理 ADC0832与单片机的接口电路如图10所示:
图10 ADC0832与单片机的接口电路图
一般情况下,ADC0832 与单片机的接口应为CS、CLK、DI、DO这4条数据线。在电路设计的时候可以把DI和DO并联在一根数据线上进行使用,这是因为DI端与DO端在通信的时候并没有同时有效的而且它们与单片机的接口是双向的。如果当ADC0832芯片的CS输入端为高电平时表示ADC0832停止使用,若CS输入端为低电平时,表示此芯片工作。CLK 和DO/DI 的电平可以任意。当要进行A/D转换时,CS输入端必须要置于低电平并且保持低电平直到转换完全结束为止。与此同时芯片开始转换工作,并且同时由处理器向该芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则会利用DI端输入通道功能选择的数据信号。在第一个时钟脉冲的下降之前DI端一定要是高电平,用来表示启始信号。在第2个脉冲和3个脉冲下降之前DI端需要输入2位数据作为选择通道功能。其功能项如表4、表5所示:
表4 功能项表(1)
MUX Address SGL/DIF 1 1 ODD/SIGN 0 1 0 + Channel 1 + 表5 功能项表(2)
MUX Address SGL/DIF 0 0 ODD/SIGN 0 1 0 + - Channel 1 - + 如表,若当这2位数据都为“1”、“1”时,表示只对CH1进行单通道转换,若当此2位数据为“1”、“0”时,表示只对CH0进行单通道转换。若当这2位数据为“0”、“1”时,表示将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。若当这2位数据都为“0”、“0”时,表示将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当到第3个脉冲的下降之后DI端的输入电平就会失去输入作用,此后DI/DO端便会开始读取转换数据,这是利用数据输出DO端来进行的,从第4个脉冲下降开始由DO端输出转换数据最高位
DATA7,之后每一个脉冲下降DO端就会输出下一位数据。直到第11个脉冲时发出最低位数据即是DATA0,这样一个字节的数据输出就完成了。同时也正是从此位开始输出下一个相反字节的数据,也就是说从第11个字节的下降输出DATD0。之后输出8位数据,直到第19个脉冲时数据输出完成,这也标志着一次A/D转换
的结束。最后把CS输入端置高电平表示禁用ADC0832芯片,之后直接将转换后的数据进行处理就可以了。
作为单通道模拟信号输入时ADC0832的输入电压的范围是0~5V并且8位分辨率时的电压精度为19.53mV。如果作为由IN-与IN+输入时,为了提高转换的宽度,可以把电压值设定在某一个较大范围之内。但是值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
[4]
2.5 单片机
随着电子技术的发展。单片机的功能将更加完善,因而单片机的应用将更加普及。它们将在智能化仪器、家电产品、工业过程控制等方面得到更广泛的应用。单片机将是智能化仪器和中、小型控制系统中应用最多的有种微型计算机。 (1)AT89S52单片机简介
AT89S52为 ATMEL 所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。其引脚图如图11所示:
[4]
图11 AT89S52引脚分布图
(2)AT89S52主要功能
①拥有灵巧的8位CPU和在系统可编程Flash
②晶片内部具时钟振荡器(传统最高工作频率可至 12MHz) ③内部程序存储器(ROM)为 8KB ④内部数据存储器(RAM)为 256字节
[6]
⑤32 个可编程I/O 口线 ⑥8 个中断向量源
⑦三个 16 位定时器/计数器 ⑧三级加密程序存储器 ⑨全双工UART串行通道 (3)AT89S52各引脚功能
VCC:AT89S52电源正端输入,接+5V。 VSS:电源地端。
XTAL1:单芯片系统时钟的反相放大器输入端。
XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,与此同时还可以在两引脚与地之间加入20PF 的小电容,这样可以让系统更稳定,避免因为噪声干扰而出现死机情况。
RESET:它是AT89S52的重置引脚,高电平有效,当要对芯片重置时,让AT89S52完成系统重置的各项动作,则只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,可以把内部特殊功能寄存器的内容都被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
EA/Vpp:EA:存取外部程序代码,低电平有效,这表示当这个引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8032和8031中,因为其内部无程序存储器空间,EA引脚必须要接低电平。如果使用的是8751 内部程序空间时,此EA引脚必须要接成高电平。
ALE/PROG:地址锁存器启用信号。因为AT89S52是以多工的方式送出地址及数据的,所以AT89S52可以利用ALE引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中。之所以可以利用ALE来驱动其他周边晶片的时基输入,是因为程序执行的时候ALE引脚的输出频率约是系统工作频率的1/6。
PSEN:此为“Program Store Enable”的缩写,它表示的意思是程序储存启用,将8051设成为读取外部程序代码工作模式时(EA=0),就会送出此信号从而取得程序代码,一般情况下这支引脚是接到EPROM的OE脚上。AT89S52也可以利用RD及PSEN引脚分别进行启用存在外部的EPROM与RAM,这样可以让程序存储器与数据存储器合并在一起而共同使用64K的定址范围。 PORT0(P0.0~P0.7):
端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。 PORT2(P2.0~P2.7):
端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。
PORT1(P1.0~P1.7):
端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做
[8]
[7]
[6]
定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。 PORT3(P3.0~P3.7):
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括外部中断控制、串行通信、计时计数控制及外部数据存储器内容的读取或写入控制等功能。 其引脚分配如下:
P3.0:RXD,串行通信输入。
P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。 P3.3:INT1,外部中断1输入。 P3.4:T0,计时计数器0输入。 P3.5:T1,计时计数器1输入。 P3.6:WR:外部数据存储器的写入信号。 P3.7:RD,外部数据存储器的读取信号。 RST:复位输入。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
[9]
2.6 LED显示接口
本次设计是利用AT89S52单片机与四位一体数码管相连,这种设计方法具有硬件结构简单、软件编程容易和价格低廉等点。 (1)LED数码管
数码管由8个发光二极管构成,通过不同的组合可用来显示数字0~9、字符A ~ F、H、L、P、U及小数点“.”。数码管显示器根据公共端的连接方式,可分为共阴极数码管(将所有发光二极管的阴极连在一起)和共阳极数码管(所有发光二极管的阳极连在一起)。以共阳极数码管为例,8个发光二极管的阳极连接在一起,其共阳极接高电平(+5V),其它引脚接段驱动电路输出端。当某一段为低电平的时候,该端所连接的字段导通并点亮,根据发光段的不同组合显示数字或字符
[11]
。
共阳数码管的七个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码管七个段笔画是用高电平(“1”)点亮的,要求驱动功率较大。并且每个段笔画要串一个数百欧姆的降压电阻。所以本设计中在共阳数码管的段笔画上串了一个上拉排阻。