单片机原理及应用(C语言版)9.ppt
单片机原理及应用(C语言版)9 Four short words sum up what has lifted most successful Four short words sum up what has lifted most successful individuals above the crowd: a little bit more. individuals above the crowd: a little bit more. -author -author -date-date第第9章章 单片机系统配置及接口单片机系统配置及接口目目 录录9.1 键盘接口键盘接口9.2 LED显示接口显示接口9.3 A/D转换接口转换接口9.4 D/A转换接口转换接口9.5 开关器件接口开关器件接口本章要点本章要点单片机主要应用于测控系统中,应用系单片机主要应用于测控系统中,应用系统通常需要人的干预。统通常需要人的干预。本章主要讲述本章主要讲述键盘键盘、显示器显示器、A/DA/D转换转换器、器、D/AD/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所示所示 。抖动时间一般为抖动时间一般为510ms。抖动会引起。抖动会引起一次按键被一次按键被误读误读多次。多次。为确保为确保CPU对键的一对键的一次闭合仅做一次处理,必须去除键抖动次闭合仅做一次处理,必须去除键抖动。9.1.1 键盘基本问题键盘基本问题9.1.1 键盘基本问题键盘基本问题图图9-3 按键时的抖动按键时的抖动9.1.1 键盘基本问题键盘基本问题一独立式键盘一独立式键盘独立式按键是指各独立式按键是指各按键相互独立地接通按键相互独立地接通一条一条输入数据线输入数据线。当。当任何一个键按下时,任何一个键按下时,与之相连的输入数据与之相连的输入数据线即可线即可读入数据读入数据0,而,而没有按下时没有按下时读入读入1。9.1.2 键盘结构及处理程序键盘结构及处理程序 优点优点:电路简单;:电路简单;缺点缺点:键数较多时,要占用较多的:键数较多时,要占用较多的I/O线。线。图图9-4 独立式键盘独立式键盘例例9-19-1 设计一个独立式按键的键盘接口,设计一个独立式按键的键盘接口,并编写键扫描程序,电路原理图如图并编写键扫描程序,电路原理图如图9-49-4所示,所示,键号从上到下分别为键号从上到下分别为0 07 7。C C语言程序清单语言程序清单:#includevoid key()unsigned char k;P1=0 xff;/输入时输入时P1口置全口置全1k=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 键盘结构及处理程序键盘结构及处理程序 /26号键程序省略号键程序省略case:0 x7f /7号键按下时执行程序段号键按下时执行程序段break;汇编语言程序清单汇编语言程序清单:KEY:MOVP1,#0FFH ;P1口为输入口口为输入口MOVA,P1 ;读取按键状态读取按键状态CPL A ;取正逻辑取正逻辑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 键盘结构及处理程序键盘结构及处理程序 JB ACC.7,PKEY7 ;K7按下转按下转PKEY7EKEY: RETPKEY1:LCALL K0 ;K0命令处理程序命令处理程序 RETPKEY2:LCALL K1 ;K1命令处理程序命令处理程序 RET PKEY4:LCALL K7 ;K7命令处理程序命令处理程序 RET9.1.2 键盘结构及处理程序键盘结构及处理程序 二行列式键盘二行列式键盘 为了减少键盘与为了减少键盘与单片机接口时所占用单片机接口时所占用I/O线的数目线的数目,在键数,在键数较多时,通常都将键盘较多时,通常都将键盘排列成排列成行列矩阵行列矩阵形式。形式。每一水平线(行线)与每一水平线(行线)与垂直线(列线)的垂直线(列线)的交叉交叉处处通过一个按键来连通。通过一个按键来连通。图图9-5 44矩阵键盘接口矩阵键盘接口 利用这种结构只需利用这种结构只需N条行线和条行线和M条列线,条列线,即可组成具有即可组成具有NM个按键的键盘。个按键的键盘。9.1.2 键盘结构及处理程序键盘结构及处理程序 图图9|544矩矩阵阵键键盘盘接接口口9.1.2 键盘结构及处理程序键盘结构及处理程序 1.行扫描法工作原理行扫描法工作原理 判别键盘中有无键按下。判别键盘中有无键按下。向行线输出向行线输出全全0,读入列线状态。如果有键按下,总有一列线读入列线状态。如果有键按下,总有一列线被拉至低电平,从而使被拉至低电平,从而使列输入不全为列输入不全为1。 查找按下键所在位置。查找按下键所在位置。依次依次给行线送低给行线送低电平,查电平,查列线列线状态。全为状态。全为1,则所按下的键不,则所按下的键不在此行;否则所按下的键必在此在此行;否则所按下的键必在此行行且是在且是在与与零电平零电平列列线线相交相交的交点上的那个键。的交点上的那个键。 对按键位置进行编码。对按键位置进行编码。找到所按下找到所按下按键的行列位置后,对按键进行按键的行列位置后,对按键进行编码编码,即求得按键键值。即求得按键键值。9.1.2 键盘结构及处理程序键盘结构及处理程序 2. .键盘扫描识别子程序键盘扫描识别子程序C语言程序清单语言程序清单:#includechar 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&0 xf0; if(k!=0 xf0) /列线不全为列线不全为1, while(k&(1(col+4)/所按键在该列所按键在该列 col+; /查找为查找为0列号列号 k=row*4+col;/计算键值计算键值 P1=0 xf0; while(P1&0 xf0)!=0 xf0); /等待键释放等待键释放 break; return k;/返回键值返回键值9.1.2 键盘结构及处理程序键盘结构及处理程序 汇编语言程序清单汇编语言程序清单(返回键值:在累加器返回键值:在累加器A中中):KEY:LCALL KS ;判断是否有键按下判断是否有键按下JZ EKEY ;无键按下,返回无键按下,返回LCALL DELAY20MS ;延时去抖延时去抖LCALL KSJZ EKEY ;抖动引起,返回抖动引起,返回SKEY:MOV R0,#0 ; 行扫描计数器行扫描计数器R0 清清0MOV R1,#0 ; 列计数器列计数器R1 清清0MOV R3,#0FEH ;R3为行扫描字暂存为行扫描字暂存SKEY1:MOV P1,R3 ;输出行扫描字输出行扫描字9.1.2 键盘结构及处理程序键盘结构及处理程序 MOVA,P1 ;读列值读列值MOVR1,A ;暂存列值暂存列值CPLAANLA,#0F0HJNZSKEY2 ;键在该列,转键在该列,转SKEY2INCR0 ;行计数器加行计数器加1SETBCMOVA,R3RLCAMOVR3,A ;进行下一行扫描进行下一行扫描CJNER0,#4,SKEY1 ;4未完成未完成, 转转SKEY1 EKEY:MOVA,#0FFH;无键返回无键返回0FFH RET9.1.2 键盘结构及处理程序键盘结构及处理程序 SKEY2:MOVA,R1JNB ACC.4,SKEY3JNB ACC.5,SKEY4JNB ACC.6,SKEY5JNB ACC.7,SKEY6SKEY3:MOVR2,#0;存存0列号列号SJMPDKEYSKEY4:MOVR2,#1;存存1列号列号SJMPDKEYSKEY5:MOVR2,#2;存存2列号列号SJMPDKEY9.1.2 键盘结构及处理程序键盘结构及处理程序 SKEY6:MOVR2,#3 ;存存3列号列号 SJMPDKEYDKEY: MOVA,R0 ; 行号送行号送A MOVB,#4 MULAB ADDA,R2 ;行号行号4+列号列号=键值键值 PUSHACCLK: LCALLKS ;等待键释放等待键释放 JNZLK POPACC RET9.1.2 键盘结构及处理程序键盘结构及处理程序 ;是否有键按下子程序,有返回非是否有键按下子程序,有返回非0,无返回,无返回0KS:MOVP1,#0F0HMOVA,P1CPLAANLA,#0F0HRET9.1.2 键盘结构及处理程序键盘结构及处理程序 3.行列反转法工作原理行列反转法工作原理 判别键盘中有无键按下。判别键盘中有无键按下。(方法同行扫(方法同行扫描法)描法) 输入变输出,再读。输入变输出,再读。将上一步读取到的将上一步读取到的列线输入值列线输入值从从列线输出列线输出,读取,读取行线值行线值。 定位求键值。定位求键值。根据上一步输出的列线值根据上一步输出的列线值和读取到的行线值就可以确定所按下键所和读取到的行线值就可以确定所按下键所在的在的位置位置,从而查表确定键值。,从而查表确定键值。9.1.2 键盘结构及处理程序键盘结构及处理程序 4.4.行列行列反转反转法识别子程序法识别子程序C语言程序代码语言程序代码:#includechar 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; /无键按下,返回无键按下,返回-1delay20ms(); /延时去抖延时去抖if(P1&0 xf0)=0 xf0)return k; /抖动引起,返回抖动引起,返回-1P1=0 xf0;col=P1&0 xf0; /行输出全行输出全0,读取列值,读取列值P1=col|0 x0f;row=P1&0 x0f; /列值输出,读取行值列值输出,读取行值9.1.2 键盘结构及处理程序键盘结构及处理程序 /查找行列组合值在键盘表中位置查找行列组合值在键盘表中位置for(i=0;i16;i+)if(row|col)=keycodei) /找到,找到,i即为键值,即为键值, /否则,返回否则,返回-1 key=i; /对重复键,该方法对重复键,该方法break; /处理为无键按下处理为无键按下P1=0 xf0;while(P1&0 xf0)!=0 xf0); /等待键释放等待键释放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 7段段LEDLED构成字型为构成字型为“8”8”且加一个且加一个小数点小数点的数码管,以显示数的数码管,以显示数字、符号及小数,常见数码管如下图。字、符号及小数,常见数码管如下图。显示器有显示器有共阴极共阴极和和共阳极共阳极两种。发光二极两种。发光二极管的阳极连在一起的称为共阳极显示器,阴管的阳极连在一起的称为共阳极显示器,阴极连在一起的称为共阴极显示器。极连在一起的称为共阴极显示器。一位显示器由一位显示器由8 8个发光二极管个发光二极管组成,其中,组成,其中,7 7个发光二极管构成字型个发光二极管构成字型“8”8”的各个笔划,的各个笔划,另一个为小数点。另一个为小数点。当在某段发光二极管上施加一定的当在某段发光二极管上施加一定的正向电正向电压压时,该段笔划即时,该段笔划即亮亮;不加电压则暗。;不加电压则暗。9.2.1 LED显示器结构原理显示器结构原理 以共阴极显示器为例,当以共阴极显示器为例,当a、b、c三段送三段送1时,数码管显示数字时,数码管显示数字7。(c)引脚配置外形图)引脚配置外形图(b)共阳极)共阳极(a)共阴极)共阴极9.2.1 LED显示器结构原理显示器结构原理表表9-1 共阴极和共阳极共阴极和共阳极7段段LED显示字型编码表显示字型编码表显示字符显示字符012345678共阴极段码共阴极段码3F065B4F666D7D077F共阳极段码共阳极段码C0F9A4B0999282F880显示字符显示字符9ABCDEF- -灭灭共阴极段码共阴极段码6F777C395E79714000共阳极段码共阳极段码908883C6A1868EBFFF 以上为以上为8段,段,8段最高位为小数点段。表中为小数段最高位为小数点段。表中为小数点不点亮段码。点不点亮段码。9.2.1 LED显示器结构原理显示器结构原理9.2.2 LED显示器接口及显示方式显示器接口及显示方式LED有有静态显示静态显示和和动态显示动态显示两种方式。两种方式。1LED静态显示方式静态显示方式静态显示就是当显示器显示某个字符时,静态显示就是当显示器显示某个字符时,相应的段(发光二极管)相应的段(发光二极管)恒定地导通或截止恒定地导通或截止,直到显示另一个字符为止。直到显示另一个字符为止。共阴极(公共端共阴极(公共端K0)接地;)接地;共阳极(公共端共阳极(公共端K0)接)接+5V电源。电源。每位的段选线(每位的段选线(adp)分别与一个)分别与一个8位锁位锁存器的输出口相连,显示器中的各位存器的输出口相连,显示器中的各位相互独立相互独立。优点优点:亮度较高、编程容易、管理简单;:亮度较高、编程容易、管理简单;缺点缺点:但占用:但占用I/O口线资源较多。口线资源较多。2LED动态显示方式动态显示方式在多位在多位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,在在1020ms之内再一次点亮,之内再一次点亮,重复不止重复不止。这。这样,利用人的视觉暂留,好像样,利用人的视觉暂留,好像6位位LED同时点同时点亮亮一样。一样。图图9|9 数数码码管管动动态态显显示示接接口口9.2.3 显示器与显示器与89C52接口及显示子程序接口及显示子程序C语言程序清单语言程序清单:#includeunsigned 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();/延时延时1ms9.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,A9.2.3 显示器与显示器与89C52接口及显示子程序接口及显示子程序DJNZ R3,LOOP ;扫描到最左边显示位?扫描到最左边显示位?RETTAB: DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FH9.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及接口及接口1TLC2543的片内结构及引脚功能的片内结构及引脚功能TLC2543片内由片内由通道选择器通道选择器、数据数据(地址(地址和命令字)和命令字)输入寄存器输入寄存器、采样采样/保持电路保持电路、12位的位的模模/数转换器数转换器、输出寄存器输出寄存器、并并行到行到串串行行转换器转换器以及以及控制逻辑控制逻辑电路电路7个部分组成。个部分组成。TLC2543片内结构如图片内结构如图9-11所示。所示。9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口图图9-11 TLC2543片内结构框图片内结构框图9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接及接口口TLC2543的引脚意义如下的引脚意义如下:AIN0AIN10 模拟输入通道。模拟输入通道。CS片选端。片选端。DIN 串行数据输入。串行数据输入。DOUT转换结束数据输出。转换结束数据输出。EOC转换结束信号。转换结束信号。GND地。地。SCLK(I/O CLOCK)输入)输入/输出同步输出同步时钟。时钟。REF+、 REF- 转换参考电压。转换参考电压。 VCC 设备的电源。设备的电源。9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口2TLC2543的命令字的命令字TLC2543的每次转换都必须给其写入的每次转换都必须给其写入命令命令字字,以便确定下一次转换用,以便确定下一次转换用哪个通道哪个通道,下次,下次转换结果用转换结果用多少位输出多少位输出,转换结果输出是,转换结果输出是低低位在前位在前还是还是高位在前高位在前。命令字的输入采用高。命令字的输入采用高位在前。命令字如下:位在前。命令字如下:通道选择通道选择输出数据长度输出数据长度输出数据顺序输出数据顺序数据极性数据极性D7D6D5D4D3D2D1D0 输入到输入寄存器中的输入到输入寄存器中的8位编程数据选择位编程数据选择器件输入通道和输出数据的长度及格式。其器件输入通道和输出数据的长度及格式。其选择格式如下表。选择格式如下表。9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口表表9-2 输入寄存器命令字格式输入寄存器命令字格式功能选择功能选择输入数据字节输入数据字节地址位地址位LlL0LSBF BIPD7 D6 D5 D4 D3D2D1D0输输入入通通道道AIN0AIN1AIN2AIN3AIN4AIN5AIN6AIN7AIN8AIN9AIN10000000001110000111100000110011001010101010109.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口功能选择功能选择输入数据字节输入数据字节地址位地址位L1L0 LSBF DIPD7D6D5D4D3D2D1D0选择测选择测试电压试电压(Vref+Vref-)/2Vref-Vref+1 0 1 11 1 0 01 1 0 1软件断电软件断电1 1 1 0输出数输出数据位数据位数8位位12位位16位位0 1X 01 1输出数输出数据格式据格式MSB前导前导LSB前导前导01输入输输入输出关系出关系单极性单极性-二进制二进制双极性双极性-2的补码的补码01注:注:X表示无关项。表示无关项。9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口 3TLC2543与与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#includesbit 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;ii);/命令字按位送出命令字按位送出result=1;result|=DOUT;/按位接收转换结果按位接收转换结果CLK=1;/产生一个时钟产生一个时钟_nop_();/高电平有一定宽度高电平有一定宽度CLK=0;return result;/返回转换结果返回转换结果9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口汇编语言程序清单:汇编语言程序清单:TLC2543: MOVR4,#04H;控制字,控制字,AIN0,8位位MOVA,R4CLR P1.3;片选有效,选中片选有效,选中2543MSB:MOVR5,#08H;传送传送8位位LOOP:MOVP1,#04H;P1.2为输入为输入MOVC,P1.2;读结果到读结果到C中中RLC A;带进位循环左移带进位循环左移MOVP1.1,C;将控制字(将控制字(ACC中)的一位经中)的一位经DIN送入送入9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口SETB P1.0;产生一个时钟产生一个时钟NOPCLR P1.0DJNZ R5,LOOPMOV R2,A;将转换的数据存入将转换的数据存入R2RET执行上述子程序,经执行上述子程序,经8次循环,执行次循环,执行“RLC A”指令指令8次,最后命令字次,最后命令字00000100经经P1.1、DIN进入进入TLC2543的输入寄存器,的输入寄存器,8位位A/D转换转换数据数据.读入累加器。读入累加器。9.3.1 多通道串行输出多通道串行输出A/D芯片芯片TLC2543及接口及接口9.3.2 逐次逼近型并行输出逐次逼近型并行输出A/D转换器转换器及接口及接口1ADC0809的片内结构及引脚功能的片内结构及引脚功能ADC0809是是CMOS工艺,采用工艺,采用逐次逼近逐次逼近法法的的8位位A/D转换芯片。转换芯片。多路开关有多路开关有8路模拟量输入路模拟量输入端,最多允许端,最多允许8路模拟量路模拟量分时分时输入,共用一个输入,共用一个A/D转换器进行转换器进行转换。图转换。图9-13为为ADC0809的内部逻辑结构图。的内部逻辑结构图。它由它由8路模拟开关、路模拟开关、8位位A/D转换器、三态输出转换器、三态输出锁存器以及地址锁存译码器锁存器以及地址锁存译码器等组成。等组成。图图9-13 ADC0809内部逻辑结构结构内部逻辑结构结构9.3.2 逐次逼近型并行输出逐次逼近型并行输出A/D转换器及接口转换器及接口引脚功能说明如下:引脚功能说明如下:IN0IN7:8个通道的模拟输入端。个通道的模拟输入端。D0D7:8位数字量输出端。位数字量输出端。START:启动信号。:启动信号。ALE:地址锁存信号。:地址锁存信号。EOC:转换结束信号。:转换结束信号。OE:输出允许控制端。:输出允许控制端。CLOCK:时钟信号。:时钟信号。VREF+和和VREF-:A/D转换器的参考电压。转换器的参考电压。 VCC 电源电压。电源电压。9.3.2 逐次逼近型并行输出逐次逼近型并行输出A/D转换器及接转换器及接口口 8位位模拟开关模拟开关地址地址输入通道输入通道的关系见表的关系见表9-3。模拟开关的作用和模拟开关的作用和8选选1的的CD4051作用相同。作用相同。表表9-3 8位模拟开关功能表位模拟开关功能表ADDCADDBADDA输入通道号输入通道号000IN0001IN1010IN2111IN79.3.2 逐次逼近型并行输出逐次逼近型并行输出A/D转换器及接转换器及接口口2ADC0809与与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转换器及接转换器及接口口38路巡回检测系统路巡回检测系统例例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() int