\prog:Pict870e|Ecrit (10 ms) et lit l'EEPROM ; Le programme écrit de 22 à 22+16 dans 0..16 ; et relit lentement pour afficher sur le portB .Proc 16F870 .Ref 16F870 Motif = 16'5 .Macro Bank0 Clr Status:#RP0 Clr Status:#RP1 .endmacro .Macro Bank2to0 Clr Status:#RP1 .endmacro .Macro Bank1to0 Clr Status:#RP0 .endmacro .Macro Bank1 Set Status:#RP0 Clr Status:#RP1 .endmacro .Macro Bank0to1 Set Status:#RP0 .endmacro .Macro Bank3to1 Clr Status:#RP1 .endmacro .Macro Bank2 Clr Status:#RP0 Set Status:#RP1 .endmacro .Macro Bank3to2 Clr Status:#RP0 .endmacro .Macro Bank0to2 Set Status:#RP1 .endmacro .Macro Bank3 Set Status:#RP0 Set Status:#RP1 .endmacro .Macro Bank2to3 Set Status:#RP0 .endmacro .Macro Bank1to3 Set Status:#RP1 .endmacro \var;Ports| DirA = 2'11111 ; Pas utilisé DirB = 0 ; affichage data \var; | .Loc Debvar C0: .16 1 C1: .16 1 C2: .16 1 C3: .16 1 Data: .16 1 \prog;Programme| .Loc 0 Start: Move #DirB,W Move W,TrisB Write: Move #Motif,W Bank0to2 Move W,EEData Clr EEAdr Bank2to0 Move #16,W Move W,C0 L$: ; On écrit les valeurs à partir de #Motif Call EeWrite Bank0to2 Inc EEadr Inc EEdata Bank2to0 DecSkip,EQ C0 Jump L$ Read: Bank0to2 Clr EEAdr Bank2to0 Move #16,W Move W,C0 L$: ; On relit les valeurs Call EeRead Move W,PortB Not PortB Bank0to2 Inc EeAdr Bank2to0 ; Attente pour ralentir la vitesse de défilemnent des nombres Move #40,W Call LongDelai DecSkip,EQ C0 Jump L$ Fin: Move #2'01010101,W Move W,PortB Jump APC ; On ne recommence pas .ins xeep870r.asi .ins xdelair.asi .End \prog:XEep870R.asi| (extrait) Ecrit et lit l'EEPROM Data ; EeWrite (10 ms) EeRead Data memory 64 bytes. ; FlashWr (4ms) FlashRd Flash program memory 2-8K ; L'appel peut se faire dans n'importe quelle banque, mais on revient en banque 0 ; Fichiers à importer: .Pro 16F870 .Ref 16F870 .Ins 16F870M.asi ; Exemple pour EeWrite EEread XEe870 avec interface série ; Exemple d'utilisation pour EpromRd=FlashRr/EpromWr=FlashWr: LD870.asm \rout:EeWrite| Ecriture d'un octet en eeprom data (64 bytes); adresse autoincrémentée \in;EeAdr adresse 6 bits EeData data 8 bit - page 2 EeWrite: Bank3 Clr EECON1:#EEPGD Set EECON1:#WREN Move #16'55,W Move W,EECON2 Move #16'AA,W Move W,EECON2 Set EECON1:#WR W$: TestSkip,BC EECON1:#WR ; terminé? Jump W$ Clr EECON1:#WREN Bank0 Ret \rout:EeRead| Lecture d'un byte, adr autoincrémentée \in:EeAdr Adrese 0..63 - page 2 \out; W (=EEDATA en bank2) Data lu \mod: - EeRead: Bank3 Clr EECON1:#EEPGD Set EECON1:#RD Bank3to2 Move EeData,W Bank2to0 Ret \rout:LongDelai|Delai multiple de 0.02 s \in;W delai 0.02 .. 5 sec \mod;C1 C2 C3 W LongDelai: Move W,C3 L$: Move #200,W Move W,C2 A$: Move #32,W ;Boucle interne 100\mu;s Move W,C1 B$: DecSkip,EQ C1 Jump B$ DecSkip,EQ C2 Jump A$ DecSkip,Eq C3 Jump L$ Ret .Align 16'8 .16 "P","i","c","t","8","7","0","e" .Fill.16 FinProg+1-APC,-1 .Loc 16'2007 .16 16'3F39 ; Config .End