stc15系列单片机与ds18b20 晶振24Mhz

该博客分享了一段使用STC15F2K60S2单片机与DS18B20温度传感器的代码,特别强调了时序调整,增强了抗干扰能力。代码中包含了详细的延时函数,适用于不同类型的单片机。通过启动温度转换、初始化和读取温度值的函数,实现了与DS18B20的稳定通信。
摘要由CSDN通过智能技术生成
这个代码的时序调整的比较好,抗干扰能力强
晶振24Mhz
针对ds18b20时序的问题,完美解决,什么单片机都可以参考以下程序,每一部分的延时都很明确
#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 Delay600us() ; //@24.000MHz
void Delay70us(); //@24.000MHz
void Delay64us(); //@24.000MHz
void Delay60us(); //@24.000MHz
void Delay30us(); //@24.000MHz
void Delay24us(); //@24.000MHz
void Delay14us(); //@24.000MHz
void Delay10us(); //@24.000MHz
void Delay9us(); //@24.000MHz
void Delay6us(); //@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;
//*****************

    DS18b20_reset();//DS18b20初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值