资源简介

此代码详细叙述了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


评论

共有 条评论