1、 微控制器系统设计与应用微控制器系统设计与应用 刘燎原刘燎原 江苏建筑职业技术学院江苏建筑职业技术学院u 中断中断u 1.中断初始化中断初始化(1)外部中断外部中断IETCONIP(2)定时溢出中断定时溢出中断TH、TLIE TMOD TCON(TR)u 2.程序结构程序结构void main()void main()void void 名字()名字()interrupt interrupt 中断号中断号 D7 D6 D5 D4 D3 D2 D1 D0EA-ES ET EX ET EXu秒表秒表1.利用定时器产生利用定时器产生1秒。秒。定时定时1次次50ms,循环循环20次。次。2.利用利用n
2、变量存放秒个数。变量存放秒个数。一开始,一开始,n初值为初值为0 每到每到1秒,秒,n自加自加1。3.显示子程序显示子程序 调用调用disp(要显示的变量名要显示的变量名)显示位置不同,位选值不同显示位置不同,位选值不同(FEH,FDH,FBH,F7H,EFH,DFH)uvoid main()uuEA=1;uET0=1;uTMOD=0 x01;uTH0=0 x3c;uTL0=0 xb0;uTR0=1;uwhile(1)u u disp(n);uuvoid lsd()interrupt 1u uTH0=0 x3c;uTL0=0 xb0;u if(+m19)u n+;u m=0;uu#includ
3、e uunsigned char code sz1=0 x3f,0 x06,0 x5b,0 xb4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x8f;uunsigned char n=0,m=0;usbit seg1=P26;usbit seg2=P27;uvoid disp(unsigned char t)uunsigned char i,j;u i=t/10;u j=t%10;u seg1=1;u P2=sz1i;u seg1=0;u seg2=1;u P2=0 xfe;u seg2=0;u delay(6);u seg1=1;u P2=sz1j;u seg1=0;
4、u seg2=1;u P2=0 xfd;u seg2=0;u delay(6);u 数字电压数字电压表表(2学时学时)温度计温度计PROTEUS仿真仿真(2学时学时)学时安排:学时安排:项目四项目四 数字电压表数字电压表 -学习A/D转换u知识目标:知识目标:1.理解理解A/D转换转换2.掌握掌握ADC0809芯片引脚芯片引脚3.掌握数字电压表的连接、编程掌握数字电压表的连接、编程u技能目标:技能目标:1.掌握掌握DS18B20的编程流程的编程流程2.掌握掌握DS18B20的引脚的引脚前言前言 由于计算机本身只能处理数字量由于计算机本身只能处理数字量(二进制代码二进制代码)。而在计算机应用领。
5、而在计算机应用领域中,特别是在实时控制系统中,常需要把外界连续变化的物理量域中,特别是在实时控制系统中,常需要把外界连续变化的物理量(如温度、压力、流量、速度如温度、压力、流量、速度),变成数字量输入计算机进行加工、,变成数字量输入计算机进行加工、处理,这为前向通道处理,这为前向通道(A/D)(A/D)。反之,也需要把计算机计算结果的数字量转换成连续变化的模拟量反之,也需要把计算机计算结果的数字量转换成连续变化的模拟量输出,用以控制,调节些执行机构输出,用以控制,调节些执行机构,实现对被控对象的控制,这为后实现对被控对象的控制,这为后向通道向通道(D/A)(D/A)。这种把模拟量变成数字量和把
6、数字量转换成模拟量,就称为模这种把模拟量变成数字量和把数字量转换成模拟量,就称为模/数和数和数数/模转换。实现这类转换的器件,就称为模模转换。实现这类转换的器件,就称为模/数数(A/D)(A/D)和数和数/模模(D/A)(D/A)转换器。转换器。今天讲今天讲 (A/D)(A/D)一、概述一、概述 1.1.分类分类u A/DA/D转换器用于实现模拟量到数字量的转换,按转换原理可分为四种:转换器用于实现模拟量到数字量的转换,按转换原理可分为四种:计数式计数式A/DA/D转换器、转换器、双积分式双积分式A/DA/D转换器、转换器、逐次逼近式逐次逼近式A/DA/D转换器和转换器和并并行式行式A/DA/
7、D转换器。转换器。目前最常用的是逐次逼近式目前最常用的是逐次逼近式A/DA/D转换器和双积分式转换器和双积分式A/DA/D转换器。转换器。u 逐次逼近式逐次逼近式A/DA/D转换器转换器是一种转换速度较快、精度较高的转换器。其转换是一种转换速度较快、精度较高的转换器。其转换时间大约在几微秒到几百微秒之间。时间大约在几微秒到几百微秒之间。uADC0801ADC0801ADC0805ADC0805型型8 8位位MOSMOS型型A/DA/D转换器,美国国家半导体公司产品。它转换器,美国国家半导体公司产品。它是目前最流行的中速廉价型产品。片内有三态数据输出锁存器,单通道是目前最流行的中速廉价型产品。片
8、内有三态数据输出锁存器,单通道输入,转换时间约输入,转换时间约100s100s左右。左右。uADC0808/0809ADC0808/0809型型8 8位位MOSMOS型型A/DA/D转换器。可实现转换器。可实现8 8路模拟信号的分时采集,路模拟信号的分时采集,片内有片内有8 8路模拟选通开关,以及相应的通道地址锁存用译码电路,其转换路模拟选通开关,以及相应的通道地址锁存用译码电路,其转换时间为时间为100s100s左右。左右。uADC0816/0817ADC0816/0817。这类产品除输入通道数增加至。这类产品除输入通道数增加至1616个以外,其他性能与个以外,其他性能与ADC0808/08
9、09ADC0808/0809型基本相同。型基本相同。uV Vrefref/V/Vinin=2=2n n/D/Du双积分式双积分式A/DA/D转换器转换器的主要优点是转换精度高,抗干扰性的主要优点是转换精度高,抗干扰性能好,价格便宜,但转换速度较慢。因此这种转换器主能好,价格便宜,但转换速度较慢。因此这种转换器主要用于转换速度要求不高的场合。要用于转换速度要求不高的场合。u常用的这种产品有常用的这种产品有ICL7106/ICL7107/ICL7126ICL7106/ICL7107/ICL7126系列、系列、MC1443MC1443以及以及ICL7135ICL7135等。等。uVref/Vin=T
10、2/T1Vref/Vin=T2/T12.A/D转换器的主要技术指标(1)(1)分辨率。分辨率。是指输出数字量变化一个数码所需输入的模拟电压的变化量。常用是指输出数字量变化一个数码所需输入的模拟电压的变化量。常用输出二进制的位数表示分辨率。输出二进制的位数表示分辨率。例如例如1212位位ADCADC的分辨率就是的分辨率就是1212位;或者说分辨率为满刻度的位;或者说分辨率为满刻度的1/21/21212 一个满刻度为一个满刻度为5V5V的的ADCADC,分辨率是,分辨率是1212位,那么他能分辨输入电压变化位,那么他能分辨输入电压变化最小值是最小值是5 5*1/21/21212=1.2mv=1.2
11、mv 位数越高,分辨率越高,转换精度越高。位数越高,分辨率越高,转换精度越高。(2 2)量化误差)量化误差 ADCADC把模拟量转化为数字量,用数字量近似表示模拟量,这个过程成把模拟量转化为数字量,用数字量近似表示模拟量,这个过程成为量化。量化误差是为量化。量化误差是ADCADC的有限位数对模拟量进行量化而引起的误差。的有限位数对模拟量进行量化而引起的误差。实际上要准确表示模拟量,实际上要准确表示模拟量,ADCADC的位数需很大甚至无穷大。一个分辨的位数需很大甚至无穷大。一个分辨率有限的率有限的ADCADC的结题转换特性曲线与具有无限分辨率的的结题转换特性曲线与具有无限分辨率的ADCADC转换
12、特性转换特性曲线之间的最大偏差既是量化误差。曲线之间的最大偏差既是量化误差。(3)(3)转换速度。每秒转换完成的次数,是完成一次转换所需的时间的倒转换速度。每秒转换完成的次数,是完成一次转换所需的时间的倒数。速度比数。速度比DADA慢。慢。转换时间是指由启动转换命令到转换结束信号开始有效的时间间转换时间是指由启动转换命令到转换结束信号开始有效的时间间隔。隔。u 光敏电阻器(光敏电阻器(Photovaristor)u 又叫光感电阻,是利用半导体的光电效应制成的一种电阻值随入射又叫光感电阻,是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;光的强弱而改变的电阻器;u 入射光强,电
13、阻减小,入射光弱,电阻增大。入射光强,电阻减小,入射光弱,电阻增大。u 光敏电阻一般用于光的测量、光的控制和光电转换(将光的变化转光敏电阻一般用于光的测量、光的控制和光电转换(将光的变化转化为电的变化),可以用于路灯控制器化为电的变化),可以用于路灯控制器3.ADC0809ADC0809ADC0809是典型的是典型的8 8位位8 8通道逐次逼近式通道逐次逼近式A/DA/D转换器,转换器,CMOSCMOS工艺;片内有工艺;片内有8 8路模拟路模拟开关,可对开关,可对8 8路模拟电压量实现分时转换。路模拟电压量实现分时转换。ADC0809ADC0809的引脚如右图所示,逻辑的引脚如右图所示,逻辑结
14、构图如下图所示结构图如下图所示(1 1)内部结构)内部结构2-1MSB21ADD B24ADD A25ADD C23VREF(+)12VREF(-)16IN31IN42IN53IN64IN75START62-58EOC7OUTPUT ENABLE9CLOCK10VCC112-220GND132-7142-6152-8LSB172-4182-319IN228IN127IN026ALE22U1ADC0809 8 路 模拟量 开关 地址 锁存与 译码 8 位 A/D 转换器 三态 输出 锁存器 2-1MSB 2-8LSB IN0 IN7 ADDA ADDB ADDC ALE EOC START CL
15、K OE VREF()VREF()u(2 2)ADC0809ADC0809其引脚定义如下其引脚定义如下:uIN7-IN0IN7-IN0:8 8条模拟量输入通道。输入电压范围为条模拟量输入通道。输入电压范围为05V05V,u2 2-1-1MSB-2MSB-2-8-8LSB LSB:8 8位数字量的输出端。其中最高位位数字量的输出端。其中最高位MSBMSB,最低位,最低位LSBLSB。uADDCADDC、ADDBADDB和和ADDAADDA:通道号选择输入端。其中:通道号选择输入端。其中A A是是LSBLSB位,这三个引脚上所加电平的编位,这三个引脚上所加电平的编码为码为000000111111时
16、,分别对应于选通通道时,分别对应于选通通道IN7IN7IN0IN0。uALEALE:通道号锁存控制端。当它为高电平时,将:通道号锁存控制端。当它为高电平时,将C C、B B和和A A三个输入引脚上的通道号选择三个输入引脚上的通道号选择码锁存,也就是使相应通道的模拟开关处于闭合状态。实际使用时,常把码锁存,也就是使相应通道的模拟开关处于闭合状态。实际使用时,常把ALEALE和和STARTSTART连在一起,在连在一起,在STARTSTART端加上高电平启动信号的同时,将通道号锁存起来。端加上高电平启动信号的同时,将通道号锁存起来。uSTARTSTART:启动转换信号输入端。当给:启动转换信号输入
17、端。当给STARTSTART一个正脉冲时,启动转换。一个正脉冲时,启动转换。uEOCEOC:转换结束指示端。平时它为高电平,在转换开始后及转换过程中为低电平,转:转换结束指示端。平时它为高电平,在转换开始后及转换过程中为低电平,转换结束,它又变为高电平。此端可作查询或取反后作中断请求信号换结束,它又变为高电平。此端可作查询或取反后作中断请求信号uOEOE:输出使能端。此脚为高电平时,即打开输出缓冲器三态门,可以读出转换后的数:输出使能端。此脚为高电平时,即打开输出缓冲器三态门,可以读出转换后的数字量数据。字量数据。uCLKCLK:外部时钟输入。输入范围为:外部时钟输入。输入范围为500kHz1
18、MHz500kHz1MHz,典型值为,典型值为640kHz 640kHz,转换时间为,转换时间为100s100s。时钟信号有时可由单片机时钟信号有时可由单片机ALEALE经分频得到;经分频得到;uV VREF(+)REF(+)、V VREF(-)REF(-):两个参考电压输入端。一般情况下:两个参考电压输入端。一般情况下V VREFREF(+)与与VCCVCC相连接,相连接,V VREFREF(-)与与GNDGND相连接相连接 8 路 模拟量 开关 地址 锁存与 译码 8 位 A/D 转换器 三态 输出 锁存器 2-1MSB 2-8LSB IN0 IN7 ADDA ADDB ADDC ALE
19、EOC START CLK OE VREF()VREF()转换步骤:转换步骤:1.A、B、C提供三位地址,提供三位地址,ALE有效有效,实现模拟通道选择实现模拟通道选择2.有有clock时钟信号(典型值时钟信号(典型值500KHZ,周期,周期2us)。Start有效有效,开始转换开始转换Vin3.转换过程中,转换过程中,EOC=0;当转换结束时,当转换结束时,EOC=1.(转换时间大概(转换时间大概100us左右)左右)4.转换结束后,设置转换结束后,设置ENABLE=1后,才可以读取转换后的数字量后,才可以读取转换后的数字量一般我们把一般我们把ADC0809的的ALE信号与信号与START信
20、号连接在一起。这样使得在信号连接在一起。这样使得在ALE信号的前沿写入地址信号,紧接着在其后沿就启动转换。信号的前沿写入地址信号,紧接着在其后沿就启动转换。u 4ADC0809与单片机的接口与单片机的接口 A/DA/D转换后得到的是数字量的数据,这些数据应传送给单片机进行处理。转换后得到的是数字量的数据,这些数据应传送给单片机进行处理。数据传送的关键问题是数据传送的关键问题是如何确认如何确认A/DA/D转换完成转换完成,因为只有确认数据转换,因为只有确认数据转换完成后,才能进行传送。完成后,才能进行传送。为此可采用下述三种接口方式。(什么时候转换结束):为此可采用下述三种接口方式。(什么时候转
21、换结束):ua.a.查询方式查询方式(查询查询EOCEOC什么时候为什么时候为1 1,即结束,即结束)uADC0809ADC0809的的EOCEOC端就是转换结束状态信号。因此可以用查询方式,软件测端就是转换结束状态信号。因此可以用查询方式,软件测试试EOCEOC的电平状态,即可确知转换是否完成,然后进行数据传送。的电平状态,即可确知转换是否完成,然后进行数据传送。ub.b.中断方式(转换结束,中断方式(转换结束,EOCEOC向单片机提出中断,)向单片机提出中断,)若转换速度较慢的话,单片机不必一直查询等待,可以把表明转换完成若转换速度较慢的话,单片机不必一直查询等待,可以把表明转换完成的状态
22、信号的状态信号(EOC)(EOC)作为中断请求信号,以中断方式进行数据传送。作为中断请求信号,以中断方式进行数据传送。什么时候转换结束了,即通过什么时候转换结束了,即通过EOCEOC向单片机提出中断,告诉单片机转换向单片机提出中断,告诉单片机转换结束,让单片机来取转换后的数字量结束,让单片机来取转换后的数字量 。uc.c.等待延时方式(若转换速度较快的话,可以加一段延时等待转换结束)等待延时方式(若转换速度较快的话,可以加一段延时等待转换结束)对于一种对于一种A/DA/D转换器来说,转换时间作为一项技术指标是已知的和固定转换器来说,转换时间作为一项技术指标是已知的和固定的。的。例如,若例如,若
23、ADC0809ADC0809转换时间为转换时间为128s128s,相当于,相当于6MHz6MHz的的MCS-51MCS-51单片机的单片机的6464个机器周期。可据此设计一个延时子程序,个机器周期。可据此设计一个延时子程序,A/DA/D转换启动后即调用这个转换启动后即调用这个延时子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据延时子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。传送。举例举例例例1:设计一个简易的数字电压表。(显示数字量):设计一个简易的数字电压表。(显示数字量)电路:电路:XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/A
24、D039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC130pFC230pF
25、C310uFR112345678161514131211109RN1300R410kR510kOUT121ADD B24ADD A25ADD C23VREF(+)12VREF(-)16IN31IN42IN53IN64IN75START6OUT58EOC7OE9CLOCK10OUT220OUT714OUT615OUT817OUT418OUT319IN228IN127IN026ALE22U2ADC0808RV11kQ1PN2907Q2PN2907234567891RP1RESPACK-8u 转换步骤:转换步骤:u 1.有有clock时钟信号(典型值时钟信号(典型值500KHZ,周期,周期2us)用
26、定时器用定时器0产生周期产生周期2us方波信号作为方波信号作为CLOCKu 2.Start、ALE有效有效,开始转换开始转换Vin Start、ALE需要正脉冲,通过置需要正脉冲,通过置1或或0得到得到u 3.转换过程中,转换过程中,EOC=0;当转换结束时,当转换结束时,EOC=1.(转换时间大概(转换时间大概100us左右)左右)利用查询等待方式,利用查询等待方式,while(eoc=0);u 4.转换结束后,设置转换结束后,设置OE=1后,才可以读取转换后的数字量后,才可以读取转换后的数字量 OE=1;m=P0;u 5.数字量送数码管显示数字量送数码管显示u 程序:程序:u#includ
27、e u#include u unsigned char code sz2=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e;u sbit eoc=P20;u sbit start=P21;u sbit clock=P22;u sbit oe=P23;u sbit seg1=P34;u sbit seg2=P35;u void delay(unsigned int a)u uunsigned char b;uwhile(-a!=0)u ufor(b=0;b
28、125;b+);uu u void disp0(unsigned char m)u unsigned char i,j;u i=m&0 xf0;u i=_crol_(i,4);u P1=sz2i;u seg1=0;u delay(2);u P3=0 xff;u j=m&0 x0f;u P1=sz2j;u seg2=0;u delay(2);u P3=0 xff;u u void main()u unsigned char m;u EA=1;u ET0=1;u TMOD=0 x01;u TH0=(65536-1)/256;u TL0=(65536-1)%256;u TR0=1;u while(1
29、)u u start=0;delay(1);start=1;delay(1);start=0;delay(1);u while(eoc=0);u oe=1;u m=P0;u disp0(m);u oe=0;u u u void lsd()interrupt 1u u TH0=(65536-1)/256;u TL0=(65536-1)%256;u clock=clock;u u 实验:实验:简易数字电压表,显示电压的十进制数,两位显示,带一位小数点简易数字电压表,显示电压的十进制数,两位显示,带一位小数点(编程,仿真)(编程,仿真)u(1)如何把数字量转换为对应的电压十进制数)如何把数字量转换为对应的电压十进制数 从公式出发从公式出发 Vi/5=D/255 Vi=D*5/255要转化为带小数的,可写为要转化为带小数的,可写为Vi=D*1.0*5/255假设要保留两位小数,则:假设要保留两位小数,则:Vi=Vi*100=D*1.0*500/255 i=Vi/100;j=Vi/10%10;k=Vi%10;u(2)如何显示小数点)如何显示小数点u 在显示整数位的时候加上小数点的显示在显示整数位的时候加上小数点的显示u 或者可以增加一个带小数点的数组或者可以增加一个带小数点的数组注意:注意:1.定义定义m的类型的类型int 2.滑动变阻器选择滑动变阻器选择