File "ds1620.c"
Full Path: /home/analogde/www/68hc11/ds1620.c
File size: 4.32 KB
MIME-type: text/plain
Charset: utf-8
5a0
HTTP/1.1 200 OK
Date: Sat, 18 Jun 2005 20:13:23 GMT
Server: Apache/1.3.26 (Unix) Debian GNU/Linux mod_perl/1.26 mod_ssl/2.8.9 OpenSSL/0.9.6g PHP/4.1.2
Last-Modified: Wed, 08 Jan 2003 19:35:52 GMT
ETag: "15ce60e-fde-3e1c7d98"
Accept-Ranges: bytes
Content-Length: 4062
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/x-csrc
// **********ds1620.c
// Jonathan W. Valvano 1/15/02
// Interface between MC68HC812 and DS1620
// Copyright 2002 by Jonathan W. Valvano, valvano@uts.cc.utexas.edu
// You may use, edit, run or distribute this file
// as long as the above copyright notice remains
// See Valvano, Embedded Microcomputer Systems, Chap 3
// bit status Configuration/Status Register meaning
// 7 DONE 1=Conversion done, 0=conversion in progress
// 6 THF 1=temperature above TH, 0=temperature below TH
// 5 TLF 1=temperature below TL, 0=temperature above TL
// 1 CPU 1=CPU control, 0=stand alone operation
// 0 1SHOT 1=one conversion and stop, 0=continuous conversions
// temperature digital value (binary) digital value (hex)
// +125.0 C 011111010 $0FA
// +64.0 C 010000000 $080
// +1.0 C 000000010 $002
// +0.5 C 000000001 $001
// 0 C 000000000 $000
// -0.5 C 111111111 $1FF
// -16.0 C 111100000 $1E0
// -55.0 C 1100
5a0
10010 $192
// DS1620 MC68HC812A4
// 1 DQ PS5
// 2 CLK PS6
// 3 RST PS7
// 4 GND ground
// 5 TCOM not connected
// 6 TLOW not connected
// 7 THIGH not connected
// 8 Vcc +5 V with bypass cap to ground
void DS1620_Init(void){ // PS7=RST=0
DDRS = 0xE0; // PS6=CLK=1
PORTS = 0x60; // PS5=DQ=1
}
void static out8(char code){ int n;
for(n=0;n<8;n++){
PORTS &= 0xBF; // PS6=CLK=0
if(code&0x01){
PORTS |= 0x20; // PS5=DQ=1
}
else{
PORTS &= 0xDF; // PS5=DQ=0
}
PORTS |= 0x40; // PS6=CLK=1
code = code>>1;
}
}
void DS1620_Start(void){
PORTS |= 0x80; // PS7=RST=1
out8(0xEE);
PORTS &= 0x7F; // PS7=RST=0
}
void DS1620_Stop(void){
PORTS |= 0x80; // PS7=RST=1
out8(0x22);
PORTS &= 0x7F; // PS7=RST=0
}
void DS1620_WriteConfig(char data){
PORTS |= 0x80; // PS7=RST=1
out8(0x0C);
out8(data);
PORTS &= 0x7F; // PS7=RST=0
}
void static out9(int code){ int n;
for(n=0;n<9;n++){
PORTS &= 0xBF; // PS6=CLK=0
if(code&0x01){
PORTS |= 0x20; // PS5=DQ=1
}
else{
PORTS &= 0xDF; // PS5=DQ=0
}
PORTS |= 0x40; // PS6=CLK=1
code = code>>1;
}
}
void DS1620_WriteTH(int data){
PORTS |= 0x80; // PS7=RST=1
out8(0x01);
out9(data);
PORTS &= 0x7F; // PS7=RST=0
}
void DS1620_WriteTL(int data){
PORTS |= 0x80; // P
49e
S7=RST=1
out8(0x02);
out9(data);
PORTS &= 0x7F; // PS7=RST=0
}
unsigned char static in8(void){ int n;
unsigned int result=0;
DDRS &= 0xDF; // PS5=DQ input
for(n=0;n<8;n++){
PORTS &= 0xBF; // PS6=CLK=0
result = result>>1;
if(PORTS&0x20){
result |= 0x80; // PS5=DQ=1
}
PORTS |= 0x40; // PS6=CLK=1
}
DDRS |= 0x20; // PS5=DQ output
return result;
}
unsigned char DS1620_ReadConfig(void){
unsigned char value;
PORTS |= 0x80; // PS7=RST=1
out8(0xAC);
value = in8();
PORTS &= 0x7F; // PS7=RST=0
return value;
}
unsigned int static in9(void){ int n;
unsigned int result=0;
DDRS &= 0xDF; // PS5=DQ input
for(n=0;n<9;n++){
PORTS &= 0xBF; // PS6=CLK=0
result = result>>1;
if(PORTS&0x20){
result |= 0x0100; // PS5=DQ=1
}
PORTS |= 0x40; // PS6=CLK=1
}
DDRS |= 0x20; // PS5=DQ output
if(result&0x0100){
result |= 0xFE00;
}
return result;
}
unsigned int DS1620_ReadTH(void){
unsigned int value;
PORTS |= 0x80; // PS7=RST=1
out8(0xA1);
value = in9();
PORTS &= 0x7F; // PS7=RST=0
return value;
}
0
unsigned int DS1620_ReadTL(void){
unsigned int value;
PORTS |= 0x80; // PS7=RST=1
out8(0xA2);
value = in9();
PORTS &= 0x7F; // PS7=RST=0
return value;
}
unsigned int DS1620_ReadT(void){
unsigned int value;
PORTS |= 0x80; // PS7=RST=1
out8(0xAA);
value = in9();
PORTS &= 0x7F; // PS7=RST=0
return value;
}