' commande de 12 servo moteurs sous interruption ' B.Hoareau Le 7 octobre 2002 Lycée Louis Payen REUNION ' version 2 ' Caractéristique : ' 12 degrés par pas pour le CBOY3 (8Mhz) ' 6 degrés par pas pour le CBOYF1 (16Mhz) ' Commande sur A0 à A5 et B0 à B5 ' Attention, pour le port B il faut enlever l'uln et le strapper ' ' NOM : #include "startcf1.bas" byte t,i1,S,Sb byte A,B,C,D,E,F,G,H,I,J,K,L byte As,Bs,Cs,Ds,Es,Fs,Gs,Hs,Is,Js,Ks,Ls int minute DDRA = 255 ' Port A en sortie ' lcdinit() ' enable l'afficheur PACTL.1 = 1 ' selectioner la vitesse PACTL.0 = 1 TMSK2.6 = 1 ' declencher le timer cli ' autoriser les inter ' Changer les valeurs ci-dessous pour modifier la ' largeur des impulsions (max :33 pour cboy3, 66 pour cboyf1 16mhz 49 pour le 12Mhz) A= 55 ' A0 min:40 , max:70 B= 60 ' A1 C= 60 ' A2 D= 40 ' A3 E= 55 ' A4 F= 60 ' A5 min:40 , max:60 G= 45 ' B0 H= 60 ' B1 I= 55 ' B2 J= 50 ' B3 K= 60 ' B4 L= 60 ' B5 ' Le programme principal (que tu peux modifier à ta guise) do B=30 G=60 K=30 D=40 F=60 J=50 tempo (100) C=40 E=70 I=40 tempo (100) B=60 G=45 K=60 C=60 E=55 I=55 tempo (100) D=60 F=30 J=60 tempo (100) A=70 H=40 L=70 tempo (100) D=40 F=50 J=60 A=55 H=60 L=60 loop ' Sous programme interruption à ne pas toucher interrupt function rtiint at $FFF0 PORTA = 255 PORTB = %00111111 As=A Bs=B Cs=C Ds=D Es=E Fs=F Gs=G Hs=H Is=I Js=J Ks=K Ls=L S = 255 ' pour port A Sb = %00111111 ' pour port B t = 80 ' t=80 pour le cboyF1 16Mhz ' Attention, ne pas modifier les registres A et B LDAA S LDAB Sb boucle: DEC A BNE suite1 ANDA #%11111110 suite1: DEC B BNE suite2 ANDA #%11111101 suite2: DEC C BNE suite3 ANDA #%11111011 suite3: DEC D BNE suite4 ANDA #%11110111 suite4: DEC E BNE suite5 ANDA #%11101111 suite5: DEC F BNE suite6 ANDA #%11011111 ' Pour le port B suite6: DEC G BNE suite7 ANDB #%11111110 suite7: DEC H BNE suite8 ANDB #%11111101 suite8: DEC I BNE suite9 ANDB #%11111011 suite9: DEC J BNE suite10 ANDB #%11110111 suite10: DEC K BNE suite11 ANDB #%11101111 suite11: DEC L BNE suite12 ANDB #%11011111 suite12: STAA PORTA STAB PORTB DEC t BNE boucle PORTA = 0 PORTB = %11000000 A = As B = Bs C = Cs D = Ds E = Es F = Fs G = Gs H = Hs I = Is J = Js K = Ks L = Ls TFLG2.6 = 1 ' autoriser ints a nouveau end function ' #include "lcd.bas" function tempo(cnt) int i, k for cnt=cnt to 0 step -1 for i=0 to 1000 next next end function return