|
Acces eeprom sur 16F876
|
|
Bonjour à tous, je voudrai ecrire et lire quelques données dans l'eeprom interne d'un pic 16f876, malgré de nombreux essais avec le datasheet constructeur j'ai quelques soucis .Voici un bout de code, je me suis fait 2 macros avec passage de parametre. Pourriez-vous me dire si vous voyer une erreur, ou si vous avez déjà un bout de code tout prêt qui fonctionne. Merci beaucoup pour votre aide
org 0x2100 ; adresse début zone eeprom DE 0x32 ; valeur de recharge du compteur
;********************************************************************* ; MACRO pour l'eeprom * ;********************************************************************* ; l'adresse eeprom à lire 'est passée en paramètre
READEE macro adeeprom ; macro avec paramètre bsf STATUS , RP1 bcf STATUS , RP0 ; on passe en bank2 movlw adeeprom ; charger adresse eeprom movwf EEADR ; adresse à lire dans registre EEADR bsf STATUS , RP0 ; passer en bank3 bcf EECON1 , EEPGD bsf EECON1 , RD ; lancer la lecture EEPROM bsf EECON1 , EEPGD bcf STATUS , RP0 ; repasser en bank2 movf EEDATA , W ; charger valeur lue dans W bcf STATUS , RP1 ; passer en bank0 endm ; fin de la macro
WRITEE macro addwrite ; la donnée se trouve dans W bsf STATUS , RP1 bcf STATUS , RP0 ; on passe en bank2 btfsc EECON1 , WR ; teste si l'ecriture précédente est terminée goto $-1 movwf EEDATA ; placer data dans registre movlw addwrite ; charger adresse d'écriture movwf EEADR ; placer adresse dans registre bsf STATUS , RP0 ; passer en bank3 bcf EECON1 , EEPGD ; memoire data bsf EECON1 , WREN ; autoriser accès écriture bcf INTCON , GIE ; arrete les interruptions movlw 0x55 ; charger 0x55 movwf EECON2 ; envoyer commande movlw 0xAA ; charger 0xAA movwf EECON2 ; envoyer commande bsf EECON1 , WR ; lancer cycle d'écriture bcf EECON1 , WREN ; verrouiller prochaine écriture bsf INTCON , GIE ; réautoriser interruptions bcf STATUS , RP1 bcf STATUS , RP0 ; repasser en banque0 bcf EECON1 , EEPGD ; memoire programme endm ;----------------------------------------------------------- ;fin des macros pour l'eeprom ;-----------------------------------------------------------
Numéro de l'article: 73991
| De: Jojo
| Date: 2002-04-19 13:13:21
|
|
|
Re: Acces eeprom sur 16F876
|
|
En voila qui fonctionne générer par le PicBasic http://perso.wanadoo.fr/pat.deaubonne/pic/ http://perso.wanadoo.fr/pat.deaubonne/DOWNLOAD/CoursPicbasic/
exemple de prog basic ================================================ device 16f876 Dim a,b b=1 a = ReadEeprom( 1 ) ' lit une valeur déja sauver à l'adresse 1 -------- a = a +1 ' incrémente la valeur WriteEEprom( A,b ) ' sauver cette valeur à l'adresse 1 -------- ==================================================
les fonctions read et Write pour le 876
;-------- WriteEEprom( A,b ) ' sauver cette valeur à l'adresse 1 -------- bnk0 movf ATMP,W bsf STATUS,RP1 ; bank 2 movwf EEDATA bcf STATUS,RP1 ; bank 0 movf BTMP,W bsf STATUS,RP1 ; bank 2 movwf EEADR bsf STATUS,RP0 ; bank 3 bsf STATUS, RP0 bcf EECON1,EEPGD bsf EECON1,WREN bcf INTCON,GIE movlw 55H movwf EECON2 movlw 0AAH movwf EECON2 bsf EECON1,WR _wee1: btfsc EECON1,WR goto _wee1 bcf INTCON,EEIF bcf EECON1,WREN bnk0 bsf INTCON,GIE ;-------- a = ReadEeprom( 1 ) ' lit une valeur déja sauver à l'adresse 1 -------- movlw 1 ; bank2 bcf STATUS, RP0 bsf STATUS, RP1 movwf EEADR ; bank3 bsf STATUS, RP0 bcf EECON1,EEPGD bsf EECON1,RD bcf STATUS,RP0 movf EEDATA,w ; bank0 bcf STATUS, RP0 bcf STATUS, RP1 movwf ATMP
pat
2 Merci
Numéro de l'article: 74059
| De: pat.deaubonne
| Date: 2002-04-20 08:52:22
|
|
|