.module lampe.c .text .dbfile lampe.c .area text .dbfunc e main _main fI ; IX -> 0,x ; ?temp -> 3,x ; ?temp -> 4,x ; ?temp -> 5,x _main:: jsr __enterb .byte 0x6 .dbline 16{ ; /* Commande de l'intensité de 3 LEDs avec la MLI ; Projet PPE Lampe 2008 */ ; ; #include "hc11.h" ; #include "stdio.h" ; ; void wait(int cnt); ; void compte(int cnt); ; void decompte(int cnt); ; int x; //Durée d'attente ; int T; //Période ; int Th; //Niveau haut ; ; void ; main(void) ; { bra L4 L3: .dbline 19 ; ; while (PORTD &= 0x01) //Tant qu'on maintient le bouton 1 (LED ROUGE) ; { .dbline 20 ; DDRA = 0xFF; //Le port A n'a que des sorties ldab #255 stab 0x1001 .dbline 21 ; PORTA &= ~0xFF; ldy #0x1000 bclr 0,y,#0xff .dbline 22 ; T = 10000; //La période vaut 10000 ldd #10000 std _T .dbline 23 ; Th=0; //Les leds sont éteintes ldd #0 std _Th .dbline 24 ; x = 20000; //On fixe la durée d'attente à 20 000 ldd #20000 std _x .dbline 25 ; compte(Th); //J'augmente Th pour augmenter l'intensité de la LED ldd _Th jsr _compte .dbline 26 ; wait(x); //On attend x ldd _x jsr _wait .dbline 27 ; decompte(Th); //Je diminue Th pour diminuer l'intensité de la LED ldd _Th jsr _decompte .dbline 28 ; wait(x); //On attend x ldd _x jsr _wait bra L7 L6: .dbline 30 .dbline 31 ldy #0x1000 bset 0,y,#1 .dbline 32 ldd _Th jsr _wait .dbline 33 ldy #0x1000 bclr 0,y,#0x1 .dbline 34 ldd _T subd _Th jsr _wait .dbline 35 L7: .dbline 29 ; while(1) bra L6 X0: .dbline 36 L4: .dbline 18 ; vol ldab 0x1008 andb #1 stab 5,x stab 0x1008 tst 5,x bne L3 bra L10 L9: .dbline 38 ; { ; PORTA |= 0x01; //On met PA0 à 1 ; wait(Th); //On attend pendant Th (déjà calculé par "compte" et "decompte") ; PORTA &= ~0x01; //On met PA0 à 0 ; wait(T-Th); //On attend pendant Tb ; } ; } ; while (PORTD &= 0x02) //Tant qu'on maintient le bouton 2 (LED VERTE) ; { .dbline 39 ; DDRA = 0xFF; //Le port A n'a que des sorties ldab #255 stab 0x1001 .dbline 40 ; PORTA &= ~0xFF; ldy #0x1000 bclr 0,y,#0xff .dbline 41 ; T = 10000; //La période vaut 10000 ldd #10000 std _T .dbline 42 ; Th=0; //Les leds sont éteintes ldd #0 std _Th .dbline 43 ; x = 20000; //On fixe la durée d'attente à 20 000 ldd #20000 std _x .dbline 44 ; compte(Th); //J'augmente Th pour augmenter l'intensité de la LED ldd _Th jsr _compte .dbline 45 ; wait(x); //On attend x ldd _x jsr _wait .dbline 46 ; decompte(Th); //Je diminue Th pour diminuer l'intensité de la LED ldd _Th jsr _decompte .dbline 47 ; wait(x); //On attend x ldd _x jsr _wait bra L13 L12: .dbline 49 .dbline 50 ldy #0x1000 bset 0,y,#2 .dbline 51 ldd _Th jsr _wait .dbline 52 ldy #0x1000 bclr 0,y,#0x2 .dbline 53 ldd _T subd _Th jsr _wait .dbline 54 L13: .dbline 48 ; while(1) bra L12 X1: .dbline 55 L10: .dbline 37 ; vol ldab 0x1008 andb #2 stab 4,x stab 0x1008 tst 4,x bne L9 bra L16 L15: .dbline 57 ; { ; PORTA |= 0x02; //On met PA1 à 1 ; wait(Th); //On attend pendant Th (déjà calculé par "compte" et "decompte") ; PORTA &= ~0x02; //On met PA1 à 0 ; wait(T-Th); //On attend pendant Tb = T-Th ; } ; } ; while (PORTD &= 0x04) //Tant qu'on maintient le bouton 3 (LED BLEUE) ; { .dbline 58 ; DDRA = 0xFF; //Le port A n'a que des sorties ldab #255 stab 0x1001 .dbline 59 ; PORTA &= ~0xFF; ldy #0x1000 bclr 0,y,#0xff .dbline 60 ; T = 10000; //La période vaut 10000 ldd #10000 std _T .dbline 61 ; Th=0; //Les leds sont éteintes ldd #0 std _Th .dbline 62 ; x = 20000; //On fixe la durée d'attente à 20 000 ldd #20000 std _x .dbline 63 ; compte(Th); //J'augmente Th pour augmenter l'intensité de la LED ldd _Th jsr _compte .dbline 64 ; wait(x); //On attend x ldd _x jsr _wait .dbline 65 ; decompte(Th); //Je diminue Th pour diminuer l'intensité de la LED ldd _Th jsr _decompte .dbline 66 ; wait(x); //On attend x ldd _x jsr _wait bra L19 L18: .dbline 68 .dbline 69 ldy #0x1000 bset 0,y,#4 .dbline 70 ldd _Th jsr _wait .dbline 71 ldy #0x1000 bclr 0,y,#0x4 .dbline 72 ldd _T subd _Th jsr _wait .dbline 73 L19: .dbline 67 ; while(1) bra L18 X2: .dbline 74 L16: .dbline 56 ; vol ldab 0x1008 andb #4 stab 3,x stab 0x1008 tst 3,x bne L15 .dbline 75} ; { ; PORTA |= 0x04; //On met PA2 à 1 ; wait(Th); //On attend pendant Th (déjà calculé par "compte" et "decompte") ; PORTA &= ~0x04; //On met PA2 à 0 ; wait(T-Th); //On attend pendant Tb ; } ; } ; } L2: xgdx addd #6 xgdx txs pulx rts .dbstack x8 0 .dbfunc e wait _wait fI ; IX -> 0,x ; cnt -> 4,x _wait:: pshb psha pshx pshx tsx stx 0,x .dbline 79{ ; ; void ; wait(int cnt) ; { .dbline 80 bra L25 L22: .dbline 80 L23: .dbline 80 ldd 4,x subd #1 std 4,x L25: .dbline 80 ; for (;cnt>0; cnt--); ldd 4,x bgt L22 .dbline 81} ; } L21: inx inx txs pulx puly rts .dbstack x6 0 .dbsym l cnt 4 I .dbfunc e compte _compte fI ; cnt -> 2,x _compte:: .dbline 85{ ; ; void ; compte(int cnt) ; { .dbline 86 ldd #0 std _Th L27: .dbline 86 L28: .dbline 86 ; for (Th=0; Th<10000; Th++); //Tant que Th n'a pas complètement augmenté ldd _Th addd #1 std _Th .dbline 86 ldd _Th cpd #10000 blt L27 .dbline 87} ; } L26: rts .dbstack s1 0 .dbsym l cnt 2 I .dbfunc e decompte _decompte fI ; cnt -> 2,x _decompte:: .dbline 91{ ; ; void ; decompte(int cnt) ; { .dbline 92 ldd #10000 std _Th L32: .dbline 92 L33: .dbline 92 ; for (Th=10000 ; Th>0 ; Th--); //Tant que Th n'a pas complètement diminué ldd _Th subd #1 std _Th .dbline 92 ldd _Th bgt L32 .dbline 93} ; } L31: rts .dbstack s1 0 .dbsym l cnt 2 I .area bss _Th:: .blkb 2 .dbsym e Th _Th I _T:: .blkb 2 .dbsym e T _T I _x:: .blkb 2 .dbsym e x _x I