1 ; C Compiler for STM8 (COSMIC Software) 2 ; Parser V4.8.32 - 23 Mar 2010 3 ; Generator V4.3.4 - 23 Mar 2010 2468 ; 18 void ADC_INIT() 2468 ; 19 { 2470 switch .text 2471 0000 _ADC_INIT: 2475 ; 21 CLK_PCKENR2 |=0x08; 2477 0000 721650ca bset _CLK_PCKENR2,#3 2478 ; 23 ADC_CR1 = 0x00; 2480 0004 725f5401 clr _ADC_CR1 2481 ; 25 ADC_CR2 = 0x08; 2483 0008 35085402 mov _ADC_CR2,#8 2484 ; 27 ADC_CR3 = 0x00; 2486 000c 725f5403 clr _ADC_CR3 2487 ; 30 ADC_TDRH = 0x00; 2489 0010 725f5406 clr _ADC_TDRH 2490 ; 31 ADC_TDRL = 0x00; 2492 0014 725f5407 clr _ADC_TDRL 2493 ; 32 } 2496 0018 81 ret 2560 ; 39 unsigned int getADCValue(unsigned char channel){ 2561 switch .text 2562 0019 _getADCValue: 2564 0019 88 push a 2565 001a 5204 subw sp,#4 2566 00000004 OFST: set 4 2569 ; 41 unsigned int tmp = 0; 2571 001c 5f clrw x 2572 001d 1f01 ldw (OFST-3,sp),x 2573 ; 42 unsigned int j = 60,i; 2575 ; 44 ADC_CSR &=0xF0; 2577 001f c65400 ld a,_ADC_CSR 2578 0022 a4f0 and a,#240 2579 0024 c75400 ld _ADC_CSR,a 2580 ; 46 if(channel < 16){ 2582 0027 7b05 ld a,(OFST+1,sp) 2583 0029 a110 cp a,#16 2584 002b 244b jruge L3361 2585 ; 48 ADC_CSR |= channel; 2587 002d c65400 ld a,_ADC_CSR 2588 0030 1a05 or a,(OFST+1,sp) 2589 0032 c75400 ld _ADC_CSR,a 2590 ; 50 ADC_CR1 |= 0x01; 2592 0035 72105401 bset _ADC_CR1,#0 2593 ; 52 j = 60; 2595 0039 ae003c ldw x,#60 2596 003c 1f03 ldw (OFST-1,sp),x 2597 ; 53 tmp = 0; 2599 003e 5f clrw x 2600 003f 1f01 ldw (OFST-3,sp),x 2602 0041 L1461: 2603 ; 54 while(j--); 2605 0041 1e03 ldw x,(OFST-1,sp) 2606 0043 1d0001 subw x,#1 2607 0046 1f03 ldw (OFST-1,sp),x 2608 0048 1c0001 addw x,#1 2609 004b a30000 cpw x,#0 2610 004e 26f1 jrne L1461 2611 ; 56 for(i=0;i<10;i++) { 2613 0050 5f clrw x 2614 0051 1f03 ldw (OFST-1,sp),x 2615 0053 L5461: 2616 ; 59 ADC_CR1 |= 0x01; 2618 0053 72105401 bset _ADC_CR1,#0 2620 0057 L5561: 2621 ; 61 while((ADC_CSR & 0x80) == 0); 2623 0057 c65400 ld a,_ADC_CSR 2624 005a a580 bcp a,#128 2625 005c 27f9 jreq L5561 2626 ; 63 ADC_CSR &= (~0x80); 2628 005e 721f5400 bres _ADC_CSR,#7 2629 ; 65 tmp += *((uint *)&ADC_DRH); 2631 0062 1e01 ldw x,(OFST-3,sp) 2632 0064 72bb5404 addw x,_ADC_DRH 2633 0068 1f01 ldw (OFST-3,sp),x 2634 ; 56 for(i=0;i<10;i++) { 2636 006a 1e03 ldw x,(OFST-1,sp) 2637 006c 1c0001 addw x,#1 2638 006f 1f03 ldw (OFST-1,sp),x 2641 0071 1e03 ldw x,(OFST-1,sp) 2642 0073 a3000a cpw x,#10 2643 0076 25db jrult L5461 2644 0078 L3361: 2645 ; 77 ADC_CR1 &= ~0x01; 2647 0078 72115401 bres _ADC_CR1,#0 2648 ; 80 return tmp/10; 2650 007c 1e01 ldw x,(OFST-3,sp) 2651 007e 90ae000a ldw y,#10 2652 0082 65 divw x,y 2655 0083 5b05 addw sp,#5 2656 0085 81 ret 2681 xdef _getADCValue 2682 xdef _ADC_INIT 2683 switch .ubsct 2684 0000 _adcvalue: 2685 0000 000000000000 ds.b 20 2686 xdef _adcvalue 2706 end