|
#include "reg51.h" #include "INTRINS.H" #include "LCD.h"
#define CLR_RI (RI=0) #define CLR_TI (TI=0) unsigned char code ID[2][8]={ 0x28,0x1D,0x25,0x1D,0x00,0x00,0x00,0x80, 0x28,0x0e,0x9e,0x1c,0x00,0x00,0x00,0x32}; unsigned char currSensorNo=0;
sbit TMDAT = P1^7; sbit RUN_LED = P1^6;
/*------------------------------------------------ * *------------------------------------------------*/ void serial_initial() { TMOD=0X20; SCON=0X50; PCON=0X00; TL1=TH1=0XE8; TR1=1; }
/*------------------------------------------------ * *------------------------------------------------*/ void send(unsigned char count,unsigned char SEND_Buf[]) { unsigned char i; for(i=0;i<count;i++) { SBUF=SEND_Buf; while(!TI); CLR_TI; } }
/*---------------------------------------------------- * delay N ms *----------------------------------------------------*/ void Delay_ms (unsigned int Nms ) { unsigned char i; while(Nms--) for(i=0; i<125; i++) ; }
/*---------------------------------------------------- * delay N count *----------------------------------------------------*/ void Delay_Count (unsigned char Count ) { while(Count>0) Count--; }
/*---------------------------------------------------- * start Reset Pulse ----------------------------------------------------*/ void tmreset(void) { TMDAT=0; Delay_Count(103);
TMDAT=1; Delay_Count(4); }
/*---------------------------------------------------- * ACK *----------------------------------------------------*/ void tmpre(void) { while(TMDAT); while(~TMDAT); Delay_Count(4); }
/*---------------------------------------------------- * Read a bit from 1820 *----------------------------------------------------*/ bit tmrbit(void) { int i=0; bit dat; TMDAT=0;i++; TMDAT=1;i++;i++; dat = TMDAT; Delay_Count(8); return dat; }
/*---------------------------------------------------- * Read a byte from 1820 *----------------------------------------------------*/ unsigned char tmrbyte(void) { unsigned char i,j,dat=0;
for(i=1;i<=8;i++) { j=tmrbit(); dat=(j<<7)|(dat>>1); } return dat; }
/*---------------------------------------------------- * Read a byte from 1820 *----------------------------------------------------*/ void tmwbyte(unsigned char dat) { signed char i=0; unsigned char j; bit testb;
for(j=1;j<=8;j++) { testb=dat & 0x01; dat = dat>>1; if(testb) { TMDAT=0; i++;i++; TMDAT=1; Delay_Count(8); } else { TMDAT=0; Delay_Count(8); TMDAT=1; i++;i++; } } }
/*---------------------------------------------------- * send convert command to 1820 *----------------------------------------------------*/ void tmstart(void) { unsigned char i; tmreset(); tmpre(); Delay_ms(1); /* tmwbyte(0xcc);*/ tmwbyte(0x55); for(i=0;i<8;i++) tmwbyte(ID[currSensorNo]); tmwbyte(0x44); }
/*---------------------------------------------------- * Read tempreature from 1820 *----------------------------------------------------*/ unsigned int tmrtemp_all(void) { unsigned char a,b; unsigned int y3; unsigned char i;
tmreset(); tmpre(); Delay_ms(1); /*tmwbyte(0xcc);*/ tmwbyte(0x55); for(i=0;i<8;i++) tmwbyte(ID[currSensorNo]); tmwbyte(0xbe); a = tmrbyte(); b = tmrbyte(); y3 = ((unsigned int)b) << 8;
return ((y3+a) & 0x7ff) ; }
/*---------------------------------------------------- * Start Test tempreature, All * *----------------------------------------------------*/ void Display_AllTemp(void ) { unsigned int last; unsigned char i,Dot;
RUN_LED=0; Part=0; LED_DISPLAY(); Delay_ms(1);
tmstart();
Delay_ms(800); last=tmrtemp_all(); RUN_LED=1;
Dot= (last & 0x0f)*6.25 ; Digit[0]= Dot%10; Digit[1]=Dot/10;
last=(last>>4) & 0x7f ; if( (last == 0x7f) ) // erro { for(i=0;i<5;i++) Digit=16; } else { for(i=2;i<5;i++) { Digit = last %10; last = last/10; } if(Digit[4]==0)Digit[4]=17; Part=1; } Digit[5]=currSensorNo;
LED_DISPLAY();
}
/*---------------------------------------------------- * *----------------------------------------------------*/ /* void Read_Id() { unsigned char i,id[8]; tmreset(); tmpre(); Delay_ms(1); tmwbyte(0x33);
for(i=0;i<8;i++) id=tmrbyte(); send(8,id); }*/
/*---------------------------------------------------- * * Main *----------------------------------------------------*/ void main(void) { unsigned char id[8]={1,2,3,4,5,6,7,8};
serial_initial(); send(8,id); for(;;) { RUN_LED=!RUN_LED; /* Read_Id();*/ TX_C =!TX_C ; currSensorNo=(currSensorNo==1)?0:1; Display_AllTemp(); /*Change();*/ send(6,Digit); Delay_ms(1000); _nop_(); } } 參考鏈接:http://www.picavr.com/news/2008-05/5301.htm |