资源简介
51单片机的串口采集温度程序,采用18b20温度传感器,并通过串口传送给单片机,单片机同时课余上位机通信,将采集道德数据发送给上位机
代码片段和文件信息
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^0;
uint htemp;
bit flag;
uchar code dian_table[16]={0x000x010x010x020x030x030x040x04
0x050x060x060x070x080x080x090x09}; //温度小数部分用查表法
uchar data temp_data[2]={0x000x00}; //读出温度暂放
uchar data display[5]={0x000x000x000x000x00};
//显示单元数据,共4个数据和一个运算暂用
uchar idata temp_display[]={0x300x310x320x330x34
0x350x360x370x380x39};
void init() //串口初始化
{
SCON= 0x50; //串口方式1 允许接收
PCON=0; //SMOD=0
TMOD= 0x20; //定时器1定时方式2
TH1= 0xf3; //12MHz 2400波特率
TL1= 0xf3;
TR1= 1;
EA = 1;
ES = 1;
}
//---------------------------------------------------------------
//串口发送函数
//---------------------------------------------------------------
/*void serial_send(unsigned char ch) //串口发送函数
{
TI=0;
SBUF=ch;
while(TI== 0); //等待发送完成
}*/
void delay(uint t) //11us延时函数
{
for (;t>0;t--);
}
void ow_reset(void) //DS18B20复位函数
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;
delay(50); //550 us
DQ=1;
delay(6); //66 us
presence=DQ; //presence=0 复位成功继续下一步
}
delay(45); //延时500 us
presence=~DQ;
}
DQ=1; //拉高电平
}
void write_byte(uchar val) //DS18B20写命令函数
{
uchar i;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_(); //从高拉倒低
DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us
DQ=val&0x01; //最低位移出
delay(6); //66 us
val=val/2; //右移1位
}
DQ=1;
delay(1);
}
uchar read_byte(void) //DS18B20读1字节函数
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us
DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us
if(DQ)value|=0x80;
delay(6); //66 us
}
DQ=1;
return(value);
}
read_temp() //读出温度函数
{
ow_reset(); //总线复位
delay(200);
write_byte(0xcc); //发命令
write_byte(0x44); //发转换命令
ow_reset();
delay(1);
write_byte(0xcc); //发命令
write_byte(0xbe);
temp_data[0]=read_byte(); //读温度值的低字节
temp_data[1]=read_byte(); //读温度值的高字节
temp=temp_data[1];
temp<<=8;
temp=temp|temp_data[0]; // 两字节合成一个整型变量。
return temp; //返回温度值
}
void work_temp(uint tem) //温度数据处理函数
{
uchar n=0;
if(tem>6348) // 温度值正负判断
{
tem=65536-tem;
n=1;
} // 负温度求补码标志位置1
disp
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-08-08 18:07 程序1-温度采集串口\
文件 6376 2005-03-22 15:22 程序1-温度采集串口\STARTUP.A51
文件 14063 2011-06-12 12:50 程序1-温度采集串口\STARTUP.LST
文件 758 2011-06-12 12:50 程序1-温度采集串口\STARTUP.OBJ
文件 17735 2009-12-23 20:43 程序1-温度采集串口\STC12C5A60S2.h
文件 55311 2010-09-09 11:10 程序1-温度采集串口\TEMP.bak
文件 57597 2011-06-12 12:55 程序1-温度采集串口\TEMP.uvopt
文件 13403 2010-09-08 22:33 程序1-温度采集串口\TEMP.uvproj
文件 57587 2011-06-06 15:03 程序1-温度采集串口\TEMP_uvopt.bak
文件 8929 2011-06-12 12:50 程序1-温度采集串口\TEST
文件 4506 2011-06-12 12:50 程序1-温度采集串口\TEST.c
文件 1901 2011-06-12 12:50 程序1-温度采集串口\TEST.hex
文件 56 2011-06-12 12:50 程序1-温度采集串口\TEST.lnp
文件 9563 2011-06-12 12:50 程序1-温度采集串口\TEST.LST
文件 13610 2011-06-12 12:50 程序1-温度采集串口\TEST.M51
文件 9522 2011-06-12 12:50 程序1-温度采集串口\TEST.OBJ
文件 1186 2011-06-12 12:55 程序1-温度采集串口\TEST.plg
文件 56791 2010-09-08 22:33 程序1-温度采集串口\TEST.uvopt
文件 60635 2010-09-08 22:12 程序1-温度采集串口\TEST_uvopt.bak
文件 13901 2009-12-14 15:03 程序1-温度采集串口\TEST_uvproj.bak
文件 17527 2009-11-09 12:28 程序1-温度采集串口\wav.out
文件 324526 2010-05-06 16:41 程序1-温度采集串口\wav_.h
- 上一篇:网站域名ICP备案主体与商户号主体不一致微信支付授权书
- 下一篇:小程序微信支付后台
评论
共有 条评论