#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_(); }} |