单片机.docx
- 文档编号:29266539
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:26
- 大小:442.69KB
单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(26页珍藏版)》请在冰豆网上搜索。
单片机
看门狗应用实例
11.2看门狗监控概述
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(WATCHDOG)。
看门狗的原理就是如果WDT定时器溢出,芯片就复位。
所以每隔一段时间(再溢出之前要清零WDT计数器)。
单
片机跑飞后,没有去清零WDT的计数器,所以就溢出了,然后触发看门狗中断,然后就复位了。
看门狗电路一般有软件看门狗和硬件看门狗两种。
软件看门狗不需外接硬件电路,但系统需要出让一个定时器资源,这在许多系统中很难办到,而且若系统软件运行不正常,可能导致看门狗系统也瘫痪。
硬件看门狗是真正意义上的“程序运行监视器”,如计数型的看门狗电路通常由555多谐振荡器、计数器以及一些电阻、电容等组成,分立元件组成的系统电路较为复杂,运行不够可靠。
X25045是美国XICOR公司的生产的标准化8脚集成电路,它将EEPROM、看门狗定时器、电压监控三种功能组合在单个芯片之内,大大简化了硬件设计,提高了系统的可靠性,减少了对印制电路板的空间要求,降低了成本和系统功耗,是一种理想的单片机外围芯片。
11.23X25045/X5045的外形及引脚说明
其各个引脚功能描述如下:
11.4X25045/X5045的工作原理及结构
X25045内含512×8的串行E2PROM,可以直接与微控制
器的I/O口串行相接。
X25045内有一个位指令寄存器,该
寄存器可以通过SI来访问。
数据在SCK的上升沿由时钟同步输入,在整个工作期内,CS必须是低电平且WP必须是高电平。
如果在看门狗定时器预置的超时时间内没有总线的活动,那么X25045将提供复位信号输出。
X25045内部有一个“写使能”锁存器,在执行写操作之前该锁存器必须被置位,在写周期完成之后,该锁存器自动复位。
X25045还有一个状态寄存器,用来提供X25045状态信息以及设置块保护和看门狗的超时功能。
看门狗定时器的预置时间是通过X25045的状态寄存器的相应位来设定的。
如下表所示,X25045状态寄存器共有6位有含义,其中WD1、WD0和看门狗电路有关,其余位和EEPROM的工作设置有关。
其中和看门狗有关的D5D4的组合如下:
WD1=0,WD0=0;//预置时间为1.4s;
WD1=0,WD0=1;//预置时间为0.6s;
WD1=1,WD0=0;//预置时间为0.2s;
WD1=1,WD0=1;//禁止看门狗工作。
WIP:
写操作标志位,为1表示内部有一个写操作正在进行,为0则表示空闲,该位为只读。
WEL:
写操作允许标志位,为1表示允许写操作,为0表示禁止写,该位为只读。
BL0,BL1:
内部保护区间的地址选择。
被保护的区间不能进行看门狗的定时编程。
看门狗电路的定时时间长短可由具体应用程序的循环周期决定,通常比系统正常工作时最大循环周期的时间略长即可。
编程时,可在软件的合适地方加一条喂狗指令,使看门狗的定时时间永远达不到预置时间,系统就不会复位而正常工作。
当系统跑飞,用软件陷阱等别的方法无法捕捉回程序时,则看门狗定时时间很快增长到预置时间,迫使系统复位。
11.5X25045/X5045的读写操作及C语言程序设计
1)X25045在读写操作之前,需要先向它发出指令,指令名及指令格式如下表所示
2)X25045的读时序
图11-2(b)读状态寄存器的时序(下)
3)X25045的写时序
图11-3(a)写使能锁存器的时序(上)图11-3(b)字节写操作的时序(下)
以下为c语言编写的X25045读写操作子程序
#include
sbitXCS=P1^4;//片选信号有P14产生
sbitXCLK=P1^1;//时钟信号有P11产生
sbitXDIN=P1^2;//数据入信号有P12产生
sbitXDOUT=P1^0;//数据出信号有P10产生
//WREN0x06写使能;
//WRDI0x04复位写使能;
//RDSR0x05读状态寄存器;
//WRSR0x01写状态寄存器;
//READ0000a8011从所选地址寄存器读出数据;
//WRITE0000a8010从所选地址寄存器写入数据;
//写操作子程序
voidx25045w(unsignedcharx25045)
{unsignedchardatai;
for(i=8;i>0;i--)
{
XCLK=0;
XDIN=x25045&0x80;
XCLK=1;
x25045=x25045<<1;
}
XDIN=0;
}
//读操作子程序
unsignedcharx25045r(void)
{
unsignedcharresult=0,i;
bitrx_flag;
for(i=8;i>0;i--)
{
XCLK=1;
XCLK=0;
result=result<<1;
rx_flag=XDOUT;
if(rx_flag)result=result|0x01;
}
return(result);
}
//读状态寄存器
//Bit0(WIP)istheWrite-In-Process(HIGHActive)
//Bit1(WEL)istheWriteEnableLatch(HIGHActive)
unsignedcharxrdsr(void)
{unsignedchartData;
XCS=0;
x25045w(0x05);//0x05读状态寄存器使能
tData=x25045r();
XCS=1;
return(tData);
}
//写使能复位
voidxwrdi(void)
{while(xrdsr()&0x01);
XCS=0;
x25045w(0x04);
tData=x25045r();
XCS=1;
return(tData);
}
//写使能复位
voidxwrdi(void)
{while(xrdsr()&0x01);
XCS=0;
x25045w(0x04);
XCS=1;
}
//写使能
voidxwren(void)
{while(xrdsr()&0x01);
XCS=0;
x25045w(0x06);
XCS=1;
}
//写状态寄存器
//Bit5&Bit4isWatchdogTime-out(00=1.4s,01=600ms,10=200ms,11=Disabled)
//Bit3&Bit2isArrayAddressesProtected(0=None,01=180~1FF,10=100~1FF,11=000~1FF)
voidxwrsr(unsignedcharxw_byte)
{xwren();
while(xrdsr()&0x01);
XCS=0;
x25045w(0x01);
x25045w(xw_byte);
XCS=1;
}
//写数据字节到X25045中
//Writedataaddressassign:
02H=000H-0FFH,0AH=100H-1FFH
voidxwrite(unsignedcharxw_flag,unsignedcharxw_addr,unsignedcharxw_data)
{xwren();
while(xrdsr()&0x01);
XCS=0;
x25045w(xw_flag);
x25045w(xw_addr);
x25045w(xw_data);
XCS=1;
}
//从X25045中读数据字节
//Readdataaddressassign:
03H=000H-0FFH,0BH=100H-1FFH
unsignedcharxread(unsignedcharxr_flag,unsignedcharxr_addr)
{
unsignedchartData;
while(xrdsr()&0x01);
XCS=0;
x25045w(xr_flag);
x25045w(xr_addr);
tData=x25045r();
XCS=1;
return(tData);
}
在程序正常运行的时候,应该在适当的地方加一条喂狗指令,使系统正常运行时的定时
时间达不到预置时间,系统就不会复位。
喂狗程序如下。
voidmain()
{
..................;//系统正常运行的程序部分
{
XCS=0;/*产生CS脉冲*/
XCS=1;
}
}
D/A转换器的应用
9.1D/A转换器的分类
D/A转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类。
大多数D/A转换器由电阻阵列和n个电流开关(或电压开关)构成。
按数字输入值切换开关,产生比例于输入的电流(或电压)。
此外,也有为了改善精度而把恒流源放入器件内部的。
一般说来,由于电流开关的切换误差小,大多采用电流开关型电路,电流开关型电路如果直接输出生成的电流,则为电流输出型D/A转换器。
此外,电压开关型电路为直接输出电压型D/A转换器。
1)电压输出型(如TLC5620)
电压输出型D/A转换器虽有直接从电阻阵列输出电压
的,但一般采用内置输出放大器以低阻抗输出。
直接输出
电压的器件仅用于高阻抗负载,由于无输出放大器部分的
延迟,故常作为高速D/A转换器使用。
2)电流输出型(如THS5661A)
电流输出型D/A转换器很少直接利用电流输出,大多
外接电流—电压转换电路得到电压输出,后者有两种方法:
一是只在输出引脚上接负载电阻而进行电流—电压转换,
二是外接运算放大器。
用负载电阻进行电流—电压转换的
方法,虽可在电流输出引脚上出现电压,但必须在规定的
输出电压范围内使用,而且由于输出阻抗高,所以一般外
接运算放大器使用。
此外,大部分CMOSDA
转换器当输出电压不为零时不能正确动作,所以必须外接运算放大器。
当外接运算放大器进行电流电压转换时,则电路构成基本上与内置放大器的电压输出型相同,这时由于在D/A转换器的电流建立时间上加入了达算放入器的延迟,使响应变慢。
此外,这种电路中运算放大器因输出引脚的内部电容而容易起振,有时必须作相位补偿。
3)乘算型(如AD7533)
D/A转换器中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型D/A转换器。
乘算型D/A转换器一般不仅可以进行乘法运算,而且可以作为使输入信号数字化地衰减的衰减器及对输入信号进行调制的调制器使用。
4)一位D/A转换器
一位D/A转换器与前述转换方式全然不同,它将数字值转换为脉冲宽度调制或频率调制的输出,然后用数字滤波器作平均化而得到一般的电压输出(又称位流方式),用于音频等场合。
9.2D/A转换器的主要技术指标:
1)分辩率(Resolution)指最小模拟输出量(对应数字量仅最低位为‘1’)与最大量(对应数字量所有有效位为‘1’)之比;
2)建立时间(SettingTime)是将一个数字量转换为稳定模拟信号所需的时间,也可以认为是转换时间。
D/A中常用建立时间来描述其速度,而不是A/D中常用的转换速率。
一般地,电流输出D/A建立时间较短,电压输出D/A则较长。
其他指标还有线性度(Linearity),转换精度,温度系数/漂移。
下面以8位D/A芯片DAC0832在51单片机系统中的应用以及基于C51语言的程序设
计。
希望读者在学完本节后,能完成相关的电路设计,并掌握如下知识点:
◆掌握D/A器件的原理、特性及选择;◆51单片机和D/A芯片的接口电路的设计;◆51单片机对D/A转换的处理过程;◆掌握数据采集处理过程的C51程序设计。
9.3DAC0832的结构及工作原理
1)DAC0832芯片概述
DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器,是使用非常普遍的8位分辨率的D/A转换集成芯片,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成,如图所示。
它与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
图9-1DAC0832组成图
2)DAC0832的主要特性参数⑴分辨率为8位;⑵电流稳定时间1us;⑶可单缓冲、双缓冲或直接数字输入;⑷只需在满量程下调整其线性度;⑸单一电源供电(+5V~+15V);⑹低功耗,200mW。
3)DAC0832结构和引脚
图9-2DAC0832结构和引脚
⑴D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);⑵ILE:
数据锁存允许控制信号输入线,高电平有效;⑶CS:
片选信号输入线(选通数据锁存器),低电平有效;⑷WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;⑸XFER:
数据传输控制信号输入线,低电平有效,脉冲(脉宽应大于500ns)有效;⑹WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换⑺IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;⑻IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;⑼Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;⑽Vcc:
电源输入端,Vcc的范围为+5V~+15V;⑾VREF:
基准电压输入线,VREF的范围为-10V~+10V;⑿AGND:
模拟信号地⒀DGND:
数字信号地4)DAC0832的工作方式根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式。
5)DAC0832直通方式应用接口及C51程序
图9-3直通方式下单片机和DAC0832的连接示意图
/************************************
程序描述:
随着给DA送的数字量的不断增加,其转换
成模拟量的电流也不断的增大,我们可以观
察到发光二极管D12从暗变亮,熄灭…
*************************************
#include
#defineucharunsignedchar
#defineuintunsignedint
/*********延时函数******************/
voiddelay(uintx)
{while(x)
x--;
}
voidmain()
{
uchari;
while
(1)
{P3=i;
i++;
if(i==0xff)i=0;
delay(20);
}
}
/************************************
6)DAC0832单缓冲方式应用接口及C51程序在图9-3中,DAC0832为单缓冲工作方式,此方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。
应用程序清单如下:
#include
#include
#defineDAC0832XBYTE[0x7fff]/*定义DAC0832端口地址*/
#defineucharunsignedchar
/*************延时函数************/
voiddelay(uchart)
{
while(t--);
}
/*********锯齿波发生函数************/
图9-4单缓冲方式下单片机和DAC0832的连接示意图
voidsaw(void)
{
uchari;
for(i=0;i<255;i++)
{
DAC0832=i;
}
}
/****************方波发生函数******************/
voidsquare(void)
{
DAC0832=0x00;
delay(0x10);
DAC0832=0xff;
delay(0x10);
}
/****************主函数******************/
voidmain(void)
{uchari,j;
i=j=0xff;
while(i--)
{saw();/*产生一段锯齿波*/
}
while(j--)
{square();/*产生一段方波*/
}
}
51单片机连接A/D的应用实例
8.1任务说明
1)了解模拟与数字信号之间的转换原理,掌握TLC548/549的工作原理和波形图。
2)学会TLC548/549程序设计方法,了解本芯片在单片机系统中的应用。
8.2A/D转换器的分类
下面简要介绍常用的几种A/D转换器的基本原理及特点:
积分型、逐次逼近型、并行比较型/串并行型、∑-Δ调制型、电容阵列逐次比较型及压频变换型。
1)积分型(如TLC7135)
积分型A/D工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。
其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。
初期的单片A/D转换器大多采用积分型,现在逐次比较型已逐步成为主流。
2)逐次比较型(如TLC0831)
逐次比较型A/D由一个比较器和D/A转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置D/A转换器输出进行比较,经n次比较而输出数字值。
其电路规模属于中等。
其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。
3)并行比较型/串并行比较型(如TLC5510)
并行比较型A/D采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。
由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频A/D转换器等速度特别高的领域。
串并行比较型A/D结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型A/D转换器配合D/A转换器组成,用两次比较实行转换,所以称为Halfflash(半快速)型。
还有分成三步或多步实现A/D转换的叫做分级(Multistep/Subrangling)型A/D,而从转换时序角度又可称为流水线(Pipelined)型A/D,现代的分级型A/D中还加入了对多次转换结果作数字运算而修正特性等功能。
这类A/D速度比逐次比较型高,电路规模比并行型小。
4)∑-Δ调制型(如AD7705)
∑-Δ型A/D由积分器、比较器、1位D/A转换器和数字滤波器等组成。
原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。
电路的数字部分基本上容易单片化,因此容易做到高分辨率。
主要用于音频和测量。
5)电容阵列逐次比较型
电容阵列逐次比较型A/D在内置D/A转换器中采用电容矩阵方式,也可称为电荷再分配型。
一般的电阻阵列D/A转换器中多数电阻的值必须一致,在单芯片上生成高精度的电阻并不容易。
如果用电容阵列取代电阻阵列,可以用低廉成本制成高精度单片A/D转换器。
最近的逐次比较型A/D转换器大多为电容阵列式的。
6)压频变换型(如AD650)
压频变换型(Voltage-FrequencyConverter)是通过间接转换方式实现模数转换的。
其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。
从理论上讲这种A/D的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。
其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成A/D转换。
8.3A/D转换器的主要技术指标
⑴分辨率(Resolution)指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2n的比值。
分辨率又称精度,通常以数字信号的位数来表示。
⑵转换速率(ConversionRate)是指完成一次从模拟转换到数字的A/D转换所需的时间的倒数。
积分型A/D的转换时间是毫秒级属低速A/D,逐次比较型A/D是微秒级属中A/D,全并行/串并行型A/D可达到纳秒级。
采样时间则是另外一个概念,是指两次转换的间隔。
为了保证转换的正确完成,采样速率(SampleRate)必须小于或等于转换速率。
因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。
常用单位是Ksps和Msps,表示每秒采样千/百万次(Kilo/MillionSamplesperSecond)。
⑶量化误差(QuantizingError)由于A/D的有限分辩率而引起的误差,即有限分辩率A/D的阶梯状转移特性曲线与无限分辩率A/D(理想A/D)的转移特性曲线(直线)之间的最大偏差。
通常是1个或半个最小数字量的模拟变化量,表示为1LSB、1/2LSB。
⑷偏移误差(OffsetError)输入信号为零时输出信号不为零的值,可外接电位器调至最小。
⑸满刻度误差(FullScaleError)满度输出时对应的输入信号与理想输入信号值之差。
⑹线性度(Linearity)实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。
其他指标还有绝对精度(AbsoluteAccuracy),相对精度(RelativeAccuracy),微分非线性,单调性和无错码总谐波失真(TotalHarmonicDistotortion缩写THD)和积分非线性。
数据采集系统就是将模拟输入信号经A/D转换后进行信号处理,最后经D/A转换器将数字信号转换为模拟信号。
该系统的简单框图如下所示。
图8-1数据采集系统简单框图(下)
正如上图所示,A/D转换器就是整个数据采集系统的核心,下面结合TLC549串行A/D转换器介绍单片机在数据采集中的应用以及基于C51语言的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机