通信与测控系统设计报告文档格式.docx
《通信与测控系统设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《通信与测控系统设计报告文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
(1)采用单总线的接口方式与微处理器连接时仅需要一条连线即可实现微处理器与DS18B20的双向通信。
单总线具有经济性好,抗干扰能力强,使用方便等优点。
⑵DS18B20测量溫度范围宽,为-55°
C~+125°
C。
测量精度高,在-】0°
C~+85°
C范围内,精度为士0.5匸。
⑶测量参数可配査DS18B20的测量分辨率可通过程序设定9~12位。
⑷持多点组网功能,多个DS18B20可以并联在一根单线上,实现多点测温。
⑸供电方式灵活,DS18B20可以通过内部寄生电路从数据线上获取电源。
因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可霏性更咼。
DS18B20具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建经济的测温系统。
2.2IA4421
通用ISM频段FSK收发器:
IA4421
单片机与无线模块IA4421的连接
单片机与无线模块IA4421的连接标准是SPI,SPI的相关协议如下:
它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。
也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
(1)SDO-主设备数据输出,从设备数据输入;
(2)SDI-主设备数据输入,从设备数据输出;
(3)SCLK-时钟信号,由主设备产生;
(4)CS-从设备使能信号,由主设备控制。
设计中通过两块IA4421模块对数据进行无线传输,使得数据能够进行相互对比,从而使得实验的准确性得到提高。
冊
PI.I
P1.1
?
1:
(ADWI
皿
P!
.!
PL?
脚.•
也軌
帼
删
題1
啊
仙刖
MI
[m
(A1胆
嗣
般邓
eo
••
teoxotoM&
OQOUO-S
系统原理图
3.原理框图
四位数码管
P2.0-2.3
P3.3
74LS573
DS18B20
CPU
AT89S52
上位机
无线收发模块
无线连接
4.程序流程图
1dsl8b20工作流程图
2IA4421流程图
DS18B20和CPU之间的连接采用一总线协议。
IA4421和CPU之间的连接采用SPI总线协议。
3系统流程图
5附录主程序
主程序代码:
#include<
reg52.h>
IA4421.h>
absacc.h>
intrins.h>
math.h>
xianshi.h>
#defineuintunsignedint
#defineucharunsignedcharunsignedcharm;
unsignedcharn;
voidzhuanhucin();
voiddelayjed(uintz)
{
uintx,y;
for(x=z;
x>
0;
x-)
for(y=l10;
y>
y-);
}
uintaa;
ucharweLl.wei_2,wei_3Mwei_4,wei_5,wei_6;
uintshuju;
//得到的温度值
uchartemp[2]={0,0};
〃存放DS18B20的温度寄存器值
uintvalue=0;
sbitDQ=P3A3;
〃数据线
voidReadSerialNumber(void);
ucharsnlzsn2zsn3/sn4/sn5zsn6zsn7/sn8;
〃存放DS18B20的64位序列号vvoidow.reset(void);
voidtmstart(void);
voidRead_Temperature(void);
voidwrite_byte(char);
uintread^bytefvoid);
voiddelay_18B20(uint);
//voidbaojing();
/車**車**扌主函数***)♦(車*****/
voidmain))
{m=0;
tmstart();
delay_18B20(50);
/*等待转换结束*/
while
(1)
{m++;
Read_Temperature();
tmstart));
广等待转换结束
zhuanhuan();
ia4421();
n二wei_4;
weL4«
=4;
txdata[4]=weL51wei_4;
if(m==50)
m=0;
UARTJnit();
Pl=Oxfc;
txdata[0]=0x2d;
txdata[1]=0xd4;
txdata[2]=0xfa;
txdata[3]=0x01;
ia442xinit();
spirevtwobyte();
spisendcommond(0x8288);
txregframe();
}
P2=0xff;
P0=table[n];
P2_4=0;
delayls();
P2_4=l;
P0=table[weL5];
P2_5二0;
P2_5二】;
PO二〜0x80;
P2_6二0;
delayls();
P2_6二1;
PO二〜0x39;
P2_7二0;
delaylsf);
P2_7二1;
voidzhuonhuan()
aa=shuju;
wei_l=aa/100000;
weL2=aa/l0000%】0;
weL3=aa/l000%100%】0;
wei_4二qq/100%1000%100%10;
weL5=aa/10%10000%l000%100%10;
weL6=aa/l%100000%10000%!
000%100%10;
〃二二二二二二二二18b20程序二二二二二二二二二二二二二二二二二
voiddelay_18B20(uintseconds)〃延时
for(;
seconds>
seconds-);
******18b20voidow.reset(void)
ucharpresenee;
DQ=0;
//pullDQlinelow
delay.l8B20(44);
〃至少480微秒tleaveitlowfor501usDQ二1;
//allowlinetoreturnhigh?
deloy_18B20(3);
//waitforpresencel8b2036us
presenee=DQ;
//getpresencesignaldelciy_18B20(12);
//waitforendoftimeslot}
〃二二二二二二二二二从总线上读取—个字节二=二二=二uintread^bytefvoid){
uchari;
for(i二8;
i>
i—)
value»
=l;
//pullDQlowtostarttimeslot_nop_();
_nop_();
_nop_()
;
』op」);
DQ二1;
//thenreturnhigh
if(DQ){
value|=0x80;
delay.l8B20(4);
//waitforrestoftimeslot
)
return(value);
//===========向18B20写一个字节二二二=======
voidwrite_byte(charval)
ucharij;
for(i=&
i>
i-)//writesbyte,onebitatatime
DQ二0;
//pullDQlowtostarttimeslot
j++;
/*延时4us*/
DQ=val&
OxOl;
delay_18B20(8);
//holdvalueforremainderoftimeslot
DQ=1;
val»
〃二二二二二二二二二二二二读取温度二二二二二二二二二二二二
voidRead_Temperature(void)
intk,i;
inttemple;
广存放读取的温度值将其除以16即为得到的值*/ow_reset();
k++;
〃延时4us
write_byte(OxCC);
//Sk_nop_();
ipROM
write_byte(OxBE);
//readregister
〃延时8us
temp[0]=read_byte();
〃读取低字节
temp[1]=read_byte();
〃读取高字节
//iff!
(temp[0]&
0x80))/*当低位寄存器第八位为0时*/i=temp[l];
i<
<
二&
/*把b放到高八位上去
i|=temp[0];
/*将。
放到底八位上去*/
i&
二0x07ff;
iff(temp[l]&
0x08))
temple二〜i