| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Help кодова брава http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2311 |
Страница 1 от 1 |
| Автор: | bigboy [ Чет Май 04, 2006 5:15 pm ] |
| Заглавие: | 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;}} } |
|
| Автор: | Gogo [ Чет Май 04, 2006 11:51 pm ] |
| Заглавие: | |
Като записваш еепрома, не е зле да забраниш прекъсването, освен ако не го забранява функцията "write_eeprom()". Гледам, че таймера работи и му е разрешено прекъсването... |
|
| Автор: | setoy [ Пет Май 05, 2006 12:34 pm ] |
| Заглавие: | |
Това е CCS като гледам. Не се предоверявай на вградените му функции. Най-добре си напиши собствена функция за запис, да знаеш какво правиш поне. Ако не знаеш как, питай;) |
|
| Автор: | denis_hasan [ Пет Май 05, 2006 1:11 pm ] |
| Заглавие: | |
enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER0); размени има местата |
|
| Автор: | evc [ Пет Май 05, 2006 2:09 pm ] | |||||||||
| Заглавие: | ||||||||||
Това пък защо? |
||||||||||
| Автор: | valioman [ Вто Май 09, 2006 1:45 pm ] |
| Заглавие: | |
Пробвай това : 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 защото оригиналната не работи добре |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|