Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Някъде греша при четене от EEPROM-a
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4138
Страница 1 от 1

Автор:  MegatroniC [ Сря Май 02, 2007 9:20 am ]
Заглавие:  Някъде греша при четене от EEPROM-a

Здравейте, записвам в еепром-а няколко стойности които искам да прочета в по късен етап от програмата и да изведа на дисплея. Но някъде явно греша и немога да я открия тази пуста грешка. На дисплея се извеждат само нули :?

чипа е 16F877

Ето част от кода на програмата:

Код:

.
   org   H'2100'            
   de   D'30',D'2',....
   .
   .
   movlw   H'00'      
   call   read_eeprom   
   


   call   Bin8ToBCD   ;преобразувай в BCD формат
   movlw   LCD_Line2
   call   Send_command
   movf   hund_reg,w    
   call   Send_char
   movf   tens_reg,w   
   call   Send_char
   movf   ones_reg,w   
   call   Send_char
   movlw   H'DF'      
   call   Send_char
   movlw   A'C'      
   call   Send_char

read_eeprom
   movwf   EEADR      
   bsf   STATUS,RP0
   bcf   EECON1,EEPGD   
   bsf   EECON1,RD   
   bcf   STATUS,RP0
   movf   EEDATA,w
   subwf   EEDATA,w   ;проверка
   btfsc   STATUS,Z
   bsf   PORTD,7
   return


Bin8ToBCD
   banksel   hund_reg   
   clrf   hund_reg
   clrf   tens_reg
   movwf   ones_reg   
ghundreth   
   movlw   D'100'      
   subwf   ones_reg,w
   btfss   STATUS,C   
   goto   gtenth      
   movwf   ones_reg   
   incf   hund_reg,f   
   goto   ghundreth   
gtenth
   movlw   D'10'      
   subwf   ones_reg,w
   btfss   STATUS,C
   goto   over      
   movwf   ones_reg
   incf   tens_reg,f   
   goto   gtenth
over            
   movf   hund_reg,w   
   xorlw   0x30      
   movwf   hund_reg
   movf   tens_reg,w
   xorlw   0x30      
   movwf   tens_reg
   movf   ones_reg,w
   xorlw   0x30      
   movwf   ones_reg
   retlw   0


след програмиране на чипа, стойностите са се записали правилно в еепром-а.
lcd-то си работи с останалата част от програмата без проблеми.

Автор:  Cekins [ Сря Май 02, 2007 10:01 am ]
Заглавие: 

Е тука се казва RTFM. Това SUBWF ти оставя резултат 0 във W. И въобще за какъв грездей ти е тая проверка? Да не мислиш че пик-а ще сбърка ?

ако го напишеш така : subwf EEDATA,w,1 - резултата ще остане във EEDATA, a W ще си остане с търсената стойност.

Автор:  MegatroniC [ Сря Май 02, 2007 10:26 am ]
Заглавие: 

Проверката я сложих, защото вече се видях в чудо да търся грешката. Но и без тия редове с проверката пак на дисплея си излизат нулички вместо 030 8O

Автор:  Gogo [ Сря Май 02, 2007 10:52 am ]
Заглавие: 

Погледни в коя банка ти е EECON1 !!!

Автор:  GTN [ Сря Май 02, 2007 10:59 am ]
Заглавие: 

Ахам ти работиш с банки 0 и 1, а ти трябват 2 и 3. Аз лично не се занимавам с RP0 и RP1 а просто си използвам:
Код:
banksel xxx
Гледам че ти ги смесваш двата метода.

Автор:  MegatroniC [ Сря Май 02, 2007 11:10 am ]
Заглавие: 

Благодаря ви !
поредното недоглеждане на начинаещия, ще ми е за урок :oops:

Има ли проблем ако смесвам двата метода за избор на банки, ако са използвани правилно ?

Автор:  GTN [ Сря Май 02, 2007 11:15 am ]
Заглавие: 

Не, само дето ти се бъркаш така. Или поне аз се бъркам като използвам 2 метода които правят едно и също нещо. Аз си харесвам единия и си карам с него.

Автор:  MegatroniC [ Сря Май 02, 2007 11:24 am ]
Заглавие: 

Е да така е, но понеже първите ми стъпки бяха с промяна на PR0, а после научих за по-удобното banksel, та сега докато премина изцяло към него допускам грешки :oops:
Но ще се коригирам :D

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/