[5]求是科技.8051系列单片机C程序设计完全手册[M].北京:人民邮电出版社,2006.
[6]杨欣,王玉凤,刘湘黔.电子设计从零开始[M].北京:清华大学出版社2005.
附录:源程序
//*************************send message**************************//
#include \#include \
#define uchar unsigned char #define uint unsigned char typedef unsigned char BYTE; typedef unsigned int WORD; uchar code
str1[]={0x28,0xA6,0x4A,0x0E,0x05,0x00,0x00,0x84};//ROM 1
uchar code
str2[]={0x28,0xA5,0x86,0x40,0x04,0x00,0x00,0x80};//ROM 2
sbit D1=P3^7; sbit DQ=P3^3;
/*Define ISP/IAP/EEPROM command*/
#define CMD_IDLE 0 //Stand-By #define CMD_READ 1 //Byte-Read #define CMD_PROGRAM 2 //Byte-Program #define CMD_ERASE 3 //Sector-Erase
/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/ #define ENABLE_IAP 0x80 //if SYSCLK<30MHz
sfr ADC_DATA = 0XBD; sfr ADC_LOW = 0XBE; sbit CS=P2^0; sbit SCLK=P2^1; sbit DIN=P2^2; sbit left = P1^0; double j; ucharflag,t;
void Delay(BYTE n); voidIapIdle();
BYTE IapReadByte(WORD addr);
voidIapProgramByte(WORD addr, BYTE dat); voidIapEraseSector(WORD addr); uchartvalue;//温度值
13
void Delay999ms() //@30.000MHz {
unsigned char i, j, k;
_nop_(); _nop_(); i = 114; j = 226; k = 60; do {
do {
while (--k); } while (--j); } while (--i); }
/******************************ds1820 *********************/ void Delay1us() //@30.000MHz {
unsigned char i;
i = 5;
while (--i); }
void Delay10us() //@30.000MHz {
unsigned char i;
_nop_(); _nop_(); i = 72;
while (--i); }
void Delay48us() //@30.000MHz {
unsigned char i, j;
i = 2; j = 99; do {
14
while (--j); } while (--i); }
void Delay700us() //@30.000MHz {
unsigned char i, j;
i = 21; j = 106; do {
while (--j); } while (--i); }
void Delay1ms() //@30.000MHz {
unsigned char i, j;
i = 30; j = 43; do {
while (--j); } while (--i); }
void rst_Ds18b20() {
DQ=1;
Delay1us(); DQ=0;
Delay700us();//延迟700us DQ=1;
Delay1ms(); }
void writeDs18b20(uchar date)//写数据 {
uchari; DQ=1;
Delay1us();
for (i=0;i<8;i++) {
DQ=0;
15
Delay10us(); DQ=date&0x01; Delay48us(); DQ=1;
date>>=1; Delay1us(); } }
uchar readDs18b20() //读数据 {
uchari,date; DQ=1; _nop_();
for(i=0;i<8;i++) {
DQ=0;
Delay10us(); DQ=1;
Delay1us(); Delay1us(); date>>=1; if(DQ==1)
date=date+0x80; Delay48us(); }
return date; }
void MatchromDs18b20(uchar a) //匹配ROM {
char j;
writeDs18b20(0x55); //发送匹配ROM命令 if(a==1) {
for(j=0;j<8;j++)
writeDs18b20(str1[j]); //发送18B20的序列号,先发送低字节
}
if(a==2) {
for(j=0;j<8;j++)
writeDs18b20(str2[j]); //发送18B20的序列号,先发送低字节
}
16
相关推荐: