/*串口初始化,比特率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;
}
}
}
} |