Главная страница  Комбинированное использование портов 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [ 18 ] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Многие модели микроконтроллеров подсемейства PIC 16СХХ {щ пример, 16С62,16С63,16С64,16С65,16С73и 16С74) помимо РСпод! держивают еще одну стандартную и погг)лярную шину SPI, KOTopj позволяет ос}тцествлять быструю передачу данных. В этой книге да. ная шина рассматриваться не будет.

Отметим только, что поддерживающая интерфейс PC программ крайне проста: она должна задать формат (конфигурацию) обмец и определить направление передачи (запись или чтение). Остальное реализуется аппаратно. Во всех других Р1С-микроконтроллерах под-семейства 16СХХ такой интерфейс может быть реализован только программно. Это будет показано на примере взаимодействия PIC 16СХХ с микросхемой энергонезависимой памяти, имеющей последовательный интерфейс (SERIAL EEPROM), и микросхемой аналого-цифрового преобразователя. Кроме того, вы можете обратиться к главе 5, где среди примеров применений PIC 16С54 есть схема, использующая шину PC.

ЭНЕРГОНЕЗАВИСИМАЯ ПАМЯТЬ

С ПОСЛЕДОВАТЕЛЬНЫМ ИНТЕРФЕЙСОМ

Поскольку в книге рассказывается преимущественно о PIC-микро-контроллерах фирмы Microchip, то использование энергонезависимой памяти с последовательным интерфейсом мы рассмотрим на примере ИС SERIAL EEPROM типа 93С56, выпускаемой также фирмой Microchip. Речь идет об электрически программируемой и стираемой памяти. Вы сможете использовать данный пример для всех приложений, где потребуется, чтобы данные сохранялись при выключении питания.

Память этого типа имеет четырехпроводный интерфейс, включающий следующие линии:

♦ CS - выбор микросхемы;

♦ CLK - тактирование обмена;

♦ DI - вход данных;

♦ DO - выход данных.

Можно свести количество линий к трем (рис. 3.36), соединяя и DO через резистор, который не догг)скает короткого замыкаНИ линий DO и RAO во время считывания памяти.

Считьшание памяти осуществляется со скоростью до 2 Мбит/с. 3 пись и стирание, напротив, требуют значительно больше времеНИ


Ikfi 93LC56

MCLR 0SC2 Vss Vdd

RBO RBI RB2 RB3

RB7 RB6 RB5 RB4

16 1

t II

JL ч

14

-*HI-

4=Zr -CZb -CZb -CZ>

8x470fi LEDs -CZ]-

Рис. 3.36

Вэаимодейавие РЮмикроконтроллера с ИС SERIAL EEPROM

поскольк) выполняются внутренним автоматом, реализующим достаточно сложный алгоритм и в том числе формирующим внутри микросхемы достаточно высокие напряжения. Для стирания или за-Ш1СИ одного байта требуется 2 мс. В течение этого времени микросхема не может выполнять никаких других операций. Процесс записи и стирания индицируется н)левым уровнем напряжения на линии Do. В листинге 3.11 представлены все базовые подпрограммы, необходимые для диалога с данным устройством (считывание, запись, стирание), и две подпрограммы, реализующие специальные операции: разрешение записи/стирания и запрет записи/стирания.

Чтобы обеспечить безопасность данных, в момент подачи напряжения питания включен режим запрета записи/стирания. Если вы Хотите осуществить запись или стирание, то сначала систему нужно вывести из этого режима, что выполняет подпрограмма ЕЕпаЫе. Ког-fla операция записи будет завершена, систему необходимо вернуть Первоначальное состояние, для чего предназначена подпрограмма



При реализации всех операции основной является noflnporpaNijj Shout, которая позволяет выводить в последовательном виде данны содержащиеся в регистре temp. Длина слов передаваемых Данны может составлять 8 или 16 бит и зависит от способа организацц памяти. Помимо данных передаются коды команд (3 бита) и адре (8 бит). Длина текущей посылки определяется переменной clocks которая указывает необходимое количество тактов передачи.

Эта профамма априори подходит для большинства микросхем пдщ. ти с аналогичным последовательным интерфейсом, но разные типы микросхем могут иметь различную продолжительность циклов записи и стирания, различную разрядность адресов, различные форматы дан-ных. Поэтому некоторые программные константы придется изменить.

Листинг 3.11

; Управление EEPROM с последовательным интерфейсом.

; Соответствует инструкции по применению фирмы Parallax.

; Эта программа содержит подпрограммы, необходимые для управления

; SERIAL EEPROM типа 93С56 или аналогичными.

; Она заполняет все ячейки памяти одинаковыми данными,

: которые индицируются светодиодами, подключенными к порту В.

D = ra.O ; Линии DI и DO EEPROM.

CLK = ra.1 ; Линия CLK EEPROM.

CS = ra.2 ; Линия выбора микросхемы CS

; (активный логический уровень - высокий).

; Определение кодов команд памяти. При необходимости

; эту часть надо изменить в соответствии с типом используемой памяти.

ROP = 192 ; Считывание.

WROP= 160 ; Запись.

EWEN = 152 ; Разрешение записи и стирания.

EWDS = 128 ; Запрет записи и стирания.

ERAS = 224 ; Стирание одного байта.

ERAL = 144 ; Стирание всей памяти.

WRAL = 136 ; Заполнение всех ячеек памяти одним и тем же байтом.

; Определение переменных величин.

Определение используемого PIC.

devicepicl6c54,xt osc,wdt off,p rotect off reset start

temp

; Временная переменная величина.

EEdata

; Регистр данных.

Eaddr

; Регистр адреса.

clocks

; Количество тактов для подпрограммы Shout

tickl

; Счетчик задержки 1.

tlck2

; Счетчик задержки 2.

Код программы,запись в память.

start mov

га,#0

Обнуление регистров портов A

rb.#0

и В.

!ra,#0

RA - выходной порт.

! rb, #0

RB - выходной порт.

call

EEnable

Разрешение записи/стирания.

EEdata, #1

Загрузка регистра данных.

EEaddr.ftO

Загрузка регистра адреса (стартового).

.loop call

EEwrite

Запись данных.

call

Busy

Ожидание исполнения.

EEdata

Сдвиг данных.

ijnz

EEaddr,:loop

Увеличение адреса и повтор.

call

EEdisbl

Запрет записи.

; Чтение из памяти.

EEaddr. #0

Загрузка регистра адреса (стартовым адресом)

:loop2 call

EEread

Команда считывания.

rb, EEdata

EEaddr

Увеличение адреса.

call

delay

Задержка.

goto

:loop2

Повтор.

Эта подпрограмма используется всеми остальными. Она

осуществляет выдачу сообщений в последовательной форме на вход D EEPROM.

Перед выводом информация должна быть помещена в temp,

число сдвигов - в clocks, CS = 1, CS = О в конце операции.

Shout

temp

; Сдвиг bit? temp в бит переноса.

movb

; Посылка бита переноса на линию данных.

setb

; Генерация тактирующего импульса EEPROM.

; Пауза.

clrb

: Сброс линии CLK.

djnz

clocks,Shout

; Уменьшение счетчика битов и повтор посылки,

; Возврат в вызывающую программу.

Считывание

байта no адресу

EEadr и помещение его в EEdata.

EEread

temp,#ROP

; Код операции считывания помещаем в temp.

clocks,#4

; Число тактов для вывода кода.

setb

; Выбор микросхемы.

call

Sfiout

; Вывод кода команды.



:read

clocks.#8

, Для вывода адреса задаем 8 тактов.

temp, Eeaddr

; Загрузка адреса в temp.

call

Shout

; Пересылка адреса.

!ra,ft1

; RAO = 1.

clocks, #8

; Для считывания байта задаем 8 тактов.

setb

: CLK = 1.

movb

; Устанавливаем бит С равным биту данных линии.

temp

; Бит переноса сдвигаем в temp.O.

clrb

; CLK = 0.

djnz

clocks,: read

; Уменьшаем счетчик тактов, повторяем прием битов.

EEdata,temp

; Принятый байт переписываем в EEdata.

!ra,#0

; Порта А - выходной.

clrb

; Заканчиваем обмен.

; Возвращаемся.

3грамма разрешения записи.

setb

; Разрешаем доступ к EEPROM.

clocks,#12

; Формат посылки - 12 бит.

temp,#EWEN

; Код операции EWEN помещаем в temp.

call

Shout

; Пересылка.

clrb

; Запрет доступа,

; Возврат.

clrb CS ret

Запрет доступа. Возврат.

. стирание ЕЕгазе

ячейки по адресу EEaddr. После стирания в ячейке окажется байт FFh.

temp, #ERAS

; Код операции записи в temp

clocks,#4

; Формат посылки - 4 бита.

setb

; Разрешаем доступ к EEPROM.

call

Shout

; Пересылка.

clocks,#8

; Формат посылки - 8 бит.

temp,Eeaddr

; Установка адреса.

call

Shout

; Пересылка.

; Возврат.

. Стирание 256 байт EEPROM (всей памяти).

EEwipe

setb CS ; Разрешаем доступ к EEPROM.

mov temp,#ERAL ; Код операции записи в temp,

mov clocks,#12 ; Формат посылки - 12 бит.

call Shout ; Пересылка,

clrb CS ; Запрет доступа,

ret ; Возврат.

; Запись байта, содержащегося в EEdata, во все ячейки памяти.

Подпрограмма запрета записи в памяти.

Edisbl setb CS

mov clocks, #12

mov temp, #EWDS

call Shout

clrb CS ret

Разрешаем доступ к EEPROM.

Формат посылки - 12 бит.

Код операции EWDS помещаем в temp.

Пересылка.

Запрет доступа.

Возврат.

Запись байта из EEdata по адресу, содержащемуся в EEaddr.

EEwrall setb

; Разрешаем доступ к EEPROM.

temp,#WRAL

; Код операции записи в temp.

clocks, #12

; Формат посылки - 12 бит.

call

Shout

; Пересылка.

clocks,#8

; Формат посылки - 12 бит.

temp,EEdata

; Данные помещаем в temp.

call

Shout

; Пересылка.

clrb

; Запрет доступа.

; Возврат.

; Ожидание завершения выполнения текущей команды.

temp,#WROP

; Код операции записи в temp.

Busy

; Пауза.

clocks,#4

; Формат посылки - 4 бита.

!ra, 1

; Линия RAO - вход.

setb

: Разрешаем доступ к EEPROM.

setb

; Разрешаем доступ к EEPROM.

call

Shout

; Пересылка.

:wait

D,:wait

; Опрос линии D, ожидание.

clocks, #8

; Формат посылки - 8 бит.

clrb

; Запрет доступа.

temp, EEaddr

; Установка адреса.

!ra,#0

; Все линии порта А - выходы.

call

Shout

; Пересылка.

; Возврат.

clocks,#8

; Формат посылки - В бит.

Delay

djnz

tick1.Delay

; Задержка до тех пор.

temp,EEdata

; Подготовка данных.

djnz

tick2,Delay

; пока tickl и tick2 не равны 0.

call

Shout

; Пересылка.

; Выход.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [ 18 ] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2022 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.