Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Prokrommo-robot

Функция eeprom

20.10.2015, 10:37. Показов 4363. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, написал программу, согласно которой первая - кнопка это запоминание маршрута с пульта, а вторая - датчик препятствий. Проблема в следующем: не знаю как используя функцию eeprom прописать, чтобы карта запоминалась не в ОЗУ а в ПЗУ и после выключения и включения эта карта работала.
Микроконтроллер:pic16f887. Компилятор:micro c.
Вот сама программа:
#include "motor.c"
#define MEM_SIZE 40
#define TMR_DX 50
#include <Motor.h>
int Adc;
char Dyst;
char Txt[6];
void Read_Adc()
{
ADCON0=0b11011101;
ADCON0.GO=1;
while(ADCON0.GO);
Adc=(ADRESH*4)+(ADRESL/64);
}
// Динные с ИК пульта ДУ
unsykned char ir_data=0;

// Динные о пройденном пути
unsykned int mem[MEM_SIZE];
unsykned char mem_cmd[MEM_SIZE];
// Размер массива данных пройденного пути
unsykned char mem_size=0;

// Декодирование данных с пульта
void decode()
{
if(ir_data==a || ir_data==A) ir_data=1;
else if(ir_data==b || ir_data==B) ir_data=2;
else if(ir_data==c || ir_data==C) ir_data=3;
else if(ir_data==d || ir_data==D) ir_data=4;
else ir_data=0;
}

// Приём данных с пульта
void interrupt()
{
char i;

// Проверка флага прерывания
if(INTCON.INTF)
{
Delay_us(416);
for(i=0;i<8;i++)
{
Delay_us(833);
// Сдвиг данных на 1 бит вправо
ir_data = ir_data>>1;
// Если на входе RB0 1, то в конец ir_cmd добавить 1
if((PORTB & 0x01)==1) ir_data = ir_data | 0x80;
}
Delay_us(833);
decode(); // Декодировать даннные
// Сбросить флаг прерывания
INTCON.INTF = 0;
}
}

// Очистка памяти
void mem_clear()
{
unsykned int i;
for(i=0;i<MEM_SIZE;i++)
{
mem[i]=0;
mem_cmd[i]=0;
}
}

void _go()
{
unsykned int i,j;
unsykned char cmd;
unsykned int tmr;

for(i=0;i<=mem_size;i++)
{
cmd = mem_cmd[i];
tmr = mem[i];

if(cmd==1)
{
m_left_bwd();
m_right_bwd();
}
else if(cmd==2)
{
m_left_bwd();
m_right_fwd();
}
else if(cmd==3)
{
m_left_fwd();
m_right_bwd();
}
else if(cmd==4)
{
m_left_fwd();
m_right_fwd();
}
for(j=0;j<tmr;j++) Delay_ms(TMR_DX+10);
}
m_left_stop();
m_right_stop();
}
void main()
{
TRISA = 0b00010000;
TRISB = 0b00000001;
PORTA = 0b00000000;
PORTB = 0b00000000;
ANSEL=0xFF;
ANSELH=0x00;
for(; ;)
{
if (!PORTA.F4)
{
unsykned char key;

// RB0 в цифровой вход
ANSELH.F4 = 0;
TRISA.F4=1;
// Прерывание происходит по спаду уровня сигнала
OPTION_REG.INTEDG = 0;
// Разрешить прерывания по изменению уровня сигнала INT/PB0
INTCON.INTE = 1;
// Разрешить прерывания
INTCON.GIE = 1;

// Инициализируем двигатели
m_init();

// Настроить вывод светодиода и мигнуть им когда очиститься память
TRISB.F3=0;

PORTB.F3=1;
mem_clear();
Delay_ms(200);
PORTB.F3=0;

for(; ;)
{
Delay_ms(TMR_DX);
if(!PORTA.F4) _go(); // Запускаем движение по карте

if(ir_data!=0)
{
//Загружаем данные из временной переменной ir_data
key = ir_data;
ir_data = 0;

// Если команда отличается от предыдущей
if(mem_cmd[mem_size]!=key)
{
// Выбираем следующую ячейку памяти
mem_size++;
if(mem_size==MEM_SIZE)
{
PORTB.F3=1; // Зажигаем светодиод
while(1) if(!PORTA.F4) _go(); // Запускаем движение по карте
}
// Сохраняем команду для её последующего сравнения
mem_cmd[mem_size]=key;
// Увеличиваем время простоя команды
mem[mem_size]++;
}
else
{
// Увеличиваем время простоя команды
mem[mem_size]++;
}

if(key==1)
{
m_left_bwd();
m_right_bwd();
}
else if(key==2)
{
m_left_bwd();
m_right_fwd();
}
else if(key==3)
{
m_left_fwd();
m_right_bwd();
}
else if(key==4)
{
m_left_fwd();
m_right_fwd();
}

while(!PORTA.F4);
}

if (!PORTB.F0)
{
for(; ;)
{
Delay_ms(1000);
ANSELH.F4=0;
ANSEL=0xFF;
TRISA=0xFF;
Lcd_Init(&PORTD);
Lcd_Cmd(LCD_CURSOR_OFF);
while(PORTB.F0);
Lcd_Out(1,1,"Raw Data=");
Lcd_Out(2,1,"In CM=");
while(1)
{
Read_Adc();
WordToStr(Adc,Txt);
Lcd_Out(1,10,Txt);
if(Adc<90)
{
Lcd_Out(2,10,"Out");
}
else
{
Dyst=(2914/(Adc+5))-1;
WordToStr(Dyst,Txt);
Lcd_Out(2,10,Txt);
}
if(Adc>300)
{
Backward(255);
Delay_ms(500);
S_Left(255);
Delay_ms(400);
}
else
{
Forward(255);
}
while(!PORTB.F0);
}
}
}
}
}
}
}
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2015, 10:37
Ответы с готовыми решениями:

Программатор EEPROM
привет. заказал из китая прогромматор 2 дня мучился с ним пытался перепрогромировать память но увы праграма не поддерживает такие...

Pic16f886 EEPROM
Здравствуйте, столкнулся с такой трудностью при работе с памятью EEPROM:не могу настроить EEPROM памяти данных на чтение, банально не...

Запись в EEPROM
Не могу осуществить запись в EEPROM (проверка с помощью PIC SIMULATOR IDE) под pic16f676 чтение работает, но это - слабое утешение, зато...

1
Prokrommo-robot
28.10.2015, 14:05
ну ведь что то можно сделать
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2015, 14:05
Помогаю со студенческими работами здесь

Работа с EEPROM
По заданию требуется спроектировать блок: подключение последовательного ПЗУ. То есть составить схему блока и написать программу на языке...

Подбор и работа с EEPROM
Споткнулся на этапе разработки электросхемы-в кратце задача такая, есть некоторое устройство где пользователь переводит устройство кнопкой...

Работа с EEPROM Attiny2313
Добрый вечер:) Есть программа кодового замка для Attiny2313. Пользователь вводит код, этот код сверяется с тем, что сохранен в eeprom,...

PIC. Работа с EEPROM
Подскажите пожалуйста как сделать - буду очень сильно благодарна Использую ПО - MPLAB IDE v8.87 Задание: записать строку символов...

Файловая система в eeprom
Искал информацию по fat8 и нихрена не нашел. Никаких фрагментаций,каталогов,кластеров,секторов,атрибутов,зугрузочных областей,прав...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru