Пожалуйста помогите мне понятьт мою ошибку, почему у меня не работает связка ATmega16 и DS1820.
Я делал на примере ExemplОв из CodeVisionAVR
Вот код:
Код: Выделить всё
; :::::::::::: вот тут я иницилизирую обмен с датчиком выбераю порт и разряд::
#asm
.equ __w1_port=0x12;PORTD
.equ __w1_bit=7; PIN7
#endasm
#include <mega16>
#include <ds1820>
#include <delay>
#include <stdio>
#define MAX_DEVICES 8
// Declare your global variables here
#define PA_OUT DDRA = 0xFF
#define PB_OUT DDRB = 0xFF
#define PD_OUT DDRD = 0xFF
int chisl;
char out_p,k;
int in_port;
int temp;
void initialization(void){
PA_OUT;//сделать весь PORTA выходом
PB_OUT;//сделать весь PORTB выходом
PD_OUT;
PORTD=0x00;
}
void pause(void)
{
int
l=300;
met1:
l--;
if (l > 1){goto met1;}
l=300;
met2:
l--;
if (l > 1){goto met2;}
}
void chislo(void)
{ ; Это тестого чтооб выводило хоть что то на светодиод при присутствии сигнала
if (chisl == 0){out_p = 0b11110101;};
if (chisl == 1){out_p = 0b00000101;};
if (chisl == 2){out_p = 0b10110011;};
if (chisl == 3){out_p = 0b10010111;};
if (chisl == 4){out_p = 0b01000111;};
if (chisl == 5){out_p = 0b11010110;};
if (chisl == 6){out_p = 0b11110110;};
if (chisl == 7){out_p = 0b10000101;};
if (chisl == 8){out_p = 0b11110111;};
if (chisl == 9){out_p = 0b11010111;};
if (chisl == 10){out_p = 0b11010111;};
if (chisl == 11){out_p = 0b11010111;};
if (chisl == 12){out_p = 0b11010111;};
if (chisl == 13){out_p = 0b11010111;};
if (chisl == 14){out_p = 0b11010111;};
if (chisl == 15){out_p = 0b11010111;};
if (chisl == 16){out_p = 0b11010111;};
if (chisl == 17){out_p = 0b11010111;};
if (chisl == 18){out_p = 0b11010111;};
if (chisl == 19){out_p = 0b11010111;};
if (chisl == 20){out_p = 0b11010111;};
if (chisl == 21){out_p = 0b11010111;};
if (chisl == 22){out_p = 0b11010111;};
if (chisl == 23){out_p = 0b11010111;};
if (chisl == 24){out_p = 0b11010111;};
if (chisl == 25){out_p = 0b11010111;};
if (chisl == 26){out_p = 0b11010111;};
if (chisl == 27){out_p = 0b11010111;};
if (chisl == 28){out_p = 0b11010111;};
if (chisl == 29){out_p = 0b11010111;};
if (chisl == 31){out_p = 0b11010111;};
if (chisl == 32){out_p = 0b11010111;};
if (chisl == 33){out_p = 0b11010111;};
if (chisl == 34){out_p = 0b11010111;};
if (chisl == 35){out_p = 0b11010111;};
}
//Вывод на индикатооры:
void vivod(void)
{
PORTA = 0b11110000;
chislo();
PORTB = out_p;
pause();
}
void main(void)
{
initialization(); /* Вызвать (== выполнить) функцию инициализации МК - т.е. настройки нужных нам устройств МК в соответствии с поставленой задачей */
//unsigned char i,j,devices;
//devices=w1_search(0xf0,rom_code);
while (1)
{
temp=ds1820_temperature_10(0);
chisl=temp;
vivod();
pause();
};
}Скажите пожалуйста в чем моя ошибка?
Не идет измерение... может что с иницилизацией?