.module debug.c .area text ; baud -> 2,x 0000 _init_SCI:: ; #include "HC12.H" ; ; int Mille,Centaine,Dizaine,Unite; ; ; int val; ; ; unsigned int canal[8]; ; char ascii[8]; ; ; /**************************************************************************/ ; void init_SCI(unsigned int baud) ; { ; asm(" SEI"); 0000 1410 SEI ; ; SCICR1 = 0x00; /* 0 0 0 0 0 0 0 0 /* 8bits et pas de parit� */ 0002 7900CA clr 0xca ; /* | | | | | | | | ; | | | | | | | \____ Even Parity ; | | | | | | \______ Parity Disabled ; | | | | | \________ Short IDLE line mode (not used) ; | | | | \__________ Wakeup by IDLE line rec (not used) ; | | | \____________ 8 data bits ; | | \______________ Not used (loopback disabled) ; | \________________ SCI1 enabled in wait mode ; \__________________ Normal (not loopback) mode ; */ ; SCICR2 = 0x2C; /* 0 0 1 0 1 1 0 0 /* TX et RX actif + RX int*/ 0005 C62C ldab #44 0007 7B00CB stab 0xcb ; /* | | | | | | | | ; | | | | | | | \____ No Break ; | | | | | | \______ Not in wakeup mode (always awake) ; | | | | | \________ Reciever enabled ; | | | | \__________ Transmitter disabled ; | | | \____________ No IDLE Interrupt ; | | \______________ Reciever Interrupts used ; | \________________ No Tranmit Complete Interrupt ; \__________________ No Tranmit Ready Interrupt ; */ ; SCIBDH = 0x00; 000A 7900C8 clr 0xc8 ; SCIBDL = 0x34; // 9600 bauds (52 en d�cimal) 000D C634 ldab #52 000F 7B00C9 stab 0xc9 ; asm(" CLI"); 0012 10EF CLI ; } 0014 L1: 0014 .dbline 0 ; func end 0014 3D rts 0015 _initialise_SCI:: ; ; /**************************************************************************/ ; void initialise_SCI(void) ; { ; SCIBDH = 0x34; // 9600bps @ 8MHz Mclk 0015 C634 ldab #52 0017 7B00C8 stab 0xc8 ; SCIBDL = 0x00; 001A 7900C9 clr 0xc9 ; SCICR1 = 0x00; // mode normal 8bits 001D 7900CA clr 0xca ; SCICR2 = 0x0C; // pas d'interruption, pas de parit� 0020 C60C ldab #12 0022 7B00CB stab 0xcb ; } 0025 L2: 0025 .dbline 0 ; func end 0025 3D rts 0026 _init_ADC:: ; /**************************************************************************/ ; void init_ADC(void) ; { ; ATDCTL2 = 0xC0; /* d�marrage ADC */ 0026 C6C0 ldab #192 0028 7B0122 stab 0x122 ; ATDCTL3 = 0x00; /* cycle de 8 conversions */ 002B 790123 clr 0x123 ; ATDCTL4 = 0x75; /* mode 10 bits */ 002E C675 ldab #117 0030 7B0124 stab 0x124 ; ATDCTL5 = 0x90; /* 1 0 0 1 0 0 0 0 0033 C690 ldab #144 0035 7B0125 stab 0x125 ; | | | | \__/ ; | | | | | ; | | | | \___ First channel = 2 ; | | | \________ MULT = 1 => multiple channels ; | | \__________ SCAN = 0 => one set of conversions ; | \____________ DSGN = 0 => unsigned ; \______________ DJM = 1 => right justified ; */ ; } 0038 L3: 0038 .dbline 0 ; func end 0038 3D rts ; i -> -2,x ; data -> 3,x 0039 _ecrire_data:: 0039 3B pshd 003A 34 pshx 003B B775 tfr s,x 003D 1B9E leas -2,sp ; /**********************************************************/ ; void ecrire_data(char data) ; { ; int i; ; ; i= 0x55; 003F CC0055 ldd #85 0042 6C1E std -2,x ; ; return; 0044 L4: 0044 B757 tfr x,s 0046 30 pulx 0047 1B82 leas 2,sp 0049 .dbline 0 ; func end 0049 3D rts ; buffer -> 2,x 004A _ecrire_chaine:: 004A 3B pshd 004B 34 pshx 004C B775 tfr s,x ; } ; /**********************************************************/ ; void ecrire_chaine(char *buffer) ; { 004E 200F bra L7 0050 L6: 0050 ED02 ldy 2,x 0052 E640 ldab 0,y 0054 87 clra 0055 160039 jsr _ecrire_data 0058 EC02 ldd 2,x 005A C30001 addd #1 005D 6C02 std 2,x 005F L7: ; while(*buffer) 005F ED02 ldy 2,x 0061 E740 tst 0,y 0063 26EB bne L6 ; { ecrire_data(*buffer); ; buffer++; ; } ; return; 0065 L5: 0065 B757 tfr x,s 0067 30 pulx 0068 1B82 leas 2,sp 006A .dbline 0 ; func end 006A 3D rts ; compare -> -2,x 006B _conversion_decimal:: 006B 34 pshx 006C B775 tfr s,x 006E 1B9E leas -2,sp ; } ; /**********************************************************/ ; void conversion_decimal(void) ; { ; ; int compare; ; ; Mille = 0; 0070 CC0000 ldd #0 0073 7C0020 std _Mille ; Centaine = 0; 0076 CC0000 ldd #0 0079 7C001E std _Centaine ; Dizaine = 0; 007C CC0000 ldd #0 007F 7C001C std _Dizaine ; Unite = 0; 0082 CC0000 ldd #0 0085 7C001A std _Unite ; ; // recherche du nombre en d�cimal - 4 chiffres ; ; compare=val; 0088 18011E0018 movw _val,-2,x 008D 2010 bra L11 008F L10: 008F FC0020 ldd _Mille 0092 C30001 addd #1 0095 7C0020 std _Mille 0098 EC1E ldd -2,x 009A 8303E8 subd #1000 009D 6C1E std -2,x 009F L11: ; ; while( compare > 1000 ) // nombre de paquets de 1000 009F EC1E ldd -2,x 00A1 8C03E8 cpd #1000 00A4 2EE9 bgt L10 00A6 2010 bra L14 00A8 L13: 00A8 FC001E ldd _Centaine 00AB C30001 addd #1 00AE 7C001E std _Centaine 00B1 EC1E ldd -2,x 00B3 830064 subd #100 00B6 6C1E std -2,x 00B8 L14: ; { Mille++; ; compare=compare-1000; ; } ; while( compare > 100 ) // nombre de centaines 00B8 EC1E ldd -2,x 00BA 8C0064 cpd #100 00BD 2EE9 bgt L13 00BF 2010 bra L17 00C1 L16: 00C1 FC001C ldd _Dizaine 00C4 C30001 addd #1 00C7 7C001C std _Dizaine 00CA EC1E ldd -2,x 00CC 83000A subd #10 00CF 6C1E std -2,x 00D1 L17: ; { Centaine++; ; compare=compare-100; ; } ; while( compare > 10 ) // nombre de dizaines 00D1 EC1E ldd -2,x 00D3 8C000A cpd #10 00D6 2EE9 bgt L16 ; { Dizaine++; ; compare=compare-10; ; } ; ; Unite=compare; 00D8 18051E001A movw -2,x,_Unite ; } 00DD L9: 00DD B757 tfr x,s 00DF 30 pulx 00E0 .dbline 0 ; func end 00E0 3D rts 00E1 _conversion_Ascii:: ; /**********************************************************/ ; void conversion_Ascii(void) ; { ; ; ascii[0]=Mille+0x30; 00E1 FC0020 ldd _Mille 00E4 C30030 addd #48 00E7 7B0000 stab _ascii ; ascii[1]='.'; // affiche virgule 00EA C62E ldab #46 00EC 7B0001 stab _ascii+1 ; ascii[2]=Centaine+0x30; // centaines de mV 00EF FC001E ldd _Centaine 00F2 C30030 addd #48 00F5 7B0002 stab _ascii+2 ; ascii[3]=Dizaine+0x30; // dizaines de mV 00F8 FC001C ldd _Dizaine 00FB C30030 addd #48 00FE 7B0003 stab _ascii+3 ; ascii[4]=Unite+0x30; // affiche les mV 0101 FC001A ldd _Unite 0104 C30030 addd #48 0107 7B0004 stab _ascii+4 ; ascii[5]='V'; // affiche le V de Volt 010A C656 ldab #86 010C 7B0005 stab _ascii+5 ; } 010F L19: 010F .dbline 0 ; func end 010F 3D rts 0110 _acquisition:: ; /**********************************************************/ ; void acquisition(void) ; { ; ATDCTL5 = 0x90; // lance la conversion 0110 C690 ldab #144 0112 7B0125 stab 0x125 0115 L26: 0115 L27: ; ; while ((ADSTAT0 & 0x80) == 0 ) ; /* attendre la fin de la conversion */ 0115 1F012680FB brclr 0x126,#128,L26 ; canal[0] = ADR0; ; vol 011A FD0130 ldy 0x130 011D 7D0008 sty _canal ; canal[1] = ADR1; ; vol 0120 FD0132 ldy 0x132 0123 7D000A sty _canal+2 ; canal[2] = ADR2; ; vol 0126 FD0134 ldy 0x134 0129 7D000C sty _canal+4 ; canal[3] = ADR3; ; vol 012C FD0136 ldy 0x136 012F 7D000E sty _canal+6 ; canal[4] = ADR4; ; vol 0132 FD0138 ldy 0x138 0135 7D0010 sty _canal+8 ; canal[5] = ADR5; ; vol 0138 FD013A ldy 0x13a 013B 7D0012 sty _canal+10 ; canal[6] = ADR6; ; vol 013E FD013C ldy 0x13c 0141 7D0014 sty _canal+12 ; canal[7] = ADR7; ; vol 0144 FD013E ldy 0x13e 0147 7D0016 sty _canal+14 ; } 014A L25: 014A .dbline 0 ; func end 014A 3D rts 014B _traitement:: ; /**************************************************************************/ ; void traitement(void) ; { ; ; // lire le r�sultat + stockage ; canal[6]= ADR6; ; vol 014B FD013C ldy 0x13c 014E 7D0014 sty _canal+12 ; ; val= (ADR6 * 4888)/10000; 0151 CC1318 ldd #4888 ; vol 0154 FD013C ldy 0x13c 0157 13 emul 0158 CD2710 ldy #10000 015B B7D6 exg x,y 015D 1810 idiv 015F B7D6 exg x,y 0161 7D0018 sty _val ; ; } 0164 L36: 0164 .dbline 0 ; func end 0164 3D rts ; c -> 3,x 0165 _envoi_caractere:: 0165 3B pshd 0166 34 pshx 0167 B775 tfr s,x ; /**************************************************************************/ ; void envoi_caractere(char c) ; { 0169 L39: 0169 L40: ; while( (SCISR1 & 0x80 )== 0 ); // attendre la mont�e du flag TDRE 0169 1F00CC80FB brclr 0xcc,#128,L39 ; SCIDRL = c; 016E 180D0300CF movb 3,x,0xcf ; ; } 0173 L38: 0173 B757 tfr x,s 0175 30 pulx 0176 1B82 leas 2,sp 0178 .dbline 0 ; func end 0178 3D rts ; ptr -> -2,x ; str -> 2,x 0179 _envoi_chaine:: 0179 3B pshd 017A 34 pshx 017B B775 tfr s,x 017D 1B9E leas -2,sp ; /**********************************************************/ ; void envoi_chaine(char str[]) ; { ; char *ptr; ; ; for(ptr = str; *ptr != '\0' ; ptr++ ) 017F 1802021E movw 2,x,-2,x 0183 200F bra L46 0185 L43: 0185 ED1E ldy -2,x 0187 E640 ldab 0,y 0189 87 clra 018A 160165 jsr _envoi_caractere 018D L44: 018D EC1E ldd -2,x 018F C30001 addd #1 0192 6C1E std -2,x 0194 L46: 0194 ED1E ldy -2,x 0196 E740 tst 0,y 0198 26EB bne L43 ; { envoi_caractere(*ptr); ; } ; } 019A L42: 019A B757 tfr x,s 019C 30 pulx 019D 1B82 leas 2,sp 019F .dbline 0 ; func end 019F 3D rts 01A0 _transmettre_CRLF:: ; /**************************************************************************/ ; void transmettre_CRLF(void) ; { ; SCIDRL = 0x0A; // fin de ligne = end of line 01A0 C60A ldab #10 01A2 7B00CF stab 0xcf 01A5 L48: 01A5 L49: ; while ( (SCISR1 & 0x80) == 0) ; // attendre le flag TDRE 01A5 1F00CC80FB brclr 0xcc,#128,L48 ; SCIDRL = 0x0D; // retour � la ligne = line feed 01AA C60D ldab #13 01AC 7B00CF stab 0xcf 01AF L51: 01AF L52: ; while ( (SCISR1 & 0x80) == 0) ; // attendre le flag TDRE 01AF 1F00CC80FB brclr 0xcc,#128,L51 ; ; } 01B4 L47: 01B4 .dbline 0 ; func end 01B4 3D rts ; ptr -> -2,x 01B5 _main:: 01B5 34 pshx 01B6 B775 tfr s,x 01B8 1B9E leas -2,sp ; /**************************************************************************/ ; void main(void) ; { ; /*char buffer[10]=""; ; ; char v; ; char *ptr; ; ; buffer[0]='A'; ; buffer[1]='b'; ; buffer[2]='c'; ; buffer[3]='d'; ; ; v=buffer[2]; ; p=ascii; ; ecrire_chaine(p);*/ ; ; char *ptr; ; ; COPCTL=0x00; 01BA 79003C clr 0x3c ; init_ADC(); 01BD 160026 jsr _init_ADC ; init_SCI(9600); 01C0 CC2580 ldd #9600 01C3 160000 jsr _init_SCI 01C6 2019 bra L56 01C8 L55: 01C8 1601A0 jsr _transmettre_CRLF 01CB 160110 jsr _acquisition 01CE 16014B jsr _traitement 01D1 16006B jsr _conversion_decimal 01D4 1600E1 jsr _conversion_Ascii 01D7 CC0000 ldd #_ascii 01DA 6C1E std -2,x 01DC EC1E ldd -2,x 01DE 160179 jsr _envoi_chaine 01E1 L56: ; ; while(1) 01E1 20E5 bra L55 01E3 X0: ; { transmettre_CRLF(); ; acquisition(); ; traitement(); ; conversion_decimal(); ; conversion_Ascii(); ; ptr=ascii; ; envoi_chaine(ptr); ; } ; } 01E3 L54: 01E3 B757 tfr x,s 01E5 30 pulx 01E6 .dbline 0 ; func end 01E6 3D rts .area bss 0000 _ascii:: 0000 .blkb 8 0008 _canal:: 0008 .blkb 16 0018 _val:: 0018 .blkb 2 001A _Unite:: 001A .blkb 2 001C _Dizaine:: 001C .blkb 2 001E _Centaine:: 001E .blkb 2 0020 _Mille:: 0020 .blkb 2