|
Prokrommo-robot
|
|
Функция eeprom20.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); } } } } } } } |
|
| 20.10.2015, 10:37 | |
|
Ответы с готовыми решениями:
1
Программатор EEPROM
Запись в EEPROM |
|
Prokrommo-robot
|
|
| 28.10.2015, 14:05 | |
|
ну ведь что то можно сделать
|
|
| 28.10.2015, 14:05 | |
|
Помогаю со студенческими работами здесь
2
Работа с EEPROM Подбор и работа с EEPROM Работа с EEPROM Attiny2313 PIC. Работа с EEPROM Файловая система в eeprom Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
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/
|