周国运单片机原理及应用(C语言版)9.ppt_第1页
周国运单片机原理及应用(C语言版)9.ppt_第2页
周国运单片机原理及应用(C语言版)9.ppt_第3页
周国运单片机原理及应用(C语言版)9.ppt_第4页
周国运单片机原理及应用(C语言版)9.ppt_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及应用 (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、键

2、的识别 当按键K未被按下时,P1.0输入为高电平;当K闭合时,P1.0输入为低电平。,9.1.1 键盘基本问题,图9-2 按键电路,9.1.1 键盘基本问题,2、键的抖动 由于机械触点的弹性作用,按键在闭合时不会马上稳定地接通,在断开时也不会一下子断开。在闭合及断开的瞬间均伴随有一连串的抖动,如图9-3所示 。 抖动时间一般为510ms。抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅做一次处理,必须去除键抖动。,9.1.1 键盘基本问题,图9-3 按键时的抖动,9.1.1 键盘基本问题,一独立式键盘 独立式按键是指各按键相互独立地接通一条输入数据线。当任何一个键按下时,与之相连的输

3、入数据线即可读入数据0,而没有按下时读入1。,9.1.2 键盘结构及处理程序,优点:电路简单; 缺点:键数较多时,要占用较多的I/O线。,图9-4 独立式键盘,键 号 0 1 2 3 4 5 6 7,10k*8,例9-1 设计一个独立式按键的键盘接口,并编写键扫描程序,电路原理图如图9-4所示,键号从上到下分别为07。 C语言程序清单: #include void key() unsigned char k; P1=0 xff;/输入前P1口输出全1 k=P1;/读取按键状态 if(k=0 xff) return; /无键按下,返回 delay20ms();/有键按下,延时去抖,9.1.2 键

4、盘结构及处理程序,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 ;读取按键状态 CPLA ;取正逻辑 JZEKEY ;无键按下,返回,9.1.2 键盘结构及

5、处理程序,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 ;0号按下转PKEY0 JB ACC.1,PKEY1 ;1号按下转PKEY1 ,9.1.2 键盘结构及处理程序,JBACC.7,PKEY7 ;7号按下转PKEY7 EKEY: RET PKEY0:LCALLK0 ;K0命令处理程序 RET PKEY1:LCALLK1 ;K1命令处理程序 RET P

6、KEY7:LCALLK7 ;K7命令处理程序 RET,9.1.2 键盘结构及处理程序,二行列式键盘 为了减少键盘与单片机接口时所占用I/O线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式。每一水平线(行线)与垂直线(列线)的交叉处通过一个按键来连通。,利用这种结构只需N条行线和M条列线, 即可组成具有NM个按键的键盘。,9.1.2 键盘结构及处理程序,图 9 | 5 4 4 矩 阵 键 盘 接 口,9.1.2 键盘结构及处理程序,1、行扫描法工作原理 判别键盘中有无键按下。向行线输出全0,读入列线状态。如果有键按下,总有一列线被拉至低电平,从而使列输入不全为1。 查找按下键所在的行。依次

7、给各行线送低电平,查列线状态。全为1,则所按下的键不在此行;否则按下的键必在此行。 查找按下键所在的列。在上面读入的列值从第0位开始逐位判断,找出为0的位号,即为按下键的列号。 按键编码(编号、键号、键值):为了方便找到所按下按键及功能,对按键进行编码、即编号。 键号=行首号+列号=行号4 + 列号 键号要与键名相区分;一般编号与键号相同,9.1.2 键盘结构及处理程序,2.键盘扫描子程序 C语言程序清单: #include unsigned char key(void) unsigned char row,col=0, k=0 xff, dd; /定义行、列、返回值 P1=0 xf0; /各

8、行输出0 ,各列输出1 dd=P1; /从P1口输入 if(dd=0 xf0)return k;/无键按下,返回0 xff delay5ms(3);/延时15ms去抖动 dd=P1; /各行输出0 ,各列输出1 if(dd=0 xf0)return k;/无键按下,返回0 xff,9.1.2 键盘结构及处理程序,判 断 是 否 有 键 按 下,判 断 是 否 有 键 按 下,scan=0 xfe; /行扫描码 for(row=0;row1; break; /跳出外层循环 scan=scan*2+1;/左移1位 return k;/返回键值 ,9.1.2 键盘结构及处理程序,2.键盘扫描子程序

9、C语言程序清单: #include char key() char row,col=0, k =-1;/定义行、列、返回值 P1=0 xf0;/各行全输出0 if(P1=0 xf0) return k;/无键按下,返回-1 delay20ms();/延时去抖 if(P1=0 xf0) return k;/抖动引起,返回-1,9.1.2 键盘结构及处理程序,for(row=0;row4;row+)/行扫描 P1=(1row); /扫描值送P1 k=P1/返回键值 ,9.1.2 键盘结构及处理程序,汇编语言程序清单(返回键值:在累加器A中): KEY:LCALL KS ;判断是否有键按下 JZ E

10、KEY ;无键按下,返回 LCALL DELAY20MS ;延时去抖 LCALL KS JZ EKEY ;抖动引起,返回 SKEY:MOV R0,#0 ; 行扫描计数器R0清0 MOV R3,#0FEH ;R3为行扫描字 ;R1存读取的列值 ;R2存计算出的键号 SKEY1:MOV P1,R3 ;做行扫描 ;输出行扫描字,9.1.2 键盘结构及处理程序,MOVA,P1;读列值 MOVR1,A;暂存列值 CPLA ANLA,#0F0H JNZSKEY2 ;键在该行,转 INCR0;行计数器R0加1 MOVA,R3;R3行扫描字 RLA MOVR3,A ;下一行扫描字 CJNER0,#4,SKEY

11、1 ;行未扫描完转 EKEY: MOVA,#0FFH;无键返回0FFH RET,9.1.2 键盘结构及处理程序,SKEY2:MOVA,R1;查找按键所在列 JNBACC.4,SKEY3;在第0列 JNBACC.5,SKEY4;在第1列 JNBACC.6,SKEY5;在第2列 JNBACC.7,SKEY6;在第3列 SKEY3:MOVR2,#0 ;存列号于R2 SJMPDKEY SKEY4:MOVR2,#1;存列号于R2 SJMPDKEY;转去计算键号 SKEY5:MOVR2,#2;存2列号 SJMPDKEY,9.1.2 键盘结构及处理程序,SKEY6:MOVR2,#3 ;存3列号 SJMPDK

12、EY 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.行列反转法识别按键 判别键盘中有无键按下(方 法同行扫描法) 行列反转输出、输入 各行输出0(各列输出1),只输入列值(或输入的各行清0) 各列输出读入的值(各行输出1 ),只输入行值(或输

13、入的各列清0) 。 合并行列值,得到所按下键的唯一的行列值,由行列值查表确定其键值。,9.1.2 键盘结构及处理程序,行列不能独立操作,4.行列反转法识别按键子程序 C语言程序代码: #include unsigned 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 键盘结构及处理程序,unsigned char row,col,i

14、,k=0 xff; /定义行、列、返回值、循环控制变量 P1=0 xf0; if(P1/读取行值,9.1.2 键盘结构及处理程序,/查找行列组合值在键盘表中位置 row=row|col;/把读入的行列值合并 for(i=0;i16;i+) /查表 if(row=keycodei) /找到,i即为键值 k=i; break; /对重复键,该方法 /处理为无键按下 P1=0 xf0; while(P1/返回键值 ,9.1.2 键盘结构及处理程序,9.1.3 中断扫描方式,为了提高CPU的效率,可以采用中断扫描工作方式,即只有在键盘有键按下时才产生中断申请,CPU响应中断,进入中断服务程序进行键盘扫

15、描,并做相应处理。也可以采用定时扫描方式,即系统每隔一定时间进行键盘扫描,并做相应处理。,9.1.3 中断扫描方式,74LS21,10k*4,9.2 LED显示接口,主要内容 9.2.1 LED显示器结构与原理 9.2.2 LED显示器接口及显示方式 9.2.3 LED显示器与89C52接口及显示子程序,9.2.1 LED显示器结构原理,单片机中通常使用7段LED构成字型为“8”且加一个小数点的数码管,以显示数字、符号及小数。常见数码管如下图。,显示器有共阴极和共阳极两种。发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的称为共阴极显示器。当在某段发光二极管上施加一定的正向电压时,该段

16、笔划即亮;不加电压则暗。 对共阴极发光二极管,某段的阳极加上正电压,则对应的段点亮。 对共阳极发光二极管,某段的阴极接低电位,则对应的段点亮。,9.2.1 LED显示器结构原理,以共阴极显示器为例,当a、b、c三段送1时,数码管显示数字7。,(c)引脚配置外形图,(b)共阳极,(a)共阴极,9.2.1 LED显示器结构原理,9.2.1 LED显示器结构原理,fb ec,a g d,h,3F,D7 D6 D5 D4 D3 D2 D1 D0 h g f e d c b a,06,5B,4F,66,6D,7D,07,6F,b c,b e,a g d,fb ec,a d,表9-1 共阴极和共阳极7段L

17、ED显示字型编码表,以上为8段,8段最高位为小数点段。表中为小数点不点亮的段码。,9.2.1 LED显示器结构原理,9.2.2 LED显示方式及接口,LED有静态显示和动态显示两种方式。 1LED静态显示方式 静态显示:当显示器显示某个字符时,相应的段(发光二极管)恒定地导通或截止,直到显示另一个字符为止。 共阴极(公共端K)接地; 共阳极(公共端A)接+5V电源。 每个数码管的段选线(ah)分别与一个8位锁存器的输出口相连,各显示位相互独立。,优点:亮度较高、编程容易、管理简单; 缺点:占用I/O口线资源较多。 2LED动态显示方式 所有位的段选线:并联在一起,由一个8位I/O口控制; 各位

18、的公共端:分别由不同的I/O线控制,实现各位的分时选通。 图9-8为6位共阴极LED动态显示接口电路,9.2.2 LED显示器接口及显示方式,图9-8 6位LED动态显示接口电路,9.2.2 LED显示器接口及显示方式,段选(P0口),各位扫描显示:由于6位LED所有段选线皆由P0口控制,要想每位显示不同的字符,就必须采用扫描方法轮流点亮各位LED,在每一瞬间只使某一位显示字符。 段选码、位选码控制:P0口输出相应字符段选码,P2口对该显示位送选通电平,保证该位显示相应字符,如此轮流。 扫描延时:段选码、位选码每送一次后至少延时1ms,保证每位有一定亮度,因人眼的视觉暂留效应,看上去每个数码管

19、总在亮。,9.2.2 LED显示器接口及显示方式,9.2.3 显示器与89C52接口及显示子程序,下页图为89C52 控制的6位共阴极LED动态显示接口电路。 P0口输出段选码,P2口输出位选码。 74LS245:是双向8位缓冲器/驱动器。 逐位轮流点亮各个LED,每一位保持2.5ms,在1520ms之内再一次点亮,重复不止。,图9 | 9 数码管动态显示接口,9.2.3 显示器与89C52接口及显示子程序,2,4,5,C语言程序清单: #include unsigned char code LED =0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x

20、07,0 x7f,0 x6f; unsigned char buf6;/定义字型码和显示缓冲区 void disp() unsigned char i, scan=0 xdf; for(i=0;i1 +0 x80; ,9.2.3 显示器与89C52接口及显示子程序,汇编语言程序清单: DISP: MOV R0,#DISPBUF ; R0指向显示缓冲区 MOV R2,#0DFH ;位码送R2 MOV R3,#6 ;6位显示 MOV DPTR,#TAB ;DPTR指向段码表LOOP:MOV A,R0 ;取显示数据 MOVC A,A+DPTR ;取出字型码 MOV P0,A ;送出显示 MOV P2

21、,R2 ;位码送P2口 LCALL DELAY2MS ;延时2ms,9.2.3 显示器与89C52接口及显示子程序,INC R0 ;数据缓冲区地址加1 MOV A,R2 RR A;位码循环右移一位 MOV R2,A 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转换器及其接口 9.3.2 并行接口A/D转换器及其接口 9.3.3 单片机内部集成的A/D转换器,模/数(A/D)

22、转换的方式:有很多种,例如,计数比较型、逐次逼近型、双积分型等。选择A/D转换器件主要是从速度、精度和价格上考虑。 A/D转换器的接口方式:有串行、并行方式,并且有些增强型的单片机在片内集成有A/D转换器。,9.3 A/D转换接口,9.3.2 串行接口A/D芯片TLC2543及接口,本节主要内容: TLC2543的特点 TLC2543的功能结构和引脚信号 TLC2543的编程命令字 TLC2543的接口方式 TLC2543的操作时序 TLC2543的应用编程,9.3.2 串行接口A/D芯片TLC2543及接口,TLC2543是TI公司生产的12位、逐次逼近式、CMOS工艺的串行接口A/D转换器

23、。 它具有输入通道多、速度高、测量范围宽、体积小、接口方便等特点。 由于这些特点,受到了系统开发工程师的青睐,得到越来越多的应用。 本节主要讨论:TLC 2543的特性、结构与引脚信号、命令字、时序、接口与控制编程。,1、TLC2543的主要特性 1)12位A/D转换器,可8位、12位和16位输出 2)转换时间:l0s,高速 3)11通道模拟量输入 4)3种内建的自检模式 5)片内采样/保持电路 6)最大线性误差: 1个数字量 7)内置系统时钟 8)有转换结束信号,9.3.2 TLC2543及接口,9)单/双极性输出 10)数据输出顺序可编 程,高位或低位在前 11)支持软件关机 12)输出数

24、据长度可编程控制 13)SPI串行接口,2、TLC2543的内部结构及引脚信号,9.3.2 TLC2543及接口,主要是7个部分,TLC2543的引脚信号,9.3.2 TLC2543及接口,接 口 信 号,参考电压,模 拟 信 号,模拟信号,分4组,3、TLC2543的命令字 TLC2543的每次转换都必须写入命令字,确定下次转换:选用的通道、输出数据位数、输出数据位序、数据极性。 输入的命令字高位在前。 命令字格式如下:,9.3.2 TLC2543及接口,数据极性:设置0为单极性,设置1为双极性 (补码) 数据顺序:设置0高位在前,设置1低位在前 数据长度:设置0 1为8位、设置1 0或0

25、0为12位、 设置1 1为16位,9.3.2 TLC2543及接口,外 部 模 拟 信 号,内 部 信 号,4、TLC2543的接口时序,9.3.2 TLC2543及接口,1次完整操作,低电平发送,高电平接收,传送完后 开始转换,无效,数据无效,上次数据,转换中为低,对芯片操作期间应低电平,5、TLC2543与89C52的接口及编程,图9-12 TLC2543和89C52的接口电路,9.3.2 TLC2543及接口,根据TLC2543的接口时序,可以总结得出以下对TLC2543的操作过程与方法: (1)使CS变低,一个操作过程开始 (2)使CLK变低,从DIN发送1位命令(从高到低发送命令字)

26、; (3)使CLK变高,从DOUT读取一位数据 (4)重复(2)、(3),直到接收完数据,使CS变高; (5)等待A/D转换,或延时等待10s、或查询EOC状态、或用EOC做中断请求。 重复以上过程,实现A/D转换。,9.3.2 TLC2543及接口,设TLC2543以8位方式作模数转换、选用AIN0通道、数据的高位在前、单极性信号。编写一函数,控制TLC2543实现模数转换。 其命令字为:0000 01 0 0 b=0 x04 (1)C语言程序: #include sbit CLK= P10; sbit DIN= P11; sbit DOUT=P12; sbit CS= P13; SbitE

27、OC= P14;,9.3.2 TLC2543及接口,6、TLC2543的应用编程,unsigned int TLC2543(unsigned char com) unsigned char i, n; unsigned int result=0; n=com/返回转换结果 ,9.3.2 TLC2543及接口,(2)汇编语言程序: CLKBIT90H DINBIT91H DOBIT92H;输入 CSBIT93H EOCBIT94H;输入 TLC2543:MOVA,R7 ;控制字送A CLRCS;片选有效,选中2543 JNBEOC,$;EOC为低等待 LP1:CLRCLK;时钟变低 RLC A;

28、A带进位循环左移 MOV DIN,C;命令字最高位输出 SETB CLK;时钟变高 MOV C,DO;读入1位送C中,9.3.2 TLC2543及接口,SETB CLK;时钟变高 MOV C,DO;读入1位送C中 MOV ACC.0, C;读入值放ACC.0 DJNZ R5,LP1 ;下面判断是否为8位数据,是则返回,否则继续传输 MOVR6,A;接收的高位数据送R6 MOVA,R7;读取参数-控制字 ANLA,#0CH;计算数据位数 CLRC SUBBA,#4 JNZNT1 ;A不为0继续接收数据 MOVA,R6; MOVR7,A;从R7中返回8位数据 MOVR6,#0; RET,9.3.2

29、 TLC2543及接口,NT1:MOVR5,A;传送位数送R5 CLR A;A清0,继续接收 LP2:CLR CLK;时钟变低 RLC A;A带进位循环左移 MOV DIN,C;命令字最高位输出 SETB CLK;时钟变高 MOV C,DO;读入1位送C中 MOV ACC.0, C;读入值放ACC.0 DJNZ R5,LP2 MOV R7,A;将转换的低位存入R7 RET 子程序执行完后,返回的转换数据在R6、R7中,R6中为高位,R7中为低位。,9.3.2 TLC2543及接口,TLC2543的引脚信号:20引脚 AIN0AIN10:模拟信号输入 CS:片选信号 DIN:串行数据输入 DOU

30、T:串行数据输出 EOC:转换结束信号 SCLK(I/O CLOCK):输入/输出同步时钟 REF+、 REF- :转换参考电压输入 VCC :电源 GND:地,9.3.2 TLC2543及接口,表9-2 输入寄存器命令字格式,9.3.1 多通道串行输出A/D芯片TLC2543及接口,注:X表示无关项。,9.3.1 多通道串行输出A/D芯片TLC2543及接口,4、TLC2543的SPI操作时序,9.3.1 TLC2543及接口,低电平发送;高电平读数据位,1 2 3 4 5 6 7 8 11 12,A11 A10 A9 A8 A7 A6 A5 A4 A1 A0,9.3.2 逐次逼近型并行接口

31、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转换器及接口,8,位,A,/,D,转换器,8,位,三态,输出,锁存器,8,路,模拟量,开关,地址 锁存,译码器,IN,0,IN,7,ADDA,ADDB,ADDC,ALE,START,CL

32、K,EOC,D,0,V,cc,GND,V,REF,+,V,REF,-,OE,D7,引脚功能说明如下: IN0IN7:8个通道的模拟输入信号 D0D7:8位数字量输出信号 START:启动信号 ALE:地址锁存信号 EOC:转换结束信号 OE:输出允许控制信号 CLOCK:时钟信号 VCC 电源电压 VREF+和VREF-:A/D转换器的参考电压 应为模拟信号的最大范围值。 如为10、0,5、0,+5、-5等,9.3.2 逐次逼近型并行输出A/D转换器及接口,8位模拟开关地址输入通道的关系见表9-3。模拟开关的作用和8选1的CD4051作用相同。,表9-3 8位模拟开关功能表,9.3.2 逐次逼

33、近型并行输出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的地

34、址由P2.7控制,其他地址位与此无关,设为1,于是ADC0809地址为0 x7fff,其读、写地址均为0 x7fff。 在图9-14所示的接口电路中,ADC0809与片外RAM统一编址。,9.3.2 逐次逼近型并行输出A/D转换器及接口,启动ADC0809的工作过程是: 执行向端口总线写命令,将通道地址从总线P0口,以数据身份送给0809的ADDA、ADDB、ADDC,由ALE信号锁存通道地址,同时START有效,启动A/D转换。 读取转换结果: A/D转换完毕,EOC端发出一正脉冲,用其做请求中断、或对其状态查询;然后执行从端口读命令,使OE端有效,将8位数据读入到单片机中。,9.3.2 逐

35、次逼近型并行输出A/D转换器及接口,38路巡回检测系统 例9-2 某粮库或某冷冻厂需对8个温度测量点(8个冷冻室或8个粮仓)进行温度巡回检测。要求设计一个单片机巡回检测系统,使其能对各冷冻室或各粮仓的温度巡回检测并加以处理。 设被测温度范围为-30+50,温度检测精度要求不大于l。 温度传感器可选用热电阻、热敏电阻、PN结或集成温度传感器AD590和SL134等芯片。 使用0809做A/D转换器,采样图9-14的单片机电路。,9.3.2 逐次逼近型并行输出A/D转换器及接口,C语言程序清单: #include unsigned char xdata ADC0809 _at_ 0 x7fff;

36、/定义0809地址 unsigned char xdata buffer8 _at_ 0 x00a0; /存放数据 unsigned char data i=0; void main() IT1=1;/边沿触发 EX1=1; EA=1; ADC0809=i;/启动0通道转换 while(1); ,9.3.2 逐次逼近型并行输出A/D转换器及接口,void int1_srv() interrupt 2 bufferi=ADC0809; /读数存放 if(+i 8) /最后一个通道没结束 ADC0809=i; /启动下一个通道转换 ,9.3.2 逐次逼近型并行输出A/D转换器及接口,汇编语言主程序

37、: MAIN: MOV R0,#0A0H ;数据暂存区首地址 MOVR2,#8 ;8路计数初值 MOVR3,#0 ;R3存放通道号 SETBIT1 ;边沿触发 SETBEX1 SETBEA ;开中断 MOV DPTR,#7FFFH;指向0809 MOV A,R3 MOVX DPTR,A ;送通道号,启动转换 SJMP $,9.3.2 逐次逼近型并行输出A/D转换器及接口,中断服务程序: INT1_SERV: MOVX A,DPTR;读数 MOV P2, #0 ;存数高8位地址 MOVX R0,A;存数 INC R0;更新存放单元 DJNZ R2,DONE RETI DONE: INC R3;通

38、道号加1 MOV A, R3;准备通道号 MOVX DPTR,A;送通道号启动转换 RETI,9.3.2 逐次逼近型并行输出A/D转换器及接口,9.3.3 单片机内部集成的A/D转换器,目前,很多单片机片内集成有A/D转换器,下面以STC89LE516AD/X2为例,说明A/D转换的使用方法。 1STC89LE516AD/X2片内A/D转换器特点 STC89LE516AD/X2的模拟量输入在P1口,有8位精度的高速A/D转换器,P1.0-P1.7共8路,为电压输入型,可做按键扫描、电池电压检测、频谱检测等。,2特殊功能寄存器 (1)功能(引脚)配置寄存器P1_ADC_EN P1.x作为A/D转

39、换输入通道允许特殊功能寄存器,地址为97H,复位值为00000000B。格式如下图所示。,9.3.3 单片机内部集成的A/D转换器,(2)转换结果寄存器ADC_DATA 地址:0C6H,复位值:00000000B, 转换值=255 * Vin /VCC (3)转换控制寄存器ADC_CONTR 地址:0C5H,复位值:xxx00000B。 格式如下所示,9.3.3 单片机内部集成的A/D转换器,相关位说明如下: 1)ADC_FLAG:模拟/数字转换结束标志位,当A/D转换完成后,ADC_FLAG=1。 2)ADC_START:模拟/数字转换(ADC)启动控制位,设置为“1”时,开始转换。 3)C

40、HS2/CHS1/CHS0:模拟输入通道选择,如表9-4所示。,9.3.3 单片机内部集成的A/D转换器,表9-4 模拟输入通道选择,9.3.3 单片机内部集成的A/D转换器,3A/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) unsi

41、gned inti; while(delay_time-) for(i=0;i10000;i+); ,9.3.3 单片机内部集成的A/D转换器,unsignedcharADC (unsigned char chan) /AD转换函数 delay(1); /使输入电压达到稳定 ADC_CONTR=0 x08+chan; /选择模拟通道,启动A/D转换 while(ADC_CONTR /返回转换结果 ,9.3.3 单片机内部集成的A/D转换器,9.4 D/A转换接口,主要内容 9.4.1 8位并行D/A转换器DAC0832接口技术 9.4.2 串行输入D/A转换器TLC5615接口技术,9.4.1

42、 并行D/A转换器DAC0832接口技术,1DAC0832的结构原理 (1)DAC0832的特性。具有两级输入数据寄存器的8位单片D/A转换器,它能直接与单片机89C52相连接,具有两级缓冲功能,可以在输出的同时,传送下一个数据,从而提高转换速度,能够在多个转换器同时工作时,实现多通道D/A的同步转换输出。,主要的特性参数如下: 分辨率为8位 只需在满量程下调整其线性度 可与所有的单片机或微处理器直接接口 电流稳定时间为1s 可双缓冲、单缓冲或直通数据输入 功耗低,约为200mW 逻辑电平输入与TTL兼容 单电源供电(+5V+15V),9.4.1 8位并行D/A转换器DAC0832接口技术,(

43、2)DAC0832的功能结构与引脚信号 DAC0832的结构如下图所示,由8位锁存器、8位DAC 寄存器和8位D/A转换器构成。,图9-17 DAC0832结构,9.4.1 8位并行D/A转换器DAC0832接口技术,DAC0832各引脚的功能: D0D7:数字量数据输入引脚 ILE:数据锁存允许信号,高电平有效。 CS:输入寄存器选择信号,低电平有效。 WR1:输入寄存器的“写”选通信号,低电平有效。 WR2:DAC寄存器的“写”选通信号,低电平有效。 XFER:数据传送信号,低电平有效。 VREF:基准电压输入引脚,9.4.1 8位并行D/A转换器DAC0832接口技术,RFB:反馈信号输

44、入线,片内已有反馈电阻。 IOUT1、IOUT2:转换的模拟电流输出引脚。 二者和为常数,随DAC寄存器的数值线性变化。一般单极性输出时IOUT2接地。 VCC:电源 DGND:数字地 AGND:模拟信号地,9.4.1 8位并行D/A转换器DAC0832接口技术,2DAC0832与单片机的接口 (1)单缓冲器方式接口,DAC0832端口地址: 因为P2.7必须为0、其它位为1,所以为0 x7fff,9.4.1 8位并行D/A转换器DAC0832接口技术,C语言程序清单: #include unsignedcharxdata DAC0832 _at_ 0 x7fff; /定义DAC0832的端口

45、地址 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转换器的输入寄存器,控制输入锁存;P2.7连到两路D/A转换器的XFER端控制同步转换输出;WR与所有的WR1、WR2端相连,在执行MOVX指令时,89C52自动输出WR信号。,9.4.1 8位并行D/A转换器DAC0832接口技术,图9-19 DAC0

46、832双缓冲方式接口,9.4.1 8位并行D/A转换器DAC0832接口技术,IOUT1,IOUT1,0 xdfff,0 xbfff,0 x7fff,各个端口地址 (1)DAC0832_1数据输入口地址 因为P2.5必须为0、其它位为1,所以为0 xdfff。 (2)DAC0832_2数据输入口地址 因为P2.6必须为0、其它位为1,所以为0 xbfff。 (3)两个DAC0832数据传输端口地址 因为P2.7必须为0、其它位为1,所以为0 x7fff。,9.4.1 8位并行D/A转换器DAC0832接口技术,C语言程序清单: #include /定义DAC0832的端口地址 unsigned

47、charxdata DAC0832_1 _at_ 0 xdfff; unsignedcharxdata DAC0832_2 _at_ 0 xbfff; unsignedcharxdata DAC_ALL _at_ 0 x7fff; /两路同步输出模拟量的方法 DAC0832_1=data1; /给DAC0832_1送数字量 DAC0832_2=data2; /给DAC0832_2送数字量 DAC_ALL=0;/使两个XFER有效同时输出模拟量,9.4.1 8位并行D/A转换器DAC0832接口技术,阶梯波是在一定的时间内每隔一段时间输出的幅值递增一个恒定值。如图9-20所示,每隔1ms输出增长

48、一个定值n,经10 ms后循环。用DAC0832的单缓冲方式就可以实现这样的波形。,图9-20 阶梯波波形,9.4.1 8位并行D/A转换器DAC0832接口技术,(3)DAC0832应用锯齿波的产生,n,C语言程序清单: n取值:125,设n=20。按图9-18,DAC0832的端口地址为0 x7fff。 #include /定义DAC0832的端口地址 unsignedcharxdata DAC0832 _at_ 0 x7fff; void main() unsigned char i,n=20; while(1) for(i=0;i10;i+) DAC0832=i*n;delayms(1

49、);/延时1ms ,9.4.1 8位并行D/A转换器DAC0832接口技术,9.4.2 串行D/A转换器TLC5615接口技术,数/模转换器从接口上可分为两大类:并行接口和串行接口。 并行接口:引脚多,体积大,占用I/O线多; 串行接口:体积小,占用单片机的I/O线少。 1TLC5615的结构原理 TLC5615是具有3线串行接口的数/模转换器。其输出为电压型,最大输出电压是基准电压值的两倍。带有上电复位功能。TLC5615的性价比较高。,(1)TLC5615的特点 10位CMOS模拟电压型输出 5V单电源工作 3线SPI串行接口 最大输出电压是基准电压的2倍 建立时间12.5s 内部上电复位

50、 低功耗,最高为l.75 mW 引脚与MAX515兼容,9.4.2 串行输入D/A转换器TLC5615接口技术,(2)功能方框图,图9-21 TLC5615功能方框图,9.4.2 串行输入D/A转换器TLC5615接口技术,(3)引脚功能说明 DIN:串行数据输入 SCLK:串行时钟输入 CS:芯片选择,低电平有效 DOUT:用于菊花链(daisy chaining)的串行数据输出,多个芯片级联 AGND:模拟地 REFIN:基准电压输入 OUT:DAC模拟电压输出 VDD:电源(4.55.5V),9.4.2 串行输入D/A转换器TLC5615接口技术,(4)TLC5615的输入/输出关系 图9-23所示的D/A输入/输出关系如表9-5所列。,表9-5 D/A转换关系表,9.4.2 串行输入D/A转换器TLC5615接口技术,因为TLC5615芯片内的输入锁存器为12位宽,所以要在10位数字的低位后面再填以数字XX。XX为不关心状态。串行传送的方向是先送出高位MSB,后送出低位LSB。,如果有级联电路,则应使用16位的传送格式,即在最高位MSB的前面再加上4个虚位,被转换的10位数字在中间。,9.4.2 串行输入D/A转换器TLC5615接口技术,TLC5615操作时序图,CS低,S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论