毕业论文设计
// DS1820_Delayms(1); DS1820_Delayms(4); DS1820_Writebyte(0xcc); // DS1820_Writebyte(0x55); // for(i=0;i<8;i++)
//DS1820_Writebyte(DS1820_temp[i]); DS1820_Writebyte(0x44); EA=Ea;
return(done_return); }
//读所有传感器
int DS1820_ReadTem(void) {
data unsigned char a,b; data int y3; data float y4; data unsigned char i; EA=0;
DS1820_Reset();
if(DS1820_Answer()==aban_return) { EA=Ea; return(0xffff); }
DS1820_Delayms(4);
DS1820_Writebyte(0xcc); //跳过匹配传感器
//DS1820_Writebyte(0x55); //匹配传感器
第 26 页 共 48 页
毕业论文设计
// for(i=0;i<8;i++)
//DS1820_Writebyte(run_inf.system_index.DS1820_temp[i]);
DS1820_Writebyte(0xbe); //读取温度 for(i=0;i<9;i++) {
run_inf.system_index.DS1820_temp[i]=DS1820_Readbyte(); }
if(CRC(9)!=0) {
EA=1; return(0xffff);
}
//计算CRC
a = run_inf.system_index.DS1820_temp[0]; b = run_inf.system_index.DS1820_temp[1]; DS1820_Reset();
y3 = (b<< 8)|a; y4=y3; y4=(y4*25)/4; EA=1;
return((int)(y4)); }
二、DS1302时钟底层驱动程序
//DS1302引脚定义
第 27 页 共 48 页
毕业论文设计
sbit rtc_sc=P3^4; sbit rtc_io=P3^5; sbit rst_1302=P3^6; bdata unsigned char temp; sbit temp_0 = temp^0; sbit temp_7 = temp^7;
/************************************************************** DS1302驱动程序开始
**************************************************************/ //功能: 往DS1302写入1Byte数据
void v_RTInputByte(unsigned char ucDa) {
unsigned char i; temp = ucDa; for(i=8; i>0; i--) {
rtc_io = temp_0; /*相当于汇编中的 RRC */ rtc_sc = 1; rtc_sc = 0; temp = temp >> 1; } }
//功能: 从DS1302读取1Byte数据 unsigned char uc_RTOutputByte(void) {
unsigned char i; rtc_io=1;
for(i=8; i>0; i--) {
第 28 页 共 48 页
毕业论文设计
temp = temp >>1; /*相当于汇编中的 RRC */ temp_7 = rtc_io;
rtc_sc = 1; rtc_sc = 0; } return(temp); }
//功能: 往DS1302写入数据
void write1302(unsigned char ucAddr,unsigned char ucDa) {
bit ea; ea=EA; EA=0;
rtc_rs_port&=(~rtc_rs_bit); rtc_sc = 0;
rtc_rs_port|=rtc_rs_bit;
v_RTInputByte(ucAddr); /* 地址,命令 */ v_RTInputByte(ucDa); /* 写1Byte数据*/ rtc_sc = 1;
rtc_rs_port&=(~rtc_rs_bit); EA = ea; }
//功能: 读取DS1302某地址的数据
unsigned char read1302(unsigned char ucAddr) {
unsigned char ucDa; bit ea; ea=EA;
第 29 页 共 48 页
毕业论文设计
EA=0;
rtc_rs_port&=(~rtc_rs_bit); rtc_sc = 0;
rtc_rs_port|=rtc_rs_bit;
v_RTInputByte(ucAddr); /* 地址,命令 */ ucDa = uc_RTOutputByte(); /* 读1Byte数据 */ rtc_sc = 1;
rtc_rs_port&=(~rtc_rs_bit); EA = ea; return(ucDa); }
//功能: 设置初始时间
void Set1302(pTime_S time_temp) {
unsigned char i= 0x80;
write1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/ write1302(i,time_temp->sec); i +=2;
write1302(i,time_temp->min); i +=2;
write1302(i,time_temp->hou); i +=2;
write1302(i,time_temp->day); i +=2;
write1302(i,time_temp->mon); i +=2;
write1302(i,0x02); i +=2;
write1302(i,time_temp->yea);
第 30 页 共 48 页