www.pudn.com > DS18B20.rar > DS18b20.i


/***************************************************** 
This program was produced by the 
CodeWizardAVR V1.25.5 Professional 
Automatic Program Generator 
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. 
http://www.hpinfotech.com 
 
Project :  
Version :  
Date    : 2008-1-22 
Author  : sy606                            
Company : sy606                            
Comments:  
 
 
Chip type           : ATmega16 
Program type        : Application 
Clock frequency     : 8.000000 MHz 
Memory model        : Small 
External SRAM size  : 0 
Data Stack size     : 256 
*****************************************************/ 
 // CodeVisionAVR C Compiler 
// (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L. 
 // I/O registers definitions for the ATmega16 
  #pragma used+ 
sfrb TWBR=0; 
sfrb TWSR=1; 
sfrb TWAR=2; 
sfrb TWDR=3; 
sfrb ADCL=4; 
sfrb ADCH=5; 
sfrw ADCW=4;      // 16 bit access 
sfrb ADCSRA=6; 
sfrb ADMUX=7; 
sfrb ACSR=8; 
sfrb UBRRL=9; 
sfrb UCSRB=0xa; 
sfrb UCSRA=0xb; 
sfrb UDR=0xc; 
sfrb SPCR=0xd; 
sfrb SPSR=0xe; 
sfrb SPDR=0xf; 
sfrb PIND=0x10; 
sfrb DDRD=0x11; 
sfrb PORTD=0x12; 
sfrb PINC=0x13; 
sfrb DDRC=0x14; 
sfrb PORTC=0x15; 
sfrb PINB=0x16; 
sfrb DDRB=0x17; 
sfrb PORTB=0x18; 
sfrb PINA=0x19; 
sfrb DDRA=0x1a; 
sfrb PORTA=0x1b; 
sfrb EECR=0x1c; 
sfrb EEDR=0x1d; 
sfrb EEARL=0x1e; 
sfrb EEARH=0x1f; 
sfrw EEAR=0x1e;   // 16 bit access 
sfrb UBRRH=0x20; 
sfrb UCSRC=0X20; 
sfrb WDTCR=0x21; 
sfrb ASSR=0x22; 
sfrb OCR2=0x23; 
sfrb TCNT2=0x24; 
sfrb TCCR2=0x25; 
sfrb ICR1L=0x26; 
sfrb ICR1H=0x27; 
sfrb OCR1BL=0x28; 
sfrb OCR1BH=0x29; 
sfrw OCR1B=0x28;  // 16 bit access 
sfrb OCR1AL=0x2a; 
sfrb OCR1AH=0x2b; 
sfrw OCR1A=0x2a;  // 16 bit access 
sfrb TCNT1L=0x2c; 
sfrb TCNT1H=0x2d; 
sfrw TCNT1=0x2c;  // 16 bit access 
sfrb TCCR1B=0x2e; 
sfrb TCCR1A=0x2f; 
sfrb SFIOR=0x30; 
sfrb OSCCAL=0x31; 
sfrb OCDR=0x31; 
sfrb TCNT0=0x32; 
sfrb TCCR0=0x33; 
sfrb MCUCSR=0x34; 
sfrb MCUCR=0x35; 
sfrb TWCR=0x36; 
sfrb SPMCR=0x37; 
sfrb TIFR=0x38; 
sfrb TIMSK=0x39; 
sfrb GIFR=0x3a; 
sfrb GICR=0x3b; 
sfrb OCR0=0X3c; 
sfrb SPL=0x3d; 
sfrb SPH=0x3e; 
sfrb SREG=0x3f; 
#pragma used- 
 // Interrupt vectors definitions 
  // Needed by the power management functions (sleep.h) 
#asm 
	#ifndef __SLEEP_DEFINED__ 
	#define __SLEEP_DEFINED__ 
	.EQU __se_bit=0x40 
	.EQU __sm_mask=0xB0 
	.EQU __sm_powerdown=0x20 
	.EQU __sm_powersave=0x30 
	.EQU __sm_standby=0xA0 
	.EQU __sm_ext_standby=0xB0 
	.EQU __sm_adc_noise_red=0x10 
	.SET power_ctrl_reg=mcucr 
	#endif 
#endasm 
   // 1 Wire Bus functions 
#asm 
   .equ __w1_port=0x1B ;PORTA 
   .equ __w1_bit=6 
#endasm 
/* 
  CodeVisionAVR C Compiler 
  (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L. 
 
  Prototypes for Dallas Semiconductor 
  1 Wire protocol functions 
 
  BEFORE #include -ING THIS FILE YOU 
  MUST DECLARE THE I/O ADDRESS OF THE 
  DATA REGISTER OF THE PORT AT WHICH 
  THE 1 WIRE BUS IS CONNECTED AND 
  THE DATA BIT USED 
 
  EXAMPLE FOR PORTB: 
 
    #asm 
        .equ __w1_port=0x18 
        .equ __w1_bit=3 
    #endasm 
    #include <1wire.h> 
*/ 
  #pragma used+ 
unsigned char w1_init(void); 
unsigned char w1_read(void); 
unsigned char w1_write(unsigned char data); 
unsigned char w1_search(unsigned char cmd,void *p); 
unsigned char w1_dow_crc8(void *p,unsigned char n); 
#pragma used- 
   // DS1820 Temperature Sensor functions 
/* 
  CodeVisionAVR C Compiler 
  (C) 1998-2005 Pavel Haiduc, HP InfoTech S.R.L. 
 
  Prototypes for Dallas Semiconductor 
  DS1820 1 Wire bus temperature sensor 
  functions 
 
  BEFORE #include -ING THIS FILE YOU 
  MUST DECLARE THE I/O ADDRESS OF THE 
  DATA REGISTER OF THE PORT AT WHICH 
  THE 1 WIRE BUS IS CONNECTED AND 
  THE DATA BIT USED 
 
  EXAMPLE FOR PORTB: 
 
    #asm 
        .equ __w1_port=0x18 
        .equ __w1_bit=3 
    #endasm 
    #include  
*/ 
  /* 
  CodeVisionAVR C Compiler 
  (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L. 
 
  Prototypes for Dallas Semiconductor 
  1 Wire protocol functions 
 
  BEFORE #include -ING THIS FILE YOU 
  MUST DECLARE THE I/O ADDRESS OF THE 
  DATA REGISTER OF THE PORT AT WHICH 
  THE 1 WIRE BUS IS CONNECTED AND 
  THE DATA BIT USED 
 
  EXAMPLE FOR PORTB: 
 
    #asm 
        .equ __w1_port=0x18 
        .equ __w1_bit=3 
    #endasm 
    #include <1wire.h> 
*/ 
      #pragma used+ 
extern struct __ds1820_scratch_pad_struct 
       { 
       unsigned char temp_lsb,temp_msb, 
                temp_high,temp_low, 
                res1,res2, 
                cnt_rem,cnt_c, 
                crc; 
       } __ds1820_scratch_pad; 
 unsigned char ds1820_select(unsigned char *addr); 
unsigned char ds1820_read_spd(unsigned char *addr); 
int ds1820_temperature_10(unsigned char *addr); 
unsigned char ds1820_set_alarm(unsigned char *addr,signed char temp_low,signed char temp_high); 
#pragma used- 
 #pragma library ds1820.lib 
   // Alphanumeric LCD Module functions 
#asm 
   .equ __lcd_port=0x15 ;PORTC 
#endasm 
/* LCD driver routines 
 
  CodeVisionAVR C Compiler 
  (C) 1998-2003 Pavel Haiduc, HP InfoTech S.R.L. 
 
  BEFORE #include -ING THIS FILE YOU 
  MUST DECLARE THE I/O ADDRESS OF THE 
  DATA REGISTER OF THE PORT AT WHICH 
  THE LCD IS CONNECTED! 
 
  EXAMPLE FOR PORTB: 
 
    #asm 
        .equ __lcd_port=0x18 
    #endasm 
    #include  
 
*/ 
  #pragma used+ 
 void _lcd_ready(void); 
void _lcd_write_data(unsigned char data); 
// write a byte to the LCD character generator or display RAM 
void lcd_write_byte(unsigned char addr, unsigned char data); 
// read a byte from the LCD character generator or display RAM 
unsigned char lcd_read_byte(unsigned char addr); 
// set the LCD display position  x=0..39 y=0..3 
void lcd_gotoxy(unsigned char x, unsigned char y); 
// clear the LCD 
void lcd_clear(void); 
void lcd_putchar(char c); 
// write the string str located in SRAM to the LCD 
void lcd_puts(char *str); 
// write the string str located in FLASH to the LCD 
void lcd_putsf(char flash *str); 
// initialize the LCD controller 
unsigned char lcd_init(unsigned char lcd_columns); 
 #pragma used- 
#pragma library lcd.lib 
  // CodeVisionAVR C Compiler 
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L. 
  #pragma used+ 
 void delay_us(unsigned int n); 
void delay_ms(unsigned int n); 
 #pragma used- 
 // CodeVisionAVR C Compiler 
// (C) 1998-2006 Pavel Haiduc, HP InfoTech S.R.L. 
 // Prototypes for standard I/O functions 
  // CodeVisionAVR C Compiler 
// (C) 1998-2002 Pavel Haiduc, HP InfoTech S.R.L. 
 // Variable length argument list macros 
   typedef char *va_list; 
     #pragma used+ 
 char getchar(void); 
void putchar(char c); 
void puts(char *str); 
void putsf(char flash *str); 
 char *gets(char *str,unsigned int len); 
 void printf(char flash *fmtstr,...); 
void sprintf(char *str, char flash *fmtstr,...); 
void snprintf(char *str, unsigned int size, char flash *fmtstr,...); 
void vprintf (char flash * fmtstr, va_list argptr); 
void vsprintf (char *str, char flash * fmtstr, va_list argptr); 
void vsnprintf (char *str, unsigned int size, char flash * fmtstr, va_list argptr); 
signed char scanf(char flash *fmtstr,...); 
signed char sscanf(char *str, char flash *fmtstr,...); 
                                                        #pragma used- 
 #pragma library stdio.lib 
  /* 
CodeVisionAVR C Compiler 
Prototypes for mathematical functions 
 
Portions (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L. 
Portions (C) 2000-2001 Yuri G. Salov 
*/ 
   #pragma used+ 
 unsigned char cabs(signed char x); 
unsigned int abs(int x); 
unsigned long labs(long x); 
float fabs(float x); 
signed char cmax(signed char a,signed char b); 
int max(int a,int b); 
long lmax(long a,long b); 
float fmax(float a,float b); 
signed char cmin(signed char a,signed char b); 
int min(int a,int b); 
long lmin(long a,long b); 
float fmin(float a,float b); 
signed char csign(signed char x); 
signed char sign(int x); 
signed char lsign(long x); 
signed char fsign(float x); 
unsigned char isqrt(unsigned int x); 
unsigned int lsqrt(unsigned long x); 
float sqrt(float x); 
float floor(float x); 
float ceil(float x); 
float fmod(float x,float y); 
float modf(float x,float *ipart); 
float ldexp(float x,int expon); 
float frexp(float x,int *expon); 
float exp(float x); 
float log(float x); 
float log10(float x); 
float pow(float x,float y); 
float sin(float x); 
float cos(float x); 
float tan(float x); 
float sinh(float x); 
float cosh(float x); 
float tanh(float x); 
float asin(float x); 
float acos(float x); 
float atan(float x); 
float atan2(float y,float x); 
 #pragma used- 
#pragma library math.lib 
  // Declare your global variables here 
 unsigned char rom_code[8][9]; 
char lcd_buffer[33];  
 void main(void) 
{  
unsigned char i,j,devices; 
int temp; 
// Declare your local variables here 
 // Input/Output Ports initialization 
// Port A initialization 
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In  
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T  
PORTA=0x00; 
DDRA=0x00; 
 // Port B initialization 
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In  
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T  
PORTB=0x00; 
DDRB=0x00; 
 // Port C initialization 
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In  
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T  
PORTC=0x00; 
DDRC=0x00; 
 // Port D initialization 
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In  
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T  
PORTD=0x00; 
DDRD=0x00; 
 // Timer/Counter 0 initialization 
// Clock source: System Clock 
// Clock value: Timer 0 Stopped 
// Mode: Normal top=FFh 
// OC0 output: Disconnected 
TCCR0=0x00; 
TCNT0=0x00; 
OCR0=0x00; 
 // Timer/Counter 1 initialization 
// Clock source: System Clock 
// Clock value: Timer 1 Stopped 
// Mode: Normal top=FFFFh 
// OC1A output: Discon. 
// OC1B output: Discon. 
// Noise Canceler: Off 
// Input Capture on Falling Edge 
// Timer 1 Overflow Interrupt: Off 
// Input Capture Interrupt: Off 
// Compare A Match Interrupt: Off 
// Compare B Match Interrupt: Off 
TCCR1A=0x00; 
TCCR1B=0x00; 
TCNT1H=0x00; 
TCNT1L=0x00; 
ICR1H=0x00; 
ICR1L=0x00; 
OCR1AH=0x00; 
OCR1AL=0x00; 
OCR1BH=0x00; 
OCR1BL=0x00; 
 // Timer/Counter 2 initialization 
// Clock source: System Clock 
// Clock value: Timer 2 Stopped 
// Mode: Normal top=FFh 
// OC2 output: Disconnected 
ASSR=0x00; 
TCCR2=0x00; 
TCNT2=0x00; 
OCR2=0x00; 
 // External Interrupt(s) initialization 
// INT0: Off 
// INT1: Off 
// INT2: Off 
MCUCR=0x00; 
MCUCSR=0x00; 
 // Timer(s)/Counter(s) Interrupt(s) initialization 
TIMSK=0x00; 
 // Analog Comparator initialization 
// Analog Comparator: Off 
// Analog Comparator Input Capture by Timer/Counter 1: Off 
ACSR=0x80; 
SFIOR=0x00; 
 // 1 Wire Bus initialization 
w1_init(); 
 // LCD module initialization 
lcd_init(16); 
lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo"); 
        delay_ms(2000); 
        lcd_clear(); 
                                                   devices=w1_search(0xf0,rom_code); 
        sprintf(lcd_buffer,"%-u DEVICE(S) DETECTED\n\r",devices);  
        lcd_clear(); 
        lcd_puts(lcd_buffer); 
        delay_ms(500); 
while (1) 
      { 
        for(i=0;i