Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)
ارسال شده: شنبه ۱۹ آبان ۱۳۹۷, ۶:۵۱ ب.ظ
لینک دانلود ورژن 3خراب است لطفا برسی کنید
باتشکر
باتشکر
اینم برنامه که نوشتم
unsigned char DS18B20_Rom_Codes[20][9]@0x200
این خط رو خطا میده
Warning: C:\Users\taha\Desktop\New folder\3.c(24): @ RAM location address is in the Data Stack area
این مشکل باید چطوری حل بشه
ممنون میشم راهنمایی کنید
/*******************************************************
Chip type : ATmega32A
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*******************************************************/
#include <mega32a.h>
#include <1wire.h>
#include <ds18b20.h>
#include <delay.h>
unsigned int part1=0,part2=0,part3=0,part4=0,part5=0,part6=0,part7=0,part8=0,part9=0,part10=0,part11=0,part12=0,part13=0,part14=0,part15=0,part16=0,part17=0,part18=0,part19=0,part20=0;
int select;
flash unsigned char display[]={0b01000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000 };
unsigned int temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8,temp9,temp10;
unsigned int IC_DS18B20@0x020;
unsigned char DS18B20_Rom_Codes[20][9]@0x200;
typedef unsigned char byte;
float Thermometer[20];
int j=0;
void HEX_to_DEC1(unsigned int a)
{
part1 = display[a%10];
part2 = display[a/10%10];
}
void HEX_to_DEC2(unsigned int b)
{
part3 = display[b%10];
part4 = display[b/10%10];
}
void HEX_to_DEC3(unsigned int c)
{
part5 = display[c%10];
part6 = display[c/10%10];
}
void HEX_to_DEC4(unsigned int d)
{
part7 = display[d%10];
part8 = display[d/10%10];
}
void HEX_to_DEC5(unsigned int e)
{
part9 = display[e%10];
part10 = display[e/10%10];
}
void HEX_to_DEC6(unsigned int f)
{
part11 = display[f%10];
part12 = display[f/10%10];
}
void HEX_to_DEC7(unsigned int g)
{
part13 = display[g%10];
part14 = display[g/10%10];
}
void HEX_to_DEC8(unsigned int h)
{
part15 = display[h%10];
part16 = display[h/10%10];
}
void HEX_to_DEC9(unsigned int i)
{
part17 = display[i%10];
part18 = display[i/10%10];
}
void HEX_to_DEC10(unsigned int k)
{
part19 = display[k%10];
part20 = display[k/10%10];
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xd8;
// Place your code here
select++;
if(select==1)
{
PORTA=0xf0;
PORTB=part20;
}
if(select==2)
{
PORTA=0xf1;
PORTB=part19 ;
}
if(select==3)
{
PORTA=0xf2;
PORTB=part18;
}
if(select==4)
{
PORTA=0xf3;
PORTB=part17;
}
if(select==5)
{
PORTA=0xf4;
PORTB=part16;
}
if(select==6)
{
PORTA=0xf5;
PORTB=part15;
}
if(select==7)
{
PORTA=0xf6;
PORTB=part14;
}
if(select==8)
{
PORTA=0xf7;
PORTB=part13;
}
if(select==9)
{
PORTA=0xf8;
PORTB=part12;
}
if(select==10)
{
PORTA=0xf9;
PORTB=part11;
}
if(select==11)
{
PORTA=0x0f;
PORTB=part10;
}
if(select==12)
{
PORTA=0x1f;
PORTB=part9;
}
if(select==13)
{
PORTA=0x2f;
PORTB=part8;
}
if(select==14)
{
PORTA=0x3f;
PORTB=part7;
}
if(select==15)
{
PORTA=0x4f;
PORTB=part6;
}
if(select==16)
{
PORTA=0x5f;
PORTB=part5;
}
if(select==17)
{
PORTA=0x6f;
PORTB=part4;
}
if(select==18)
{
PORTA=0x7f;
PORTB=part3;
}
if(select==19)
{
PORTA=0x8f;
PORTB=part2;
}
if(select==20)
{
PORTA=0x9f;
PORTB=part1;
select=0;
}
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
PORTA=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) | (1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0);
// Port B initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=Out Bit6=Out Bit5=in Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(1<<DDC7) | (1<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=0 Bit6=0 Bit5=p Bit4=P Bit3=P Bit2=P Bit1=P Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 4.992 ms
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0xd8;
OCR0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
// 1 Wire Bus initialization
// 1 Wire Data port: PORTC
// 1 Wire Data bit: 0
// Note: 1 Wire port settings are specified in the
// Project|Configure|C Compiler|Libraries|1 Wire menu.
w1_init();
IC_DS18B20=w1_search(0xf0,DS18B20_Rom_Codes);
// Global enable interrupts
#asm("sei")
while (1)
{
for (j=0;j<IC_DS18B20;j++)
{
Thermometer[j] = ds18b20_temperature(DS18B20_Rom_Codes[j]);
}
temp1=Thermometer[0];
temp2=Thermometer[1];
temp3=Thermometer[2];
temp4=Thermometer[3];
temp5=Thermometer[4];
temp6=Thermometer[5];
temp7=Thermometer[6];
temp8=Thermometer[7];
temp9=Thermometer[8];
temp10=Thermometer[9];
HEX_to_DEC1(temp1);
HEX_to_DEC2(temp2);
HEX_to_DEC3(temp3);
HEX_to_DEC4(temp4);
HEX_to_DEC5(temp5);
HEX_to_DEC6(temp6);
HEX_to_DEC7(temp7);
HEX_to_DEC8(temp8);
HEX_to_DEC9(temp9);
HEX_to_DEC10(temp10);
}
}
