/*串口初始化,比特率9600*/
void UART_Init()
{
SM0 = 0;
SM1 = 1;//串口工作方式1,8位UART波特率可变
TR1 = 1;//启动定时器1
TMOD |= 0x20;//定时器1,工作模式2 8位自动重装
TH1 = 0xfd;
TL1 = 0xfd;//设置比特率9600
}
void Timer0Init() //50毫秒@11.0592MHz
{
TMOD &= 0xf0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void main()
{
uint i,j;
uchar L, M;
UART_Init(); //串口初始化
TI = 1;//使用printf()puts()前都应软件置位TI = 1;
ds_init();//初始化DS18B20
write_byte(0xcc);//发送跳跃ROM指令
write_byte(0x44);//发送温度转换指令
Delay_Ms(1000);
Timer0Init(); //定时器初始化
while(1)
{
ds_init();//初始化DS18B20
write_byte(0xcc);//发送跳跃ROM指令
write_byte(0x44);//发送温度转换指令
ds_init();//初始化DS18B20
write_byte(0xcc);//发送跳跃ROM指令
write_byte(0xbe);//读取DS18B20暂存器值
L = read_byte();
M = read_byte();
i = M;
x[0]=M;
x[1]=L;
i <<= 8;
i |= L;
i = i * 0.625 + 0.5;
Display(i); //数码管显像
if(TF0)
{
TF0 = 0;
j++;
if(j>=600)//30秒定时发送
{
j=0;
SBUF=(M<<4)|(L>>4);//保留整数,舍弃小数。
while(!TI);
TI=0;
}
}
}
} |