文档库 最新最全的文档下载
当前位置:文档库 › 第6章 单片机高级应用实例

第6章 单片机高级应用实例

第6章  单片机高级应用实例
第6章  单片机高级应用实例

第6章单片机高级应用实例

在本章中,我们通过大量的典型实例,详细介绍单片机的C51语言程序设计的流程、方法、技巧。通过多个典型的C51语言应用实例,详细介绍了51单片机的各种应用开发和使用技术,包括数据采集、控制系统、存储系统与外设扩展。全书实例丰富、代表性强,涉及领域广,每个例子都调试通过,都有具体的设计思路、硬件电路、软件设计以及程序代码分析,对于读者学习51单片机的应用开发提供了良好的参考和指导价值。

实例中的所有程序代码都使用C51语言实现,层次清晰、简单易学、易懂。并给出了程序代码和电路图,读者稍加修改即可用于自己的设计中。在应用实例的安排上,着重突出“应用”和“实用”两个基本原则,安排的例子具有代表性以及应用的广泛性。

本章各节内容安排如下:

第6.1节介绍如何使用51单片机连接串行A/D转换器。

第6.2节介绍如何使用51单片机连接并行D/A转换器。

第6.3节介绍如何使用51单片机连接单总线温度传感器DS18B20。

第6.4节介绍如何使用51单片机连接多功能器件X25045/X5045的应用实例。

第6.5节介绍如何使用51单片机连接实时时钟芯片DS1302的应用实例。

第6.6节介绍如何使用51单片机连接I2C总线器件应用实例。

第6.7节介绍如何使用51单片机连接字符型LCD应用实例。

第6.8节介绍如何使用51单片机连接绘图型LCD应用实例。

6.1 51单片机连接A/D的应用实例

在电子行业中,如何将现实的模拟世界和电子的数字世界连接起来是关键所在,AD/DA器件就是连接模拟信号源与数字设备、数字计算机或其他数据系统之间联系的桥梁。A/D的任务是将连续变化的模拟信号转换为离散的模拟信号,以便于数字系统进行处理、存储、控制和显示,D/A的作用是将经处理的数字信号转换为模拟信号以进行控制。

希望读者在学完本节后,能完成相关的电路设计,并掌握如下知识点:

◆掌握A/D器件的原理、特性及选择;

◆51单片机和A/D芯片的接口电路的设计;

◆51单片机对A/D转换的处理过程;

◆掌握数据采集处理过程的C51程序设计。

6.1.1 A/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转换器组成,用两次比较实行转换,所以称为Half flash(半快速)型。还有分成三步或多步实现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-Frequency Converter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种A/D的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成A/D转换。

6.1.2 A/D转换器的主要技术指标

⑴分辨率(Resolution)指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2n的比值。分辨率又称精度,通常以数字信号的位数来表示。

⑵转换速率(Conversion Rate)是指完成一次从模拟转换到数字的A/D转换所需的时间的倒数。积分型A/D的转换时间是毫秒级属低速A/D,逐次比较型A/D是微秒级属中速A/D,全并行/串并行型A/D可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率。因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。常用单位是Ksps和Msps,表示每秒采样千/百万次(Kilo / Million Samples per Second)。

⑶量化误差(Quantizing Error)由于A/D的有限分辩率而引起的误差,即有限分辩率A/D的阶梯状转移特性曲线与无限分辩率A/D(理想A/D)的转移特性曲线(直线)之间的最大偏差。通常是1个或半个最小数字量的模拟变化量,表示为1LSB、1/2LSB。

⑷偏移误差(Offset Error) 输入信号为零时输出信号不为零的值,可外接电位器调至最小。

⑸满刻度误差(Full Scale Error)满度输出时对应的输入信号与理想输入信号值之差。

⑹线性度(Linearity) 实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。

其他指标还有绝对精度(Absolute Accuracy),相对精度(Relative Accuracy),微分非线性,单调性和无错码,总谐波失真(Total Harmonic Distotortion缩写THD)和积分非线性。

数据采集系统就是将模拟输入信号经A/D转换后进行信号处理,最后经D/A转换器将数字信号转换为模拟信号。该系统的简单框图如下所示。

图1、数据采集系统简单框图

正如上图所示,A/D转换器就是整个数据采集系统的核心,下面结合TLC549串行A/D 转换器介绍单片机在数据采集中的应用以及基于C51语言的程序设计。

6.1.3 TLC549的结构及工作原理

1)TLC549芯片概述

TLC549是美国德州仪器公司生产的8位串行A/D转换器芯片,可与通用微处理器、控制器通过I/O CLOCK、CS、DATA OUT三条口线进行串行接口。具有4MHz片内系统时钟和软、硬件控制电路,转换时间最长17μs,TLC549允许的最高转换速率为40000次/s。总失调误差最大为±0.5LSB,典型功耗值为6mW。采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围,VREF-接地,VREF+-VREF-≥1V,可用于较小信号的采样。

TLC549引脚图

2)TLC549工作原理简介

TLC549有片内系统时钟,该时钟与I/O CLOCK是独立工作的,无须特殊的速度或相位匹配。其工作时序如图2所示。

图2 TLC549工作时序图

当CS为高时,数据输出(DATA OUT)端处于高阻状态,此时I/O CLOCK不起作用。这种CS控制作用允许在同时使用多片TLC549时,共用I/O CLOCK,以减少多路(片)A/D并用时的I/O控制端口。

一组通常的控制时序为:

⑴将CS置低。内部电路在测得CS下降沿后,再等待两个内部时钟上升沿和一个下降沿后,然后确认这一变化,最后自动将前一次转换结果的最高位(D7)位输出到DATA OUT 端上;

⑵前四个I/O CLOCK周期的下降沿依次移出第2、3、4和第5个位(D6、D5、D4、D3),片上采样保持电路在第4个I/O CLOCK下降沿开始采样模拟输入;

⑶接下来的3个I/O CLOCK周期的下降沿移出第6、7、8(D2、D1、D0)个转换位;

⑷最后,片上采样保持电路在第8个I/O CLOCK周期的下降沿将移出第6、7、8(D2、D1、D0)个转换位。保持功能将持续4个内部时钟周期,然后开始进行32个内部时钟周期的A/D转换。第8个I/O CLOCK后,CS必须为高,或I/O CLOCK保持低电平,这种状态需要维持36个内部系统时钟周期以等待保持和转换工作的完成。如果CS为低时I/O CLOCK上出现一个有效干扰脉冲,则微处理器/控制器将与器件的I/O时序失去同步;若CS为高时出现一次有效低电平,则将使引脚重新初始化,从而脱离原转换过程。

在36个内部系统时钟周期结束之前,实施步骤①~④,可重新启动一次新的A/D转换,与此同时,正在进行的转换终止,此时的输出是前一次的转换结果而不是正在进行的转换结果。

若要在特定的时刻采样模拟信号,应使第8个I/O CLOCK时钟的下降沿与该时刻对应,因为芯片虽在第4个I/O CLOCK时钟下降沿开始采样,却在第8个I/O CLOCK的下降沿开始保存。

3)TLC549应用接口及程序

TLC549可方便地与具有串行外围接口(SPI)的单片机或微处理器配合使用,也可与51系列通用单片机连接使用。与51系列单片机的接口如图3所示。其采样程序框图如图4所示:

图3 TLC549与AT89C51单片机的接口示意图

图4 TLC549程序流程图

其中单片机的P13脚与TLC549的CS连接,作为片选信号端口;P14与DOUT连接作为数据接收端口;P15与CLK连接作为脉冲时钟端口。

实际应用程序清单如下(程序仅供参考):

/**************************************************************************

程序描述:实现8位A/D转换器TLC549的转换;

并将Vin口读回来的数据送LED数码管显示。

**************************************************************************/

#include /*加载51头文件*/

#include /*加载头文件*/

unsigned char code seven_table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/*数码管0~9代码*/

unsigned char code bit_table[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; /*数码管片选位*/

/***********定义总线接口***********/

sbit cs = P1^3; /* TLC549片选位*/

sbit sda = P1^4; /* TLC549数据位*/

sbit clk = P1^5; /* TLC549时钟脉冲位*/

unsigned char ad_result=0;

/*****************读取AD数据函数******************/

unsigned char ad549(void)

{

unsigned char x=0,i=18;

clk = 0;

cs = 1;

do{i--;}while(i != 0);

cs = 0;

x = sda;

for(i = 0;i < 7;i++)

{

clk = 1;

x <<= 1;

clk = 0;

if(sda)

x++;

}

clk = 1;

cs = 1;

return(x);

}

/*****************延时函数******************/

void delay(int i)

{

while(i--)

_nop_();

}

void delay_ms(int j)

{

while(j--)

delay(100);

}

/*****************显示函数******************/

void display(unsigned char zxg)

{

unsigned char i,temp[4];

unsigned int temp2;

temp2 = zxg*5000/255; //5V的参考电压转换

temp[3] = temp2/1000; //计算各位数码管要显示的数据temp[2] = (temp2%1000)/100;

temp[1] = temp2%100/10;

temp[0] = temp2%10;

P0 = seven_table[temp[i]];

P2 = bit_table[i];

delay_ms(5);

i++;

if(i == 4) i = 0;

}

/*****************主函数******************/

void main(void)

{

while(1)

{

ad_result = ad549();

display(ad_result);

}

}

用串行ADC的好处

1)减少连线数(SPI口比并行口占用的I/O口要少的多,连线十分方便);

2)时序简单(虽然串行的时序本身要比并行的时序复制,但对集成了SPI控制器的单片机来说,这些工作完全由单片机自动完成,用户无需干预,因此十分简单);

3)控制灵活(有些SPI接口的ADC既可以输出转换后的数据量,又可以读入用户设置的“命令字”,我们可以通过“输入命令字”将其配置成单极性或双极性的ADC而无需改动电路,控制十分灵活)。

6.2 51单片机连接D/A转换器的应用实例

6.2.1 D/A转换器的分类

D/A转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类。大多数D/A转换器由电阻阵列和n个电流开关(或电压开关)构成。按数字输入值切换开关,产生比例于输入的电流(或电压)。此外,也有为了改善精度而把恒流源放入器件内部的。一般说来,由于电流开关的切换误差小,大多采用电流开关型电路,电流开关型电路如果直接输出生成的电流,则为电流输出型D/A转换器。此外,电压开关型电路为直接输出电压型D/A转换器。

1)电压输出型(如TLC5620)

电压输出型D/A转换器虽有直接从电阻阵列输出电压的,但一般采用内置输出放大器以低阻抗输出。直接输出电压的器件仅用于高阻抗负载,由于无输出放大器部分的延迟,故常作为高速D/A转换器使用。

2)电流输出型(如THS5661A)

电流输出型D/A转换器很少直接利用电流输出,大多外接电流—电压转换电路得到电压输出,后者有两种方法:一是只在输出引脚上接负载电阻而进行电流—电压转换,二是外接运算放大器。用负载电阻进行电流—电压转换的方法,虽可在电流输出引脚上出现电压,但必须在规定的输出电压范围内使用,而且由于输出阻抗高,所以一般外接运算放大器使用。此外,大部分CMOS DA转换器当输出电压不为零时不能正确动作,所以必须外接运算放大器。当外接运算放大器进行电流电压转换时,则电路构成基本上与内置放大器的电压输出型相同,这时由于在D/A转换器的电流建立时间上加入了达算放入器的延迟,使响应变慢。此外,这种电路中运算放大器因输出引脚的内部电容而容易起振,有时必须作相位补偿。

3)乘算型(如AD7533)

D/A转换器中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型D/A转换器。乘算型D/A转换器一般不仅可以进行乘法运算,而且可以作为使输入信号数字化地衰减的衰减器及对输入信号进行调制的调制器使用。

4)一位D/A转换器

一位D/A转换器与前述转换方式全然不同,它将数字值转换为脉冲宽度调制或频率调制的输出,然后用数字滤波器作平均化而得到一般的电压输出(又称位流方式),用于音频等场合。

6.2.2 D/A转换器的主要技术指标:

1)分辩率(Resolution) 指最小模拟输出量(对应数字量仅最低位为…1?)与最大量(对应数字量所有有效位为…1?)之比;

2)建立时间(Setting Time) 是将一个数字量转换为稳定模拟信号所需的时间,也可以认为是转换时间。D/A中常用建立时间来描述其速度,而不是A/D中常用的转换速率。一般地,电流输出D/A建立时间较短,电压输出D/A则较长。

其他指标还有线性度(Linearity),转换精度,温度系数/漂移。

下面以8位D/A芯片DAC0832在51单片机系统中的应用以及基于C51语言的程序设计。

希望读者在学完本节后,能完成相关的电路设计,并掌握如下知识点:

◆掌握D/A器件的原理、特性及选择;

◆51单片机和D/A芯片的接口电路的设计;

◆51单片机对D/A转换的处理过程;

◆掌握数据采集处理过程的C51程序设计。

6.2.3 DAC0832的结构及工作原理

1)DAC0832芯片概述

DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器,是使用非常普遍的8位分辨率的D/A转换集成芯片,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成,如图所示。它与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。

图5 DAC0832组成图

2)DAC0832的主要特性参数

⑴分辨率为8位;

⑵电流稳定时间1us;

⑶可单缓冲、双缓冲或直接数字输入;

⑷只需在满量程下调整其线性度;

⑸单一电源供电(+5V~+15V);

⑹低功耗,200mW。

3)DAC0832结构和引脚

图6 DAC0832结构和引脚

⑴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程序

图7 直通方式下单片机和DAC0832的连接示意图

在图7中,DAC0832我们选择直通的工作方式,将XFER和 WR2管脚全部接数字地。管脚8 接参考电压,在此我们接的参考电压是+5V。我们在控制P0口输出数据有规律的变化将可以产生三角波,锯齿波,梯型波等波形了。

应用程序清单如下(程序仅供参考):

/*********************************************************************

程序描述:随着给DA送的数字量的不断增加,其转换

成模拟量的电流也不断的增大,我们可以观

察到发光二极管D12从暗变亮,熄灭…

**********************************************************************/

#include/*加载51头文件*/

sbit WR_DA = P3^6; /* DA写数据*/

sbit CS_DA = P3^2; /* DA片选*/

unsigned char a,j,k;

/*****************延时函数******************/

void delay(unsigned char i)

{

for(j = i; j > 0; j--)

for(k = 125; k > 0; k--);

}

/*****************主函数******************/

void main()

{

CS_DA = 0;

a = 0;

WR_DA = 0;

while(1)

{

P0 = a; /*给a不断的加1,然后送给DA */

delay(50);/*延时50ms 左右,再加1,再送DA */

a++;

}

}

6)DAC0832单缓冲方式应用接口及C51程序

图8单缓冲方式下单片机和DAC0832的连接示意图

在图8中,DAC0832为单缓冲工作方式,此方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。

应用程序清单如下(程序仅供参考):

/**************************************************************************

**************************************************************************/

#include

#include

#define DAC0832 XBYTE[0x7fff] /* 定义DAC0832端口地址*/

#define uchar unsigned char

/************* 延时函数************/

void delay(uchar t)

{

while(t--);

}

/********* 锯齿波发生函数************/

void saw(void)

{

uchar i;

for (i=0;i<255;i++)

{

DAC0832=i;

}

}

/****************方波发生函数******************/ void square(void)

{

DAC0832=0x00;

delay(0x10);

DAC0832=0xff;

delay(0x10);

}

/****************主函数******************/

void main(void)

{

uchar i,j;

i=j=0xff;

while(i--)

{

saw(); /* 产生一段锯齿波*/ }

while(j--)

{

square(); /* 产生一段方波*/ }

}

6.3 数字温度传感器DS18B20应用实例

单片机系统除了可以对电信号进行测量外,还可以对温度信号进行测量。传统的温度检测大多以热敏电阻为传感器,但热敏电阻可靠性差、测量的温度不够准确,且必须经专门的接口电路转成数字信号后才能由微处理器处理。

6.3.1 单总线温度传感器DS18B20简介

DS18B20 数字温度计它提供9-12位摄氏温度测量而且有一个由高低电平触发的可编程的不因电源消失而改变的报警功能,可直接将温度转化成串行数字信号进行处理。通过一个单线接口发送或接受信息,因此在中央处理器和DS18B20 之间仅需一条连接线(加上地线)。它的测温范围为–55℃~+125℃,并且在–10℃~+85℃精度为±5℃。除此之外,DS18B20能直接从单线通讯线上汲取能量,除去了对外部电源的需求。具有微型化、低功耗、高性能、抗干扰能力强、易和微处理器组合等优点,特别适合构成多点温度测控系统。

每个DS18B20 都有一个独特的64 位序列号,从而允许多个DS18B20 同时连在一根单线总线上;因此,很简单就可以用一个微控制器去控制很多覆盖在一大片区域的DS18B20。这一特性在环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。

希望读者在学完本例后,能完成相关的电路设计,并掌握如下知识点:

◆掌握DS18B20的使用和特性;

◆51单片机和DS18B20的接口电路的设计;

◆C51程序设计的DS18B20的温度采集过程。

6.3.2 DS18B20器件说明及测温原理

1)几种封装的DS18B20的外形及引脚排列如下图所示,TO-92封装的引脚功能如下表所示,其他两种形式封装的相应管脚的功能和TO-92封装的一样。

值得一提的是DQ引脚的I/O为数据输入/输出端(即单总线),该引脚为漏极开路输出,常态下呈高电平。而单总线技术是DS18B20的一个特点,也是目前的计术热点之一。

2)DS18B20的内部框图如图XX所示,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速贮存器、用于存储用户设定的温度上下限值、触发器存储与控制逻辑、8位循环冗余校验码发生器等7部分。

图XX DS18B20内部框图

低温振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温振荡器是一个振荡频率对温度变化很敏感的振荡器,为计数器2提供一频率随温度变化的计数脉冲。

开始时,温度寄存器被预置成–55℃,每当计数器1从预置数开始减到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行直到计数器2计数到0时便停止。

计数器1在开始的时候预置的是与–55℃相对应的一个预置值。以后计数器1每一个循环的预置数都由斜率累加器提供。为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需的计数个数。

图中比较器的作用是以四舍五入的量化方式确定温度寄存器的最低有效位。在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;若高于0.25℃,就置1,若高于0.75℃时,温度寄存器的最低位就进位然后置0。这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最末位代表0.5℃,四舍五入最大量化误差为±0.5LSB,即0.25℃。

温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占用第二字节。

DS18B20测量温度时使用特有的温度测量技术。DS18B20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性度加以补偿。测量结果存入温度寄存器中。一般情况下的温度值为9位(包含一位符号),但因符号位扩展成高8位,故以16位补码形式读出,温度和数字量的关系如下表所示:

温度和数字量的关系

6.3.3 DS18B20使用中的注意事项

DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送,因此,在对DS18B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS18B20操作部分最好采用汇编语言实现。

2)在DS18B20的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此。当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。

3)连接DS18B20的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。

4)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。

6.3.4 DS18B20温度测试软、硬件设计

DS18B20硬件连接图如下所示

应用程序清单如下(程序仅供参考):

/***************************************************************** 程序描述:温度超过35度,继电器吸合

P0端驱动共阳七段数码管,P2端接共阳数码管的公共端

******************************************************************/ #include

#define uchar unsigned char

#define uint unsigned int

sbit DQ = P1^3;//DS18B20的DQ和单片机的P13脚连接

sbit jdq = P1^6;//继电器的控制端和单片机的P16脚连接

code uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code uchar seven_bit[] = {0xfe,0xfd,0xfb,0x7f};

uchar a,b,c,d,i,T;

/*******************延迟函数***************/

void delay(uint x)

{

while(x)

x--;

}

/**************初始化DS18B20函数***********/

Init_DS18B20(void)

{

unsigned char x = 0;

DQ = 1; //DQ复位

delay(8); //稍做延时

DQ = 0;//单片机将DQ拉低

delay(80);//精确延时大于480us

DQ = 1;//拉高总线

delay(14);

x = DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay(20);

}

/*******************从18B20中读一个字节***************/

Read_OneChar(void)

{

uchar i = 0;

uchar dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

dat >>= 1;

DQ = 1;// 给脉冲信号

if(DQ)

dat |= 0x80;

delay(4);

}

return(dat);

}

/**********************向18B20中写一个字节**************/

Write_OneChar(uchar dat)

{

uchar i = 0;

for (i = 8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;

delay(5);

DQ = 1;

dat >> = 1;

}

delay(4);

}

/***********************读取温度*************************/

uchar Read_Temperature(void)

{

uchar i = 0,t = 0;

Init_DS18B20();

Write_OneChar(0xcc); // 跳过读序号列号的操作

Write_OneChar(0x44); // 启动温度转换

Init_DS18B20();

Write_OneChar(0xcc); //跳过读序号列号的操作

Write_OneChar(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度

i = Read_OneChar();//读取温度值低位

t = Read_OneChar();//读取温度值高位

a = i & 0x0f;

b = t;

i = i >> 4;//低位右移4位,舍弃小数部分

t = t << 4;//高位左移4位,舍弃符号位

t = t | i;

return(t);

}

/******************* T0初始化函数***************/ void timer0_init(void)

{

TMOD = 0x01;

TH0 = (65536-5000)/256; //0xec;

TL0 = (65536-5000)%256; //0x78;

TR0 = 1;

EA = 1;

ET0 = 1;

}

/*****************中断函数**********************/

void timer0_isr(void) interrupt 1

{

uchar j;

TR0 = 0;

EA = 0;

TH0 = 0xec;

TL0 = 0x78;

TR0 = 1;

EA = 1;

i++;

if(i == 200) //刚好1秒

{

T = Read_Temperature();

i = 0;

}

switch(j)

{

case 0:P0 = seven_seg[a*10/16];break;

case 1:P0 = 0x7f & seven_seg[T%10];break;

case 2:P0 = seven_seg[T/10];break;

case 3:if(b & 0x80 == 0x80)P0 = 0xbf;break;

}

P2 = seven_bit[j];

j++;

if(j == 3) j=0;

}

void main(void)

{

Init_DS18B20();

timer0_init();

while(1)

{

if(T >= 35)jdq = 0;

else jdq = 1;

}

}

6.4多功能器件X25045/X5045的应用实例

6.4.1 看门狗监控概述

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(WATCHDOG)。

看门狗的原理就是如果WDT定时器溢出,芯片就复位。所以每隔一段时间(再溢出之前要清零WDT计数器)。单片机跑飞后,没有去清零WDT的计数器,所以就溢出了,然后触发看门狗中断,然后就复位了。

看门狗电路一般有软件看门狗和硬件看门狗两种。软件看门狗不需外接硬件电路,但系统需要出让一个定时器资源,这在许多系统中很难办到,而且若系统软件运行不正常,可能导致看门狗系统也瘫痪。硬件看门狗是真正意义上的“程序运行监视器”,如计数型的看门狗电路通常由555多谐振荡器、计数器以及一些电阻、电容等组成,分立元件组成的系统电路较为复杂,运行不够可靠。

X25045是美国XICOR公司的生产的标准化8脚集成电路,它将EEPROM、看门狗定时器、电压监控三种功能组合在单个芯片之内,大大简化了硬件设计,提高了系统的可靠性,减少了对印制电路板的空间要求,降低了成本和系统功耗,是一种理想的单片机外围芯片。

6.4.2 X25045/X5045的外形及引脚说明

X25045/X5045的外形如下图所示

其各个引脚功能描述如下:

X25045引脚

6.4.3 X25045/X5045的工作原理及结构

X25045内含512×8的串行E2PROM,可以直接与微控制器的I/O口串行相接。X25045内有一个位指令寄存器,该寄存器可以通过SI来访问。数据在SCK的上升沿由时钟同步输入,在整个工作期内,CS必须是低电平且WP必须是高电平。如果在看门狗定时器预置的超时时间内没有总线的活动,那么X25045将提供复位信号输出。

X25045内部有一个“写使能”锁存器,在执行写操作之前该锁存器必须被置位,在写周期完成之后,该锁存器自动复位。

X25045还有一个状态寄存器,用来提供X25045状态信息以及设置块保护和看门狗的超时功能。

看门狗定时器的预置时间是通过X25045的状态寄存器的相应位来设定的。如下表所示,X25045状态寄存器共有6位有含义,其中WD1、WD0和看门狗电路有关,其余位和EEPROM的工作设置有关。

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

嵌入式系统软件测试技术期末报告

期末总结报告 课程名称:嵌入式系统软件测试技术 学院:信息工程与自动化 专业:计算机科学与技术 年级: 2010级 学生姓名: 学生学号: 201010803116 指导教师:江虹 日期: 2013年1月2日

一、嵌入式软件测试的特点及步骤 嵌入式软件测试作为一种特殊的软件测试,它的目的和原则同普通的软件测试氏相同的,同样是为了验证或达到可靠性要求而对软件进行的测试。 但是和一般的应用软件测试的可靠性测试相比,嵌入式软件测试有自身的特点:(特别是对于没有操作系统的嵌入式应用软件而言) 1)嵌入式软件测试是在特定的硬件环境下才能运行的软件。因此,嵌入式软件测试最重要的目的就是保证嵌入式软件能在此特定的环境下更可靠地运行。 2)嵌入式软件测试除了要保证嵌入式软件在特定环境中运行的高可靠性,还要保证嵌入式软件的实时性。比如在工业控制中,如果某些特定环境下的嵌入式软件不具备实时响应的能力,就可能造成巨大的损失。 3)嵌入式软件产品为了满足高可靠性的要求,不允许内存在运行时有泄漏等情况发生,因此嵌入式软件测试除了对软件进行性能测试、GUI测试、覆盖分析测试是同普通软件测试一样都不可或缺之外,还需要对内存进行测试。 4)嵌入式产品不同于一般的软件产品,在嵌入式软件和硬件集成测试完成之后,并不代表测试全部完成,在第一件嵌入式产品生产出来之后,还需要对其进行产品测试。嵌入式软件测试的最终目的是使嵌入式产品能够在满足所有功能的同时安全可靠地运行。 因此,嵌入式软件测试除了要遵循普通软件测试的原则之外,还应该遵循以下几个原则; 1)嵌入式软件测试对软件在硬件平台的测试氏必不可少的。 2)嵌入式软件测试需要在特定环境下对嵌入式软件进行测试,比如,对某些软件在工业强磁场的干扰下测试,这也是为保证嵌入式软件可靠性所必须进行的测试。 3)必要的可靠性负载测试,比如,测试某些嵌入式系统能否连续1000个小时不断电工作。 4)除了要对嵌入式软件的功能进行测试之外,还需要对实时性进行测试。 在判断系统是否失效方面,除了看它的输出结构是否正确,还应考虑其是

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

嵌入式软件测试报告(内部)

软件(内部)测试报告 XXX系统 测试分析报告评审 V1.0 编写人: 编写日期: 审核人: 审核日期:

修订页

目录 目录 (1) 软件测试报告(内部) (2) 安装及使用测试 (3) 运行环境 (3) 安装易用性 (3) XXX测试 (4) 安装、使用问题及建议 (4) 功能单元测试 (5) 串口指令响应功能测试 (5) 1.测试方法及工具 (5) 2.功能测试 (5) 3.性能测试 (6) 4.稳定及安全性测试 (6) 5.BUG及建议 (6) xxx功能测试 (7) 整机测试 (8) 长时间工作稳定性整机测试 (8) 1.测试方法及工具 (8) 2.测试步骤及结果 (8) xxx整机测试 (8) 整机测试问题及建议 (8) 安装及使用测试附件 (10) 功能单元测试附件 (11) 整机测试附件 (12)

软件测试报告(内部) CRABXLAB-0628-15 TA/0001 软件测试报告编写:首先做对产品的安装及使用测试,如从运行环境、软件安装、故障指示、用户可操作性、界面友好性等方面来检测是否合理可靠;其次从功能完整性上测试,并对每个功能单元进行功能测试、性能测试、安全及稳定性测试,保证每个功能单元都稳定可靠;最后做整机测试,整机测试主要从长时间工作稳定性、异常处理(如网络、电量异常)合理可靠性等方面检查整机稳定可靠性。

安装及使用测试 开发出来的软件要基于对客户或者量生产上考虑产品的使用及安装环境的易用、安全、可操作性、友好性等。 运行环境 安装易用性

XXX测试 章节同安装及使用测试范例,由开发人员完善其他需要的测试项安装、使用问题及建议

单片机测试实验报告

AVR学习板测试实验报告 姓名:冯进福班级:09机械1班学号:0915020064 一、测试程序目录 (1)跑马灯1 (2)跑马灯2 (3)跑马灯3 (4)蜂鸣器(Buzz.hex) (5)定时器数码管显示 (6)数码管显示 (7)数模DAC7512单片电压输出(DAC7512.hex) (8)1602液晶显示 (9)12864液晶实验显示 (10)AD模数转换实验 (11)DS18B20温度数码管显示 (12)EEPROM开机记忆存储实验 (13)I2C-24C01 (14)I2C-PCF8563 (15)PCF8563T串口接收 (16)PCF8563T蜂鸣报警 (17)PCF8563T数码管显示 (18)SPI接口实验 (19)按键实验LED显示 (20)串口接收-24C01.hex (21)串口收发 (22)看门狗实验 (23)按键实验 二、使用的单片机简介 1)、CPU核心板mega128,AVR单片机主芯片,内包含有:128K Flash、4K SRAM、4KByte EEPROM,芯片可与AT mega64互换。 2)、AT24C02,I2C总线器件,EEPROM数据存储器,256Byte EEPROM。 3)、74HC595,SPI总线器件,SPI总线并口扩展器件,8位移位寄存器(串行输入,3S并行锁存输出)。 4)、PCF8563T,时钟芯片。 5)、RS232,RS232接口芯片,两组接口(和下面485接口共用CPU两组UART接口)。 6)、MAX487,485网络驱动芯片,产品组网中最常用最方便的一种方式,大部分室外控制网络采用485通信。 7)、8个输入按键、1个复位按键。 8)、4位动态扫描LED数码管、8位LED发光二极管。 9)、1个无源蜂鸣器。 10)、2路A/D输入可调电位器。 11)、1个三线扩展接口,可用来扩展热敏电阻、DS18B20数字温度计等实验。

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

单片机应用实例课题

项目七按钮控制灯课题 一、项目目的 1.进一步掌握单片机开发的基本过程。 2,掌握单片机I/O口的输入、输出基本编程方法。 二、项目设备 微机一台(WIN98/WIN2000系统、安装好Debugger8051等相关软件),编程器一台/下载线一条,单片机实验开发板一块。 三、项目内容 学习单片机I/O口输入、输出的编程方法,要求按下S1~S4中的任意一个键,则对应的发光二极管亮,松开键对应的发光二极管灭。 1.项目(课题)分析 思路分析: S1-S4可接到某一P口上,此时对应P口引脚作为输入端使用。改变开关的开合状态,可以改变对应I/O口的电平,然后将此电平状态去控制发光二极管的亮灭。2.硬件电路 如图4-7-1所示。 图4-7-1 3.软件设计 (1)编写源程序。 ;******************************** ;文件名:EX7_1.asm, ;功能:按下按扭S1-S4,控制相应发光二极管D3-D6亮 ;********************************

ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV P3,#0FFH LOOP: MOV A,P3 MOV P1,A LJMP LOOP END (2)对源程序进行编译,并使用Debugger8051软件对其功能进行仿真。 4.硬件系统安装 按照电路图安装好实验开发板的相关元件,注意按扭开关的方向。 5.程序烧录并观察实际运行结果 四、按要求编写程序并上机调试,观察实际运行结果 按下S1键D1~D4亮,按下S2键D2~D5亮,按下S3键D3~D6亮,按下S4键D4~D7亮。按上述过程,编写源程序,并运行观察结果,完成设计。(源文件名为EX7_2.asm) 项目八定时器控制流水灯课题 一、项目目的 1.进一步掌握单片机开发的基本过程。 2.掌握单片机内部资源定时器定时功能的使用(用查询方法实现定时)。 3.进一步掌握单片机I/O口的输入、输出基本编程方法。 二、项目设备 微机一台(WIN98/WIN2000系统、安装好Debugger8051等相关软件),编程器一台/下载线一条,单片机实验开发板一块。 三、项目内容 利用定时器控制发光二极管交替闪亮,每0.2秒钟交替闪亮一次。 1.硬件电路(同上) 2.编写项目程序 ;******************************** ;文件名:EX8_1.asm, ;功能:用定时器控制延时,实现流水灯效果 ;定时器使用查询方式 ;********************************

基于单片机的超声波测距系统实验报告

基于单片机的超声波测距系统实验报告

一、实验目的 1.了解超声波测距原理; 2.根据超声波测距原理,设计超声波测距器的硬件结构电路; 3.对设计的电路进行分析能够产生超声波,实现超声波的发送与接收,从而实现利用 超声波方法测量物体间的距离; 4.以数字的形式显示所测量的距离; 5.用蜂鸣器和发光二极管实现报警功能。 二、实验容 1.认真研究有关理论知识并大量查阅相关资料,确定系统的总体设计方案,设计出系 统框图; 2.决定各项参数所需要的硬件设施,完成电路的理论分析和电路模型构造。 3.对各单元模块进行调试与验证; 4.对单元模块进行整合,整体调试; 5.完成原理图设计和硬件制作; 6.编写程序和整体调试电路; 7.写出实验报告并交于老师验收。 三、实验原理 超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距S=Ct/2,式中的C为超声波波速。由于超声波也是一种声波,其声速C与温度有关。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往返的时间,即可求得距离。这就是超声波测距仪的机理,单片机(AT89C51)发出短暂的40kHz信号,经放大后通过超声波换能器输出;反射后的超声波经超声波换能器作为系统的输入,锁相环对此信号锁定,产生锁定信号启动单片机中断程序,得出时间t,再由系统软件对其进行计算、判别后,相应的计算结果被送至LED显示电路进行显示。 (一)超声波模块原理: 超声波模块采用现成的HC-SR04超声波模块,该模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm。模块包括超声波发射器、接收器与控制电路。基本工作原理:采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号;模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。实物如下图1。其中VCC 供5V 电源,GND 为地线,TRIG 触发控制信号输入,ECHO 回响信号输出等四支线。

单片机设计实例

应用程序设计实例 浙江海洋学院楼然苗6.1 闪烁LED小灯的设计 6.2 六位数码管时钟电路的设计 6.3 LED广告显示电路的设计 6.4 8路输入模拟信号的数值显示电路 6.5 单键学习型遥控器的设计 6.6 十六路遥控电路的设计 6.7 遥控码的仿真应用设计 6.8 自行车里程\速度计的设计 6.9 自动往返行驶小汽车的设计 6.10 遥控小汽车的设计 6.11 汽车行驶信息的发送与接收

;************; ;亮灯控制程序; ;************; ; ;************; ;中断入口程序; ;************; ; ORG 0000H LJMP START ORG 0003H RETI ORG 000BH RETI ORG 0013H RETI ORG 001BH RETI ORG 0023H RETI ; ;************; ; 初始化程序 ; ;************; ; CLEAR: RET ; ;************; ; 主程序 ; ;************; ;

START:ACALL CLEAR STAR1:MOV P3,#0FFH JNB P3.0,FUN0 JNB P3.1,FUN1 JNB P3.2,FUN2 JNB P3.3,FUN3 ;关闭按纽 JNB F0,STAR1 ;曾经有键按下F0置1 RET ; FUN0:LCALL DL10MS ;消岸抖动 JB P3.0,STAR1 WAITL0:JNB P3.0,WAITL0 ;等待键释放 SETB F0 FUN01:LCALL FUN00 LCALL STAR1 LJMP FUN01 ; FUN1:LCALL DL10MS ;消岸抖动 JB P3.1,STAR1 WAITL1:JNB P3.1,WAITL1 ;等待键释放 SETB F0 FUN10:LCALL FUN11 LCALL STAR1 LJMP FUN10 ; FUN2:LCALL DL10MS ;消岸抖动 JB P3.2,STAR1 WAITL2:JNB P3.2,WAITL2 ;等待键释放 SETB F0 FUN20:LCALL FUN22 LCALL STAR1 LJMP FUN20 ; FUN3:LCALL DL10MS ;消岸抖动 JB P3.3,STAR1 WAITL3:JNB P3.3,WAITL3 ;等待键释放 CLR F0 MOV P1,#0FFH ;关显示 LJMP STAR1 ; FUN00:MOV A,#0FEH FUN000:MOV P1,A LCALL DL05S JNB ACC.7,OUT

嵌入式系统压力测试阶段报告

嵌入式系统压力测试阶段报告 从10月下旬到12月20号,将近2个月的时间,对嵌入式收费系统进行大数据量测试。现将问题说明一下: 一、最初测试一直是在nfs文件系统上运行,经常出错,各种现象都有。后来想到可能是nfs 传输同步的速度跟不上我们生产数据的速度,所以将测试移到tf卡上进行。 二、测试到过车数量4千多的时候出现异常,可能是我们软件的问题(QByteArray double free),修改后没有再发生。 三、进一步测试发现程序经常在sqlite保存数据时出错,所以将保存数据入库去掉,直接存 成文件。 四、随后的测试经常出现tf卡变成只读。还有Qt本身的组件报错(qtgui,qtcore)。 现在问题大概有以下几个方面: 一、存储介质 目前我们使用的是TF卡。西达提供给我们两批开发板,这两批对于tf卡的挂载效果是不一样的。 第一批,能正确挂载tf卡上的多个分区(fat32,ext2,swap),经过压力测试,数据写入出错的时候,系统还是可以继续运行的。 /dev/mmcblk0p1 on /mnt/yyext type ext2 (rw,relatime,errors=continue)这是挂载状态。errors = continue 决定 第二批,无论是fat32,ext2都挂载成vfat(这批板子都有问题) /dev/mmcblk0p1 on /mnt/yy type vfat (rw,relatime,errors=remount -o ro)这是挂载状态remount -o ro 决定了tf卡变成只读,系统这时会死掉。 二、程序经常报double free 问题。类似下面: *** glibc detected *** ./lanetestmp: corrupted double-linked list: 0x002e9030 *** ======= Backtrace: ========= /lib/libc.so.6(+0x70188)[0x41101188] /lib/libc.so.6(+0x743b4)[0x411053b4] /lib/libc.so.6(realloc+0xfc)[0x41106e54] /opt/qt/qt-4.7.2/lib/libQtGui.so.4(+0x17cf68)[0x40334f68] /opt/qt/qt-4.7.2/lib/libQtGui.so.4(+0x2e5f44)[0x4049df44]

单片机最小系统(详解)设计报告

摘要 近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 本次课程设计包括STC89C51单片机最小系统(包括复位和时钟电路)还有蜂鸣器电路、LED电路和RS232串口电路以及用于扩展功能的四排与I/O端口相连的插孔。利用Protel电路设计软件进行原理图设计,PCB布线,借此巩固单片机应用、模拟电路、数字电路课程及学会工程软件protel的使用。 关键词:最小系统,I/O端口,STC89C51, PCB

Abstract Recent years, with the penetration of computers in the social sphere, SCM applications are constantly deepening, while driving traditional control detects the rapidly growing updated. In the real-time detection and automatic control of microcomputer application system, the microcontroller is often used as a core component, only the microcontroller knowledge is not enough, should be based on the specific hardware architecture, as well as application-specific software features object combine to make perfect . The curriculum includes the SCM STC89C51 minimum system (including reset and clock circuit) and the buzzer circuit, eight digital tube display circuit, RS232 serial port circuitry, and used to extend the functionality of the four rows with the I / O ports are connected jack. Protel circuit design software for the use of schematic design, PCB layout, thereby consolidating microcontroller applications, analog circuits, digital circuits courses and learn to use engineering software Protel. Keyword:minimum system,I/O Port, STC89C51, PCB

基于51单片机压力检测课程设计报告书

单片机原理与接口技术课程设计 成绩评定表 设计课题基于89c51的自身断电保护系统设计 学院名称:电气工程学院 专业班级:自动1002 学生:秦凯新 学号: 7

指导教师:王黎臧海河周刚 设计地点:31-505 设计时间:2012-12-17~2012-12-28

单片机原理与接口技术课程设计 课程设计名称:基于89c52的压力监测系统设计 专业班级:自动1002 学生姓名:秦凯新 学号: 7 指导教师:王黎臧海河周刚 课程设计地点:31-505 课程设计时间:2012-12-17~2012-12-28

单片机原理与接口技术课程设计任务书

目录 1 引言 (6) 2 总体方案设计 (6) 2.1硬件组成 (6) 2.2 方案论证 (6) 2.3 总体方案 (7) 3 硬件电路设计 (9) 3.1 时钟电路 (9) 3.2复位电路 (10) 3.3 AD简介与原理分析 (10) 3.4 声光报警接口电路 (15) 3.5 显示及键盘接口电路 (15) 3.7 电源电路 (2) 4 系统软件设计 (3) 4.1 主程序设计 (3) 4.3 部分主要子程序的设计 (6) 5 系统调试与总结 (6) 5.1 系统功能测试 (6) 5.2 技术指标测试 (6) 6心得体会 (7) 6.1 为何不采用8255了? (7) 6.2为何不采用A/D0809? (7) 6.3在帮助同学的过程中我学到了什么? (7) 6.4在单片机领域我的规划? 7 参考文献 (8) 附录A 系统原理图 (9) 附录B 源程序 (10)

1 引言 压力监测普遍用于工业领域,并对国家的发展产生了深厚的影响,小到体重计,大到工业中反应炉的气压声电报警。甚至航空航天,智能仪表。以及机器人。本设计就是工业中最普遍的气压监测报警系统。所以,这个系统采用自动检测反应炉中的压力大小,通过传感器,并实时进行在液晶1602上进行显示,还有在液晶上进行参考上限电压值的设置和参考下限电压值的的设置。并通过在单片机部进行比较计算,来实现整个压力监测系统的声光电报警。 本系统的设计基于A/D0804芯片和AT89C52单片机,并采用液晶1602作为显示输出,系统虽小却包含了工业要求的各个方面,作为声电报警模块,主要用到蜂鸣器和发光二极管。当监测压力低于下限值和高于上限值就会进行声光报警。此次系统设计就是针对工业的反应炉的压力监测,甚至可做体重计到最小的方面。 本设计纯为个人设计。程序也在开发板验证成功,如有任何疑问,都可通过实验调试验证。 2 总体方案设计 2.1硬件组成 1.控制器。控制器是系统的核心部分,可以用工业计算机 PLC、或者单片机。 2. A /D转换器。A/D转换器可以把测得的模拟量转换成数 字量输出,可以直接读取。 3.继电器。继电器在电路中起到断电保护作用,是系统的 安全保障。其种类很多,有电流继电器、电压及电器、速度继电器 等等。 4.键盘。通过键盘可以设置限制电流大小。 5.液晶显显示。液晶可以显示设置电流以及实时电流值大 小。 2.2 方案论证

几个单片机应用实例

例一:一个液晶显示的数字式电脑温度计 液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。 段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息, 如汉字、图形、图表等。这里我们介绍一种八段式四位LCD显示器,该显 示器内置驱动器,串行数据传送,使用非常方便。原理图如下图: 下图是长沙太阳人科技开发有限公司生产的4位带串行接口的液晶显示模块SMS0403 的外部引线简图:

有关该模块的具体参数,请查看该公司网站。此例中使用的温度传感器为美国DALLAS公司生产的单总线式数字温度传感器。该传感器本站有其详细的资料可供下载。此例稍加改动,即可做成温控器。 下载驱动该模块的源程序LCD.PLM 例2: LED显示电脑电子钟 本例介绍一种用LED制作的电脑电子钟(电脑万年历)。 原理图如下图所示:

上图中,CPU选用的是AT89C2051,时钟芯片选用的是Dallas公司的DS1302, 温度传感器选用的是Dallas公司的数字温度传感器DS1820,显示驱动芯片 选用的是德州仪器公司的TPIC6B595,也可选用与其兼容的芯片NC595或 国产的AMT9595。整个电子钟用两个键来调节时间和日期。一个是位选 键,一个是数字调节键。按一下位选键,头两位数字开始闪动,进入设 定调节状态,此时按数字调节键,当前闪动位的数字就可改变。全部参 数调节完后,五秒钟内没有任何键按下,则数字停止闪动,退出设定调 节状态。源程序清单如下(无温度显示程序): start:do; $include(reg51.dcl) declare (sclk,io,rst) bit at (0b3h) register; /* p33,p34,p35 */ declare (command,data,n,temp1,num) byte; declare a(9) byte; declare ab(6) byte; declare aco(11) byte constant (0fdh,60h,0dah,0f2h,66h,0b6h,0beh, 0e0h,0feh,0f6h,00h); declare week(11) byte constant (0edh,028h,0dch,7ch,39h,75h,0f5h, 2ch,0fdh,7dh,00h); declare da literally 'p15',clk literally 'p16',ale literally 'p17', mk literally 'p11',sk literally 'p12'; clear:procedure; sclk=0;io=0;rst=0; end clear; send1302:procedure(comm);

单片机系统测试报告

单片机系统测试报告 题目:单片机控制LED数码管显示数字 姓名: 学号: 指导老师: 专业:电子信息工程 院系:计算机与信息工程学院 2015年6月

目录 第一章设计任务及要求 (3) 1.1 设计任务 (3) 1.2 设计要求 (3) 第二章芯片引脚功能图及源程序设计 (3) 2.1 各芯片引脚图 (3) 2.2在Keil软件设计C语言源程序 (4) 第三章 Protues绘制电路原理图及仿真 (6) 3.1 绘制电路原理图 (6) 3.2 Protues仿真 (7) 第四章电路板的焊接与硬件调试 (7) 4.1 电路板的焊接 (7) 4.2 硬件调试 (7) 第五章心得体会 (8)

第一章设计任务及要求 1.1设计任务 利用51单片机、74HC573芯片、2片位4位数码管等器件,设计一个单片机输入显示系统。巩固Proteus软件和Keil软件的使用方法,学习端口输入输出的高级应用。 1.2 设计要求 要求八个数码管按顺序依次显示1~8 第二章芯片引脚功能图及源程序设计 2.1 各芯片引脚图 图2.1-1 AT89C52引脚图图2.1-2 74HC573引脚图

图2.1-3 四位一体数码管引脚图2.2在Keil软件设计C语言源程序 #include #include #define uchar unsigned char #define uint unsigned int sbit wela=P2^1; sbit dula=P2^2; unsigned char leddata[]={ 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F, //"9" 0x77, //"A" 0x7C, //"B"

基于51单片机的光照强度检测报告

课程设计报告 课程名称:智能仪器课程设计 题目:基于51单片机的光照强度

摘要 光敏电阻测光强度系统,该系统可以自动检测光照强度的强弱并显示让人们知道此时光照强度的强弱。人们可以通过看此装置的显示了解现在的光照状态,做合理的光照调节。该设计可分为三部分:即光照检测部分、信号处理部分、光强显示部分。还可加上照明部分。对于光照检测部分可利用光敏电阻传感器作为检测元件,它可以完成从光强到电阻值的信号转换,再把电阻值转换为电信号就可以作为系统的输入信号。对输入信号处理后,就可以用来显示了。对于显示部分可利用数码管来显示,不同的光强对应于不同的数值,就能简单的显示出不同的光强了。本设计就是由单片机STC89C52RC芯片,AD采集模块,运算放大,和1602液晶为核心,辅以必要的电路,构成了一个单片机光照强度检测系统。该光照强度检测系统可以通过检测光照强度,使得光照在低于一定强度的时候让照明灯亮,是一种常用的测试仪器,它可以用在需要照明的各个地方,根据灯光的强弱,自动控制照明灯的开关,有力地节约了电力资源。 关键词:51单片机,,LM358,ADC0809,1602液晶,光敏电阻

目录 一、设计任务、要求 (3) 1.1 设计任务: (3) 1.2 设计要求: (3) 二、方案总体设计 (4) 2.1 方案一: (4) 2.2 方案二: (4) 2.3系统采用方案 (4) 三、硬件设计 (6) 3.1 单片机最小系统 (6) 3.2 液晶显示模块 (6) 3.3 系统电源 (7) 3.4 整体电路 (8) 四、软件设计 (10) 4.1 keil软件介绍 (10) 4.2程序流程图 (10) 五、仿真与实现 (12) 5.1 proteus软件介绍 (12) 5.2 仿真过程 (12) 5.3 实物制作与调试 (14) 5.4 使用说明 (16) 六、总结 (17) 6.1设计总结: (17) 6.2经验总结: (18) 七、参考文献 (19)

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/4a14431463.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/4a14431463.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/4a14431463.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

单片机应用实例报告

单片机应用实例报告 零.序 这个学期一开始便接触了《单片微型计算机原理与接口技术》,听说是《微型计算机控制技术实用教程》的基础,对于工科的我来说学以致用无非是一切的一切,虽然还是个该领域的菜鸟,但是单片机之于自动化的意义不言而喻,对于这篇论文,以下开始展开,不足之处谅解。 一.概述 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 关于80C51:该系列单片机是采用高性能的静态80C51 设计由先进CMOS 工艺制造并带有非易失性Flash 程序存储器全部支持12 时钟和 6 时钟操作P89C51X2 和P89C52X2/54X2/58X2 分别包含128 字节和256 字节RAM 32 条I/O 口线 3 个16 位定时/计数器 6 输入4 优先级嵌套中断结构 1 个串行I/O 口可用于多机通信 I/O 扩展或全双工UART以及片内振荡器和时钟电路。此外,由于器件采用了静态设计,可提供很宽的操作频率范围,频率可降至0 。可实现两个由软件选择的节电模式,空闲模式和掉电模式,空闲模式冻结CPU但RAM 定时器,串口和中断系统仍然工作掉电模式保存RAM的内容但是冻结振荡器导致所有其它的片内功能停止工作。由于设计是静态的时钟可停止而不会丢失用户数据运行可从时钟停止处恢复的。 二.应用领域 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: 1.在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、

TS8900-M128单片机测试报告(广州大学)

TS8900-M128单片机测试报告机械113班丘雄锋1107200084 肖文杰1107200094 潘振昇1107200104 一、目录: 1、跑马灯1; 2、跑马灯2; 3、跑马灯3; 4、看门狗; 5、DS18B20温度数码管显示; 6、定时器数码管显示; 7、按键实验LED显示; 8、1602液晶; 9、蜂鸣器; 10、PCF8563T数码管显示。 二、单片机简介 AVR mega128学习板专为AVR单片机初学者设计,简单实用、价格合理是AVR 学习板的最大特点。电路板精心布局,模块划分清晰位置放置合理,符合正常使用习惯。电路简单,学习板上安排了最常用最实用的功能电路,电路接口设计上合理配置尽量不复用,降低学习难度,把方便留给大家 硬件资源介绍(如下图):

1. CPU核心板mega128,A VR单片机主芯片,内包含有:128K Flash、4K SRAM、4KByte EEPROM,芯片可与AT mega64互换。 2. AT24C02,I2C总线器件,EEPROM数据存储器,256Byte EEPROM。 3. 74HC595,SPI总线器件,SPI总线并口扩展器件,8位移位寄存器(串行输入,3S并 行锁存输出)。 4. PCF8563T,时钟芯片。 5. RS232,RS232接口芯片,两组接口(和下面485接口共用CPU两组UART接口)。 6. MAX487,485网络驱动芯片,产品组网中最常用最方便的一种方式,大部分室外控制 网络采用485通信。 7. 8个输入按键、1个复位按键。 8. 4位动态扫描LED数码管、8位LED发光二极管。 9. 1个无源蜂鸣器。 10. 2路A/D输入可调电位器。 11. 1个三线扩展接口,可用来扩展热敏电阻、DS18B20数字温度计等实验。 12. LCD接口,液晶显示屏接口,可接LCD1602和LCD12864两种液晶屏. 13. A VR JTAG仿真接口,A VR ISP下载接口。 14. 所有IO口全部引出,方便扩展实验及测试。 15. CPU采用独立mega128核心板,方便升级及更换芯片。 16. 在1路RS232外提供了1路RS485网络驱动芯片,实用的多点远程通信网络。 三、测试环境简介 1、硬件 (1)、电脑 (2)、TS8900-M128开发板 (3)、数据线 2、软件 (1)、A VR JTAG 驱动 (2)、ICCAVR (3)、A VR STUDIO (4)、程序 四、各个程序功能以及测试结果 附跑马灯测试效果图:

相关文档