stc15系列单片机读取单个ds18b20数据,晶振24Mhz

这段代码展示了如何在基于stc15系列24Mhz晶振的单片机上,稳定地读取ds18b20温度传感器的数据。通过初始化、启动温度转换、数据读取等步骤,实现温度值的获取并显示。
摘要由CSDN通过智能技术生成

这段代码不是很稳定,有时凑巧了能用


#include <STC15F2K60S2.H>




#include "intrins.h"


#define u8 unsigned char
#define u16 unsigned int




typedef unsigned char BYTE;
typedef unsigned int WORD;


#define FOSC 24000000L          //系统频率
#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   //定义校验位




#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7




sbit DQ = P4^2;
//********************
bit new_data;
//*******************




bit busy;


void SendData(BYTE dat);
void SendString(char *s);


//---------函数声明-------------------------------------------------
u16 get_temp();//获取温度值
void start_temp();//启动温度转换
void DS18b20_reset();//18B20初始化
void write_byte(u8 num);//向18B20写数据
u8 read_byte();//向18B20读数据
void  delay_ms(u8 ms);
void Delay6us(); //@24.000MHz
void Delay600us() ; //@24.000MHz
void Delay60us(); //@24.000MHz
void Delay30us(); //@24.000MHz
void Delay24us(); //@24.000MHz
void Delay14us(); //@24.000MHz
void Delay3us(); //@24.000MHz
void Delay2us(); //@24.000MHz
void Delay1us(); //@24.000MHz
void main()
{
   unsigned int t_val;
unsigned char t_valH8,t_valL4;
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;



    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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值