基于AT89S51 单片机的力测量设计.docx

上传人:b****8 文档编号:29979835 上传时间:2023-08-04 格式:DOCX 页数:13 大小:181.13KB
下载 相关 举报
基于AT89S51 单片机的力测量设计.docx_第1页
第1页 / 共13页
基于AT89S51 单片机的力测量设计.docx_第2页
第2页 / 共13页
基于AT89S51 单片机的力测量设计.docx_第3页
第3页 / 共13页
基于AT89S51 单片机的力测量设计.docx_第4页
第4页 / 共13页
基于AT89S51 单片机的力测量设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于AT89S51 单片机的力测量设计.docx

《基于AT89S51 单片机的力测量设计.docx》由会员分享,可在线阅读,更多相关《基于AT89S51 单片机的力测量设计.docx(13页珍藏版)》请在冰豆网上搜索。

基于AT89S51 单片机的力测量设计.docx

基于AT89S51单片机的力测量设计

基于AT89S51单片机的力测量设计

摘要:

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,随着工业的发展,人们对数据处理程序和调试能力都有了很高的要求。

本系统把单片机就用于力测量控制中,既提高了产品的功能和质量,又降低了成本。

关键词:

AT89S51;压力传感器;ADC0809

Abstract:

Inreal-timedetectionandautomaticcontrolofmicrocomputerapplicationsystem,SCMisoftenasacorecomponenttouse,withthedevelopmentoftheindustry,thedataprocessingprogramanddebuggingabilityhastheveryhighrequest.Inthissystemthesinglechipmicrocomputerisusedforpressuremeasurementcontrol,cannotonlyimprovetheproductfunctionandquality,andreducethecost。

KeyWords:

AT89S51; pressuresensor;ADC0809

1引言

随着科技的飞速发展,单片机的应用不断地深入我们的生活中,同时带动传统的控制检测,便我们的生活日新月异。

AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。

基于51单片机的压力测量系统具有准确率高,响应速度快,可扩展性好,价格便宜等多方的优点

而且AT89S51具有完整的输入输出、控制端口、以及内部程序存储空间。

与我们通常意义上的微机原理类似,可以通过外接A/D,D/A转换电路及运放芯片实现对传感器传送信息的采集。

因此采用51单片机进行压力测量是一个不错的选择。

本次设计的压力传感器以单片机为主要部件,采用全桥测量电路,使系统产生的误差更小,输出的数据更精确。

电阻应变片压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业.

而三运放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的要求。

ADC0809的A/D转换作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,最后由显示电路显示出测量结果。

 

2总体设计

以单片机为主控制器,在读取AD转换指令后设置断点,在弹性元件施加一力,全速运行,如果碰到断点,再检查读出A/D转换结果,数据是否与09VINO相对应,否则应查程序或硬件。

再全速运行程序,修改程序错误使单片机综合实验实验仪显值随力的大小而变化,直至达到本实验的要求.

整体电路设计框架图。

(如图1)

传感器

ADC0809A/D转换器

三运放大器

AT89S51

LED显示器

图1整体电路

以下为此次电图的整体电路图,通过电阻应变传感器的施力,引起电桥不平衡,压力信号转换为微弱的电压信号,经LM324运算放大器,把信号放大到0-5V,作为ADC0809输入信号。

而ADC0809能与CPU直接接口。

电路图见图2。

 

图2

3硬件电路设计

3.1系统硬件设计

3.1.1电阻应变压力传感器

压力传感器是工业实践中最为常用的一种传感器,广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业,将电阻应变片粘贴在弹性元件特定表面上,当力、扭矩、速度、加速度及流量等物理量作用于弹性元件时,会导致元件应力和应变的变化,进而引起电阻应变片电阻的变化。

电阻的变化经电路处理后的以电信号的方式输出,这就是电阻应变式传感器的工作原理。

3.1.2ADC0809A/D转换器

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。

它是逐次逼近式A/D转换器,可以和单片机直接接口。

由(图3)可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

 

图3ADC0809

3.1.3单片机AT89S51

AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,

器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。

如图4

图4

管脚说明:

     P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

    P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

    P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故P3

口也可作为AT89C51的一些特殊功能口,如下表所示:

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器

串行口方式

串行口可以发送与接收数据,有SCON和PCON两个控制寄存器。

SCON有4中工作方式中工作方式选择位:

SM0与SM1两位的编码所得。

表1

SM0SM1

方式

功能说明

00

0

同步移位寄存器方式(用于扩展I/O)

01

1

8位异步收发,波特率可变(由定时器控制)

10

2

9位异步收发,波特率Fosc/64或Fosc/64

11

3

9位异步收发,波特率可变(由定时器控制)

4软件设计

4.1程序总体思路

系统采用模块化结构,包括程序入口、初始化显示缓冲区、ADC0809A/D程序、延时程序。

其中流程图。

程序流程:

1、设定仿真模式为程序空间在仿真器上,数据空间在用户板上。

2、“译码器”的YC2孔连数模转换AD0809的CS09孔,“脉冲源”的0.5MHZ孔连AD0809的CLOCK孔,09INO孔(AD0809的0通道)连ANO孔(压力传感器的输出孔)。

3、在电阻应变传感器上施加力。

4、调试得出。

流程见图5。

程序入口

设SP

初始化显示缓冲区

调用显示子程序

选0809通道0并启动A/D

延时

读A/D结果

送显示缓冲区

图5

4.2程序代码(见附录)

5调试部分

硬件调试:

在弹性元件表面施加一力。

软件调试:

输入程序,编译。

在读取AD转换指令后设置断点,在弹性元件施加一力,全速运行,如果碰到断点,再检查读出A/D转换结果,数据是否与O9VINO相应,否则应查程序或硬件。

再全速运行程序,修改程序错误使单片机综合实验仪显示值随力的大小而变化,直至达到本实验的要求。

连接好整个电路图后,对程序进行不断的修改,调试,得出我们所要的结果。

 

 

FF为最大显示值

 

力的改变,数值也相应的改变

6结论

通过设计压力测量系统,让我掌握ADC0809使用原理和了解力-电信号转换的基本工作原理,对单片机编程指令有了更深刻的掌握,夯实了单片机的基础,锻炼了思考和动手能力,让我收获了许多。

但是在设计的过程中仍然存在了一些问题,主要存在于细节方面,说明我在细节方面还需下功夫,要培养严谨治学的态度,扎扎实实的学习专业课程。

一篇好的课程设计有多种因素限制,最重要的还是在于对单片机及压力测量实验的掌握程度,及对硬件、软件的熟悉程度等,因此在今后的学习中,我要抓好平时的学习,刻苦努力,而不能一味的临时抱佛脚。

参考文献

[1]唐慧强,孔照林.基金会现场总线压力测量系统的设计[J].微计算机信息,2007,6.1;194.195:

[2]高卫东,辛友顺,韩彦征.51单片机原理与实践[M]. 北京航空航天大学出版社,2008:

[3]刘笃仁,韩保君.传感器原理及应用技术[M].西安电子科技大学出版社,2003:

 

[4]王为青邱云勋.51单片机应用案例精选[M].人民邮电大学出版社,2007:

[5]高卫东,辛友顺,韩彦征.单片机高级教程[M].北京航空航天大学出版社,2008:

[6]李华.MCS-51系列单片机实用接口技术.北京航空航天大学出版社.1993.8:

[7]黄继昌,张海贵,郭继忠.实用单元电路及其应用[M].人民邮电出社.2002:

[8]马忠梅.单片机的C语言应用和设计[M].北京航空航天大学出版社,2007:

 

附录

#include

#defineLEDLen6

#defineMODE0x03

#defineCS0809XBYTE[0xa000]

#defineCAddrXBYTE[0xe100]/*命令控制口*/

#defineOUTBITXBYTE[0xe101]/*位控制口*/

#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位)*/

#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位)*/

#defineINXBYTE[0xe103]/*键盘读入口*/

unsignedcharLEDBuf[LEDLen];/*显示缓冲*/

codeunsignedcharLEDMAP[]={/*八段管显示码*/

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;/*从左边开始显示*/

for(i=0;i

OUTBIT=0;/*关所有八段管*/

LED=LEDBuf[i];

for(j=0;j<8;j++){/*送164*/

if(LED&0x80)DAT164=1;elseDAT164=0;

CLK164=CLK164|0X02;

CLK164=CLK164&0Xfd;

LED<<=1;

}

OUTBIT=Pos;/*显示一位八段管*/

Delay

(1);

Pos>>=1;/*显示下一位*/

}

OUTBIT=0;/*关所有八段管*/

}

unsignedcharRead0809()

{

unsignedchari;

CS0809=0;/*起动A/D*/

for(i=0;i<0x20;i++);/*延时>100us*/

return(CS0809);/*读入结果*/

}

voidmain()

{

unsignedcharj;

unsignedcharb;

CAddr=MODE;

while

(1){

LEDBuf[0]=0Xb8;

LEDBuf[1]=0X40;

LEDBuf[2]=0X40;

LEDBuf[3]=0X40;

LEDBuf[4]=0X00;

LEDBuf[5]=0X00;

//b=Read0809();

LEDBuf[5]=LEDMAP[Read0809()&0x0f];

LEDBuf[4]=LEDMAP[Read0809()>>4&0x0f];

for(j=0;j<5;j++)

DisplayLED();/*延时*/

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1