资源简介
此代码详细叙述了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调制解调仿真
相关资源
- 根据硬件ID和程序ID生成注册码
- 单片机与温度传感器DS18B20的程序设计
- 毕业论文之温度传感器DS18B20(源码
- stm32 ds18b20 温度传感器 测试通过
- DISKID硬盘序列号查看器
- 51单片机读取温度数据存储到SD卡中并
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- DS18B20分布式多点测温的Proteus仿真
- 单片机 DS18B20 温度控制系统
- 课程设计蔬菜大棚自动控制系统,包
- 文学研究助手(字符串的查找模式匹
- 字符串括号匹配(c实现)
- Diskhook(模拟硬盘序列号)
- 基于MO实现CAD数据转换为Shape数据后的
- 基于NFC技术控制的电子钱包电路设计
- CuteFTP8.0绿色破解版免安装无需序列号
- 视频处理软件NeroVideo2019v20.0.3001中文特
- IBM System Storage DS3300按中小企业信息价
- 易语言雪悦U盘锁屏源码
- 易语言枚举U盘序列号源码
- 易语言取U盘序列号源码
- 易语言RFC1982序列号算法源码
- 易语言取U盘序列号模块源码
- Delphi Windows7环境获取硬盘序列号(支
- delphi 取硬件序列号(souce)
- 获取电脑硬件的详细信息,与注册有
- diskhook模拟硬盘物理序列号
- ds18b20温度传感是什么传感器
- VMware vSphere 全系列序列号
- 增程式电动车动力系统参数匹配及仿
评论
共有 条评论