sprintf(lcd_buffer,"%u DS1820\nDevice detcted",devices);
lcd_puts(lcd_buffer);
delay_ms(1000);
Отобразим РОМ код каждого устройства.
if (devices)
{
for (i=0; i<devices;i++)
{
sprintf(lcd_buffer,"Device #%u ROM\nCode is:", i+1);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(1000);
lcd_clear();
for (j=0;j<8;j++)
{
sprintf(lcd_buffer,"%02X",rom_code[i][j]);
lcd_puts(lcd_buffer);
if (j==3) lcd_gotoxy (0,1);
};
delay_ms(1000);
};
}
else
while (1);
Здесь остановка, если не было обнаружено никакого устройства
Измерим и отобразим температуры
while (1)
{
// Place your code here
for (i=0;i<devices;)
{
temp=ds1820_temperature_10(&rom_code[i][0]);
sprintf(lcd_buffer,"t%u=%i.%u\xdfC",++i,temp/10,abs(temp%10));
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(100);
};
};
}
Краткое описание программы:
В этом файле знаками /* (начало) и */ (конец) выделены блоки с комментариями, а знаком // — строки с комментариями (см. Комментарии).
В блоке с комментариями (строки 1...28) даются рекомендации по подключению температурных датчиков к отладочной плате STK500.
В строках 30...33 объявляется, какой порт микроконтроллера и какой бит порта будут использованы для связи через протокол 1-Wire. Для этого в программу включён ассемблерный код. В строке 30 директива #asm говорит компилятору о начале ассемблерного кода, а в строке 33 директива #endasm о его завершении (см. Директивы ttasm и ttendasm). В строке 31 директива ассемблера .equ присваивает значение идентификатору_wl_port. Это значение, соответствующее адресу регистра PORTx выбранного порта (в данном случае выбран Порт А), находим в файле 90s8515.h в соответствующей строке: «sfrb PORTA=Oxlb;». Этот файл находится в поддиректории ..\INC.
В строке 32 директива ассемблера .equ присваивает значение идентификатору_wl_bit. Это значение соответствует номеру соответствующего бита.
В следующем блоке с комментариями (строки 35...49) даются рекомендации по подключению к отладочной плате STK500 алфавитно-цифрового LCD-модуля 2x16.
В строках 51...53 объявляется, какой порт микроконтроллера будет использоваться для подключения LCD-модуля. Для этого в программу включён ещё один ассемблерный код. В строке 51 директива #asm говорит компилятору о начале ассемблерного кода, а в строке 53 директива #endasm о его завершении (см. Директивы ttasm и ttendasm).
В строке 52 директива ассемблера .equ присваивает значение идентификатору_lcd_port. Это значение, соответствующее адресу регистра PORT* выбранного порта (в данном случае выбран Порт С), находим в файле 90s8515.h в соответствующей строке: «sfrb PORTC=Oxl5;».
При трансляции ассемблерного кода, полученного при компиляции данного проекта компилятором Си CodeVisionAVR, ассемблер вместо идентификаторов wl_port, _wl_bit и_lcd_port подставит их значения.
Директивами #include (строки 55...59) подключаются: LCD-функции — файл Icd.h (см. LCD-функции для дисгиеев до 2x40 символов); функции DS1820/DS18S20 — файл dsl820.h (см. Функции температурного датчика DS1820/DS18S20 от Dallas Semiconductor); функции задержки — файл delay.h (см. Функции задержки); математические функции — файл math.h (см. Математические функции) и функции ввода/вывода — файл stdio.h (см. Стандартные функции ввода/вывода). Перед компиляцией препроцессор компилятора вставит вместо этих строк текст соответствующих файлов (см. Директива Uinclude).
В строке 61 объявляется глобальный символьный массив (строковая переменная) lcd_buffer, состоящий из 33 членов. Этот массив будет расположен в SRAM микроконтроллера. При этом все элементы этого массива автоматически инициализируются со значением 0 (см. Массивы). В этом массиве будет храниться информация, предназначенная для вывода на LCD.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.