⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1820.c

📁 基于C51的通用人机界面程序
💻 C
字号:
#define _buzzer_ 
#include "general.h"
#include "state.h"
#include "delay.h"


extern uchar temrom[9];

//f=11.0592M,  _nop_()  1.085us
//8*12/11.0592=8.68us
/*void delay1(uchar i){
	//while(i)i--;
	for(;i>0;i--);//8*1.085
}*/

bit reset(void){
	uchar data temp;
    DQ=0;
    for(temp=0;temp<150;temp++);	//500us(>=480us)
    DQ=1;
    for(temp=0;temp<15;temp++);		//90us
    if(DQ){//无存在脉冲
		Index=31;
        return(0);					//总线上无传感器
	}
    for(temp=0;temp<114;temp++);	//延时 500us
		return(1);					//存在
	
}
//从总线上读入1位,返回总线01值
bit readbit(){
    uchar data temp;
    DQ=0;//拉低总线产生时间片并保持至少1us,数据15us后到来(13.8个nop)
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    DQ=1;
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us
    _nop_ ();//1.085us-13
    if(DQ){//读到1
        for(temp=0;temp<10;temp++);//剩余延时45us
        return(1);
    }
    else{//读到0
        for(temp=0;temp<10;temp++);//剩余延时45us
        return(0);
    }
}

//往总线上写入0或写入1
void writebit(bit wbit){
    uchar data temp;
    DQ=0;
    if(wbit){//写1
        _nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();//1.085*5
        _nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();
		_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();
        //传感器将在15~60us采样       
        DQ=1;
        for(temp=0;temp<20;temp++);//60us持续期
    }
    else{//写0
        for(temp=0;temp<20;temp++);//60us持续期
        DQ=1;    
    }
}

uchar readchar(void){//读一个字节
	uchar data temp,j;
    temp=0;
    for(j=0;j<8;j++){
        temp/=2;			//>>
        if(readbit()) temp+=0x80;
		_nop_();
		_nop_();
		_nop_();
		_nop_();//恢复时间
    }
    return(temp);
}


void writechar(uchar ch){//写一个字节
	uchar data j;
    for(j=0;j<8;j++)
    {
        if(ch&0x01)
            writebit(1);
        else
            writebit(0);
        ch/=2;				//>>
    }

}
void readtemp(void){
	//uint tem;
    //union{	uchar c[2];	//整数
  	//		int x;		//小数
  	//}temp;
	reset();
  	writechar(0xCC); 				//Skip ROM
  	writechar(0x44); 				// Start Conversion	
	
	delay(2000);	

  	reset();
  	writechar(0xCC); 				// Skip ROM
  	writechar(0xBE); 				// Read Scratch Pad

  	temrom[0]=readchar();_nop_();	//lsd低8位
 	temrom[1]=readchar();_nop_();   //msd高8位
	//temrom[2]=readchar();_nop_();
	//temrom[3]=readchar();_nop_();
	//temrom[4]=readchar();_nop_();
	//temrom[5]=readchar();_nop_();
	//temrom[6]=readchar();_nop_();
	//temrom[7]=readchar();_nop_();
	//temrom[8]=readchar();_nop_();
 	
  	//tem=temrom[1];
    //tem=tem*256;
    //tem+=temrom[0];


    /*tem=0.0;       
        if(temp.x & 0x01) tem+=0.0625;		temp.x>>=1;
        if(temp.x & 0x01) tem+=0.125;		temp.x>>=1;
        if(temp.x & 0x01) tem+=0.25;		temp.x>>=1;
        if(temp.x & 0x01) tem+=0.5;			temp.x>>=1;
        tem+=temp.x;
	*/

    //return tem;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -