Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mps.doc
Скачиваний:
9
Добавлен:
18.11.2019
Размер:
3.97 Mб
Скачать

Примеры программирования последовательного ввода/вывода.

Задача: организовать прием данных из СОМ-порта РС.

Fт = 6 МГц, V = 1200 б/с, режим 1 (без контроля четности).

REC EQU 6 ;принимаем 6 байт

SETB P3.0 ;настроим порт RxD для ввода

MOV SCON, #01010000B ;режим 1, прием

MOV TMOD, #20H ;режим 2 таймера 1

MOV TH1, #256-13 ;расчет скорости см.выше

MOV TL1, #256-13

SETB TR1 ;запуск таймера, приемник ждет прихода данных

;есть бит готовности RI, по которому определяется начало приема

MOV R2, #REC

MOV R0, #40H ;адрес массива, куда скидываем байты

M1:

JNB RI,M1 ;если ничего не приходит, то крутимся бесконечно (формирование бита RI)

CLR RI

MOV A, SBUF ;из послед. в параллельный код

MOV @R0, A

INC R0

DJNZ R2,M1

NOP

Недостатки: 1. Обычно REC неизвестно, проверяют переполнение таймера.

2. При прогр. Проверке RI уходит много времени.

16. Последовательный интерфейс i2c.

Inter Integrated Circuit (Philips)

SCL – синхронизация, SDA – прием и передача данных. Мастер формирует SCL.

Протокол интерфейса I2C.

AT24C16 – 2 Кбайта х 8.

Случай чтения байта из памяти:

Все начинается со START – условия. Адрес устройства (слэйва). R/W – сначала низкий, т.к. надо записывать адрес устройства. R – запрос данных. W – передача данных. Можно адресовать 128 устройств. Это один из вариантов протокола, когда адрес 7-разрядный. Имеется расширенный вариант протокола, когда 7+4 разрядов.

Адрес: 1 0 1 0 .. .. .. (послед. 3 разряда – адрес внутри АТ24, 8 штук)

Const для АТ24

Slave в ответ устанавливает бит подтверждения АСК низкого уровня. Если запись, то подтверждение посылает Slave.

Если мастер читает, то он посылает подтверждение. Адрес байта – с какого места будем читать. После прочтения одного байта связь разрывается Stop-условием.

Временная диаграмма

П ример применения интерфейса I2C с использованием м/сх памяти АТ24C16. Формат байта адреса АТ24C16: (её ёмкость 2К х 8)

7 1 0 1 0 В2 В1 В0 R/W 0

эта комбинация является идентификационным номером для АТ24, т.е. если комбинация будет другой, то этот адрес не будет понят этой м/сх-ой.

В2 В1 В0 – здесь может содержаться различная информация для АТ24. Для АТ24C16 - в этих 3-х битах номер страницы, т.е. всего восемь страниц(банков). {256 байт = (2к х 8)/8}

В режиме записи байта в память требуется время на фиксацию этого байта в памяти = 10мс (это особенность flash-памяти).

П ример. Чтение блока из 16-ти байт из памяти.

S 1 0 1 0 В2 В1 В0 W A ADDR A S 1 0 1 0 В2 В1 В0 R A DATA A ∙∙∙ A P

1 2 3 4 5 6 7 8 9 10

1 – старт

2 – байт (ищем устройство) Запись адреса устройства

3 – адрес внутри страницы памяти (ADDR = 8 бит)

4 – далее идёт чтение 16-ти байтов

5 -

6 – подтверждение от Slave

7 – чтение байтов (1-й байт, DATA = 8 бит)

8 – это подтверждение посылает Master (получает байт)

9 – когда Master получает все 16 байт, он не подтверждает квитанцию

10 – стоп

MK 24

Master Slave

!!! Ошибки не исправляются! Принятая квитанция (низкий уровень) говорит о том, что передачу информацию необходимо продолжить. Высокий уровень – передачу прекратить. Подтверждения используются для того, чтобы сообщать, что connect есть (т.е., что соединение не «умерло»).

mov R6, #16 ; счётчик страницы (байтов внутри блоков)

mov DPTR, #Buffer ; адрес буфера внешн. памяти, куда будем складывать

call fnStart ; подпрога, формирующая старт условия

mov a, #1010 0000b ; запись байта (первого)

call fnWriteByte ; подтверждение проверяется внутри fnWriteByte

; параметр – содержимое аккумулятора

mov a, #0 ; начало участка памяти, с которого начинается

call fnWriteByte ; считывание

c all fnStart 16

mov a, #1010 0001b 256

call fnWriteByte 16

mov R4, #16 ; счётчик блоков внутри страницы

call fnReadByte ; считываем байт --> в АС

mov @DPTR, а ; запись в память

inc DPTR

cjne R4, #1, m1 ; проверка счётчика

call NAK ; послали (отриц.) подтверждение (низк. уровень)

jmp end_block

m1:

call ACK ; квитанция подтверждения

djnz R4, m2

end_block:

call Stop

djnz R6, m3

Для программной реализации необходимо 5 подпрограмм:

  1. Формирование старт-условия;

  2. Формирование стоп-условия;

  3. Запись байта;

  4. Чтение байта;

  5. Анализ АСК.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]