| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| ново въпросче http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=3104 |
Страница 1 от 1 |
| Автор: | Emo [ Пет Окт 20, 2006 11:42 am ] | |||
| Заглавие: | ново въпросче | |||
ЗДР на всички С риск да досадим искам да питам 2, 3 дребни нещица (16ф84А & mplab). Направена от мен програмка при симулация работи както трябва , обаче когато я кача на PIC-а нещо куца на едно място.В част от програмата за обслужване на прекъсванията трябва да се извърши запис в EEPROM , ама нищо не става. Докато при симулация като наблюдавам EEPROM всичко се записва както и където трябва Значи ето и кода който съм вкарал : (взаимстван от книгата на млад конструктор) WRITE_EEPROM BCF STATUS,RP0 MOVF III,W CALL TABLE_READ MOVWF EEADR MOVF KKK,W MOVWF EEDATA BSF STATUS,RP0 BSF EECON1,WREN MOVLW H'55' MOVWF EECON2 MOVLW H'AA' MOVWF EECON2 BSF EECON1,WR CHECK_WRITE BTFSC EECON1,WR GOTO CHECK_WRITE ; BCF EECON1,WREN BCF STATUS,RP0 RETURN TABLE_READ ADDWF PCL,1 RETLW H'00' ; KKK (БРОЙ ПРОГРАМИ) RETLW H'01' ; T1 RETLW H'02' ; T2 RETLW H'03' ; T3 RETLW H'04' ; ПРОГРАМА №1 RETLW H'05' ; ПРОГРАМА №2 RETLW H'06' ; . RETLW H'07' ; . RETLW H'08' ; . RETLW H'09' ; RETLW H'0A' ; RETLW H'0B' ; RETLW H'0C' ;ПРОГРАМА №9 като III дава адреса , а KKK съдържанието и понеже почти всеки би се усъмнил да не би в тия променливи да присвоявам стойности които са неправилни (проверявал съм ги по време на симулация - добре са си), направо промених сорса като сложих директно константи : WRITE_EEPROM BCF STATUS,RP0 movlw H'00' MOVWF EEADR MOVLW H'01' MOVWF EEDATA BSF STATUS,RP0 BSF EECON1,WREN MOVLW H'55' MOVWF EECON2 MOVLW H'AA' MOVWF EECON2 BSF EECON1,WR CHECK_WRITE BTFSC EECON1,WR GOTO CHECK_WRITE ; BCF EECON1,WREN BCF STATUS,RP0 RETURN т.е. трябва в първата клетка да се запише "1" , да ама не става. първоначално в първата клетка е записано числото "3" : ORG H'2100' DE D'3',D'7',D'7',D'7',D'1',D'2',D'3',D'1',D'1',D'1',D'1',D'1',D'1',D'1' (използвани при първоначално четене и TABLE_READ) числото 3 си остава след записа в паметта. Дайте един акъл къде греша !? пак ще повторя при симулация всичко се записва правилно в паметта. да не е от програматора и софтуера щото той не е за 84А а за 84 . Супер простичка схема веднъж я постнах .... ето и софтуера . Да не те да бъркат нещо работите? Иначе 80 % от записания код се изпълнява нормално от PIC-а. Благодарим за вниманието !!!
|
||||
| Автор: | Gogo [ Пет Окт 20, 2006 12:52 pm ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Автор: | Emo [ Съб Окт 21, 2006 5:20 pm ] |
| Заглавие: | |
показал съм пример прикойто се зареждат стойностите : 1 ,6 ,6, 6,2 записът в първия адрес (1) определя колко подред стойности ще се запишат 1 + 4 |
|
| Автор: | Gogo [ Съб Окт 21, 2006 6:46 pm ] |
| Заглавие: | |
Според мене, записа в еепрома трябва да си работи. Какво става като качиш програмата в пика? Дали изобщо тръгва? Как си свързал кварца - кондензаторите към него, ресета...? |
|
| Автор: | Emo [ Нед Окт 22, 2006 7:07 pm ] |
| Заглавие: | |
zna4i , 4ast ot sorsa na programata koito sam ne sam pokazal v momenta raboti normalno. Tova poredica ot miga6ti svetodiodi (bqga6ti svetlini)(RB4,RB5,RB6), razdeleni na nqkolko podprogrami. Efektite koito sam zalijil rabotqt. Tiq promenlivi za koito sam pisal t1,t2,t3 sa za vremena koito opredelqt kolko dalgo da sveti edin svetodiod, a p1,p2....p9 za opredlqneto posledovatelnost ot 3 programi. rabotqt poneje nali predvaritelno zalagamm stoinosti v pametta. Shemata na svarzvane sam q vzel ot mlad konstruktor knigata. v momenta ne moga da postna shemata. Vzema da si kupq ot tehniq sait edin ima6e edin programator za okolo 25 kinta , 6toto nqmam na ideq za6to ne stava zapisa . vazmojno li da e ot programatora? Kato se ima v predvid 4e golama 4ast ot koda si raboti normalno. |
|
| Автор: | Syrius-B [ Пон Окт 23, 2006 12:33 pm ] |
| Заглавие: | |
При писане в ЕЕPROM-ь трябва да са забранени прекъсванията |
|
| Автор: | plameniv [ Пон Окт 23, 2006 3:28 pm ] | |||||||||
| Заглавие: | Mda | |||||||||
Провери дали не изчакваш стария запис дали е приключил и тогава да правиш нов запис ? Записа по принцип си е бавен процес и трябва се изчаква докато се запише има си и флаг за прекъсване и когато приключи записа се вдига ! |
||||||||||
| Автор: | Gogo [ Пон Окт 23, 2006 4:09 pm ] |
| Заглавие: | |
Записа се прави при обработка на прекусване - т.е. INTCON,GIE = 0 . Също, след 55,АА и вдигане на WR бита, се изчаква същия бит да стане"0" - т.е. записа да завърши. Емо, драсни една програмка с която да запишеш няколко променливи (или статични |
|
| Автор: | Emo [ Вто Окт 24, 2006 11:09 am ] |
| Заглавие: | |
благодарим за вниманието и съветите .Ще пробвам днеска да направя някои промени. В подпрограмата за запис -WRITE_EEPROM , правя проверка за завършил запис чрез флаг за запис : CHECK_WRITE BTFSC EECON1,WR GOTO CHECK_WRITE А това за пробата със статичните променливи съм го пробвал вече в примера описан най- горе : WRITE_EEPROM BCF STATUS,RP0 movlw H'00' MOVWF EEADR MOVLW H'01' ; при първоначално инициализиране това е 3 MOVWF EEDATA BSF STATUS,RP0 BSF EECON1,WREN MOVLW H'55' MOVWF EECON2 MOVLW H'AA' MOVWF EECON2 BSF EECON1,WR CHECK_WRITE BTFSC EECON1,WR GOTO CHECK_WRITE ; BCF EECON1,WREN BCF STATUS,RP0 RETURN |
|
| Автор: | Emo [ Вто Окт 24, 2006 11:17 am ] |
| Заглавие: | |
Но ще пробвам да ги повартя тия флагове. все пак използвам само едно прекъсване (RB0/INT),но щом казвате , уж всичко това не съм го мислил аз а го взимам от книга , ама на.... |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|