необхідність strore даних на SD-карту, використовуючи pic16f877

P

piskot

Guest
привет!Чи може хто-небудь мені допомогти?Мені потрібно зберігати дані на SD-карту, використовуючи pic16f877.мені потрібно картка читача? їм нове для цього, будь ласка, допоможіть мені з схематичному.

 
У SD-карта має як інтерфейс SPI, перевірити відомості про застосування
запам'ятовуючого пристрою з мікрочіпом сайті.Перед початком роботи з даним проектом, Ви також повинні вивчити, як зберігати дані на SD карти - це робиться один сектор в той час, як на hdds,
тому вам також необхідно буфер для зберігання даних, по крайней мере в одному секторі.

 
увидимся
протонної Pluss compiller керівництво
завантажити керівництво
команда:

завантажити компілятор
і в керівництві по
sonsivri.com
см. "влада повертається"
см. rego пост "та" Протон "компілятори"

_________________________________________
Синтаксис

Мінлива = CF_READ

Огляд

Прочитайте дані з Compact Flash картки.

Оператори
Мінлива - користувачеві визначити змінну типу біт, байт, байт масиву, слова, слова масив DWORD чи плавати, що проведе DTA читати з Compact Flash картки.
Приклад

"Read 16-бітних значень з 20 секторів у компактній флеш-карти і дисплея серійно

DEVICE = 16F877 "Ми
будемо використовувати 14-розрядні основного пристрою
XTAL = 4

HSERIAL_BAUD = 9600 "Встановити швидкість для USART серійний КМ
HSERIAL_RCSTA = 10010000% "Дозволити порт і безперервного отримання
HSERIAL_TXSTA =% 00100100 'Дозволити передачу та асинхронним режимі
'------------------------------------------------- ----------------------------------
'CF картка Оголошення
CF_DTPORT = PORTD 'Призначте CF даних порт PORTD
CF_ADPORT PORTE = 'Призначте CF адреса порту PORTE
CF_WEPIN = PORTC.5 'Призначте CF ми покладаємо на PORTC.5
CF_CE1PIN = PORTC.0 'Призначте CF CE1 PIN для PORTC.0
CF_RDYPIN = PORTC.4 'Призначте CF RDY_BSY PIN для PORTC.4
CF_OEPIN = PORTC.1 'Призначте CF
О.Е. шпилька для PORTC.1
CF_RSTPIN = PORTC.3 'Призначте CF RESET шпилька для PORTC.3
CF_CD1PIN = PORTA.5 'Призначте CF CD1 шпилька для PORTA.5
CF_ADPORT_MASK = False 'Ні маскування адреси даних, необхідних
CF_READ_WRITE_INLINE = False 'Використання підпрограм для CF_READ / CFWRITE

Символ CF_CD1 = PORTA.5 'Alias в CD1 Сцепляющій до PORTA.5
'------------------------------------------------- ----------------------------------
'Змінні Оголошення
Dim DATA_IO як слово "Слова читання CF карту
Dim BUFFER_SIZE як слово "Внутрішній лічильник байт в секторі (ie512)
Dim SECTOR_NUMBER як DWord сектора,
що представляють інтерес

'------------------------------------------------- ----------------------------------
"Основна програма починається тут
Delayms 100
All_Digital = True
CF_Init 'ініціалізувати з CF картки IO ліній
Хоча CF_CD1 = 1: Венд "є картка вставлена?
'------------------------------------------------- ----------------------------------
'READ 8-розрядні значення від 0 сектору до сектору і відображення 20 серійно в стовпці та рядки формату
READ_CF:
SECTOR_NUMBER = 0 'Початок в секторі 0
'Створення CF-карта для читання 1 сектор на час в режимі LBA
CF_Sector SECTOR_NUMBER,
читати 1
Повторіть 'форма петлі для секторів
BUFFER_SIZE = 1
Hserout [ "сектора", грудень SECTOR_NUMBER, 13]
Повторіть 'форма петлі слів у секторі
DATA_IO = CF_Read 'Читати слово з CF карту
Hserout [HEX4 DATA_IO ","] "Показувати у Шістнадцяткові
Якщо BUFFER_SIZE / / 32 = 0, то Hserout [13] "Перевірка закінчена, якщо рядок
Inc BUFFER_SIZE 'початок слово
До BUFFER_SIZE> 256 'До тих пір, поки всі слова читати
Hserout [REP "-" \ 95,13] 'риску під кожній галузі
Inc SECTOR_NUMBER 'Перехід до наступного дільниці
"І створив CF-карта для читання в режимі LBA
CF_Sector SECTOR_NUMBER, ПРОЧИТАЙТЕ
До SECTOR_NUMBER> 20 'До тих пір, поки всі сектори зчитуються
Зупинка

Примітки

Кількість байт,
що випливає з договору картки залежить від змінної типу використовується як завдання.тобто змінні рівні перед оператора: --

ДІД тип змінної буде читати 1 байт з Compact Flash картки.
Байт типу мінлива буде також читати 1 байт з Compact Flash картки.
СЛОВО тип змінної буде йти 2 байтів від Compact Flash-карті молодший байт Перша (LSB).
А мінлива типу DWORD буде читати 4 байтів з Compact Flash-карті молодший байт Перша (LSB).
Поплавцями типу мінлива буде також читати 4 байтів з Compact Flash-карту в потрібному форматі з плаваючою точкою змінної.

Доступ до
пам'яті Compact Flash не є такою ж, як звичайні пам'яті.Існує ніякого механізму для вибору адреси даних йдеться.Ви можете вибрати тільки сектора потім послідовно читати дані з картки.По суті, цей сектор є еквівалентом адреса в звичайний шматок пам'яті, але замість того,
що містить 1 байтів даних, вона містить 512 байт.

Після того як цей сектор вибирається за допомогою команди CF_Sector, будь-яка сума в 512 байт можна буде прочитати з картки.Після того, як йти було досягнуто, з Compact Flash-картки автоматично збільшенням на наступний байт в секторі готовий ще читати.Так що простий петельок, як показано нижче, буде читати всі байт в секторі:

BUFFER_SIZE = 0
Повторіть 'форма петлі для байтів у секторі
DATA_IO = CF_Read 'Прочитати байт з CF карту
Inc BUFFER_SIZE 'Збільшіть байтів
До BUFFER_SIZE = 512 ', поки всі байти читати

Для того, щоб отримати конкретний шматок даних із секторів, аналогічний петель можуть бути використані, але з умовою, що надає впаде на правильну позицію: --

BUFFER_SIZE = 0
У той час як 1 = 1 'Форма нескінченному циклі
DATA_IO = CF_Read 'Прочитати байт з CF карту
Якщо BUFFER_SIZE = 20 Потім перерва 'Вийти при правильному положенні досягнутої
Inc BUFFER_SIZE 'Збільшіть байтів
Венд "Закрити петлі

Фрагмент вище виходу з петлі, коли 20-м байт було читати з картки.

Звичайно масиви також можуть бути завантажені з Compact Flash-карту аналогічним чином, але пам'ятайте,
що максимальний розмір масиву в PROTON БАЗОВІ є 256 елементів.Фрагментів показані два можливих методів навантаження масив з даними читати з Compact Flash картки.

Dim AR1 [256], як Byte 'Створити елемент масиву 256
Dim BUFFER_SIZE як слово "Внутрішній лічильник байтів у секторі
BUFFER_SIZE = 0
Повторіть 'форма петлі для байтів у секторі
AR1 [BUFFER_SIZE] = CF_Read 'Прочитати байт з CF карту
Inc BUFFER_SIZE 'Збільшіть байтів
До BUFFER_SIZE = 256 ', поки всі байти читати

Великі масиви, такі, як один вище,
найкраще підходить для 16-бітних основний пристроїв.Не тільки тому, що вони, як правило, мають більше пам'яті, але й тому, що їхній доступ до ОЗП більше лінійно і Є немає БАНК кордону при використанні масивів.Крім того, доступ до деяких регистра низького рівня в 16-бітних основний пристрою можна ефективно поставити всі 512 байт з сектора на 2 масиви:

Пристрій 18F452 = 'Вибрати 16-бітних основний пристрій
Dim AR1 [256], як Byte 'Створити елемент масиву 256
Dim AR2 [256], як Byte 'Створити ще один елемент масиву 256
Dim BUFFER_SIZE як слово "Внутрішній лічильник байтів у секторі
Dim FSR0 як FSR0L.Word 'Combine FSR0L / H як 16-бітного регистра
FSR0 = Varptr (AR1) "Отримати адресу AR1 в FSR0L / H
Повторіть 'форма петлі для байтів у секторі
POSTINC0 = CF_Read 'Читайте в байтах від CF-карту і місце
'Безпосередньо в пам'ять,
а потім крок на наступну адресу в ПОС RAM
Inc BUFFER_SIZE 'Збільшіть байтів
До BUFFER_SIZE = 512 ', поки всі байти читати

Коли вище цикл закінчений, AR1 масивів і AR2 проведе дані зчитуються з Compact Flash-карту з сектором.Звичайно, вам знадобиться килимок з фрагментів з відповідним заявляє та CF_Sector команду.

Див також

CF_Init
CF_Sector (для відповідної схеми)
CF_Write (для заявляє

 

Welcome to EDABoard.com

Sponsor

Back
Top