--------------------- ----- main.c -------- --------------------- #include "global.h" #include "DS1620.h" #include "lcd.h" #include "timer.h" #include "interrupt.h" void AusgabeTemp(); const char text0[] = " Test M16C62 Board"; void main() { iclr(); InitInterrupt(); Initlcd(); InitTimer(); iset(); lcd_print(text0,0,10); StartTA0(); { char buf[20]; sprintf(buf,"%d",ReadConfig()); lcd_print(buf,0,1); } StartTemp(); while(1) { if(time>2000) { AusgabeTemp(); time=0; } } } void AusgabeTemp() { char buf[50]; float temp; temp=(float)GetTemp(); temp/=2; sprintf(buf,"Temperatur: %.1f ",temp); // timing=0; // StartTA1(); lcd_print(buf,0,0); // StopTA1(); } -------------------- ---- DS1620.c ------ -------------------- #include "global.h" #include "DS1620.h" void SetTempH(char temp) { RST=1; Put1620byte(0x01); Write1620byte(temp); RST=0; } void SetTempL(char temp) { RST=1; Put1620byte(0x02); Write1620byte(temp); RST=0; } char GetTempH() { char temp; RST=1; Put1620byte(0xA1); temp=Read1620byte(); RST=0; return temp; } char GetTempL() { char temp; RST=1; Put1620byte(0xA2); temp=Read1620byte(); RST=0; return temp; } char GetTemp() { char temp; RST=1; Put1620byte(0xAA); temp=Read1620byte(); RST=0; return temp; } void StartTemp() { RST=1; Put1620byte(0xEE); RST=0; } void StopTemp() { RST=1; Put1620byte(0x22); RST=0; } void WriteConfig(char conf) { RST=1; Put1620byte(0x0C); Put1620byte(conf); RST=0; } char ReadConfig() { char conf; RST=1; Put1620byte(0xAC); conf=Get1620byte(); RST=0; return conf; } /*----------------------------------------------------------------------*/ /* Get temp from DS1620 */ /*----------------------------------------------------------------------*/ char Get1620byte() { unsigned char j,k=0,b=1; k=0; b=1; for (j=0; j<8; j++) { CLK=0; asm ("NOP"); asm ("NOP"); if (DQ) k|=b; /* Read bit and or if = 1 */ asm ("NOP"); asm ("NOP"); CLK=1; b=(b<<1); /* Setup for next read and or */ } return k; } /*----------------------------------------------------------------------*/ /* Put temp from DS1620 */ /*----------------------------------------------------------------------*/ void Put1620byte(char m) { unsigned char k,b=1; pd10_1=0xff; RST=1; for (k=0; k<8; k++) { CLK=0; asm ("NOP"); asm ("NOP"); DQ = (m & b); /* Send bit to 1620 */ asm ("NOP"); asm ("NOP"); CLK=1; b=(b<<1); /* Setup to send next bit */ } pd10_1=0x00; return; } /*----------------------------------------------------------------------*/ /* read temp from DS1620 */ /*----------------------------------------------------------------------*/ char Read1620byte() { unsigned char j,k=0,b=1; k=0; b=1; for (j=0; j<10; j++) { CLK=0; asm ("NOP"); asm ("NOP"); if (DQ) k|=b; /* Read bit and or if = 1 */ asm ("NOP"); asm ("NOP"); CLK=1; b=(b<<1); /* Setup for next read and or */ } return k; } /*----------------------------------------------------------------------*/ /* write temp from DS1620 */ /*----------------------------------------------------------------------*/ void Write1620byte(char m) { unsigned char k,b=1; pd10_1=0xff; RST=1; for (k=0; k<10; k++) { CLK=0; asm ("NOP"); asm ("NOP"); DQ = (m & b); /* Send bit to 1620 */ asm ("NOP"); asm ("NOP"); CLK=1; b=(b<<1); /* Setup to send next bit */ } pd10_1=0x00; return; } ----------------------- ----- DS1620.h -------- ----------------------- #ifndef _DS1620_H #define _DS1620_H #define DQ p10_1 #define CLK p10_3 #define RST p10_5 char Get1620byte(); void Put1620byte(char m); char Read1620byte(); void Write1620byte(char m); char ReadConfig(); void WriteConfig(char conf); void StartTemp(); void StartTemp(); char GetTemp(); char GetTempL(); char GetTempH(); void SetTempL(char temp); void SetTempH(char temp); #endif