Интерфейсы периферийных устройств. Параллельный интерфейс ввода-вывода. Принципы построения параллельных портов ввода/вывода микроконтроллеров, страница 11

unsigned char TEMP, i;

for(i=0; I < 8; i++)

{          DS1820 Wbit (TEMP&0x01); // запись младшего бита

TEMP>>=1; // сдвиг вправо на 1

}}

Чтение байта

unsigned DS1829 Rbyte (){

unsigned char TEMP, i;

TEMP=0;

for(i=0; i < ; i++)

{         TEMP>>=1;

if(DS1820 Rbit ()) // если прочитана 1,

TEMP|=0x80; // то в TEMP запишем 1 в старший разряд

else TEMP&=0x7F; // иначе в старший разряд запишем 0

}

return TEMP;}

Команды работы с ПЗУ

Передача команды чтения ПЗУ представляет собой 1 байт.

  • Read ROM 0x33. В ответ на эту команду термодатчик передает 8 байт. 7 первых байт – серийный номер конкретного датчика. 8й байт – контрольная сумма для проверки правильности принятой информации.

Контроль правильности кода. Алгоритм формирования контрольной суммы для проверки правильности кода.

8-разрядный сдвиговый регистр

XOR – исключающее «ИЛИ»

По приходу каждого бита происходит сдвиг байта в регистре. Приходящий бит записывается в D7, D3 и D2. Сдвиг в регистре осуществляется циклически 56 раз (7x8). Последний байт равен значению сдвигового регистра.

  • Match ROM 0x55. Позволяет обращаться машине к конкретному термодатчику. После той команды мастер должен передать 64-битный код.
  • Skip ROM 0xCC. Команда позволяет пропустить процедуру сравнения, если датчик один (в целях экономии времени).

После обработки одной из команд функции ПЗУ термодатчик способен воспринимать еще несколько команд.

·  Read Scratchpad 0xBE. Команда позволяет читать данные из промежуточных ОЗУ термодатчика. В ответ на эту команду датчик передает 8 байт информации.

·  Convert T 0x44. Команда преобразования температуры в двоичный код.

·  Write Scratchpad 0x4E. Команда записи трех байтов в ОЗУ DS1820.

3 байта: TH, TL, регистр конфигурации

ОЗУ датчика

Младший байт температуры

Старший байт температуры

TH – байт пользователя

TL – байт пользователя

Регистр конфигурации

Резервный регистр

Счетчик 1

Считчик 2

Контрольная сумма

0

1

2

3                   во FLASH-память

4

5

6

7

8

Количество разрядов в температуре определяется регистром конфигурации.

0       R1   R0     1       1       1       1

 
регистр конфигурации

 


время преобразования

0      0         9 бит       93 мс

0      1      10 бит     187 мс

1      0      11 бит     375 мс

1      1      12 бит     750 мс

Время преобразования температуры зависит от разрядности.

Последовательность действий при измерении температуры

1.  Посылаем импульс сброса и принимаем ответ термометра

2.  Посылаем команду Skip ROM 0xCC

3.  Посылаем команду Convert  T 0x44

4.  Формируем задержку 750 мс

5.  Формируем импульс сброса

6.  Skip ROM

7.  Read Scratch 0xBE

8.  Читаем данные из ОЗУ

Температурный датчик

main(){

int i, j;

unsigned char T;

for(j = 0; j < 100; j++) // 100 значений температуры

{

init(); // инициализация COM-порта

DS1820 Wbyte(0xCC); // пропустить чтение ПЗУ

DS1820 Wbyte(0x44); // запуск преобразования

for(i = 0; i < 100; i++)

t10m();

init DS1820(); // импульс сброса

DS1820 Wbyte(0xCC); // пропустить чтение ПЗУ

DS1820 Wbyte(0xBE); // чтение данных из термодатчика

T=DS1820 Rbyte(); // чтение  данных ( 8 байт)

T=T>>3; // преобразование в десятичное число

T+=DS1820 Rbyte()<<5; // и вывод  через COM-порт

T=T/2;

Wsio((T%10)+((T/10)<<4));}

while(1);}

4.3.10. ИнфракрасныйИнтерфейс IrDA.

Инфракрасный интерфейс IrDA

Это первый беспроводной интерфейс, наиболее простой и дешевый. Информация предоставляется в виде электромагнитных излучателей с длиной волны 950 нм. В качестве передатчиков излучения используются инфракрасные (ИК) светодиоды.

Структурная схема ИК канала