#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;i0) 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][i]); 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][i]); 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[i]=16; } else { for(i=2;i<5;i++) { Digit[i] = 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[i]=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_(); }}(綜合電子論壇) |