资源简介
此代码详细叙述了DS18B20的单总线的序列号读取方式来读取温度值,处理器是单片机,应用数量更少的io资源
代码片段和文件信息
#include “reg51.h“
#include “intrins.h“
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 11059200L //系统频率
#define BAUD 9600 //串口波特率
#define NONE_PARITY 0 //无校验
#define ODD_PARITY 1 //奇校验
#define EVEN_PARITY 2 //偶校验
#define MARK_PARITY 3 //标记校验
#define SPACE_PARITY 4 //空白校验
#define PARITYBIT EVEN_PARITY //定义校验位
sfr AUXR = 0x8e; //辅助寄存器
sfr T2H = 0xd6; //定时器2高8位
sfr T2L = 0xd7; //定时器2低8位
sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
sbit P22 = P2^2;
bit busy;
void uartInit();
void SendData(BYTE dat);
//void SendString(char *s);
void Delay500ms(); //@11.0592MHz的软件延时
extern void Get_Temp(); //调用外部温度函数
/*==================================*/
/**********主函数***************/
/*========================================*/
void main()
{
uartInit();
while(1)
{
Get_Temp();
Delay500ms();
Delay500ms();
}
}
/*============================
串口初始化
=============================*/
void uartInit()
{
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD P3.1/TxD)
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50; //8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda; //9位可变波特率校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2; //9位可变波特率校验位初始为0
#endif
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
ES = 1; //使能串口1中断
EA = 1;
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0; //清除RI位
P0 = SBUF; //P0显示串口数据
P22 = RB8; //P2.2显示校验位
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0; //设置校验位为0
#endif
}
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
/*----------------------------
发送字符串
----------------------------
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4226 2014-10-05 12:53 所有传感器匹配ROM温度读数\DS18.C
文件 8104 2014-10-05 12:53 所有传感器匹配ROM温度读数\DS18.LST
文件 5943 2014-10-05 12:53 所有传感器匹配ROM温度读数\DS18.OBJ
文件 6376 2009-05-07 14:37 所有传感器匹配ROM温度读数\STARTUP.A51
文件 14058 2014-10-05 12:53 所有传感器匹配ROM温度读数\STARTUP.LST
文件 749 2014-10-05 12:53 所有传感器匹配ROM温度读数\STARTUP.OBJ
文件 3702 2014-10-05 09:35 所有传感器匹配ROM温度读数\匹配ROM读取温度.c
文件 7009 2014-10-05 12:53 所有传感器匹配ROM温度读数\匹配ROM读取温度.LST
文件 5752 2014-10-05 12:53 所有传感器匹配ROM温度读数\匹配ROM读取温度.OBJ
文件 11029 2014-10-05 12:53 所有传感器匹配ROM温度读数\序列号
文件 1949 2014-10-05 12:53 所有传感器匹配ROM温度读数\序列号.hex
文件 67 2014-10-05 12:53 所有传感器匹配ROM温度读数\序列号.lnp
文件 14091 2014-10-05 12:53 所有传感器匹配ROM温度读数\序列号.M51
文件 893 2014-10-05 13:24 所有传感器匹配ROM温度读数\序列号.plg
....... 56323 2014-10-05 13:24 所有传感器匹配ROM温度读数\序列号.uvopt
文件 13597 2014-09-30 19:11 所有传感器匹配ROM温度读数\序列号.uvproj
....... 56321 2014-10-05 13:21 所有传感器匹配ROM温度读数\序列号_uvopt.bak
文件 13235 2014-09-29 10:02 所有传感器匹配ROM温度读数\序列号_uvproj.bak
目录 0 2014-10-05 13:24 所有传感器匹配ROM温度读数
----------- --------- ---------- ----- ----
223424 19
- 上一篇:一维二维插值c代码
- 下一篇:基于systemview的QAM调制解调仿真
相关资源
- 模拟硬盘物理序列号
- 实现了匹配机制同时可以进行数据交
- DS18B20介绍、程序流程图和程序源代码
- STM32 DS18b20
- 基于mini2440+linux下的ds18b20驱动,
- 串的基本操作定长顺序存储表示:初
- 用51单片机驱动DS1302时间模块+DS18B20温
- 430的读取DS18B20并在1602液晶上显示
- 1602电子时钟万年历isis仿真文件,程序
- 匹配滤波器Verilog代码
- 三菱OPC服务软件序列号
- DS18B20温度控制风扇 原理图及源代码
- 使用定时中断方式与ds18b20通信
- 微弱光信号前置放大,滤波电路及匹
- 根据电脑硬件信息生成唯一的序列号
- 地图匹配算法的研究与实现
- Opencv打开电脑自带USB摄像头并调用模
- ds18b20测温程序
- DS18B20关于search rom指令的使用
- VMware Workstation 8.0.0... 有效激活密钥
- verilog的ds18b20代码
- 易语言括号匹配算法源码
- VS2008试用版升级正式版工具 CrackVS20
- surfer12v12.2.705汉化特别版(附注册机汉
- 基于DSP和DS18B20的矿用电缆温度监控系
- CEdit控件重写类CEditList,输入自动提示
- Smith Chart 4.1史密斯圆图4.1最新版
- 基于AT89C51单片机的温度测控系统设计
- 温度传感器DS18B20 PROTEUS仿真+源程
- Flash2008+序列号
评论
共有 条评论