📄 ds18b2~1.c
字号:
#include <reg1210.h>
//#include<reg51.h>
#include <intrins.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
extern void autobaud(void);
#define CLR_RI (RI=0)
#define CLR_TI (TI=0)
sbit TMDAT=P2^0;
/*----------------------------------------------------
* 整型转换成字符型子程序
*----------------------------------------------------*/
unsigned inttochar(unsigned int int1)
{
unsigned char ch1;
switch(int1)
{
case(0):ch1='0';break;
case(1):ch1='1';break;
case(2):ch1='2';break;
case(3):ch1='3';break;
case(4):ch1='4';break;
case(5):ch1='5';break;
case(6):ch1='6';break;
case(7):ch1='7';break;
case(8):ch1='8';break;
case(9):ch1='9';break;
default:break;
}
return(ch1);
}
/*----------------------------------------------------
* 整型转换成浮点型子程序
*----------------------------------------------------*/
float inttofloat(unsigned int int1)
{
float ch1;
switch(int1)
{
case(0):ch1=0;break;
case(1):ch1=1;break;
case(2):ch1=2;break;
case(3):ch1=3;break;
case(4):ch1=4;break;
case(5):ch1=5;break;
case(6):ch1=6;break;
case(7):ch1=7;break;
case(8):ch1=8;break;
case(9):ch1=9;break;
default:break;
}
return(ch1);
}
/*----------------------------------------------------
* delay N count c里的一个while语句相当于汇编里的一个DJNZ语句,即两个机器周期
*----------------------------------------------------*/
void Delay_Count (unsigned char Count ) //延时时间为:(Count*2+5)*0.362 us
{
while(--Count);
}
/*----------------------------------------------------
* HEX->BCD查表程序,整数部分
*----------------------------------------------------*/
unsigned char hextobcd(unsigned char tab)
{
unsigned int tab1;
switch(tab)
{
case(0x00): tab1=0x000; break;
case(0x01): tab1=0x001; break;
case(0x02): tab1=0x002; break;
case(0x03): tab1=0x003; break;
case(0x04): tab1=0x004; break;
case(0x05): tab1=0x005; break;
case(0x06): tab1=0x006; break;
case(0x07): tab1=0x007; break;
case(0x08): tab1=0x008; break;
case(0x09): tab1=0x009; break;
case(0x0A): tab1=0x0A; break;
case(0x0B): tab1=0x0B; break;
case(0x0C): tab1=0x0C; break;
case(0x0D): tab1=0x0D; break;
case(0x0E): tab1=0x0E; break;
case(0x0F): tab1=0x0F; break;
case(0x10): tab1=0x010; break;
case(0x11): tab1=0x011; break;
case(0x12): tab1=0x012; break;
case(0x13): tab1=0x013; break;
case(0x14): tab1=0x014; break;
case(0x15): tab1=0x015; break;
case(0x16): tab1=0x016; break;
case(0x17): tab1=0x017; break;
case(0x18): tab1=0x018; break;
case(0x19): tab1=0x019; break;
case(0x1A): tab1=0x01A; break;
case(0x1B): tab1=0x01B; break;
case(0x1C): tab1=0x01C; break;
case(0x1D): tab1=0x01D; break;
case(0x1E): tab1=0x01E; break;
case(0x1F): tab1=0x01F; break;
case(0x20): tab1=0x020; break;
case(0x21): tab1=0x021; break;
case(0x22): tab1=0x022; break;
case(0x23): tab1=0x023; break;
case(0x24): tab1=0x024; break;
case(0x25): tab1=0x025; break;
case(0x26): tab1=0x026; break;
case(0x27): tab1=0x027; break;
case(0x28): tab1=0x028; break;
default: tab1=0x00;break;
}
return(tab1);
}
/*----------------------------------------------------
* HEX->BCD查表程序,小数部分
*----------------------------------------------------*/
unsigned char hextobcd1(unsigned char tab)
{
unsigned int tab1;
switch(tab)
{
case(0x00): tab1=0x000; break;
case(0x01): tab1=0x001; break;
case(0x02): tab1=0x001; break;
case(0x03): tab1=0x002; break;
case(0x04): tab1=0x003; break;
case(0x05): tab1=0x003; break;
case(0x06): tab1=0x004; break;
case(0x07): tab1=0x004; break;
case(0x08): tab1=0x005; break;
case(0x09): tab1=0x006; break;
case(0x0A): tab1=0x006; break;
case(0x0B): tab1=0x007; break;
case(0x0C): tab1=0x008; break;
case(0x0D): tab1=0x008; break;
case(0x0E): tab1=0x009; break;
case(0x0F): tab1=0x009; break;
default: tab1=0x00;break;
}
return(tab1);
}
/*----------------------------------------------------
* start Reset Pulse
----------------------------------------------------*/
void tmreset(void)
{
TMDAT=0;
Delay_Count(255);
Delay_Count(255);
Delay_Count(255);
Delay_Count(255);
TMDAT=1;
Delay_Count(70);
while(TMDAT);
// printf("已调用完判忙函数3\r\n");
while(~TMDAT);
// printf("已调用完判忙函数2\r\n");
Delay_Count(255);
}
/*----------------------------------------------------
* start Reset Pulse
----------------------------------------------------/
void tmreset()
{
// P0=0xfe;
// FLAG1=0;
TMDAT=1;
Delay_Count(1); //2.5us
TMDAT=0;
Delay_Count(250); //505us
Delay_Count(250); //505us
Delay_Count(250); //505us
TMDAT=1;
Delay_Count(28); //61us
Delay_Count(28); //61us
Delay_Count(28); //61us
while(TMDAT);
// printf("初始化成功\n");
while(~TMDAT);
//printf("初始化成功1\n");
Delay_Count(110); //225us
Delay_Count(110); //225us
Delay_Count(110); //225us
}
/*----------------------------------------------------
* Read a bit from 1820
*----------------------------------------------------*/
bit tmrbit(void)
{
int i=0;
bit dat;
TMDAT=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TMDAT=1;
_nop_();
_nop_();
_nop_();
_nop_();
dat = TMDAT;
Delay_Count(30);
Delay_Count(30);
Delay_Count(30);
Delay_Count(30);
TMDAT=1;
return dat;
}
/*----------------------------------------------------
* Read a byte from 1820
*----------------------------------------------------*/
unsigned char tmrbyte()
{
unsigned char i,j,dat=0;
for(i=1;i<=8;i++)
{
j=tmrbit();
dat=(j<<7)|(dat>>1);
}
return dat;
}
/*----------------------------------------------------
* Write a byte from 1820
*----------------------------------------------------*/
void tmwbyte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
TMDAT=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TMDAT=dat&0x01;
Delay_Count(20);
_nop_();
_nop_();
Delay_Count(20);
_nop_();
_nop_();
Delay_Count(20);
_nop_();
_nop_();
Delay_Count(20);
_nop_();
_nop_();
TMDAT=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
dat>>=1;
}
}
/*----------------------------------------------------
* Main
*----------------------------------------------------*/
unsigned char main1(unsigned char num)
{
unsigned char a,b,a2,b2,i,j,cha[4];
unsigned int w1,w2;
unsigned int da1,da2;
float fa1,fa2,fa3;
//unsigned char chinese4[];
//autobaud();
//while(1)
// {
tmreset();
tmwbyte(0x0CC);
tmwbyte(0x044);
tmreset();
tmwbyte(0x0CC);
tmwbyte(0x0BE);
a=tmrbyte(); //低8位
b=tmrbyte(); //高8位
a2=a&0x0F;
w1=hextobcd1(a2); //小数(整型)
fa1=inttofloat(w1);
printf("%f\n",fa1);
printf("%d\n",w1);
a2=a&0x0F0;
a2=a2>>4;
b2=b&0x00F;
b2=b2<<4;
a2=a2|b2;
w2=hextobcd(a2); //整数
printf("%d\n",w2);
da1=w2/10; //整数部分十位
da2=w2%10; //整数部分个位
cha[0]=inttochar(da1);
cha[1]=inttochar(da2);
cha[2]='.';
cha[3]=inttochar(w1);
cha[4]='\0';
//fa2=atof(cha);
//printf("%f\n",fa2);
fa2=inttofloat(cha[0]);
fa3=inttofloat(cha[1]);
printf("%s\n",cha);
fa3=12.3; //+fa1/10;
//printf("%f\n",fa3);
for(j=1;j<=10;j++)
{
for(i=1;i<=200;i++)
Delay_Count(255);
}
//unsigned char code chinese4[] = {"T"};
// }
if (num==0)
return cha[0];
else if(num==1)
return cha[1];
else if(num==2)
return cha[2];
else if(num==3)
return cha[3];
else if(num==4)
return cha[4];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -