资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单片机原理及应用,(,C,语言版),第,9,章 单片机系统配置及接口,主 编:,周国运,本章,制作:,鲁庆宾,中国水利水电出版社,第,9,章 单片机系统配置及接口,目 录,9.1,键盘接口,9.2 LED,显示接口,9.3 A/D,转换接口,9.4 D/A,转换接口,9.5,开关器件接口,本章要点,单片机主要应用于测控系统中,应用系统通常需要人的干预。,本章主要讲述,键盘,、,显示器,、,A/D,转换器、,D/A,转换器、,开关器件,等的工作原理及接口电路,。,第,9,章 单片机系统配置及接口,图,9-1,单片机应用系统配置框图,9.1,键盘接口,主要内容,9.1.1,键盘基本问题,9.1.2,键盘结构及处理程序,9.1.3,中断扫描方式,1,、键的识别,当按键,K,未被按下,时,,P1.0,输入为,高电平,;当,K,闭合,时,,P1.0,输入为,低电平,。,9.1.1,键盘基本问题,图,9-2,按键电路,2,、键的抖动,由于,机械触点的弹性作用,,按键在闭合时不会马上稳定地接通,在断开时也不会一下子断开。在闭合及断开的瞬间均伴随有一连串的抖动,如图,9-3,所示,。,抖动时间一般为,5,10ms,。抖动会引起一次按键被,误读,多次。,为确保,CPU,对键的一次闭合仅做一次处理,必须去除键抖动,。,9.1.1,键盘基本问题,9.1.1,键盘基本问题,图,9-3,按键时的抖动,9.1.1,键盘基本问题,一独立式键盘,独立式按键是指各按键相互独立地接通一条,输入数据线,。当任何一个键按下时,与之相连的输入数据线即可,读入数据,0,,而没有按下时,读入,1,。,9.1.2,键盘结构及处理程序,优点,:电路简单;,缺点,:键数较多时,要占用较多的,I/O,线。,图,9-4,独立式键盘,例,9-1,设计一个独立式按键的键盘接口,并编写键扫描程序,电路原理图如图,9-4,所示,键号从上到下分别为,0,7,。,C,语言程序清单,:,#include,void key(),unsigned char k;,P1=0 xff;/,输入时,P1,口置全,1,k=P1;/,读取按键状态,if(k=0 xff)/,无键按下,返回,return;,delay20ms();/,有键按下,延时去抖,9.1.2,键盘结构及处理程序,k=P1;,if(k=0 xff)/,确认键按下,return;/,抖动引起,返回,while(P1!=0 xff);/,等待键释放,switch(k),case:0 xfe,/0,号键按下时执行程序段,break;,case:0 xfd,/1,号键按下时执行程序段,break;,9.1.2,键盘结构及处理程序,/2,6,号键程序省略,case:0 x7f,/7,号键按下时执行程序段,break;,汇编语言程序清单,:,KEY:MOVP1,#0FFH ;P1,口为输入口,MOVA,P1 ;,读取按键状态,CPLA ;,取正逻辑,JZEKEY ;,无键按下,返回,9.1.2,键盘结构及处理程序,LCALL DELAY20MS ;,有键按下,去抖,MOV A,P1,CPL A,JZ EKEY ;,抖动引起,返回,MOV B,A ;,存键值,KEY1:MOV A,P1 ;,以下等待键释放,CPL A,JNZ KEY1 ;,未释放,等待,MOV A,B ;,取键值送,A,JB ACC.0,PKEY0 ;K0,按下转,PKEY0,JB ACC.1,PKEY1 ;K1,按下转,PKEY1,9.1.2,键盘结构及处理程序,JBACC.7,PKEY7 ;K7,按下转,PKEY7,EKEY:RET,PKEY1:LCALLK0 ;K0,命令处理程序,RET,PKEY2:LCALLK1 ;K1,命令处理程序,RET,PKEY4:LCALLK7 ;K7,命令处理程序,RET,9.1.2,键盘结构及处理程序,二行列式键盘,为了减少键盘与单片机接口时所占用,I/O,线的数目,,在键数较多时,通常都将键盘排列成,行列矩阵,形式。每一水平线(行线)与垂直线(列线)的,交叉处,通过一个按键来连通。,图,9-5 44,矩阵键盘接口,利用这种结构只需,N,条行线和,M,条列线,,即可组成具有,NM,个按键的键盘。,9.1.2,键盘结构及处理程序,图,9,|,5,4,4,矩,阵,键,盘,接,口,9.1.2,键盘结构及处理程序,1.,行扫描法工作原理,判别键盘中有无键按下。,向行线输出,全,0,,读入列线状态。如果有键按下,总有一列线被拉至低电平,从而使,列输入不全为,1,。,查找按下键所在位置。,依次,给行线送低电平,查,列线,状态。全为,1,,则所按下的键不在此行;否则所按下的键必在此,行,且是在,与,零电平,列,线,相交,的交点上的那个键。,对按键位置进行编码。,找到所按下按键的行列位置后,对按键进行,编码,,即求得按键键值。,9.1.2,键盘结构及处理程序,2,.,键盘扫描识别子程序,C,语言程序清单,:,#include,char key(),char row,col,k=,-,1;/,定义行、列、返回值,P1=0 xf0;,if(P1&0 xf0)=0 xf0),return k;/,无键按下,返回,delay20ms();/,延时去抖,if(P1&0 xf0)=0 xf0),return k;/,抖动引起,返回,9.1.2,键盘结构及处理程序,for(row=0;row4;row+)/,行扫描,P1=(1row);/,扫描值送,P1,k=P1,if(k!=0 xf0)/,列线不全为,1,,,while(k&(1(col+4)/,所按键在该列,col+;/,查找为,0,列号,k=row*4+col;/,计算键值,P1=0 xf0;,while(P1 /,等待键释放,break;,return k;/,返回键值,9.1.2,键盘结构及处理程序,汇编语言程序清单,(,返回键值:在累加器,A,中,),:,KEY:LCALL KS ;,判断是否有键按下,JZ EKEY ;,无键按下,返回,LCALL DELAY20MS ;,延时去抖,LCALL KS,JZ EKEY ;,抖动引起,返回,SKEY:MOV R0,#0 ;,行扫描计数器,R0,清,0,MOV R1,#0 ;,列计数器,R1,清,0,MOV R3,#0FEH ;R3,为行扫描字暂存,SKEY1:MOV P1,R3 ;,输出行扫描字,9.1.2,键盘结构及处理程序,MOVA,P1 ;,读列值,MOVR1,A ;,暂存列值,CPLA,ANLA,#0F0H,JNZSKEY2;,键在该列,转,SKEY2,INCR0 ;,行计数器加,1,SETBC,MOVA,R3,RLCA,MOVR3,A ;,进行下一行扫描,CJNER0,#4,SKEY1;4,未完成,转,SKEY1,EKEY:,MOVA,#0FFH;,无键返回,0FFH,RET,9.1.2,键盘结构及处理程序,SKEY2:MOVA,R1,JNBACC.4,SKEY3,JNBACC.5,SKEY4,JNBACC.6,SKEY5,JNBACC.7,SKEY6,SKEY3:MOVR2,#0;,存,0,列号,SJMPDKEY,SKEY4:MOVR2,#1;,存,1,列号,SJMPDKEY,SKEY5:MOVR2,#2;,存,2,列号,SJMPDKEY,9.1.2,键盘结构及处理程序,SKEY6:MOVR2,#3 ;,存,3,列号,SJMPDKEY,DKEY:MOVA,R0 ;,行号送,A,MOVB,#4,MULAB,ADDA,R2 ;,行号,4+,列号,=,键值,PUSHACC,LK:LCALLKS ;,等待键释放,JNZLK,POPACC,RET,9.1.2,键盘结构及处理程序,;,是否有键按下子程序,有返回非,0,,无返回,0,KS:MOVP1,#0F0H,MOVA,P1,CPLA,ANLA,#0F0H,RET,9.1.2,键盘结构及处理程序,3.,行列反转法工作原理,判别键盘中有无键按下。,(方法同行扫描法),输入变输出,再读。,将上一步读取到的,列线输入值,从,列线输出,,读取,行线值,。,定位求键值。,根据上一步输出的列线值和读取到的行线值就可以确定所按下键所在的,位置,,从而查表确定键值。,9.1.2,键盘结构及处理程序,4.,行列,反转,法识别子程序,C,语言程序代码,:,#include,char key(),char code keycode=,0 xee,0 xde,0 xbe,0 x7e,0 xed,0 xdd,0 xbd,0 x7d,0 xeb,0 xdb,0 xbb,0 x7b,0 xe7,0 xd7,0 xb7,0 x77,/,键盘表,定义,16,个按键的行列组合值,9.1.2,键盘结构及处理程序,char row,col,k=-1,i;,/,定义行、列、返回值、循环控制变量,P1=0 xf0;,if(P1&0 xf0)=0 xf0),return k;/,无键按下,返回,-1,delay20ms();/,延时去抖,if(P1&0 xf0)=0 xf0),return k;/,抖动引起,返回,-1,P1=0 xf0;,col=P1 /,行输出全,0,,读取列值,P1=col|0 x0f;,row=P1 /,列值输出,读取行值,9.1.2,键盘结构及处理程序,/,查找行列组合值在键盘表中位置,for(i=0;i16;i+),if(row|col)=keycodei)/,找到,,i,即为键值,,/,否则,返回,-1,key=i;/,对重复键,该方法,break;/,处理为无键按下,P1=0 xf0;,while(P1 /,等待键释放,return k;/,返回键值,9.1.2,键盘结构及处理程序,9.1.3,中断扫描方式,为了提高,CPU,的效率,可以采用中断扫描工作方式,,即只有在键盘,有键按下时才产生中断申请,,,CPU,响应中断,进入中断服务程序进行键盘扫描,并做相应处理。也可以采用,定时扫描方式,,即系统每隔一定时间进行键盘扫描,并做相应处理。,9.1.3,中断扫描方式,图,9-6,中断方式键盘接口,9.2 LED,显示接口,主要内容,9.2.1 LED,显示器结构原理,9.2.2 LED,显示器接口及显示方式,9.2.3 LED,显示器与,89C52,接口及显示子程序,9.2.1 LED,显示器结构原理,单片机中通常使用,7,段,LED,构成字型为,“,8”,且加一个,小数点,的数码管,以显示数字、符号及小数,常见数码管如下图。,显示器有,共阴极,和,共阳极,两种。发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的称为共阴极显示器。,一位显示器由,8,个发光二极管,组成,其中,,7,个发光二极管构成字型“,8”,的各个笔划,另一个为小数点。,当在某段发光二极管上施加一定的,正向电压,时,该段笔划即,亮,;不加电压则暗。,9.2.1 LED,显示器结构原理,以共阴极显示器为例,当,a,、,b,、,c,三段送,1,时,数码管显示数字,7,。,(,c,)引脚配置外形图,(,b,)共阳极,(,a,)共阴极,9.2.1 LED,显示器结构原理,表,9-1,共阴极和共阳极,7,段,LED,显示字型编码表,显示字符,0,1,2,3,4,5,6,7,8,共阴极段码,3F,06,5B,4F,66,6D,7D,07,7F,共阳极段码,C0,F9,A4,B0,99,92,82,F8,80,显示字符,9,A,B,C,D,E,F,-,灭,共阴极段码,6F,77,7C,39,5E,79,71,40,00,共阳极段码,90,88,83,C6,A1,86,8E,BF,FF,以上为,8,段,,8,段最高位为小数点段。表中为小数点不点亮段码。,9.2.1 LED,显示器结构原理,9.2.2 LED,显示器接口及显示方式,LED,有,静态显示,和,动态显示,两种方式。,1,LED,静态显示方式,静态显示就是当显示器显示某个字符时,相应的段(发光二极管),恒定地导通或截止,,直到显示另一个字符为止。,共阴极(公共端,K0,)接地;,共阳极(公共端,K0,)接,+5V,电源。,每位的段选线(,a,dp,)分别与一个,8,位锁存器的输出口相连,显示器中的各位,相互独立,。,优点,:亮度较高、编程容易、管理简单;,缺点,:但占用,I/O,口线资源较多。,2,LED,动态显示方式,在多位,LED,显示时,为了简化电路,降低成本,将所有位的,段选线并联,在一起,由一个,8,位,I/O,口控制。而共阴(或共阳)极,公共端,K,分别由相应的,I/O,线控制,,实现各位的,分时选通,。图,9-8,为,6,位共阴极,LED,动态显示接口电路。,9.2.2 LED,显示器接口及显示方式,图,9-8 6,位,LED,动态显示接口电路,9.2.2 LED,显示器接口及显示方式,各位扫描显示:,由于,6,位,LED,所有段选线皆由,P1,口控制,要想每位显示不同的字符,就必须采用,扫描方法轮流点亮各位,LED,,在每一瞬间只使某一位显示字符。,段选码、位选码控制:,P1,口输出相应字符段选码,,P2,口在该显示位送入,选通电平,,保证该位显示相应字符,如此,轮流,。,扫描延时:,段选码、位选码每送入一次后延时,1ms,,保证每位有一定,亮度,,因人眼的视觉暂留效果,看上去每个数码管总在亮。,9.2.2 LED,显示器接口及显示方式,9.2.3,显示器与,89C52,接口及显示子程序,下页图为,89C52 P1,口和,P2,口控制的,6,位共阴极,LED,动态显示接口电路。,P1,口,输出,段选码,,,P2,口,输出,位选码,,位选码占用,输出口的线数决定于显示器位数,。,74LS245,是双向,8,位缓冲器,在此分别作为段选和位选,驱动器,。,逐位轮流点亮各个,LED,,每一位保持,1ms,,在,10,20ms,之内再一次点亮,,重复不止,。这样,利用人的视觉暂留,好像,6,位,LED,同时点亮,一样。,图,9,|,9,数码管动态显示接口,9.2.3,显示器与,89C52,接口及显示子程序,C,语言程序清单,:,#include,unsigned char code LED=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;,unsigned char buf6;/,定义字型码和显示缓冲区,void disp(),unsigned char i;,for(i=0;ii);/,位码送,P2,口,delay1ms();/,延时,1ms,9.2.3,显示器与,89C52,接口及显示子程序,汇编语言程序清单:,DISP:MOV R0,#DISPBUF ;R0,指向显示缓冲区,MOV R2,#0DFH ;,位码送,R2,MOV R3,#6 ;6,位显示,MOV DPTR,#TAB ;DPTR,指向段码表,LOOP:MOV P2,R2 ;,位码送,P2,口,MOV A,R0 ;,取显示数据,MOVC A,A+DPTR ;,取出字型码,MOV P1,A ;,送出显示,LCALL DELAY1MS ;,延时,1ms,INC R0 ;,数据缓冲区地址加,1,MOV A,R2,RR A ;,位码右移一位,MOV R2,A,9.2.3,显示器与,89C52,接口及显示子程序,DJNZ R3,LOOP ;,扫描到最左边显示位?,RET,TAB:DB3FH,06H,5BH,4FH,66H,DB6DH,7DH,07H,7FH,6FH,9.2.3,显示器与,89C52,接口及显示子程序,9.3 A/D,转换接口,主要内容,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,9.3.3,单片机内部集成的,A/D,转换器,模,/,数(,A/D,)转换的方式:,有很多种,例如,,计数比较型,、,逐次逼近型,、,双积分型,等。选择,A/D,转换器件主要是从,速度、精度和价格,上考虑。,A/D,转换器的输出方式:,有,串行、并行,方式,并且有些增强型的单片机在,片内,也,集成,有,A/D,转换器。,9.3 A/D,转换接口,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,TLC2543,是,TI,公司生产的,串行,A/D,转换器,它具有输入,通道多、精度高、速度高、使用灵活和体积小,的优点。,TLC2543,为,CMOS,型,12,位,开关电容,逐次逼近,A/D,转换器。片内含有一个,14,通道多路器,可从,11,个模拟输入或,3,个内部自测电压中选择一个。,TLC2543,与微处理器的接线用,SPI,接口只有,4,根连线,其外围电路也大大减少。,TLC2543,的特性如下,:,12,位,A/D,转换器(可,8,位、,12,位和,16,位输出)。,在工作温度范围内转换时间为,l0s,。,11,通道,输入。,3,种内建的,自检模式,。,片内采样,/,保持,电路。,最大,1/4 096,的线性误差,。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,内置系统时钟。,转换,结束标志,位。,单,/,双极性,输出。,输入,/,输出的顺序可编程(高位或低位在前)。,可支持,软件关机,。,输出数据长度可编程。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,1,TLC2543,的片内结构及引脚功能,TLC2543,片内由,通道选择器,、,数据,(地址和命令字),输入寄存器,、,采样,/,保持电路,、,12,位的,模,/,数转换器,、,输出寄存器,、,并,行到,串,行,转换器,以及,控制逻辑,电路,7,个部分组成。,TLC2543,片内结构如图,9-11,所示。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,图,9-11 TLC2543,片内结构框图,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,TLC2543,的引脚意义如下,:,AIN0,AIN10,模拟输入通道。,CS,片选端。,DIN,串行数据输入。,DOUT,转换结束数据输出。,EOC,转换结束信号。,GND,地。,SCLK,(,I/O CLOCK,)输入,/,输出同步时钟。,REF+,、,REF-,转换参考电压。,V,CC,设备的电源。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,2,TLC2543,的命令字,TLC2543,的每次转换都必须给其写入,命令字,,以便确定下一次转换用,哪个通道,,下次转换结果用,多少位输出,,转换结果输出是,低位在前,还是,高位在前,。命令字的输入采用高位在前。命令字如下:,通道选择,输出数据长度,输出数据顺序,数据极性,D7D6D5D4,D3D2,D1,D0,输入到输入寄存器中的,8,位编程数据选择器件输入通道和输出数据的长度及格式。其选择格式如下表。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,表,9-2,输入寄存器命令字格式,功能选择,输入数据字节,地址位,LlL0,LSBF,BIP,D7,D6,D5,D4,D3D2,D1,D0,输入通道,AIN0,AIN1,AIN2,AIN3,AIN4,AIN5,AIN6,AIN7,AIN8,AIN9,AIN10,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,功能选择,输入数据字节,地址位,L1L0,LSBF,DIP,D7D6D5D4,D3D2,D1,D0,选择测,试电压,(V,ref+,+V,ref-,)/2,V,ref-,V,ref+,1 0 1 1,1 1 0 0,1 1 0 1,软件断电,1 1 1 0,输出数据位数,8,位,12,位,16,位,0 1,X 0,1 1,输出数据格式,MSB,前导,LSB,前导,0,1,输入输出关系,单极性,-,二进制,双极性,-2,的补码,0,1,注:,X,表示无关项。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,3,TLC2543,与,89C52,的,SPI,接口及程序,图,9-12 TLC2543,和,89C52,的接口电路,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,TLC2543,提供,SPI,接口。对于,89C52,,须用,软件合成,SPI,操作来和,TLC2543,接口。,TLC2543,的,I/O CLOCK,、,DIN,和两端由单片机的,P1.0,、,P1.1,和,P1.3,提供。,TLC2543,转换结果的输出(,DOUT,)数据由,P1.2,接收。,89C52,将用户的命令字通过,P1.1,输入到,TLC2543,的输入寄存器中,等待,20s,开始读数据,,同时写入下一次的命令字,。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,TLC2543,与,89C52,的,8,位数据传送程序,TLC2543,与,89C52,进行,1,次,8,位数据传送,选用,AIN0,(即采集,1,次),高位在前。,C,语言程序清单:,#include,#include,sbit CS=P13;,sbit CLK=P10;,sbit DIN=P11;,sbit DOUT=P12;,/,定义函数,输入参数为命令字,输出转换结果,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,unsigned char TLC2543(unsigned char command),unsigned char i,result=0;,CS=0;/,片选有效,for(i=0;i8;i+),DOUT=1;/P1.2,为输入口,DIN=command/,命令字按位送出,result=1;,result|=DOUT;/,按位接收转换结果,CLK=1;/,产生一个时钟,_nop_();/,高电平有一定宽度,CLK=0;,return result;/,返回转换结果,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,汇编语言程序清单:,TLC2543:MOVR4,#04H;,控制字,,,AIN0,,,8,位,MOVA,R4,CLRP1.3;,片选有效,选中,2543,MSB:MOVR5,#08H;,传送,8,位,LOOP:MOVP1,#04H;P1.2,为输入,MOVC,P1.2;,读结果到,C,中,RLCA;,带进位循环左移,MOVP1.1,C,;,将控制字(,ACC,中)的一位经,DIN,送入,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,SETB P1.0;,产生一个时钟,NOP,CLR P1.0,DJNZ R5,LOOP,MOV R2,A;,将转换的数据存入,R2,RET,执行上述子程序,,经,8,次循环,执行“,RLC A”,指令,8,次,最后命令字,00000100,经,P,1.1,、,DIN,进入,TLC2543,的输入寄存器,,8,位,A/D,转换数据,.,读入累加器。,9.3.1,多通道串行输出,A/D,芯片,TLC2543,及接口,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,1,ADC0809,的片内结构及引脚功能,ADC0809,是,CMOS,工艺,采用,逐次逼近,法的,8,位,A/D,转换芯片。,多路开关有,8,路模拟量输入,端,最多允许,8,路模拟量,分时,输入,共用一个,A/D,转换器进行转换。图,9-13,为,ADC0809,的内部逻辑结构图。它由,8,路模拟开关、,8,位,A/D,转换器、三态输出锁存器以及地址锁存译码器,等组成。,图,9-13 ADC0809,内部逻辑结构结构,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,引脚功能说明如下:,IN0,IN7,:,8,个通道的模拟输入端。,D0,D7,:,8,位数字量输出端。,START,:启动信号。,ALE,:地址锁存信号。,EOC,:转换结束信号。,OE,:输出允许控制端。,CLOCK,:时钟信号。,V,REF+,和,V,REF-,:,A/D,转换器的参考电压。,V,CC,电源电压。,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,8,位,模拟开关,地址,输入通道,的关系见表,9-3,。模拟开关的作用和,8,选,1,的,CD4051,作用相同。,表,9-3 8,位模拟开关功能表,ADDC,ADDB,ADDA,输入通道号,0,0,0,IN0,0,0,1,IN1,0,1,0,IN2,1,1,1,IN7,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,2,ADC0809,与,89C52,接口,ADC0809,芯片的转换速度在最高时钟频率下为,100s,左右。,ADC0809,与,89C52,连接可采用,查询,方式,也可采用,中断,方式。图,9-14,为中断方式连接电路图。由于,ADC0809,片内有三态输出锁存器,因此可,直接,与,89C52,接口。,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,图,9-14 ADC0809,与,89C52,的连接,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,这里将,ADC0809,作为外部扩展并行,I/O,口,采用,线选法,寻址。,ADC0809,的,ADDA,、,ADDB,和,ADDC,端由,P0.0,、,P0.1,、,P0.2,送出,,ADC0809,的地址由,P2.7,控制,其他地址位与此无关,设为,1,,于是,ADC0809,地址为为,7FFFH,。,在图,9-14,所示的接口电路中,,ADC0809,与片外,RAM,统一编址,。,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,启动,ADC0809,的工作过程是:,先送数据,(通道地址)到,ADC0809,,由,ALE,信号锁存,,同时,START,有效,,启动,A/D,转换。,A/D,转换完毕,,EOC,端发出一正脉冲,,申请中断,。在中断服务程序中,使,OE,端有效,,,8,位数据便,读入,到,CPU,中。,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,3,8,路巡回检测系统,例,9-2,某粮库或某冷冻厂需对,8,点(,8,个冷冻室或,8,个粮仓)进行温度巡回检测。要求设计一个单片机巡回检测系统,使其能对各冷冻室或各粮仓的温度巡回检测并加以处理。,设被测温度范围为,-30,+50,,温度检测精度要求不大于,l,。,温度传感器可选用,热电阻,、,热敏电阻,、,PN,结,或,集成温度传感器,AD590,和,SL134,等芯片。,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,C,语言程序清单:,#include,#include/,绝对地址定位,#define DAC0809 XBYTE0 x7fff/,定义,C0809,地址,unsigned char xdata buffer8;/,数据存放定义,unsigned char i=0;,void main(),IT1=1;/,边沿触发,EA=1;,EX1=1;,DAC0809=i;/,启动,0,通道转换,while(1);,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,void int1_srv()interrupt 2,bufferi=DAC0809;/,读数存放,if(+i!=8)/,最后一个通道没结束,DAC0809=i;/,启动下一个通道转换,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,汇编语言主程序:,MAIN:MOV R0,#0A0H ;,数据暂存区首地址,MOVR2,#8 ;8,路计数初值,MOVR3,#0 ;R3,存放通道号,SETBIT1 ;,边沿触发,SETBEA ;,开中断,SETBEX1,MOV DPTR,#7FFFH;,指向,0809,MOV A,R3,MOVX DPTR,A ;,送通道号,启动转换,SJMP$,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,中断服务程序:,MOVX A,DPTR ;,读数,MOVX R0,A ;,存数,INC R0 ;,更新存放单元,INC R3 ;,更新通道,DJNZ R2,DONE,RETI,DONE:,MOV A,R3,MOVX DPTR,A,RETI,9.3.2,逐次逼近型并行输出,A/D,转换器及接口,9.3.3,单片机内部集成的,A/D,转换器,目前,很多单片机片内集成有,A/D,转换器,下面以,STC89LE516AD/X2,为例,说明,A/D,转换的使用方法。,1,STC89LE516AD/X2,片内,A/D,转换器特点,STC89LE516AD/X2,的模拟量输入在,P1,口,有,8,位精度,的高速,A/D,转换器,,P1.0-P1.7,共,8,路,,为,电压输入型,,可做按键扫描、电池电压检测、频谱检测等。,2,特殊功能寄存器,(,1,),P1_ADC_EN,特殊功能寄存器,。,P1.x,作为,A/D,转换输入通道允许特殊功能寄存器,地址为,97H,,复位值为,00000000B,。格式如图,9-15,所示。,E_P17,E_P16,E_P15,E_P14,E_P13,E_P12,E_P11,E_P10,图,9-15 P1_ADC_EN,特殊功能寄存器,9.3.3,单片机内部集成的,A/D,转换器,(,2,),ADC_DATA,特殊功能寄存器,。,A/D,转换结果特殊功能寄存器,地址为,0C6H,,复位值为,00000000B,,模拟,/,数字转换结果计算公式如下:结果,=256*Vin/VCC,。,(,3,),ADC_CONTR,特殊功能寄存器,。,A/D,转换控制特殊功能寄存器,地址为,0C5H,,复位值为,xxx00000B,。格式如图,9-16,所示。,ADC_CONTR,(,C5H,),FLAG,START,CHS2,CHS1,CHS0,图,9-16 ADC_CONTR,特殊功能寄存器,9.3.3,单片机内部集成的,A/D,转换器,相关位说明如下,:,1,),ADC_FLAG,:模拟,/,数字转换结束标志位,当,A/D,转换完成后,,ADC_FLAG=1,。,2,),ADC_START,:模拟,/,数字转换(,ADC,)启动控制位,设置为“,1”,时,开始转换。,3,),CHS2/CHS1/CHS0,:模拟输入通道选择,如表,9-4,所示。,9.3.3,单片机内部集成的,A/D,转换器,表,9-4,模拟输入通道选择,CHS2,CHS1,CHS0,模拟输入通道选择,0,0,0,选择,P1.0,作为,A/D,输入来用,0,0,1,选择,P1.1,作为,A/D,输入来用,0,1,0,选择,P1.2,作为,A/D,输入来用,0,1,1,选择,P1.3,作为,A/D,输入来用,1,0,0,选择,P1.4,作为,A/D,输入来用,1,0,1,选择,P1.5,作为,A/D,输入来用,1,1,0,选择,P1.6,作为,A/D,输入来用,1,1,1,选择,P1.7,作为,A/D,输入来用,9.3.3,单片机内部集成的,A/D,转换器,3,A/D,转换程序,用,P1.0,为模拟量输入端进行,A/D,转换,,程序如下,:,#include,sfr P1_ADC_EN=0 x97;,/A/D,转换功能允许寄存器,sfr ADC_CONTR=0 xC5;/A/D,转换控制寄存器,sfr ADC_DATA=0 xC6;/A/D,转换结果寄存器,9.3.3,单片机内部集成的,A/D,转换器,/,延时函数,voiddelay(unsigned chardelay_time),unsigned inti;,while(delay_time-),for(i=0;i10000;i+);,9.3.3,单片机内部集成的,A/D,转换器,unsignedcharADC()/AD,转换函数,delay(1);/,使输入电压达到稳定,ADC_CONTR=0 x08;,/P1.0,为模拟量输入端,启动,A/D,转换,while(ADC_CONTR,/,等待转换结束,return ADC_DATA;/,返回转换结果,9.3.3,单片机内部集成的,A/D,转换器,9.4 D/A,转换接口,主要内容,9.4.1,位并行,D/A,转换器,DAC0832,接口技术,9.4.2,串行输入,D/A,转换器,TLC5615,接口技术,9.4.1,并行,D/A,转换器,DAC0832,接口技术,1,DAC0832,的结构原理,(,1,),DAC0832,的特性,。具有两级输入数据寄存器的,8,位单片,D/A,转换器,它能直接与单片机,89,C52,相连接,采用,二次缓冲方式,,可以在输出的同时,采集下一个数据,从而提高转换速度,能够在多个转换器同时工作时,实现,多通道,D/A,的同步转换输出。,主要的特性参数如下:,分辨率为,8,位。,只需在满量程下调整其线性度。,可与所有的单片机或微处理器,直接接口,。,电流稳定时间为,1s,。,可双缓冲、单缓冲或直通数据输入。,功耗低,约为,200mW,。,逻辑电平输入与,TTL,兼容。,单电源供电(,+5V,+15V,)。,9.4.1 8,位并行,D/A,转换器,DAC0832,接口技术,(,2,),DAC0832,的引脚及逻辑结构,。,DAC0832,的逻辑结构如下图所示,由,8,位锁存器,、,8,位,DAC,寄存器,和,8,位,D/A,转换器,构成。,图,9-17 DAC0832,结构,9.4.1 8,位并行,D/A,转换器,DAC0832,接口技术,DAC0832,各引脚的功能说明如下:,D0,D7,:数字量数据输入线。,ILE,:数据锁存允许信号,高电平有效。,CS,:输入寄存器选择信号,低电平有效。,WR1,:输入寄存器的“写”选通信号,低电平有效。,WR2,:,DAC,寄存器的“写”选通信号,低电平有效。,XFER,:数据传送信号,低电平有效。,VREF,:基准电压输入线。,9.4.1 8,位并行,D/A,转换器,DAC0832,接口技术,RFB,:反馈信号输入线,片内已有反馈电阻。,IOUT1,和,IOUT2,:电流输出线。,IOUT1,与,IOUT2,的和为常数,,DAC,寄存器的内容线性变化。一般在单极性输出时,,IOUT2,接地。,VCC,:工作电源。,DGND,:数字地。,AGND,:模拟信号地,。,9.4.1 8,位并行,D/A,转换器,DAC0832,接口技术,2,DAC0832,与单片机的接口,(,1,)单缓冲器方式接口,。,图,9-18 DAC0832,单缓冲方式接口,9.4.1 8,位并行,D/A,转换器,DAC0832,接口技术,将,ILE,接,+5V,,寄存器选择信号及数据传送信号都与地址选择线相连(图中为,P2.7,),两级寄存器的写信号都由,89C52,的,WR,端控制。当地址线选通,DAC0832,后,只要输出控制信号,,DAC0832,就能,一步完成数字量的输入锁存和,D/A,转换输出,。,9.4.1 8,位并行,D/A,转换器,DAC0832,接口技术,C,语言程序清单:,/*-,头文件声明及端口地址定义,-*/,#include,#define DAC0832 XBYTE0 x7FFF,/*-,在需要输出时,data1,为输出模拟量的数字值,-*/,DAC0832=data1;,汇编语言程序清单:,MOV DPTR,#7FFFH,MOV A,#DATA1,MOVX DPTR,A,9.4.1 8,位并行,D/A,转换器,DAC0832,接口技术,(,2,)双缓冲器同步方式接口,。,图,9-19,是一个,二路同步,输出的,D/A,转换接口电路。,89C52,的,P2.5,和,P2.6,分别选择两路,D/A,转换器的输入
展开阅读全文