2 (Вариант 5, задача 2:При запуске программы на экран терминала выводится сообщение «Задача № …» с)
Описание файла
Текстовый-файл из архива "Вариант 5, задача 2:При запуске программы на экран терминала выводится сообщение «Задача № …» с", который расположен в категории "". Всё это находится в предмете "специальные предметы" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "специальные предметы" в общих файлах.
Просмотр текстового-файла онлайн
C51 COMPILER V7.06 MAIN 01/10/2009 12:06:07 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND CODE NOCOND
stmt level source
1 #include "at898252.h"
2
3 #define MCS_FREQUENCY 22.1184 / 12
4 #define timer_count_for_10KhZ 92
5 #define cyclec_for_1sec (1 * 1000000 * MCS_FREQUENCY / timer_count_for_10KhZ)
6
7 sbit B_BIT = P1 ^ 4;
8 sbit OW_DATABIT = P0 ^ 2;
9 sbit LCD_RS = P3 ^ 3;
10 sbit LCD_E = P3 ^ 2;
11 sbit ST = P3 ^ 4;
12 unsigned int cycles=0;
13
14 //************************************** ***********************DS1820 DEVICE******************************
-*************************************** **************************************** *****************
15 void DELAY_MCS( unsigned long mcs )
16 {
17 1 unsigned int i, count = ( mcs - 20 * MCS_FREQUENCY ) / ( 16 * MCS_FREQUENCY );
18 1 again:
19 1 i++;
20 1 if (i!=count) goto again;
21 1 }
22
23 unsigned char DS1820_reset() //если устройство на связи, оно в ответ на reset (0) удерживает 0.
24 {
25 1 bit presence;
26 1 OW_DATABIT = 0; // pull OW_DATABIT line low
27 1 DELAY_MCS(500);
28 1 OW_DATABIT = 1; // allow line to return high
29 1 DELAY_MCS(70); // wait for presence 55 uS
30 1 presence = OW_DATABIT; // get presence signal
31 1 DELAY_MCS(320); // wait for end of timeslot 316 uS
32 1 return !presence; // presence signal returned
33 1 }
34
35
36 void DS1820_write( unsigned char byte )
37 {
38 1 unsigned char i=7;
39 1 OW_DATABIT = 1;
40 1 again: i--;
41 1 OW_DATABIT = 0;
42 1 OW_DATABIT = byte & 0x01;
43 1 DELAY_MCS(11);
44 1 byte = byte >> 1;
45 1 OW_DATABIT = 1;
46 1 if (i) goto again;
47 1
48 1 }
49 unsigned char DS1820_read()
50 {
51 1 unsigned char i=7,byte=0;
52 1 OW_DATABIT = 1;
53 1 again: i--;
54 1 OW_DATABIT = 0;
C51 COMPILER V7.06 MAIN 01/10/2009 12:06:07 PAGE 2
55 1 OW_DATABIT = 1;
56 1 DELAY_MCS( 11 );
57 1
58 1 byte = byte >> 1;
59 1
60 1 if(OW_DATABIT) byte |= ( 1 << 7 );
61 1 else byte &= ~( 1 << 7 );
62 1
63 1 DELAY_MCS( 55 );
64 1 if (i) goto again;
65 1 return byte;
66 1 }
67
68 // Функция старта преобразования температуры
69 void DS1820_startconverttemp()
70 {
71 1 DS1820_write( 0xcc ); // Пропускаем ROM
72 1 DS1820_write( 0x44 ); // Выводим команду преобразования температуры
73 1
74 1 }
75
76 // Функция чтения данных из памяти микросхемы DS1820
77 // Размер буфера должен быть равен 9
78 void DS1820_FromMemToBuf(unsigned char * buff)
79 {
80 1 unsigned char n;
81 1 DS1820_write( 0xcc ); // Пропускаем ROM
82 1 DS1820_write( 0xbe ); // Выводим функцию чтения данных памяти
83 1
84 1 for (n = 0; n < 9; n++) // Читаем 9 байт памяти
85 1 buff[ n ] = DS1820_read();
86 1 }
87
88 // Функция получения значения температуры
89 // Возвращает 0 если сенсор не подключен
90 // Возвращает 1 если данные не готовы(преобразование не завершилось)
91 // Возвращает 2 если операция успешна
92 unsigned char ShortToString( signed short value, char str[] )
93 {
94 1 unsigned char nIndex = 0, digit, startFlag = 0;
95 1 signed short d;
96 1
97 1 if( value < 0 )
98 1 {
99 2 str[ nIndex++ ] = '-';
100 2 value *= -1;
101 2 }
102 1
103 1 if( value != 0 )
104 1 for( d = 10000; d > 0; d /= 10 )
105 1 {
106 2 if( startFlag || value >= d )
107 2 {
108 3 digit = value / d;
109 3 str[ nIndex++ ] = digit + '0';
110 3 value -= digit * d;
111 3 startFlag = 1;
112 3 }
113 2 }
114 1 else
115 1 str[ nIndex++ ] = '0';
116 1
C51 COMPILER V7.06 MAIN 01/10/2009 12:06:07 PAGE 3
117 1 str[ nIndex ] = 0;
118 1
119 1 return nIndex;
120 1 }
121 void DS1820_gettemperature( char strTemp[] )
122 {
123 1 unsigned char buff[ 9 ];
124 1 unsigned short temperature;
125 1 unsigned char intLen;
126 1
127 1 DS1820_FromMemToBuf( buff );
128 1
129 1 temperature = buff[ 1 ];
130 1 temperature <<= 8;
131 1 temperature = buff[ 0 ];
132 1
133 1 intLen = ShortToString( temperature / 2, strTemp );
134 1 strTemp[ intLen ] = '.';
135 1 strTemp[ intLen + 1 ] = ( temperature & 0x01 ) ? '5' : '0';
136 1 strTemp[ intLen + 2 ] = 0;
137 1
138 1
139 1 }
140 //************************************** ***********************LCD************** **************************
-*************************************** **************************************** *******
141 unsigned char SPI_send(const unsigned char Data)
142 {
143 1 SPDR = Data; // Заполняем SPI буфер
144 1 while(!(SPSR & 0x80)); // Ждем пока передача данных будет завершена
145 1 return SPDR;
146 1 }
147
148 void LCD_write(unsigned char Data, unsigned char rs)
149 {
150 1 if(rs == 0) LCD_RS = 0; // Режим записи команд
151 1 else LCD_RS = 1; // Режим записи данных
152 1 LCD_E = 1; // Выставляем строб для записи данных
153 1
154 1 SPI_send(Data); // Выводим данные в SPI порт