Отговори на тема  [ 6 мнения ] 
Help кодова брава 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Май 19, 2005 12:43 pm
Мнения: 27
Местоположение: София
Мнение Help кодова брава
Здравейте!
Като цяло нещата горе-долу се получават, но имам един сериозен проблем свързан с eeprom-а.
Четенето от eeprom-а е перфектно, но когато подам командата от клавиатурата за смяна на кода записа в eeprom-а не се осъществява или (при друго оформяне на прогрмата) e частично записан или не в коректната последоватилност! Ако имате идеи ще е добре, че аз се изчерпах.

#include <16F84A.H>
#include <KEYPAD.C>
#fuses NOWDT, XT, PUT, NOPROTECT
#use delay(clock=4000000)
#bit Power = 0x05.1
#bit LED = 0x05.2
#rom 0x2100={'1','2','3','4'} //начален код
.........
.....
.........
void main(){

init_ports();
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
kbd_init();
Power=0;
LED=0;



KEY:
while(1){if(Power==0){if(kbd_getc()=='*'){Delay_ms(1500);
if(kbd_getc()=='*'){goto Write;}}}
if(kbd_getc()==read_eeprom(0)){count=0; enable_interrupts(INT_TIMER0);break;}} //проверка на първа цифра или смяна на кода
while(1){
if(kbd_getc()==read_eeprom(1)){break;}
if(count>46){disable_interrupts(INT_TIMER0); GOTO KEY;} } //проверка на втора цифра

while(1){
if(kbd_getc()==read_eeprom(2)){break;}
if(count>46){disable_interrupts(INT_TIMER0); GOTO KEY;} } //проверка на трета цифра

while(1){
if(kbd_getc()==read_eeprom(3)){IF(Power == 0){Power = 1; disable_interrupts(INT_TIMER0); GOTO KEY;} // проверка на четвърта цифра и промяна на състоянието на бравата.
IF(Power == 1){Power = 0; GOTO KEY;}}
if(count>46){disable_interrupts(INT_TIMER0); count=0; GOTO KEY;}}

Write:
i=0;LED=1;
while(1){
if(kbd_getc()=='1'){write_eeprom(i,'1');Delay_ms(500); i++;}
if(kbd_getc()=='2'){write_eeprom(i,'2');Delay_ms(500); i++;}
if(kbd_getc()=='3'){write_eeprom(i,'3');Delay_ms(500); i++;}
if(kbd_getc()=='4'){write_eeprom(i,'4');Delay_ms(500); i++;}
if(kbd_getc()=='5'){write_eeprom(i,'5');Delay_ms(500); i++;}
if(kbd_getc()=='6'){write_eeprom(i,'6');Delay_ms(500); i++;}
if(kbd_getc()=='7'){write_eeprom(i,'7');Delay_ms(500); i++;}
if(kbd_getc()=='8'){write_eeprom(i,'8');Delay_ms(500); i++;}
if(kbd_getc()=='9'){write_eeprom(i,'9');Delay_ms(500); i++;}
if(kbd_getc()=='0'){write_eeprom(i,'0');Delay_ms(500); i++;}
if(i==4){LED=0;GOTO KEY;}}

}


Чет Май 04, 2006 5:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Като записваш еепрома, не е зле да забраниш прекъсването, освен ако не го забранява функцията "write_eeprom()". Гледам, че таймера работи и му е разрешено прекъсването...


Чет Май 04, 2006 11:51 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Това е CCS като гледам. Не се предоверявай на вградените му функции. Най-добре си напиши собствена функция за запис, да знаеш какво правиш поне. Ако не знаеш как, питай;)


Пет Май 05, 2006 12:34 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Сря Окт 26, 2005 7:17 pm
Мнения: 106
Местоположение: Sofia
Мнение 
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);

размени има местата


Пет Май 05, 2006 1:11 pm
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
denis_hasan написа:
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);

размени има местата


Това пък защо? :?:

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Пет Май 05, 2006 2:09 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
Пробвай това :

Write:
i=0;LED=1;
while(1){
switch(kbd_getc(100)){
case '1' : write_eeprom(i,'1');Delay_ms(5); i++; break;
case '2' : write_eeprom(i,'2');Delay_ms(5); i++; break;
case '3' : write_eeprom(i,'3');Delay_ms(5); i++; break;
case '4' : write_eeprom(i,'4');Delay_ms(5); i++; break;
case '5' : write_eeprom(i,'5');Delay_ms(5); i++; break;
case '6' : write_eeprom(i,'6');Delay_ms(5); i++; break;
case '7' : write_eeprom(i,'7');Delay_ms(5); i++; break;
case '8' : write_eeprom(i,'8');Delay_ms(5); i++; break;
case '9' : write_eeprom(i,'9');Delay_ms(5); i++; break;
case '0' : write_eeprom(i,'0');Delay_ms(5); i++; break;
}
if(i==4){LED=0;GOTO KEY;}}


При мен работи.
И не забравяй да махнеш #rom 0x2100={'1','2','3','4'} след направата на проекта щото при всяко пускане трябва да въведеш 1234 :)


Не се учудвай за (kbd_getc(100) това е моя функция с вкл.пищялка на pin_b0 защото оригиналната не работи добре :)


Вто Май 09, 2006 1:45 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни