![Very Happy :D](./images/smilies/icon_biggrin.gif)
PIC 16F84 obsluha EEPROM a Časovača
Moderátor: Moderátoři
PIC 16F84 obsluha EEPROM a Časovača
PIC 16F84 ma integrovanú malú pamäť EEPROM ktorej obsah sa zachová i po odpojení napájania zaujímalo by ma ako sa da do tejto pamäťe pristupovať (ukladať,čítať,mazať data). Takisto by ma zaujímalo akým spôsobom je možné obslužiť integrovaný časovač TMR0 napríklad chcem aby každu sekundu program vykonal istú operáciu napr. skok na nejaké navestie. Za odpoveďe vopred Ďakujem !!! ![Very Happy :D](./images/smilies/icon_biggrin.gif)
![Very Happy :D](./images/smilies/icon_biggrin.gif)
-
- Příspěvky: 2031
- Registrován: 01 črc 2005, 02:00
- Bydliště: zbídačený kraj
- Kontaktovat uživatele:
Tady najdeš podprogram pro čtení a zápis do EEPROM
http://www.cmail.cz/doveda/procesory/pgm16f84.htm
( http://www.cmail.cz/doveda/ )
http://www.cmail.cz/doveda/procesory/pgm16f84.htm
( http://www.cmail.cz/doveda/ )
*****
Myslím, že je to omyl, pretože niekedy stačí malé naťuknutie a vie ako ďalej. Ak sa budeme všetci hrať na majstrov športu, tak načo sme tu.
Zápis do EE je lepšie popísaný v 16F818 na str 29.
BANKSEL EECON1 ...........; Select Bank of EECON1
BTFSC EECON1, WR........ ; Wait for write
GOTO $-1 .......................; to complete
BANKSEL EEADR .............; Select Bank of EEADR
;najskôr si pripravíš adresu, kam budeš zapisovať
MOVF ADDR, W ...............; ADDR = moja adresa
MOVWF EEADR................ ; Data Memory Address to write
;potom data, ktoré budeš zapisovať
MOVF VALUE, W ...............; VALUE = moje data
MOVWF EEDATA ...............; Data Memory Value to write
; a potom povinnú sekvenciu, ktorá to tam uloží
BANKSEL EECON1 ...........; Select Bank of EECON1
BCF EECON1, EEPGD ........; Point to DATA memory
BSF EECON1, WREN ........ ; Enable writes
BCF INTCON, GIE ............; Disable INTs.
MOVLW 55h .....................;
MOVWF EECON2 ..............; Write 55h
MOVLW AAh ....................;
MOVWF EECON2 ..............; Write AAh
BSF EECON1, WR .............; Set WR bit to begin write
BSF INTCON, GIE .............; Enable INTs.
BCF EECON1, WREN ..........; Disable writes
Zápis do EE je lepšie popísaný v 16F818 na str 29.
BANKSEL EECON1 ...........; Select Bank of EECON1
BTFSC EECON1, WR........ ; Wait for write
GOTO $-1 .......................; to complete
BANKSEL EEADR .............; Select Bank of EEADR
;najskôr si pripravíš adresu, kam budeš zapisovať
MOVF ADDR, W ...............; ADDR = moja adresa
MOVWF EEADR................ ; Data Memory Address to write
;potom data, ktoré budeš zapisovať
MOVF VALUE, W ...............; VALUE = moje data
MOVWF EEDATA ...............; Data Memory Value to write
; a potom povinnú sekvenciu, ktorá to tam uloží
BANKSEL EECON1 ...........; Select Bank of EECON1
BCF EECON1, EEPGD ........; Point to DATA memory
BSF EECON1, WREN ........ ; Enable writes
BCF INTCON, GIE ............; Disable INTs.
MOVLW 55h .....................;
MOVWF EECON2 ..............; Write 55h
MOVLW AAh ....................;
MOVWF EECON2 ..............; Write AAh
BSF EECON1, WR .............; Set WR bit to begin write
BSF INTCON, GIE .............; Enable INTs.
BCF EECON1, WREN ..........; Disable writes
No musim Ti dat v necem za pravdu. meno by si mel nejdriv asi poradne precis datasheet a zacit s jednossima vecma. Pokud to uz udelal, tak jedine dobre. Protoze jenom poctivym cvicenim se clovek neco muze dobre nacit. Premyslel jsi ale ze treba uz delal s nekterymi procesory od jineho vyrobce, ma neco uz za sebou a tady jen tape, protoze je to proste jinak nez je zvyklej. Ja sam delam se tremi druhy procesoru a PIC jsem prakticky jeste nikdy nedelal. Proto vim, ze ac mam neco za sebou, budu rad kdyz mi nekdo poradi. Od toho je tu tohle forum a od toho sem chodime. Ne jenom pro rady, ale taky je davat. Predpokladam, ze meno je dost inteligentní na to aby si ViPaliho priklad dobre vylozil...galjo píše:máš pravdu - potom pride otázka čo je to ?? ADDR = moja adresa ??? a čo je to VALUE = moje data a nepracuje to... a potom poraď , alebo môžeš mu ten program vyrobiť až máš toľko času..lebo on o tom čítal a malo by to byť funkčné..
Podpis na houby
Možno že chlapec skutočne začína, a ešte mu nikto nepovedal, že na stránke www.microchip.com si môže stiahnuť datasheet pre všetky procesory a veľa aplikácii z ApNotes.
No a zabudli sme na ten Tmr0.
V registri INTCON nastaviš bit 7 a 5 (gie, t0ie) do 1, čím povolíš prerušenie Global a Timer0.
V OPTION nastaviš bit 0,1,2 (ps0 - ps2) preddelič (napr. 111 = 256) a T0cs 0/1 podľa zdroja impulzov, psa = 0 cez preddelič.
Potom do T0 vložíš FFh.
256(T0) x 256(Ps) = 64k
Ak máš T0cs = 1 a cez RA4 ti vstupuje signál z 32k krištálu, tak každé 2sec ti nastaví bit T0if (intcon) čo vyvolá prerušenie.
Ak máš T0cs = 0 a Fosc 4MHz, tak do preddeliča ti vstupuje frekvencia Fosc/4 = 1MHz. Potom 1MHz / 64k = 16, to znamená, že 16 krát za sekundu ti vyvolá prerušenie, čo ošetríš v nejakom registri, do ktorého na začiatku vložíš 16 a budeš ho každým prerušením dekrementovať.
Rada na záver, zabudni na 16F84 a programuj 16F818, 16F819, 16F88
Ak bude problém, tak sa spýtaj, určite sa tu niekto najde, kto ti poradí.
No a zabudli sme na ten Tmr0.
V registri INTCON nastaviš bit 7 a 5 (gie, t0ie) do 1, čím povolíš prerušenie Global a Timer0.
V OPTION nastaviš bit 0,1,2 (ps0 - ps2) preddelič (napr. 111 = 256) a T0cs 0/1 podľa zdroja impulzov, psa = 0 cez preddelič.
Potom do T0 vložíš FFh.
256(T0) x 256(Ps) = 64k
Ak máš T0cs = 1 a cez RA4 ti vstupuje signál z 32k krištálu, tak každé 2sec ti nastaví bit T0if (intcon) čo vyvolá prerušenie.
Ak máš T0cs = 0 a Fosc 4MHz, tak do preddeliča ti vstupuje frekvencia Fosc/4 = 1MHz. Potom 1MHz / 64k = 16, to znamená, že 16 krát za sekundu ti vyvolá prerušenie, čo ošetríš v nejakom registri, do ktorého na začiatku vložíš 16 a budeš ho každým prerušením dekrementovať.
Rada na záver, zabudni na 16F84 a programuj 16F818, 16F819, 16F88
Ak bude problém, tak sa spýtaj, určite sa tu niekto najde, kto ti poradí.