\prog:Pict870s.asm|Envoie alphabet à chaque touche ; Terminal à 9600 b/s .Proc 16F870 .Ref 16F870 .Macro Bank0to1 Set Status:#RP0 .Endmacro .Macro Bank1to0 Clr Status:#RP0 .Endmacro IniAdCon = 2'00001110 ; AN0, Left just DirA = 0 InitA = 0 DirB = 0 InitB = 0 \const;PortC| Série, bTxD = 6 bRxD = 7 DirC = 2'10000000 ; InitC = 2**bTxD ; 1er car ok IniRcSta = 2'10011000 IniTxSta = 2'00100100 IniSpBrg = 10'25 PortSer = 7 ; id \b;Ascii| CR = 16'0D LF = 16'0A BEL = 16'07 \var: | .Loc DebVar C1: .16 1 DataSnd: .Blk.16 1 DataRec: .Blk.16 1 SavBin: .16 1 SavHex: .16 1 SavOrder: .16 1 Temp: .16 1 ;Variables du test Alpha: .Blk.16 1 ; Pointeur dans la chaîne CAlpha: .Blk.16 1 ; Longueur de la chaîne \prog; | .Loc 0 Debut: Clr PortA Bank0to1 Move #IniAdCon,W Move W,AdCon1 Bank1to0 Move #DirA,W Move W,TrisA Move #DirB,W Move W,TrisB Move #DirC,W Move W,TrisC Move #InitA,W Move W,PortA Move #InitB,W Move W,PortB Move #InitC,W Move W,PortC Call Iniser Move #"+",W Call SndSer Loop: Call SndCR Call RecSer ; On recommence à chaque touche pressée Call SndSer Call SndCR Alpha$: Move #"A",W Move W,Alpha Move #26,W Move W,Calpha TA$: Move Alpha,W Inc Alpha Call SndSer DecSkip,EQ Calpha Jump TA$ Jump Loop \b;.Ins XSer7R.asir \prog;XSer7R.asi|Serial receive for 16F87x \rout;SndSer.asi|Serial transfer for 16F87x \in:W \mod;- DataSnd = W initial SndSer: A$: TestSkip,BS PIR1:#TxIF Jump A$ Move W,DataSnd Move W,TxReg Ret \rout;SndCr|Envoi CRLF SndCR: Move #CR,W Call SndSer Move #LF,W Jump SndSer \rout;SndSpace|Envoi espace SndSpace: Move #" ",W Jump SndSer \rout;SndBell|Envoi Bell SndBell: Move #Bel,W Jump SndSer \rout:RecSer|Serial receive at 9600 bit/s \out: DataRec = W RecSer: R$: TestSkip,BS PIR1:#RcIF Jump R$ Move RcReg,W Move W,DataRec Ret \rout:IfSer|Test if new character arrived \out: CC no car W unchanged CS car arrived DataRec = W IfSer: TestSkip,BS PIR1:#RcIF Jump No$ Move RcReg,W Move W,DataRec SetC Ret No$: ClrC Ret \rout:IniSer|Serial port init (after portC init) IniSer: Move #IniRcSta,W Move W,RcSta Bank0to1 Move #IniTxSta,W Move W,TxSta Move #IniSpBrg,W Move W,SpBrg Bank1to0 Clr PIR1 Ret .Align 16'8 .16 "P","i","c","t","8","7","0","s" .Fill.16 FinProg+1-APC,-1 .Loc 16'2007 .16 16'3F39 ; Config .End