\prog:Pict676ed|Ecrit (10 ms) relit l'EEPROM d'un 16F676 ; Tout en banque 1 sauf les ports! .Proc 16F870 .Ref 16F676 .Macro Bank0 Clr Status:#RP0 .endmacro .Macro Bank1 Set Status:#RP0 .endmacro \var;Ports| \b;PortA bD = 0 bCk = 1 ; AN3 = 4 DirA = 2'011000 DirC = 0 \var; | .Loc DebVar C0: .16 1 C1: .16 1 C2: .16 1 C3: .16 1 Data: .16 1 Temp: .16 1 Adr = 0 Motif = 16'53 \prog;Programme| .Loc 0 Start: Call Init Move #Adr,W Bank1 Move W,EEAdr Write: SetC RLC Motif ; Motif se décalant Move Motif,W Move W,EeData Inc EeAdr Call EeWrite DecSkip,EQ C0 Jump Write Move #8,W Move W,C0 Clr EeAdr Read: Call EeRead Call SndS8 Inc EEAdr Move #60,W ; Espace entre mots Call LongDelai DecSkip,EQ C0 Jump Read Clr PortA Jump APC \prog;XeeP676R.asi|030731 Ecriture en EEprom 16F676/675 \rout:WrEeprom| Ecriture 1 byte dans l'EEPROM \in;EEADR- adresse 6 bits EEDATA- data 8 bit \mod;W EeWrite: Set EeCon1:#WrEn ; mise à 1 de write Enable Move #16'55,W Move W,EeCon2 Move #16'AA,W ; écritures préliminaires de sécurité Move W,EeCon2 Set EeCon1:#WR w$: TestSkip,BC EeCon1:#WR ; Test si la écriture est términé Jump w$ Clr EeCon1:#WrEn Ret \rout:EERead| Lecture 1 byte depuis l'EEPROM \in:EEAdr Adrese 0..63 \out; W et EEDATA- Data lu \mod: - EERead: Set EeCon1:#RD ; mode lecture Move EeData,W Ret \rout:Init| Init: Bank0 Clr PortA Move #16'07,W ; Déconnecte les comparateurs Move W,CmCon Bank1 Clr AnSel ; Déconnecte le A/D Call 16'3FF Move W,OscCal ; Corrige la fréquence Move #DirA,W Move W,TrisA Move #DirC,W Move W,TrisC Ret \macro;Registre à décalage série| \b;Les transferts durent 85 us et ne doivent être espacés \b;de 1 à 10 ms au moins. .Macro SetD Set PortA:#bD Nop .EndMacro .Macro ClrD Clr PortA:#bD Nop .EndMacro .Macro SetCk Set PortA:#bCk .EndMacro .Macro ClrCk Clr PortA:#bCk .EndMacro .Macro FullCk ; Ck .../'''\... SetCk Nop ; 1 \mu;s pulse min ClrCk .EndMacro \rout;SndS8|Envoie et lit 8 bits, sans Start/Stop=Ld ; Durée 85 microsecondes \in;W (data in) \out;W = DataOut \mod;W C1 Data ; CK ________/'\\__/'\\__/'\\_... _/'\\_____ ; Dout XXXXX\\_===\\_===\\_=== ... \\======== SndS8: Move W,Data Move #8,W Move W,C1 Bank0 L$: ClrD RRC Data Skip,CC SetD FullCk DecSkip,EQ C1 Jump L$ Bank1 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","t","6","7","6","e","d" .Fill.16 FinProg+1-APC,-1 .Loc 16'2007 .16 16'3F94 ; Configuration .End