Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Imprecisione su Timer0 (PIC18)

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Imprecisione su Timer0 (PIC18)

Messaggioda Foto Utentethexeno » 4 mag 2014, 15:07

Ciao!

Ho voluto provare un servomotore di quelli senza fine, che non hanno un feedback da un potenziometro.
Questi motori hanno un potenziometro solo per una calibrazione fatta a mano. Detto questo, il mio motore, su impulsi distanti fino a 20ms (nel programma sono 10 ms, circa 100Hz) riceve appunto impulsi, il duty cycle del segnale, di valori da 1.3ms a 1.7ms, dove su 1.5ms il motore è fermo e negli altri due gira nelle due direzioni.

Il programma genera correttamente i miei impulsi ogni 10ms ma sul mio oscilloscopio c'è qualcosa che non torna per il duty cycle: sono impulsi generati correttamente distanziati di 0.2ms per incremento ma tutti sono più lunghi di 0.1ms. Quindi ho 1.4ms, 1.6ms e 1.8ms

Volevo chiedervi se c'è qualcosa che non torna nel codice che posto qui sotto. Tenendo conto del troncamento, avrei un errore dell'1% del valore. Ma evidentemente mi sbaglio. Credo sia lì l'inghippo, perché i 100Hz sembrano essere corretti. E grazie a tutti anticipatamente!

Le funzioni usate:
Codice: Seleziona tutto
void timer0_init(void)
{
    /* include anche i suoi interrupt*/
    /* off
     * 16bit
     * fosc/4
     * 256 prescaler
     *
     *
     *
     */
    T0CON = 0b00000111;
   
    /* abilita interrupts e il timer int, bit 2 IF timer 0*/
   
    INTCON = 0b11100000;
}

    void InitApp() {
    /* interrupt enable di tutto il resto, PIE*/

    /* interrupt priority per ogni periferica IPR*/

    /*The RCON register contains bits used to determine the
cause of the last Reset or wake-up from Idle or Sleep
mode. RCON also contains the bit that enables
interrupt priorities (IPEN).*/
    RCONbits.IPEN = 1;

    TRISDbits.TRISD4 = 1;  //
  TRISDbits.TRISD5 = 1;  // pulsanti
  RPINR1 = 22; // RD5 - usa HW esterno e polling in INT per usare piu pulsanti
  RPINR2 = 21; // RD4
    INTCON2bits.INTEDG1 = 0;
  INTCON3bits.INT1P = 1; //  prior
  INTCON3bits.INT1E = 1; // attiva
  INTCON3bits.INT1IF = 0; // no int all'inizio

  INTCON2bits.INTEDG2 = 0;
  INTCON3bits.INT2P = 1; //  prior
  INTCON3bits.INT2E = 1; // attiva
  INTCON3bits.INT2IF = 0; // no int all'inizio

    TRISDbits.TRISD7 = 0;
    PORTDbits.RD7 = 0;
    TRISDbits.TRISD6 = 0;
    PORTDbits.RD6 = 0;

}

void freq_t0(long f, long presc){             // LA FUNZIONE INDAGATA!
    int timer = (int) (65536 - (FCY)/(f*presc));
   
    TMR0H = timer >> 8;
    TMR0L = timer;
}


dove FCY è 12000000

e il main, seguito dalla gestione di interrupt:

Codice: Seleziona tutto
int duty = 0;
int count =-1;
volatile bool periodo_lungo = 1;
int i = 0;

void main(void)
{

    ConfigureOscillator();

    InitApp();
    usart_init();
    timer0_init();

    freq_t0(1, 256);

    /*min duty = 769
     * middle duty = 667 Hz
     * max duty = 588
     */
    T0CONbits.TMR0ON = 1;

    while(1)
    {

    }

}


Codice: Seleziona tutto
if(INTCONbits.TMR0IF == 1)
      {
        /* resetta timer 3 e imposta valore per avere 1.5 ms (variabili), alterna il
         flag e quindi controllandone il valore imposta per avere 20ms (fissi).
         * Pilota un'uscita o usa il CCP pin.
         */
         // resetta il timer automaticamente
         T0CONbits.TMR0ON = 0;
//         freq_t0(1, 256);
//         duty++;
//         if (duty >= 8) duty=0;
//         T0CONbits.TMR0ON = 1;
        if (periodo_lungo == 1){ // impulso breve
               freq_t0((long)duty, 256);
               periodo_lungo = 0;
               PORTDbits.RD6 = 1;
        }
        else if (periodo_lungo == 0) { // impulso lungo
             freq_t0(100, 256);
             periodo_lungo = 1;
             PORTDbits.RD6 = 0;
             }
       T0CONbits.TMR0ON = 1;
       INTCONbits.TMR0IF = 0;
      /* Clear Interrupt Flag 1 */
      }
    else  if(INTCON3bits.INT1IF)
      {
        __delay_ms(15);
        count ++;
        if (count <= 0){
            duty = 580;
        }
        else if (count == 1)
        {
            duty = 666;
        }
        else if (count ==2){
            duty = 770;
            count= -1;
        }
          INTCON3bits.INT1IF = 0;
      } // ISR

    else if(INTCON3bits.INT2IF)
      {
          __delay_ms(15);
          PORTDbits.RD7 = ~PORTDbits.RD7; // accendo e spengo solo un led, non c'entra con il resto
          INTCON3bits.INT2IF = 0;
      } // ISR
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[2] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto Utentesimo85 » 4 mag 2014, 21:25

Ciao Foto Utentethexeno,

Sei sicuro che non vi siano errori nel codice o che non sia stato copiato male ?
Perché per esempio, controllando il tuo codice, la ISR a me risulta essere questa:

Codice: Seleziona tutto
if(INTCONbits.TMR0IF == 1)
{
  T0CONbits.TMR0ON = 0;

  if (periodo_lungo == 1)
  { // impulso breve
    freq_t0((long)duty, 256);
    periodo_lungo = 0;
    PORTDbits.RD6 = 1;
  }
  else if (periodo_lungo == 0)
  { // impulso lungo
    freq_t0(100, 256);
    periodo_lungo = 1;
    PORTDbits.RD6 = 0;
  }
 
  T0CONbits.TMR0ON = 1;
  INTCONbits.TMR0IF = 0;
}


Mentre questa porzione di codice:

Codice: Seleziona tutto
else if(INTCON3bits.INT1IF)
{
  __delay_ms(15);
  count ++;
  if (count <= 0)
      duty = 580;
  else if (count == 1)
      duty = 666;
  else if (count ==2)
  {
      duty = 770;
      count= -1;
  }
 
  INTCON3bits.INT1IF = 0;
}
else if(INTCON3bits.INT2IF)
{
  __delay_ms(15);
  PORTDbits.RD7 = ~PORTDbits.RD7;
  INTCON3bits.INT2IF = 0;
}


Non risulta essere inclusa nel blocco di codice (per via delle parentesi graffe).
Ho compattato il codice eliminando qualche commento qua e là.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto Utentethexeno » 4 mag 2014, 21:58

È corretto, nel senso che quando c'e un interrupt faccio un controllo dei flag. Percio quei due pezzi di codice sono relativi a due flag diversi, di cui uno è linterrupt del timer e l'altro del pulsante. Ce n'è poi un terzo che accende un led con un pulsante. È quello che volevi sapere?

Edit: ho capito cosa vuioi dire... Non ho copiato le parentesi finali, quindi è solo un errore di copiatura, scusa.
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[4] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto Utentethexeno » 8 mag 2014, 23:36

Per adesso volevo solo dire che risolvo calcolando per 0.1ms in meno rispetto a quello che devo avere. Nel frattempo, mi salterà in mente qualcosa sul perché sono costretto a fare così.
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[5] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto UtenteWALTERmwp » 9 mag 2014, 2:36

Ciao Foto Utentethexeno, per ora solo una domanda: sai quanto tempo ci impiega il micro ad eseguire la funzione freq_t0(long f, long presc) ?

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8981
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[6] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto UtenteWALTERmwp » 9 mag 2014, 14:20

A complemento del mio precedente post, se tu non dovessi essere condizione di "calcolare" quel tempo, forse, lo potremmo ricavare in modo indiretto.
Potresti fare la seguente prova: nello statement "impulso lungo" inverti tra loro la posizione dell'assegnazione di zero a RD6 con il richiamo della freq_t0(100, 256) e ... prova a vedere sull'oscilloscopio quanto dura l'impulso di pilotaggio del servomotore.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8981
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[7] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto Utentethexeno » 10 mag 2014, 12:49

Effettivamente è vero. Ora la funzione pilota ad 1 solo per un 0.02ms in più, che è molto più accettabile, anzi, è PROPRIO la granulosità del timer con quel prescaler e quel clock. Anche il servo ha un lieve scostamento dal comportamento di prima. Mentre la funzione per generare i 10ms mi genera 10.2ms di periodo, grossolanamente. Dunque devo fare attenzione al codice.

Dunque ora mi chiedo: ho istruzioni a 12Mhz, cioè una ogni 83.3ns
0.1ms stanno quindi in 1200 istruzioni. Ma è possibile ritrovarsi 1200 istruzioni in più? Sarà l'XC8 in versione free? Guardando l'ASM generato, non ci sono delle "nop" come potevo pensare. La divisione, dando una occhiata veloce, occupa 180 istruzioni, SE ho capito bene.

Io, vi posto il file asm generato, che anche se inutile, rende la risposta un po più completa. Con un copia-incolla in un editor di testo (tipo Notepad++) la formattazione viene mantenuta corretta.

Codice: Seleziona tutto

Microchip Technology PIC18 LITE Macro Assembler V1.20 build 52243
                                                                                               Sat May 10 12:08:09 2014

Microchip Technology Omniscient Code Generator (Lite mode) build 52243
     1                              processor   18F47J53
     2                              fnconf   rparam,??,?,0
     3                              opt   pw 120
     4                              opt   lm
     5                              psect   idataCOMRAM,global,class=CODE,delta=1
     6                              psect   cinit,global,reloc=2,class=CODE,delta=1
     7                              psect   bssCOMRAM,global,class=COMRAM,space=1,delta=1
     8                              psect   dataCOMRAM,global,class=COMRAM,space=1,delta=1
     9                              psect   cstackBANK0,global,class=BANK0,space=1,delta=1
    10                              psect   cstackCOMRAM,global,class=COMRAM,space=1,delta=1
    11                              psect   text0,global,reloc=2,class=CODE,delta=1
    12                              psect   text1,global,reloc=2,class=CODE,delta=1
    13                              psect   text2,global,reloc=2,class=CODE,delta=1
    14                              psect   text3,global,reloc=2,class=CODE,delta=1
    15                              psect   text4,global,reloc=2,class=CODE,delta=1
    16                              psect   text5,global,reloc=2,class=CODE,delta=1
    17                              psect   text6,global,reloc=2,class=CODE,delta=1
    18                              psect   text7,global,reloc=2,class=CODE,delta=1
    19                              psect   intcodelo,global,reloc=2,class=CODE,delta=1
    20                              psect   intcode,global,reloc=2,class=CODE,delta=1
    21                              psect   intcode_body,global,reloc=2,class=CODE,delta=1
    22                              psect   text10,global,reloc=2,class=CODE,delta=1
    23                              psect   text11,global,reloc=2,class=CODE,delta=1
    24                              psect   text12,global,reloc=2,class=CODE,delta=1
    25                              psect   intsave_regs,global,class=BIGRAM,space=1,delta=1
    26                              psect   rparam,global,class=COMRAM,space=1,delta=1
    27  0000                     
    28                              psect   idataCOMRAM
    29  001772                     __pidataCOMRAM:
    30                              opt stack 0
    31                           
    32                           ;initializer for _count
    33  001772  FFFF                  dw   65535
    34                           
    35                           ;initializer for _periodo_lungo
    36  001774  01                    db   1
    37  0000                     _BAUDCON1bits   set   3966
    38  0000                     _INTCON   set   4082
    39  0000                     _INTCON2bits   set   4081
    40  0000                     _INTCON3bits   set   4080
    41  0000                     _INTCONbits   set   4082
    42  0000                     _IPR1bits   set   3999
    43  0000                     _OSCTUNEbits   set   3995
    44  0000                     _PIE1bits   set   3997
    45  0000                     _PIR1bits   set   3998
    46  0000                     _PORTDbits   set   3971
    47  0000                     _RCONbits   set   4048
    48  0000                     _RCSTA1bits   set   4012
    49  0000                     _RPINR1   set   3809
    50  0000                     _RPINR2   set   3810
    51  0000                     _SPBRG1   set   4016
    52  0000                     _SPBRGH1   set   3967
    53  0000                     _T0CON   set   4053
    54  0000                     _T0CONbits   set   4053
    55  0000                     _TMR0H   set   4055
    56  0000                     _TMR0L   set   4054
    57  0000                     _TRISCbits   set   3988
    58  0000                     _TRISDbits   set   3989
    59  0000                     _TXREG1   set   4014
    60  0000                     _TXSTA1bits   set   4013
    61                           
    62                           ; #config settings
    63  0000                     
    64                              psect   cinit
    65  001726                     __pcinit:
    66                              opt stack 0
    67  001726                     start_initialization:
    68                              opt stack 0
    69  001726                     __initialization:
    70                              opt stack 0
    71                           
    72                           ; Clear objects allocated to COMRAM (4 bytes)
    73  001726  6A49                  clrf   (__pbssCOMRAM+3)& (0+255),c
    74  001728  6A48                  clrf   (__pbssCOMRAM+2)& (0+255),c
    75  00172A  6A47                  clrf   (__pbssCOMRAM+1)& (0+255),c
    76  00172C  6A46                  clrf   __pbssCOMRAM& (0+255),c
    77                           
    78                           ; Initialize objects allocated to COMRAM (3 bytes)
    79                           ; load TBLPTR registers with __pidataCOMRAM
    80  00172E  0E72                  movlw   low __pidataCOMRAM
    81  001730  6EF6                  movwf   tblptrl,c
    82  001732  0E17                  movlw   high __pidataCOMRAM
    83  001734  6EF7                  movwf   tblptrh,c
    84  001736  0E00                  movlw   low (__pidataCOMRAM shr (0+16))
    85  001738  6EF8                  movwf   tblptru,c
    86  00173A  0009                  tblrd      *+   ;fetch initializer
    87  00173C  CFF5 F04A             movff   tablat,__pdataCOMRAM
    88  001740  0009                  tblrd      *+   ;fetch initializer
    89  001742  CFF5 F04B             movff   tablat,__pdataCOMRAM+1
    90  001746  0009                  tblrd      *+   ;fetch initializer
    91  001748  CFF5 F04C             movff   tablat,__pdataCOMRAM+2
    92  00174C                     end_of_initialization:
    93                              opt stack 0
    94  00174C                     __end_of__initialization:
    95                              opt stack 0
    96  00174C  0100                  movlb   0
    97  00174E  EF36  F00B            goto   _main   ;jump to C main() function
    98                           tblptru   equ   0xFF8
    99                           tblptrh   equ   0xFF7
   100                           tblptrl   equ   0xFF6
   101                           tablat   equ   0xFF5
   102                           
   103                              psect   bssCOMRAM
   104  000046                     __pbssCOMRAM:
   105                              opt stack 0
   106  000046                     _duty:
   107                              opt stack 0
   108  000046                        ds   2
   109  000048                     _i:
   110                              opt stack 0
   111  000048                        ds   2
   112                           tblptru   equ   0xFF8
   113                           tblptrh   equ   0xFF7
   114                           tblptrl   equ   0xFF6
   115                           tablat   equ   0xFF5
   116                           
   117                              psect   dataCOMRAM
   118  00004A                     __pdataCOMRAM:
   119                              opt stack 0
   120  00004A                     _count:
   121                              opt stack 0
   122  00004A                        ds   2
   123  00004C                     _periodo_lungo:
   124                              opt stack 0
   125  00004C                        ds   1
   126                           tblptru   equ   0xFF8
   127                           tblptrh   equ   0xFF7
   128                           tblptrl   equ   0xFF6
   129                           tablat   equ   0xFF5
   130                           
   131                              psect   cstackBANK0
   132  000060                     __pcstackBANK0:
   133                              opt stack 0
   134  000060                     ??_ConfigureOscillator:
   135  000060                     ?___lmul:
   136                              opt stack 0
   137  000060                     ___lmul@multiplier:
   138                              opt stack 0
   139                           
   140                           ; 4 bytes @ 0x0
   141  000060                        ds   4
   142  000064                     ___lmul@multiplicand:
   143                              opt stack 0
   144                           
   145                           ; 4 bytes @ 0x4
   146  000064                        ds   4
   147  000068                     ___lmul@product:
   148                              opt stack 0
   149                           
   150                           ; 4 bytes @ 0x8
   151  000068                        ds   4
   152  00006C                     ?___aldiv:
   153                              opt stack 0
   154  00006C                     ___aldiv@dividend:
   155                              opt stack 0
   156                           
   157                           ; 4 bytes @ 0xC
   158  00006C                        ds   4
   159  000070                     ___aldiv@divisor:
   160                              opt stack 0
   161                           
   162                           ; 4 bytes @ 0x10
   163  000070                        ds   4
   164  000074                     ??___aldiv:
   165                           
   166                           ; 0 bytes @ 0x14
   167  000074                        ds   1
   168  000075                     ___aldiv@counter:
   169                              opt stack 0
   170                           
   171                           ; 1 bytes @ 0x15
   172  000075                        ds   1
   173  000076                     ___aldiv@sign:
   174                              opt stack 0
   175                           
   176                           ; 1 bytes @ 0x16
   177  000076                        ds   1
   178  000077                     ___aldiv@quotient:
   179                              opt stack 0
   180                           
   181                           ; 4 bytes @ 0x17
   182  000077                        ds   4
   183  00007B                     ?_freq_t0:
   184                              opt stack 0
   185  00007B                     freq_t0@f:
   186                              opt stack 0
   187                           
   188                           ; 4 bytes @ 0x1B
   189  00007B                        ds   4
   190  00007F                     freq_t0@presc:
   191                              opt stack 0
   192                           
   193                           ; 4 bytes @ 0x1F
   194  00007F                        ds   4
   195  000083                     freq_t0@timer:
   196                              opt stack 0
   197                           
   198                           ; 2 bytes @ 0x23
   199  000083                        ds   2
   200  000085                     tblptru   equ   0xFF8
   201                           tblptrh   equ   0xFF7
   202                           tblptrl   equ   0xFF6
   203                           tablat   equ   0xFF5
   204                           
   205                           ; 0 bytes @ 0x25
   206                           
   207                              psect   cstackCOMRAM
   208  000001                     __pcstackCOMRAM:
   209                              opt stack 0
   210  000001                     ??_low_isr:
   211  000001                     
   212                           ; 0 bytes @ 0x0
   213  000001                        ds   17
   214  000012                     ?i2___lmul:
   215                              opt stack 0
   216  000012                     i2___lmul@multiplier:
   217                              opt stack 0
   218                           
   219                           ; 4 bytes @ 0x11
   220  000012                        ds   4
   221  000016                     i2___lmul@multiplicand:
   222                              opt stack 0
   223                           
   224                           ; 4 bytes @ 0x15
   225  000016                        ds   4
   226  00001A                     i2___lmul@product:
   227                              opt stack 0
   228                           
   229                           ; 4 bytes @ 0x19
   230  00001A                        ds   4
   231  00001E                     ?i2___aldiv:
   232                              opt stack 0
   233  00001E                     i2___aldiv@dividend:
   234                              opt stack 0
   235                           
   236                           ; 4 bytes @ 0x1D
   237  00001E                        ds   4
   238  000022                     i2___aldiv@divisor:
   239                              opt stack 0
   240                           
   241                           ; 4 bytes @ 0x21
   242  000022                        ds   4
   243  000026                     ??i2___aldiv:
   244                           
   245                           ; 0 bytes @ 0x25
   246  000026                        ds   1
   247  000027                     i2___aldiv@counter:
   248                              opt stack 0
   249                           
   250                           ; 1 bytes @ 0x26
   251  000027                        ds   1
   252  000028                     i2___aldiv@sign:
   253                              opt stack 0
   254                           
   255                           ; 1 bytes @ 0x27
   256  000028                        ds   1
   257  000029                     i2___aldiv@quotient:
   258                              opt stack 0
   259                           
   260                           ; 4 bytes @ 0x28
   261  000029                        ds   4
   262  00002D                     ?i2_freq_t0:
   263                              opt stack 0
   264  00002D                     i2freq_t0@f:
   265                              opt stack 0
   266                           
   267                           ; 4 bytes @ 0x2C
   268  00002D                        ds   4
   269  000031                     i2freq_t0@presc:
   270                              opt stack 0
   271                           
   272                           ; 4 bytes @ 0x30
   273  000031                        ds   4
   274  000035                     i2freq_t0@timer:
   275                              opt stack 0
   276                           
   277                           ; 2 bytes @ 0x34
   278  000035                        ds   2
   279  000037                     ??_high_isr:
   280                           
   281                           ; 0 bytes @ 0x36
   282  000037                        ds   15
   283                           tblptru   equ   0xFF8
   284                           tblptrh   equ   0xFF7
   285                           tblptrl   equ   0xFF6
   286                           tablat   equ   0xFF5
   287                           
   288 ;;
   289 ;;Main: autosize = 0, tempsize = 0, incstack = 0, save=0
   290 ;;
   291 ;; *************** function _main *****************
   292 ;; Defined at:
   293 ;;      line 38 in file "main.c"
   294 ;; Parameters:    Size  Location     Type
   295 ;;      None
   296 ;; Auto vars:     Size  Location     Type
   297 ;;      None
   298 ;; Return value:  Size  Location     Type
   299 ;;      None               void
   300 ;; Registers used:
   301 ;;      wreg, status,2, status,0, cstack
   302 ;; Tracked objects:
   303 ;;      On entry : 0/0
   304 ;;      On exit  : 0/0
   305 ;;      Unchanged: 0/0
   306 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
   307 ;;      Params:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   308 ;;      Locals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   309 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   310 ;;      Totals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   311 ;;Total ram usage:        0 bytes
   312 ;; Hardware stack levels required when called:    6
   313 ;; This function calls:
   314 ;;      _freq_t0
   315 ;;      _ConfigureOscillator
   316 ;;      _InitApp
   317 ;;      _usart_init
   318 ;;      _timer0_init
   319 ;; This function is called by:
   320 ;;      Startup code after reset
   321 ;; This function uses a non-reentrant model
   322 ;;
   323                           
   324                              psect   text0
   325  00166C                     __ptext0:
   326                              opt stack 0
   327  00166C                     _main:
   328                              opt stack 25
   329                           
   330                           ;main.c: 40: ConfigureOscillator();
   331                           
   332                           ; BSR set to: 0
   333                           ;incstack = 0
   334                           ;incstack = 0
   335  00166C  ECA9  F00B            call   _ConfigureOscillator   ;wreg free
   336                           
   337                           ;main.c: 43: InitApp();
   338  001670  EC79  F00B            call   _InitApp   ;wreg free
   339                           
   340                           ;main.c: 44: usart_init();
   341  001674  EC5C  F00B            call   _usart_init   ;wreg free
   342                           
   343                           ;main.c: 45: timer0_init();
   344  001678  ECB4  F00B            call   _timer0_init   ;wreg free
   345                           
   346                           ;main.c: 47: freq_t0(1, 256);
   347  00167C  0E01                  movlw   1
   348  00167E  0100                  movlb   0   ; () banked
   349  001680  0100                  movlb   0   ; () banked
   350  001682  6F7B                  movwf   ?_freq_t0& (0+255),b
   351  001684  0E00                  movlw   0
   352  001686  0100                  movlb   0   ; () banked
   353  001688  6F7C                  movwf   (?_freq_t0+1)& (0+255),b
   354  00168A  0E00                  movlw   0
   355  00168C  0100                  movlb   0   ; () banked
   356  00168E  6F7D                  movwf   (?_freq_t0+2)& (0+255),b
   357  001690  0E00                  movlw   0
   358  001692  0100                  movlb   0   ; () banked
   359  001694  6F7E                  movwf   (?_freq_t0+3)& (0+255),b
   360  001696  0E00                  movlw   0
   361  001698  0100                  movlb   0   ; () banked
   362  00169A  0100                  movlb   0   ; () banked
   363  00169C  6F7F                  movwf   (?_freq_t0+4)& (0+255),b
   364  00169E  0E01                  movlw   1
   365  0016A0  0100                  movlb   0   ; () banked
   366  0016A2  6F80                  movwf   (?_freq_t0+5)& (0+255),b
   367  0016A4  0E00                  movlw   0
   368  0016A6  0100                  movlb   0   ; () banked
   369  0016A8  6F81                  movwf   (?_freq_t0+6)& (0+255),b
   370  0016AA  0E00                  movlw   0
   371  0016AC  0100                  movlb   0   ; () banked
   372  0016AE  6F82                  movwf   (?_freq_t0+7)& (0+255),b
   373  0016B0  EC9E  F00A            call   _freq_t0   ;wreg free
   374                           
   375                           ;main.c: 53: T0CONbits.TMR0ON = 1;
   376  0016B4  8ED5                  bsf   4053,7,c   ;volatile
   377  0016B6                     l60:
   378                           
   379                           ;main.c: 57: {
   380  0016B6  D7FF                  goto   l60
   381  0016B8                     __end_of_main:
   382                              opt stack 0
   383                           tblptru   equ   0xFF8
   384                           tblptrh   equ   0xFF7
   385                           tblptrl   equ   0xFF6
   386                           tablat   equ   0xFF5
   387                           
   388 ;; *************** function _timer0_init *****************
   389 ;; Defined at:
   390 ;;      line 30 in file "user.c"
   391 ;; Parameters:    Size  Location     Type
   392 ;;      None
   393 ;; Auto vars:     Size  Location     Type
   394 ;;      None
   395 ;; Return value:  Size  Location     Type
   396 ;;      None               void
   397 ;; Registers used:
   398 ;;      wreg, status,2
   399 ;; Tracked objects:
   400 ;;      On entry : 0/0
   401 ;;      On exit  : 0/0
   402 ;;      Unchanged: 0/0
   403 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
   404 ;;      Params:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   405 ;;      Locals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   406 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   407 ;;      Totals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   408 ;;Total ram usage:        0 bytes
   409 ;; Hardware stack levels used:    1
   410 ;; Hardware stack levels required when called:    4
   411 ;; This function calls:
   412 ;;      Nothing
   413 ;; This function is called by:
   414 ;;      _main
   415 ;; This function uses a non-reentrant model
   416 ;;
   417                           
   418                              psect   text1
   419  001768                     __ptext1:
   420                              opt stack 0
   421  001768                     _timer0_init:
   422                              opt stack 26
   423                           
   424                           ;user.c: 40: T0CON = 0b00000111;
   425                           
   426                           ;incstack = 0
   427                           ;incstack = 0
   428  001768  0E07                  movlw   7
   429  00176A  6ED5                  movwf   4053,c   ;volatile
   430                           
   431                           ;user.c: 44: INTCON = 0b11100000;
   432  00176C  0EE0                  movlw   224
   433  00176E  6EF2                  movwf   intcon,c   ;volatile
   434  001770  0012                  return   
   435  001772                     __end_of_timer0_init:
   436                              opt stack 0
   437                           tblptru   equ   0xFF8
   438                           tblptrh   equ   0xFF7
   439                           tblptrl   equ   0xFF6
   440                           tablat   equ   0xFF5
   441                           intcon   equ   0xFF2
   442                           
   443 ;; *************** function _usart_init *****************
   444 ;; Defined at:
   445 ;;      line 88 in file "user.c"
   446 ;; Parameters:    Size  Location     Type
   447 ;;      None
   448 ;; Auto vars:     Size  Location     Type
   449 ;;      None
   450 ;; Return value:  Size  Location     Type
   451 ;;      None               void
   452 ;; Registers used:
   453 ;;      wreg, status,2
   454 ;; Tracked objects:
   455 ;;      On entry : 0/0
   456 ;;      On exit  : 0/0
   457 ;;      Unchanged: 0/0
   458 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
   459 ;;      Params:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   460 ;;      Locals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   461 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   462 ;;      Totals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   463 ;;Total ram usage:        0 bytes
   464 ;; Hardware stack levels used:    1
   465 ;; Hardware stack levels required when called:    4
   466 ;; This function calls:
   467 ;;      Nothing
   468 ;; This function is called by:
   469 ;;      _main
   470 ;; This function uses a non-reentrant model
   471 ;;
   472                           
   473                              psect   text2
   474  0016B8                     __ptext2:
   475                              opt stack 0
   476  0016B8                     _usart_init:
   477                              opt stack 26
   478                           
   479                           ;user.c: 90: PIE1bits.TX1IE = 0;
   480                           
   481                           ;incstack = 0
   482                           ;incstack = 0
   483  0016B8  989D                  bcf   3997,4,c   ;volatile
   484                           
   485                           ;user.c: 91: PIE1bits.RC1IE = 0;
   486  0016BA  9A9D                  bcf   3997,5,c   ;volatile
   487                           
   488                           ;user.c: 95: TXSTA1bits.CSRC = 0;
   489  0016BC  9EAD                  bcf   4013,7,c   ;volatile
   490                           
   491                           ;user.c: 96: TXSTA1bits.TX9 = 0;
   492  0016BE  9CAD                  bcf   4013,6,c   ;volatile
   493                           
   494                           ;user.c: 97: TXSTA1bits.SYNC = 0;
   495  0016C0  98AD                  bcf   4013,4,c   ;volatile
   496                           
   497                           ;user.c: 98: TXSTA1bits.SENDB = 0;
   498  0016C2  96AD                  bcf   4013,3,c   ;volatile
   499                           
   500                           ;user.c: 99: TXSTA1bits.BRGH = 1;
   501  0016C4  84AD                  bsf   4013,2,c   ;volatile
   502                           
   503                           ;user.c: 100: TXSTA1bits.TX9D = 0;
   504  0016C6  90AD                  bcf   4013,0,c   ;volatile
   505                           
   506                           ;user.c: 101: TXSTA1bits.TXEN = 1;
   507  0016C8  8AAD                  bsf   4013,5,c   ;volatile
   508                           
   509                           ;user.c: 103: RCSTA1bits.RX9 = 0;
   510  0016CA  9CAC                  bcf   4012,6,c   ;volatile
   511                           
   512                           ;user.c: 104: RCSTA1bits.RX9D = 0;
   513  0016CC  90AC                  bcf   4012,0,c   ;volatile
   514                           
   515                           ;user.c: 105: RCSTA1bits.FERR = 0;
   516  0016CE  94AC                  bcf   4012,2,c   ;volatile
   517                           
   518                           ;user.c: 106: RCSTA1bits.ADDEN = 0;
   519  0016D0  96AC                  bcf   4012,3,c   ;volatile
   520                           
   521                           ;user.c: 107: RCSTA1bits.OERR = 0;
   522  0016D2  92AC                  bcf   4012,1,c   ;volatile
   523                           
   524                           ;user.c: 108: RCSTA1bits.SPEN = 1;
   525  0016D4  8EAC                  bsf   4012,7,c   ;volatile
   526                           
   527                           ;user.c: 109: RCSTA1bits.CREN = 1;
   528  0016D6  88AC                  bsf   4012,4,c   ;volatile
   529                           
   530                           ;user.c: 111: IPR1bits.RC1IP = 1;
   531  0016D8  8A9F                  bsf   3999,5,c   ;volatile
   532                           
   533                           ;user.c: 112: PIE1bits.RC1IE = 1;
   534  0016DA  8A9D                  bsf   3997,5,c   ;volatile
   535                           
   536                           ;user.c: 115: BAUDCON1bits.ABDOVF = 0;
   537  0016DC  9E7E                  bcf   3966,7,c   ;volatile
   538                           
   539                           ;user.c: 116: BAUDCON1bits.RXDTP = 0;
   540  0016DE  9A7E                  bcf   3966,5,c   ;volatile
   541                           
   542                           ;user.c: 117: BAUDCON1bits.TXCKP = 0;
   543  0016E0  987E                  bcf   3966,4,c   ;volatile
   544                           
   545                           ;user.c: 118: BAUDCON1bits.BRG16 = 1;
   546  0016E2  867E                  bsf   3966,3,c   ;volatile
   547                           
   548                           ;user.c: 119: BAUDCON1bits.WUE = 0;
   549  0016E4  927E                  bcf   3966,1,c   ;volatile
   550                           
   551                           ;user.c: 120: BAUDCON1bits.ABDEN = 0;
   552  0016E6  907E                  bcf   3966,0,c   ;volatile
   553                           
   554                           ;user.c: 122: SPBRGH1 = 0x9c;
   555  0016E8  0E9C                  movlw   156
   556  0016EA  6E7F                  movwf   3967,c   ;volatile
   557                           
   558                           ;user.c: 123: SPBRG1 = 0x3F;
   559  0016EC  0E3F                  movlw   63
   560  0016EE  6EB0                  movwf   4016,c   ;volatile
   561  0016F0  0012                  return   
   562  0016F2                     __end_of_usart_init:
   563                              opt stack 0
   564                           tblptru   equ   0xFF8
   565                           tblptrh   equ   0xFF7
   566                           tblptrl   equ   0xFF6
   567                           tablat   equ   0xFF5
   568                           intcon   equ   0xFF2
   569                           
   570 ;; *************** function _InitApp *****************
   571 ;; Defined at:
   572 ;;      line 47 in file "user.c"
   573 ;; Parameters:    Size  Location     Type
   574 ;;      None
   575 ;; Auto vars:     Size  Location     Type
   576 ;;      None
   577 ;; Return value:  Size  Location     Type
   578 ;;      None               void
   579 ;; Registers used:
   580 ;;      wreg, status,2
   581 ;; Tracked objects:
   582 ;;      On entry : 0/0
   583 ;;      On exit  : 0/0
   584 ;;      Unchanged: 0/0
   585 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
   586 ;;      Params:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   587 ;;      Locals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   588 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   589 ;;      Totals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   590 ;;Total ram usage:        0 bytes
   591 ;; Hardware stack levels used:    1
   592 ;; Hardware stack levels required when called:    4
   593 ;; This function calls:
   594 ;;      Nothing
   595 ;; This function is called by:
   596 ;;      _main
   597 ;; This function uses a non-reentrant model
   598 ;;
   599                           
   600                              psect   text3
   601  0016F2                     __ptext3:
   602                              opt stack 0
   603  0016F2                     _InitApp:
   604                              opt stack 26
   605                           
   606                           ;user.c: 56: RCONbits.IPEN = 1;
   607                           
   608                           ;incstack = 0
   609                           ;incstack = 0
   610  0016F2  8ED0                  bsf   4048,7,c   ;volatile
   611                           
   612                           ;user.c: 58: TRISDbits.TRISD4 = 1;
   613  0016F4  8895                  bsf   3989,4,c   ;volatile
   614                           
   615                           ;user.c: 59: TRISDbits.TRISD5 = 1;
   616  0016F6  8A95                  bsf   3989,5,c   ;volatile
   617                           
   618                           ;user.c: 60: RPINR1 = 22;
   619  0016F8  0E16                  movlw   22
   620  0016FA  010E                  movlb   14   ; () banked
   621  0016FC  010E                  movlb   14   ; () banked
   622  0016FE  6FE1                  movwf   225,b   ;volatile
   623                           
   624                           ;user.c: 61: RPINR2 = 21;
   625  001700  0E15                  movlw   21
   626  001702  010E                  movlb   14   ; () banked
   627  001704  010E                  movlb   14   ; () banked
   628  001706  6FE2                  movwf   226,b   ;volatile
   629                           
   630                           ; BSR set to: 14
   631                           ;user.c: 62: INTCON2bits.INTEDG1 = 0;
   632  001708  9AF1                  bcf   intcon2,5,c   ;volatile
   633                           
   634                           ; BSR set to: 14
   635                           ;user.c: 63: INTCON3bits.INT1P = 1;
   636  00170A  8CF0                  bsf   intcon3,6,c   ;volatile
   637                           
   638                           ; BSR set to: 14
   639                           ;user.c: 64: INTCON3bits.INT1E = 1;
   640  00170C  86F0                  bsf   intcon3,3,c   ;volatile
   641                           
   642                           ; BSR set to: 14
   643                           ;user.c: 65: INTCON3bits.INT1IF = 0;
   644  00170E  90F0                  bcf   intcon3,0,c   ;volatile
   645                           
   646                           ; BSR set to: 14
   647                           ;user.c: 67: INTCON2bits.INTEDG2 = 0;
   648  001710  98F1                  bcf   intcon2,4,c   ;volatile
   649                           
   650                           ; BSR set to: 14
   651                           ;user.c: 68: INTCON3bits.INT2P = 1;
   652  001712  8EF0                  bsf   intcon3,7,c   ;volatile
   653                           
   654                           ; BSR set to: 14
   655                           ;user.c: 69: INTCON3bits.INT2E = 1;
   656  001714  88F0                  bsf   intcon3,4,c   ;volatile
   657                           
   658                           ; BSR set to: 14
   659                           ;user.c: 70: INTCON3bits.INT2IF = 0;
   660  001716  92F0                  bcf   intcon3,1,c   ;volatile
   661                           
   662                           ; BSR set to: 14
   663                           ;user.c: 72: TRISDbits.TRISD7 = 0;
   664  001718  9E95                  bcf   3989,7,c   ;volatile
   665                           
   666                           ; BSR set to: 14
   667                           ;user.c: 73: PORTDbits.RD7 = 0;
   668  00171A  9E83                  bcf   3971,7,c   ;volatile
   669                           
   670                           ; BSR set to: 14
   671                           ;user.c: 74: TRISDbits.TRISD6 = 0;
   672  00171C  9C95                  bcf   3989,6,c   ;volatile
   673                           
   674                           ; BSR set to: 14
   675                           ;user.c: 75: PORTDbits.RD6 = 0;
   676  00171E  9C83                  bcf   3971,6,c   ;volatile
   677                           
   678                           ; BSR set to: 14
   679                           ;user.c: 76: TRISCbits.TRISC6 = 0;
   680  001720  9C94                  bcf   3988,6,c   ;volatile
   681                           
   682                           ; BSR set to: 14
   683                           ;user.c: 77: TRISCbits.TRISC7 = 0;
   684  001722  9E94                  bcf   3988,7,c   ;volatile
   685                           
   686                           ; BSR set to: 14
   687  001724  0012                  return   
   688  001726                     __end_of_InitApp:
   689                              opt stack 0
   690                           tblptru   equ   0xFF8
   691                           tblptrh   equ   0xFF7
   692                           tblptrl   equ   0xFF6
   693                           tablat   equ   0xFF5
   694                           intcon   equ   0xFF2
   695                           intcon2   equ   0xFF1
   696                           intcon3   equ   0xFF0
   697                           
   698 ;; *************** function _ConfigureOscillator *****************
   699 ;; Defined at:
   700 ;;      line 25 in file "system.c"
   701 ;; Parameters:    Size  Location     Type
   702 ;;      None
   703 ;; Auto vars:     Size  Location     Type
   704 ;;      None
   705 ;; Return value:  Size  Location     Type
   706 ;;      None               void
   707 ;; Registers used:
   708 ;;      wreg
   709 ;; Tracked objects:
   710 ;;      On entry : 0/0
   711 ;;      On exit  : 0/0
   712 ;;      Unchanged: 0/0
   713 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
   714 ;;      Params:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   715 ;;      Locals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   716 ;;      Temps:          0       1       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   717 ;;      Totals:         0       1       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   718 ;;Total ram usage:        1 bytes
   719 ;; Hardware stack levels used:    1
   720 ;; Hardware stack levels required when called:    4
   721 ;; This function calls:
   722 ;;      Nothing
   723 ;; This function is called by:
   724 ;;      _main
   725 ;; This function uses a non-reentrant model
   726 ;;
   727                           
   728                              psect   text4
   729  001752                     __ptext4:
   730                              opt stack 0
   731  001752                     _ConfigureOscillator:
   732                              opt stack 26
   733                           
   734                           ;system.c: 26: OSCTUNEbits.PLLEN = 1;
   735                           
   736                           ; BSR set to: 14
   737                           ;incstack = 0
   738                           ;incstack = 0
   739  001752  8C9B                  bsf   3995,6,c   ;volatile
   740                           
   741                           ;system.c: 27: _delay((unsigned long)((2)*(48000000L/4000.0)));
   742  001754  0E20                  movlw   32
   743  001756  0100                  movlb   0   ; () banked
   744  001758  6F60                  movwf   ??_ConfigureOscillator& (0+255),b
   745  00175A  0E29                  movlw   41
   746  00175C                     u427:
   747  00175C  2EE8                  decfsz   wreg,f,c
   748  00175E  D7FE                  goto   u427
   749  001760  2F60                  decfsz   ??_ConfigureOscillator& (0+255),f,b
   750  001762  D7FC                  goto   u427
   751  001764  D000                  nop2   
   752  001766  0012                  return   
   753  001768                     __end_of_ConfigureOscillator:
   754                              opt stack 0
   755                           tblptru   equ   0xFF8
   756                           tblptrh   equ   0xFF7
   757                           tblptrl   equ   0xFF6
   758                           tablat   equ   0xFF5
   759                           intcon   equ   0xFF2
   760                           intcon2   equ   0xFF1
   761                           intcon3   equ   0xFF0
   762                           wreg   equ   0xFE8
   763                           
   764 ;; *************** function _freq_t0 *****************
   765 ;; Defined at:
   766 ;;      line 80 in file "user.c"
   767 ;; Parameters:    Size  Location     Type
   768 ;;  f               4   27[BANK0 ] long
   769 ;;  presc           4   31[BANK0 ] long
   770 ;; Auto vars:     Size  Location     Type
   771 ;;  timer           2   35[BANK0 ] int
   772 ;; Return value:  Size  Location     Type
   773 ;;      None               void
   774 ;; Registers used:
   775 ;;      wreg, status,2, status,0, cstack
   776 ;; Tracked objects:
   777 ;;      On entry : 0/0
   778 ;;      On exit  : 0/0
   779 ;;      Unchanged: 0/0
   780 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
   781 ;;      Params:         0       8       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   782 ;;      Locals:         0       2       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   783 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   784 ;;      Totals:         0      10       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   785 ;;Total ram usage:       10 bytes
   786 ;; Hardware stack levels used:    1
   787 ;; Hardware stack levels required when called:    5
   788 ;; This function calls:
   789 ;;      ___aldiv
   790 ;;      ___lmul
   791 ;; This function is called by:
   792 ;;      _main
   793 ;; This function uses a non-reentrant model
   794 ;;
   795                           
   796                              psect   text5
   797  00153C                     __ptext5:
   798                              opt stack 0
   799  00153C                     _freq_t0:
   800                              opt stack 25
   801                           
   802                           ;user.c: 81: int timer = (int) (65536 - (48000000L/4)/(f*presc));
   803                           
   804                           ;incstack = 0
   805                           ;incstack = 0
   806  00153C  0E00                  movlw   0
   807  00153E  0100                  movlb   0   ; () banked
   808  001540  0100                  movlb   0   ; () banked
   809  001542  6F6C                  movwf   ?___aldiv& (0+255),b
   810  001544  0E1B                  movlw   27
   811  001546  0100                  movlb   0   ; () banked
   812  001548  6F6D                  movwf   (?___aldiv+1)& (0+255),b
   813  00154A  0EB7                  movlw   183
   814  00154C  0100                  movlb   0   ; () banked
   815  00154E  6F6E                  movwf   (?___aldiv+2)& (0+255),b
   816  001550  0E00                  movlw   0
   817  001552  0100                  movlb   0   ; () banked
   818  001554  6F6F                  movwf   (?___aldiv+3)& (0+255),b
   819  001556  C07F  F064            movff   freq_t0@presc,?___lmul+4
   820  00155A  C080  F065            movff   freq_t0@presc+1,?___lmul+5
   821  00155E  C081  F066            movff   freq_t0@presc+2,?___lmul+6
   822  001562  C082  F067            movff   freq_t0@presc+3,?___lmul+7
   823  001566  C07B  F060            movff   freq_t0@f,?___lmul
   824  00156A  C07C  F061            movff   freq_t0@f+1,?___lmul+1
   825  00156E  C07D  F062            movff   freq_t0@f+2,?___lmul+2
   826  001572  C07E  F063            movff   freq_t0@f+3,?___lmul+3
   827  001576  EC50  F00A            call   ___lmul   ;wreg free
   828  00157A  C063  F073            movff   ?___lmul+3,?___aldiv+7
   829  00157E  C062  F072            movff   ?___lmul+2,?___aldiv+6
   830  001582  C061  F071            movff   ?___lmul+1,?___aldiv+5
   831  001586  C060  F070            movff   ?___lmul,?___aldiv+4
   832  00158A  EC53  F008            call   ___aldiv   ;wreg free
   833  00158E  0100                  movlb   0   ; () banked
   834  001590  0100                  movlb   0   ; () banked
   835  001592  1F6C                  comf   ?___aldiv& (0+255),f,b
   836  001594  0100                  movlb   0   ; () banked
   837  001596  1F6D                  comf   (?___aldiv+1)& (0+255),f,b
   838  001598  0100                  movlb   0   ; () banked
   839  00159A  4B6C                  infsnz   ?___aldiv& (0+255),f,b
   840  00159C  2B6D                  incf   (?___aldiv+1)& (0+255),f,b
   841  00159E  C06C  F083            movff   ?___aldiv,freq_t0@timer
   842  0015A2  C06D  F084            movff   ?___aldiv+1,freq_t0@timer+1
   843                           
   844                           ; BSR set to: 0
   845                           ;user.c: 83: TMR0H = timer >> 8;
   846  0015A6  0100                  movlb   0   ; () banked
   847  0015A8  0100                  movlb   0   ; () banked
   848  0015AA  5184                  movf   (freq_t0@timer+1)& (0+255),w,b
   849  0015AC  6ED7                  movwf   4055,c   ;volatile
   850                           
   851                           ; BSR set to: 0
   852                           ;user.c: 84: TMR0L = timer;
   853  0015AE  C083  FFD6            movff   freq_t0@timer,4054   ;volatile
   854                           
   855                           ; BSR set to: 0
   856  0015B2  0012                  return   
   857  0015B4                     __end_of_freq_t0:
   858                              opt stack 0
   859                           tblptru   equ   0xFF8
   860                           tblptrh   equ   0xFF7
   861                           tblptrl   equ   0xFF6
   862                           tablat   equ   0xFF5
   863                           intcon   equ   0xFF2
   864                           intcon2   equ   0xFF1
   865                           intcon3   equ   0xFF0
   866                           wreg   equ   0xFE8
   867                           
   868 ;; *************** function ___lmul *****************
   869 ;; Defined at:
   870 ;;      line 3 in file "C:\Program Files (x86)\Microchip\xc8\v1.20\sources\common\lmul.c"
   871 ;; Parameters:    Size  Location     Type
   872 ;;  multiplier      4    0[BANK0 ] unsigned long
   873 ;;  multiplicand    4    4[BANK0 ] unsigned long
   874 ;; Auto vars:     Size  Location     Type
   875 ;;  product         4    8[BANK0 ] unsigned long
   876 ;; Return value:  Size  Location     Type
   877 ;;                  4    0[BANK0 ] unsigned long
   878 ;; Registers used:
   879 ;;      wreg, status,2, status,0
   880 ;; Tracked objects:
   881 ;;      On entry : 0/0
   882 ;;      On exit  : 0/0
   883 ;;      Unchanged: 0/0
   884 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
   885 ;;      Params:         0       8       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   886 ;;      Locals:         0       4       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   887 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   888 ;;      Totals:         0      12       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
   889 ;;Total ram usage:       12 bytes
   890 ;; Hardware stack levels used:    1
   891 ;; Hardware stack levels required when called:    4
   892 ;; This function calls:
   893 ;;      Nothing
   894 ;; This function is called by:
   895 ;;      _freq_t0
   896 ;; This function uses a non-reentrant model
   897 ;;
   898                           
   899                              psect   text6
   900  0014A0                     __ptext6:
   901                              opt stack 0
   902  0014A0                     ___lmul:
   903                              opt stack 25
   904                           
   905                           ; BSR set to: 0
   906                           ;incstack = 0
   907                           ;incstack = 0
   908  0014A0  0E00                  movlw   0
   909  0014A2  0100                  movlb   0   ; () banked
   910  0014A4  0100                  movlb   0   ; () banked
   911  0014A6  6F68                  movwf   ___lmul@product& (0+255),b
   912  0014A8  0E00                  movlw   0
   913  0014AA  0100                  movlb   0   ; () banked
   914  0014AC  6F69                  movwf   (___lmul@product+1)& (0+255),b
   915  0014AE  0E00                  movlw   0
   916  0014B0  0100                  movlb   0   ; () banked
   917  0014B2  6F6A                  movwf   (___lmul@product+2)& (0+255),b
   918  0014B4  0E00                  movlw   0
   919  0014B6  0100                  movlb   0   ; () banked
   920  0014B8  6F6B                  movwf   (___lmul@product+3)& (0+255),b
   921  0014BA                     l1182:
   922                           
   923                           ; BSR set to: 0
   924  0014BA  0100                  movlb   0   ; () banked
   925  0014BC  0100                  movlb   0   ; () banked
   926  0014BE  A160                  btfss   ___lmul@multiplier& (0+255),0,b
   927  0014C0  D018                  goto   l1186
   928                           
   929                           ; BSR set to: 0
   930  0014C2  0100                  movlb   0   ; () banked
   931  0014C4  0100                  movlb   0   ; () banked
   932  0014C6  5164                  movf   ___lmul@multiplicand& (0+255),w,b
   933  0014C8  0100                  movlb   0   ; () banked
   934  0014CA  0100                  movlb   0   ; () banked
   935  0014CC  2768                  addwf   ___lmul@product& (0+255),f,b
   936  0014CE  0100                  movlb   0   ; () banked
   937  0014D0  0100                  movlb   0   ; () banked
   938  0014D2  5165                  movf   (___lmul@multiplicand+1)& (0+255),w,b
   939  0014D4  0100                  movlb   0   ; () banked
   940  0014D6  0100                  movlb   0   ; () banked
   941  0014D8  2369                  addwfc   (___lmul@product+1)& (0+255),f,b
   942  0014DA  0100                  movlb   0   ; () banked
   943  0014DC  0100                  movlb   0   ; () banked
   944  0014DE  5166                  movf   (___lmul@multiplicand+2)& (0+255),w,b
   945  0014E0  0100                  movlb   0   ; () banked
   946  0014E2  0100                  movlb   0   ; () banked
   947  0014E4  236A                  addwfc   (___lmul@product+2)& (0+255),f,b
   948  0014E6  0100                  movlb   0   ; () banked
   949  0014E8  0100                  movlb   0   ; () banked
   950  0014EA  5167                  movf   (___lmul@multiplicand+3)& (0+255),w,b
   951  0014EC  0100                  movlb   0   ; () banked
   952  0014EE  0100                  movlb   0   ; () banked
   953  0014F0  236B                  addwfc   (___lmul@product+3)& (0+255),f,b
   954  0014F2                     l1186:
   955                           
   956                           ; BSR set to: 0
   957  0014F2  0100                  movlb   0   ; () banked
   958  0014F4  90D8                  bcf   status,0,c
   959  0014F6  0100                  movlb   0   ; () banked
   960  0014F8  3764                  rlcf   ___lmul@multiplicand& (0+255),f,b
   961  0014FA  0100                  movlb   0   ; () banked
   962  0014FC  3765                  rlcf   (___lmul@multiplicand+1)& (0+255),f,b
   963  0014FE  0100                  movlb   0   ; () banked
   964  001500  3766                  rlcf   (___lmul@multiplicand+2)& (0+255),f,b
   965  001502  0100                  movlb   0   ; () banked
   966  001504  3767                  rlcf   (___lmul@multiplicand+3)& (0+255),f,b
   967                           
   968                           ; BSR set to: 0
   969  001506  0100                  movlb   0   ; () banked
   970  001508  90D8                  bcf   status,0,c
   971  00150A  0100                  movlb   0   ; () banked
   972  00150C  3363                  rrcf   (___lmul@multiplier+3)& (0+255),f,b
   973  00150E  0100                  movlb   0   ; () banked
   974  001510  3362                  rrcf   (___lmul@multiplier+2)& (0+255),f,b
   975  001512  0100                  movlb   0   ; () banked
   976  001514  3361                  rrcf   (___lmul@multiplier+1)& (0+255),f,b
   977  001516  0100                  movlb   0   ; () banked
   978  001518  3360                  rrcf   ___lmul@multiplier& (0+255),f,b
   979  00151A  0100                  movlb   0   ; () banked
   980  00151C  0100                  movlb   0   ; () banked
   981  00151E  5163                  movf   (___lmul@multiplier+3)& (0+255),w,b
   982  001520  1160                  iorwf   ___lmul@multiplier& (0+255),w,b
   983  001522  1161                  iorwf   (___lmul@multiplier+1)& (0+255),w,b
   984  001524  1162                  iorwf   (___lmul@multiplier+2)& (0+255),w,b
   985  001526  A4D8                  btfss   status,2,c
   986  001528  D7C8                  goto   l1182
   987                           
   988                           ; BSR set to: 0
   989  00152A  C068  F060            movff   ___lmul@product,?___lmul
   990  00152E  C069  F061            movff   ___lmul@product+1,?___lmul+1
   991  001532  C06A  F062            movff   ___lmul@product+2,?___lmul+2
   992  001536  C06B  F063            movff   ___lmul@product+3,?___lmul+3
   993                           
   994                           ; BSR set to: 0
   995  00153A  0012                  return   
   996  00153C                     __end_of___lmul:
   997                              opt stack 0
   998                           tblptru   equ   0xFF8
   999                           tblptrh   equ   0xFF7
  1000                           tblptrl   equ   0xFF6
  1001                           tablat   equ   0xFF5
  1002                           intcon   equ   0xFF2
  1003                           intcon2   equ   0xFF1
  1004                           intcon3   equ   0xFF0
  1005                           wreg   equ   0xFE8
  1006                           status   equ   0xFD8
  1007                           
  1008 ;; *************** function ___aldiv *****************
  1009 ;; Defined at:
  1010 ;;      line 10 in file "C:\Program Files (x86)\Microchip\xc8\v1.20\sources\common\aldiv.c"
  1011 ;; Parameters:    Size  Location     Type
  1012 ;;  dividend        4   12[BANK0 ] long
  1013 ;;  divisor         4   16[BANK0 ] long
  1014 ;; Auto vars:     Size  Location     Type
  1015 ;;  quotient        4   23[BANK0 ] long
  1016 ;;  sign            1   22[BANK0 ] unsigned char
  1017 ;;  counter         1   21[BANK0 ] unsigned char
  1018 ;; Return value:  Size  Location     Type
  1019 ;;                  4   12[BANK0 ] long
  1020 ;; Registers used:
  1021 ;;      wreg, status,2, status,0
  1022 ;; Tracked objects:
  1023 ;;      On entry : 0/0
  1024 ;;      On exit  : 0/0
  1025 ;;      Unchanged: 0/0
  1026 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
  1027 ;;      Params:         0       8       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1028 ;;      Locals:         0       6       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1029 ;;      Temps:          0       1       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1030 ;;      Totals:         0      15       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1031 ;;Total ram usage:       15 bytes
  1032 ;; Hardware stack levels used:    1
  1033 ;; Hardware stack levels required when called:    4
  1034 ;; This function calls:
  1035 ;;      Nothing
  1036 ;; This function is called by:
  1037 ;;      _freq_t0
  1038 ;; This function uses a non-reentrant model
  1039 ;;
  1040                           
  1041                              psect   text7
  1042  0010A6                     __ptext7:
  1043                              opt stack 0
  1044  0010A6                     ___aldiv:
  1045                              opt stack 25
  1046                           
  1047                           ; BSR set to: 0
  1048                           ;incstack = 0
  1049                           ;incstack = 0
  1050  0010A6  0100                  movlb   0   ; () banked
  1051  0010A8  6F74                  movwf   ??___aldiv& (0+255),b
  1052  0010AA  0E00                  movlw   0
  1053  0010AC  0100                  movlb   0   ; () banked
  1054  0010AE  0100                  movlb   0   ; () banked
  1055  0010B0  6F76                  movwf   ___aldiv@sign& (0+255),b
  1056  0010B2  0100                  movlb   0   ; () banked
  1057  0010B4  5174                  movf   ??___aldiv& (0+255),w,b
  1058                           
  1059                           ; BSR set to: 0
  1060  0010B6  0100                  movlb   0   ; () banked
  1061  0010B8  0100                  movlb   0   ; () banked
  1062  0010BA  AF73                  btfss   (___aldiv@divisor+3)& (0+255),7,b
  1063  0010BC  D018                  goto   l1144
  1064                           
  1065                           ; BSR set to: 0
  1066  0010BE  0100                  movlb   0   ; () banked
  1067  0010C0  0100                  movlb   0   ; () banked
  1068  0010C2  1F73                  comf   (___aldiv@divisor+3)& (0+255),f,b
  1069  0010C4  0100                  movlb   0   ; () banked
  1070  0010C6  1F72                  comf   (___aldiv@divisor+2)& (0+255),f,b
  1071  0010C8  0100                  movlb   0   ; () banked
  1072  0010CA  1F71                  comf   (___aldiv@divisor+1)& (0+255),f,b
  1073  0010CC  0100                  movlb   0   ; () banked
  1074  0010CE  6D70                  negf   ___aldiv@divisor& (0+255),b
  1075  0010D0  0E00                  movlw   0
  1076  0010D2  0100                  movlb   0   ; () banked
  1077  0010D4  2371                  addwfc   (___aldiv@divisor+1)& (0+255),f,b
  1078  0010D6  0100                  movlb   0   ; () banked
  1079  0010D8  2372                  addwfc   (___aldiv@divisor+2)& (0+255),f,b
  1080  0010DA  0100                  movlb   0   ; () banked
  1081  0010DC  2373                  addwfc   (___aldiv@divisor+3)& (0+255),f,b
  1082                           
  1083                           ; BSR set to: 0
  1084  0010DE  0100                  movlb   0   ; () banked
  1085  0010E0  6F74                  movwf   ??___aldiv& (0+255),b
  1086  0010E2  0E01                  movlw   1
  1087  0010E4  0100                  movlb   0   ; () banked
  1088  0010E6  0100                  movlb   0   ; () banked
  1089  0010E8  6F76                  movwf   ___aldiv@sign& (0+255),b
  1090  0010EA  0100                  movlb   0   ; () banked
  1091  0010EC  5174                  movf   ??___aldiv& (0+255),w,b
  1092  0010EE                     l1144:
  1093                           
  1094                           ; BSR set to: 0
  1095  0010EE  0100                  movlb   0   ; () banked
  1096  0010F0  0100                  movlb   0   ; () banked
  1097  0010F2  AF6F                  btfss   (___aldiv@dividend+3)& (0+255),7,b
  1098  0010F4  D014                  goto   l1150
  1099                           
  1100                           ; BSR set to: 0
  1101  0010F6  0100                  movlb   0   ; () banked
  1102  0010F8  0100                  movlb   0   ; () banked
  1103  0010FA  1F6F                  comf   (___aldiv@dividend+3)& (0+255),f,b
  1104  0010FC  0100                  movlb   0   ; () banked
  1105  0010FE  1F6E                  comf   (___aldiv@dividend+2)& (0+255),f,b
  1106  001100  0100                  movlb   0   ; () banked
  1107  001102  1F6D                  comf   (___aldiv@dividend+1)& (0+255),f,b
  1108  001104  0100                  movlb   0   ; () banked
  1109  001106  6D6C                  negf   ___aldiv@dividend& (0+255),b
  1110  001108  0E00                  movlw   0
  1111  00110A  0100                  movlb   0   ; () banked
  1112  00110C  236D                  addwfc   (___aldiv@dividend+1)& (0+255),f,b
  1113  00110E  0100                  movlb   0   ; () banked
  1114  001110  236E                  addwfc   (___aldiv@dividend+2)& (0+255),f,b
  1115  001112  0100                  movlb   0   ; () banked
  1116  001114  236F                  addwfc   (___aldiv@dividend+3)& (0+255),f,b
  1117                           
  1118                           ; BSR set to: 0
  1119  001116  0E01                  movlw   1
  1120  001118  0100                  movlb   0   ; () banked
  1121  00111A  0100                  movlb   0   ; () banked
  1122  00111C  1B76                  xorwf   ___aldiv@sign& (0+255),f,b
  1123  00111E                     l1150:
  1124                           
  1125                           ; BSR set to: 0
  1126  00111E  0E00                  movlw   0
  1127  001120  0100                  movlb   0   ; () banked
  1128  001122  0100                  movlb   0   ; () banked
  1129  001124  6F77                  movwf   ___aldiv@quotient& (0+255),b
  1130  001126  0E00                  movlw   0
  1131  001128  0100                  movlb   0   ; () banked
  1132  00112A  6F78                  movwf   (___aldiv@quotient+1)& (0+255),b
  1133  00112C  0E00                  movlw   0
  1134  00112E  0100                  movlb   0   ; () banked
  1135  001130  6F79                  movwf   (___aldiv@quotient+2)& (0+255),b
  1136  001132  0E00                  movlw   0
  1137  001134  0100                  movlb   0   ; () banked
  1138  001136  6F7A                  movwf   (___aldiv@quotient+3)& (0+255),b
  1139                           
  1140                           ; BSR set to: 0
  1141  001138  0100                  movlb   0   ; () banked
  1142  00113A  0100                  movlb   0   ; () banked
  1143  00113C  5173                  movf   (___aldiv@divisor+3)& (0+255),w,b
  1144  00113E  1170                  iorwf   ___aldiv@divisor& (0+255),w,b
  1145  001140  1171                  iorwf   (___aldiv@divisor+1)& (0+255),w,b
  1146  001142  1172                  iorwf   (___aldiv@divisor+2)& (0+255),w,b
  1147  001144  B4D8                  btfsc   status,2,c
  1148  001146  D067                  goto   l1172
  1149                           
  1150                           ; BSR set to: 0
  1151  001148  0100                  movlb   0   ; () banked
  1152  00114A  6F74                  movwf   ??___aldiv& (0+255),b
  1153  00114C  0E01                  movlw   1
  1154  00114E  0100                  movlb   0   ; () banked
  1155  001150  0100                  movlb   0   ; () banked
  1156  001152  6F75                  movwf   ___aldiv@counter& (0+255),b
  1157  001154  0100                  movlb   0   ; () banked
  1158  001156  5174                  movf   ??___aldiv& (0+255),w,b
  1159  001158  D00D                  goto   l1158
  1160  00115A                     l1156:
  1161                           
  1162                           ; BSR set to: 0
  1163  00115A  0100                  movlb   0   ; () banked
  1164  00115C  90D8                  bcf   status,0,c
  1165  00115E  0100                  movlb   0   ; () banked
  1166  001160  3770                  rlcf   ___aldiv@divisor& (0+255),f,b
  1167  001162  0100                  movlb   0   ; () banked
  1168  001164  3771                  rlcf   (___aldiv@divisor+1)& (0+255),f,b
  1169  001166  0100                  movlb   0   ; () banked
  1170  001168  3772                  rlcf   (___aldiv@divisor+2)& (0+255),f,b
  1171  00116A  0100                  movlb   0   ; () banked
  1172  00116C  3773                  rlcf   (___aldiv@divisor+3)& (0+255),f,b
  1173  00116E  0100                  movlb   0   ; () banked
  1174  001170  0100                  movlb   0   ; () banked
  1175  001172  2B75                  incf   ___aldiv@counter& (0+255),f,b
  1176  001174                     l1158:
  1177                           
  1178                           ; BSR set to: 0
  1179  001174  0100                  movlb   0   ; () banked
  1180  001176  0100                  movlb   0   ; () banked
  1181  001178  AF73                  btfss   (___aldiv@divisor+3)& (0+255),7,b
  1182  00117A  D7EF                  goto   l1156
  1183  00117C                     l1160:
  1184                           
  1185                           ; BSR set to: 0
  1186  00117C  0100                  movlb   0   ; () banked
  1187  00117E  90D8                  bcf   status,0,c
  1188  001180  0100                  movlb   0   ; () banked
  1189  001182  3777                  rlcf   ___aldiv@quotient& (0+255),f,b
  1190  001184  0100                  movlb   0   ; () banked
  1191  001186  3778                  rlcf   (___aldiv@quotient+1)& (0+255),f,b
  1192  001188  0100                  movlb   0   ; () banked
  1193  00118A  3779                  rlcf   (___aldiv@quotient+2)& (0+255),f,b
  1194  00118C  0100                  movlb   0   ; () banked
  1195  00118E  377A                  rlcf   (___aldiv@quotient+3)& (0+255),f,b
  1196                           
  1197                           ; BSR set to: 0
  1198  001190  0100                  movlb   0   ; () banked
  1199  001192  0100                  movlb   0   ; () banked
  1200  001194  5170                  movf   ___aldiv@divisor& (0+255),w,b
  1201  001196  0100                  movlb   0   ; () banked
  1202  001198  0100                  movlb   0   ; () banked
  1203  00119A  5D6C                  subwf   ___aldiv@dividend& (0+255),w,b
  1204  00119C  0100                  movlb   0   ; () banked
  1205  00119E  0100                  movlb   0   ; () banked
  1206  0011A0  5171                  movf   (___aldiv@divisor+1)& (0+255),w,b
  1207  0011A2  0100                  movlb   0   ; () banked
  1208  0011A4  0100                  movlb   0   ; () banked
  1209  0011A6  596D                  subwfb   (___aldiv@dividend+1)& (0+255),w,b
  1210  0011A8  0100                  movlb   0   ; () banked
  1211  0011AA  0100                  movlb   0   ; () banked
  1212  0011AC  5172                  movf   (___aldiv@divisor+2)& (0+255),w,b
  1213  0011AE  0100                  movlb   0   ; () banked
  1214  0011B0  0100                  movlb   0   ; () banked
  1215  0011B2  596E                  subwfb   (___aldiv@dividend+2)& (0+255),w,b
  1216  0011B4  0100                  movlb   0   ; () banked
  1217  0011B6  0100                  movlb   0   ; () banked
  1218  0011B8  5173                  movf   (___aldiv@divisor+3)& (0+255),w,b
  1219  0011BA  0100                  movlb   0   ; () banked
  1220  0011BC  0100                  movlb   0   ; () banked
  1221  0011BE  596F                  subwfb   (___aldiv@dividend+3)& (0+255),w,b
  1222  0011C0  A0D8                  btfss   status,0,c
  1223  0011C2  D01B                  goto   l1168
  1224                           
  1225                           ; BSR set to: 0
  1226  0011C4  0100                  movlb   0   ; () banked
  1227  0011C6  0100                  movlb   0   ; () banked
  1228  0011C8  5170                  movf   ___aldiv@divisor& (0+255),w,b
  1229  0011CA  0100                  movlb   0   ; () banked
  1230  0011CC  0100                  movlb   0   ; () banked
  1231  0011CE  5F6C                  subwf   ___aldiv@dividend& (0+255),f,b
  1232  0011D0  0100                  movlb   0   ; () banked
  1233  0011D2  0100                  movlb   0   ; () banked
  1234  0011D4  5171                  movf   (___aldiv@divisor+1)& (0+255),w,b
  1235  0011D6  0100                  movlb   0   ; () banked
  1236  0011D8  0100                  movlb   0   ; () banked
  1237  0011DA  5B6D                  subwfb   (___aldiv@dividend+1)& (0+255),f,b
  1238  0011DC  0100                  movlb   0   ; () banked
  1239  0011DE  0100                  movlb   0   ; () banked
  1240  0011E0  5172                  movf   (___aldiv@divisor+2)& (0+255),w,b
  1241  0011E2  0100                  movlb   0   ; () banked
  1242  0011E4  0100                  movlb   0   ; () banked
  1243  0011E6  5B6E                  subwfb   (___aldiv@dividend+2)& (0+255),f,b
  1244  0011E8  0100                  movlb   0   ; () banked
  1245  0011EA  0100                  movlb   0   ; () banked
  1246  0011EC  5173                  movf   (___aldiv@divisor+3)& (0+255),w,b
  1247  0011EE  0100                  movlb   0   ; () banked
  1248  0011F0  0100                  movlb   0   ; () banked
  1249  0011F2  5B6F                  subwfb   (___aldiv@dividend+3)& (0+255),f,b
  1250                           
  1251                           ; BSR set to: 0
  1252  0011F4  0100                  movlb   0   ; () banked
  1253  0011F6  0100                  movlb   0   ; () banked
  1254  0011F8  8177                  bsf   ___aldiv@quotient& (0+255),0,b
  1255  0011FA                     l1168:
  1256                           
  1257                           ; BSR set to: 0
  1258  0011FA  0100                  movlb   0   ; () banked
  1259  0011FC  90D8                  bcf   status,0,c
  1260  0011FE  0100                  movlb   0   ; () banked
  1261  001200  3373                  rrcf   (___aldiv@divisor+3)& (0+255),f,b
  1262  001202  0100                  movlb   0   ; () banked
  1263  001204  3372                  rrcf   (___aldiv@divisor+2)& (0+255),f,b
  1264  001206  0100                  movlb   0   ; () banked
  1265  001208  3371                  rrcf   (___aldiv@divisor+1)& (0+255),f,b
  1266  00120A  0100                  movlb   0   ; () banked
  1267  00120C  3370                  rrcf   ___aldiv@divisor& (0+255),f,b
  1268                           
  1269                           ; BSR set to: 0
  1270  00120E  0100                  movlb   0   ; () banked
  1271  001210  0100                  movlb   0   ; () banked
  1272  001212  2F75                  decfsz   ___aldiv@counter& (0+255),f,b
  1273  001214  D7B3                  goto   l1160
  1274  001216                     l1172:
  1275                           
  1276                           ; BSR set to: 0
  1277  001216  0100                  movlb   0   ; () banked
  1278  001218  0100                  movlb   0   ; () banked
  1279  00121A  5176                  movf   ___aldiv@sign& (0+255),w,b
  1280  00121C  B4D8                  btfsc   status,2,c
  1281  00121E  D010                  goto   l1176
  1282                           
  1283                           ; BSR set to: 0
  1284  001220  0100                  movlb   0   ; () banked
  1285  001222  0100                  movlb   0   ; () banked
  1286  001224  1F7A                  comf   (___aldiv@quotient+3)& (0+255),f,b
  1287  001226  0100                  movlb   0   ; () banked
  1288  001228  1F79                  comf   (___aldiv@quotient+2)& (0+255),f,b
  1289  00122A  0100                  movlb   0   ; () banked
  1290  00122C  1F78                  comf   (___aldiv@quotient+1)& (0+255),f,b
  1291  00122E  0100                  movlb   0   ; () banked
  1292  001230  6D77                  negf   ___aldiv@quotient& (0+255),b
  1293  001232  0E00                  movlw   0
  1294  001234  0100                  movlb   0   ; () banked
  1295  001236  2378                  addwfc   (___aldiv@quotient+1)& (0+255),f,b
  1296  001238  0100                  movlb   0   ; () banked
  1297  00123A  2379                  addwfc   (___aldiv@quotient+2)& (0+255),f,b
  1298  00123C  0100                  movlb   0   ; () banked
  1299  00123E  237A                  addwfc   (___aldiv@quotient+3)& (0+255),f,b
  1300  001240                     l1176:
  1301                           
  1302                           ; BSR set to: 0
  1303  001240  C077  F06C            movff   ___aldiv@quotient,?___aldiv
  1304  001244  C078  F06D            movff   ___aldiv@quotient+1,?___aldiv+1
  1305  001248  C079  F06E            movff   ___aldiv@quotient+2,?___aldiv+2
  1306  00124C  C07A  F06F            movff   ___aldiv@quotient+3,?___aldiv+3
  1307  001250  0012                  return   
  1308  001252                     __end_of___aldiv:
  1309                              opt stack 0
  1310                           tblptru   equ   0xFF8
  1311                           tblptrh   equ   0xFF7
  1312                           tblptrl   equ   0xFF6
  1313                           tablat   equ   0xFF5
  1314                           intcon   equ   0xFF2
  1315                           intcon2   equ   0xFF1
  1316                           intcon3   equ   0xFF0
  1317                           wreg   equ   0xFE8
  1318                           status   equ   0xFD8
  1319                           
  1320 ;; *************** function _low_isr *****************
  1321 ;; Defined at:
  1322 ;;      line 131 in file "interrupts.c"
  1323 ;; Parameters:    Size  Location     Type
  1324 ;;      None
  1325 ;; Auto vars:     Size  Location     Type
  1326 ;;      None
  1327 ;; Return value:  Size  Location     Type
  1328 ;;      None               void
  1329 ;; Registers used:
  1330 ;;      None
  1331 ;; Tracked objects:
  1332 ;;      On entry : 0/0
  1333 ;;      On exit  : 0/0
  1334 ;;      Unchanged: 0/0
  1335 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
  1336 ;;      Params:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1337 ;;      Locals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1338 ;;      Temps:         17       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1339 ;;      Totals:        17       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1340 ;;Total ram usage:       17 bytes
  1341 ;; Hardware stack levels used:    1
  1342 ;; Hardware stack levels required when called:    3
  1343 ;; This function calls:
  1344 ;;      Nothing
  1345 ;; This function is called by:
  1346 ;;      Interrupt level 1
  1347 ;; This function uses a non-reentrant model
  1348 ;;
  1349                           
  1350                              psect   intcodelo
  1351  001018                     __pintcodelo:
  1352                              opt stack 0
  1353  001018                     _low_isr:
  1354                              opt stack 25
  1355                           
  1356                           ; BSR set to: 0
  1357                           ;incstack = 0
  1358  001018  CFD8 F001             movff   status,??_low_isr
  1359  00101C  CFE8 F002             movff   wreg,??_low_isr+1
  1360  001020  CFE0 F003             movff   bsr,??_low_isr+2
  1361  001024  CFFA F004             movff   pclath,??_low_isr+3
  1362  001028  CFFB F005             movff   pclatu,??_low_isr+4
  1363  00102C  CFE9 F006             movff   fsr0l,??_low_isr+5
  1364  001030  CFEA F007             movff   fsr0h,??_low_isr+6
  1365  001034  CFE1 F008             movff   fsr1l,??_low_isr+7
  1366  001038  CFE2 F009             movff   fsr1h,??_low_isr+8
  1367  00103C  CFD9 F00A             movff   fsr2l,??_low_isr+9
  1368  001040  CFDA F00B             movff   fsr2h,??_low_isr+10
  1369  001044  CFF3 F00C             movff   prodl,??_low_isr+11
  1370  001048  CFF4 F00D             movff   prodh,??_low_isr+12
  1371  00104C  CFF6 F00E             movff   tblptrl,??_low_isr+13
  1372  001050  CFF7 F00F             movff   tblptrh,??_low_isr+14
  1373  001054  CFF8 F010             movff   tblptru,??_low_isr+15
  1374  001058  CFF5 F011             movff   tablat,??_low_isr+16
  1375  00105C  C011  FFF5            movff   ??_low_isr+16,tablat
  1376  001060  C010  FFF8            movff   ??_low_isr+15,tblptru
  1377  001064  C00F  FFF7            movff   ??_low_isr+14,tblptrh
  1378  001068  C00E  FFF6            movff   ??_low_isr+13,tblptrl
  1379  00106C  C00D  FFF4            movff   ??_low_isr+12,prodh
  1380  001070  C00C  FFF3            movff   ??_low_isr+11,prodl
  1381  001074  C00B  FFDA            movff   ??_low_isr+10,fsr2h
  1382  001078  C00A  FFD9            movff   ??_low_isr+9,fsr2l
  1383  00107C  C009  FFE2            movff   ??_low_isr+8,fsr1h
  1384  001080  C008  FFE1            movff   ??_low_isr+7,fsr1l
  1385  001084  C007  FFEA            movff   ??_low_isr+6,fsr0h
  1386  001088  C006  FFE9            movff   ??_low_isr+5,fsr0l
  1387  00108C  C005  FFFB            movff   ??_low_isr+4,pclatu
  1388  001090  C004  FFFA            movff   ??_low_isr+3,pclath
  1389  001094  C003  FFE0            movff   ??_low_isr+2,bsr
  1390  001098  C002  FFE8            movff   ??_low_isr+1,wreg
  1391  00109C  C001  FFD8            movff   ??_low_isr,status
  1392  0010A0  0010                  retfie   
  1393  0010A2                     __end_of_low_isr:
  1394                              opt stack 0
  1395                           pclatu   equ   0xFFB
  1396                           pclath   equ   0xFFA
  1397                           tblptru   equ   0xFF8
  1398                           tblptrh   equ   0xFF7
  1399                           tblptrl   equ   0xFF6
  1400                           tablat   equ   0xFF5
  1401                           prodh   equ   0xFF4
  1402                           prodl   equ   0xFF3
  1403                           intcon   equ   0xFF2
  1404                           intcon2   equ   0xFF1
  1405                           intcon3   equ   0xFF0
  1406                           fsr0h   equ   0xFEA
  1407                           fsr0l   equ   0xFE9
  1408                           wreg   equ   0xFE8
  1409                           fsr1h   equ   0xFE2
  1410                           fsr1l   equ   0xFE1
  1411                           bsr   equ   0xFE0
  1412                           fsr2h   equ   0xFDA
  1413                           fsr2l   equ   0xFD9
  1414                           status   equ   0xFD8
  1415                           
  1416 ;; *************** function _high_isr *****************
  1417 ;; Defined at:
  1418 ;;      line 40 in file "interrupts.c"
  1419 ;; Parameters:    Size  Location     Type
  1420 ;;      None
  1421 ;; Auto vars:     Size  Location     Type
  1422 ;;      None
  1423 ;; Return value:  Size  Location     Type
  1424 ;;      None               void
  1425 ;; Registers used:
  1426 ;;      wreg, status,2, status,0, cstack
  1427 ;; Tracked objects:
  1428 ;;      On entry : 0/0
  1429 ;;      On exit  : 0/0
  1430 ;;      Unchanged: 0/0
  1431 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
  1432 ;;      Params:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1433 ;;      Locals:         0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1434 ;;      Temps:         15       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1435 ;;      Totals:        15       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1436 ;;Total ram usage:       15 bytes
  1437 ;; Hardware stack levels used:    1
  1438 ;; Hardware stack levels required when called:    2
  1439 ;; This function calls:
  1440 ;;      i2_freq_t0
  1441 ;; This function is called by:
  1442 ;;      Interrupt level 2
  1443 ;; This function uses a non-reentrant model
  1444 ;;
  1445                           
  1446                              psect   intcode
  1447  001008                     __pintcode:
  1448                              opt stack 0
  1449  001008                     _high_isr:
  1450                              opt stack 25
  1451                           
  1452                           ;incstack = 0
  1453  001008  CFFA F038             movff   pclath,??_high_isr+1
  1454  00100C  CFFB F039             movff   pclatu,??_high_isr+2
  1455  001010  CFE9 F03A             movff   fsr0l,??_high_isr+3
  1456  001014  EF29  F009            goto   int_func
  1457                           pclatu   equ   0xFFB
  1458                           pclath   equ   0xFFA
  1459                           tblptru   equ   0xFF8
  1460                           tblptrh   equ   0xFF7
  1461                           tblptrl   equ   0xFF6
  1462                           tablat   equ   0xFF5
  1463                           prodh   equ   0xFF4
  1464                           prodl   equ   0xFF3
  1465                           intcon   equ   0xFF2
  1466                           intcon2   equ   0xFF1
  1467                           intcon3   equ   0xFF0
  1468                           fsr0h   equ   0xFEA
  1469                           fsr0l   equ   0xFE9
  1470                           wreg   equ   0xFE8
  1471                           fsr1h   equ   0xFE2
  1472                           fsr1l   equ   0xFE1
  1473                           bsr   equ   0xFE0
  1474                           fsr2h   equ   0xFDA
  1475                           fsr2l   equ   0xFD9
  1476                           status   equ   0xFD8
  1477                           
  1478                              psect   intcode_body
  1479  001252                     __pintcode_body:
  1480                              opt stack 25
  1481  001252                     int_func:
  1482                              opt stack 25
  1483  001252  CFEA F03B             movff   fsr0h,??_high_isr+4
  1484  001256  CFE1 F03C             movff   fsr1l,??_high_isr+5
  1485  00125A  CFE2 F03D             movff   fsr1h,??_high_isr+6
  1486  00125E  CFD9 F03E             movff   fsr2l,??_high_isr+7
  1487  001262  CFDA F03F             movff   fsr2h,??_high_isr+8
  1488  001266  CFF3 F040             movff   prodl,??_high_isr+9
  1489  00126A  CFF4 F041             movff   prodh,??_high_isr+10
  1490  00126E  CFF6 F042             movff   tblptrl,??_high_isr+11
  1491  001272  CFF7 F043             movff   tblptrh,??_high_isr+12
  1492  001276  CFF8 F044             movff   tblptru,??_high_isr+13
  1493  00127A  CFF5 F045             movff   tablat,??_high_isr+14
  1494  00127E                     
  1495                           ;interrupts.c: 42: if(INTCONbits.TMR0IF == 1)
  1496  00127E  A4F2                  btfss   intcon,2,c   ;volatile
  1497  001280  D001                  goto   i2u1_41
  1498  001282  D001                  goto   i2u1_40
  1499  001284                     i2u1_41:
  1500  001284  D03B                  goto   i2l21
  1501  001286                     i2u1_40:
  1502  001286                     
  1503                           ;interrupts.c: 43: {
  1504                           ;interrupts.c: 49: T0CONbits.TMR0ON = 0;
  1505  001286  9ED5                  bcf   4053,7,c   ;volatile
  1506  001288                     
  1507                           ;interrupts.c: 54: if (periodo_lungo == 1){
  1508  001288  044C                  decf   _periodo_lungo,w,c   ;volatile
  1509  00128A  A4D8                  btfss   status,2,c
  1510  00128C  D001                  goto   i2u2_41
  1511  00128E  D001                  goto   i2u2_40
  1512  001290                     i2u2_41:
  1513  001290  D017                  goto   i2l22
  1514  001292                     i2u2_40:
  1515  001292                     
  1516                           ;interrupts.c: 55: freq_t0((long)duty, 256);
  1517  001292  C046  F02D            movff   _duty,?i2_freq_t0
  1518  001296  C047  F02E            movff   _duty+1,?i2_freq_t0+1
  1519  00129A  0E00                  movlw   0
  1520  00129C  BE2E                  btfsc   ?i2_freq_t0+1,7,c
  1521  00129E  0EFF                  movlw   -1
  1522  0012A0  6E2F                  movwf   ?i2_freq_t0+2,c
  1523  0012A2  6E30                  movwf   ?i2_freq_t0+3,c
  1524  0012A4  0E00                  movlw   0
  1525  0012A6  6E31                  movwf   ?i2_freq_t0+4,c
  1526  0012A8  0E01                  movlw   1
  1527  0012AA  6E32                  movwf   ?i2_freq_t0+5,c
  1528  0012AC  0E00                  movlw   0
  1529  0012AE  6E33                  movwf   ?i2_freq_t0+6,c
  1530  0012B0  0E00                  movlw   0
  1531  0012B2  6E34                  movwf   ?i2_freq_t0+7,c
  1532  0012B4  ECDA  F00A            call   i2_freq_t0   ;wreg free
  1533  0012B8                     
  1534                           ;interrupts.c: 56: periodo_lungo = 0;
  1535  0012B8  0E00                  movlw   0
  1536  0012BA  6E4C                  movwf   _periodo_lungo,c   ;volatile
  1537  0012BC                     
  1538                           ;interrupts.c: 57: PORTDbits.RD6 = 1;
  1539  0012BC  8C83                  bsf   3971,6,c   ;volatile
  1540                           
  1541                           ;interrupts.c: 58: }
  1542  0012BE  D01B                  goto   i2l816
  1543  0012C0                     i2l22:
  1544                           
  1545                           ;interrupts.c: 59: else if (periodo_lungo == 0) {
  1546  0012C0  664C                  tstfsz   _periodo_lungo,c   ;volatile
  1547  0012C2  D001                  goto   i2u3_41
  1548  0012C4  D001                  goto   i2u3_40
  1549  0012C6                     i2u3_41:
  1550  0012C6  D017                  goto   i2l816
  1551  0012C8                     i2u3_40:
  1552  0012C8                     
  1553                           ;interrupts.c: 60: PORTDbits.RD6 = 0;
  1554  0012C8  9C83                  bcf   3971,6,c   ;volatile
  1555  0012CA                     
  1556                           ;interrupts.c: 61: freq_t0(100, 256);
  1557  0012CA  0E64                  movlw   100
  1558  0012CC  6E2D                  movwf   ?i2_freq_t0,c
  1559  0012CE  0E00                  movlw   0
  1560  0012D0  6E2E                  movwf   ?i2_freq_t0+1,c
  1561  0012D2  0E00                  movlw   0
  1562  0012D4  6E2F                  movwf   ?i2_freq_t0+2,c
  1563  0012D6  0E00                  movlw   0
  1564  0012D8  6E30                  movwf   ?i2_freq_t0+3,c
  1565  0012DA  0E00                  movlw   0
  1566  0012DC  6E31                  movwf   ?i2_freq_t0+4,c
  1567  0012DE  0E01                  movlw   1
  1568  0012E0  6E32                  movwf   ?i2_freq_t0+5,c
  1569  0012E2  0E00                  movlw   0
  1570  0012E4  6E33                  movwf   ?i2_freq_t0+6,c
  1571  0012E6  0E00                  movlw   0
  1572  0012E8  6E34                  movwf   ?i2_freq_t0+7,c
  1573  0012EA  ECDA  F00A            call   i2_freq_t0   ;wreg free
  1574  0012EE                     
  1575                           ;interrupts.c: 62: periodo_lungo = 1;
  1576  0012EE  0E01                  movlw   1
  1577  0012F0  6E4C                  movwf   _periodo_lungo,c   ;volatile
  1578  0012F2  D001                  goto   i2l816
  1579  0012F4  D000                  goto   i2l816
  1580  0012F6                     i2l816:
  1581                           
  1582                           ;interrupts.c: 64: }
  1583                           ;interrupts.c: 65: T0CONbits.TMR0ON = 1;
  1584  0012F6  8ED5                  bsf   4053,7,c   ;volatile
  1585  0012F8                     
  1586                           ;interrupts.c: 67: INTCONbits.TMR0IF = 0;
  1587  0012F8  94F2                  bcf   intcon,2,c   ;volatile
  1588                           
  1589                           ;interrupts.c: 69: }
  1590  0012FA  D049                  goto   i2l34
  1591  0012FC                     i2l21:
  1592                           
  1593                           ;interrupts.c: 70: else if(INTCON3bits.INT1IF)
  1594  0012FC  A0F0                  btfss   intcon3,0,c   ;volatile
  1595  0012FE  D001                  goto   i2u4_41
  1596  001300  D001                  goto   i2u4_40
  1597  001302                     i2u4_41:
  1598  001302  D035                  goto   i2l26
  1599  001304                     i2u4_40:
  1600  001304                     
  1601                           ;interrupts.c: 71: {
  1602                           ;interrupts.c: 72: _delay((unsigned long)((15)*(48000000L/4000.0)));
  1603  001304  0EEA                  movlw   234
  1604  001306  6E37                  movwf   ??_high_isr& (0+255),c
  1605  001308  0EC3                  movlw   195
  1606  00130A                     i2u43_47:
  1607  00130A  2EE8                  decfsz   wreg,f,c
  1608  00130C  D7FE                  goto   i2u43_47
  1609  00130E  2E37                  decfsz   ??_high_isr& (0+255),f,c
  1610  001310  D7FC                  goto   i2u43_47
  1611  001312                     
  1612                           ;interrupts.c: 73: count ++;
  1613  001312  4A4A                  infsnz   _count,f,c
  1614  001314  2A4B                  incf   _count+1,f,c
  1615                           
  1616                           ;interrupts.c: 74: if (count <= 0){
  1617  001316  504B                  movf   _count+1,w,c
  1618  001318  0A80                  xorlw   128
  1619  00131A  0F80                  addlw   -128
  1620  00131C  0E01                  movlw   1
  1621  00131E  B4D8                  btfsc   status,2,c
  1622  001320  5C4A                  subwf   _count,w,c
  1623  001322  B0D8                  btfsc   status,0,c
  1624  001324  D001                  goto   i2u5_41
  1625  001326  D001                  goto   i2u5_40
  1626  001328                     i2u5_41:
  1627  001328  D005                  goto   i2l826
  1628  00132A                     i2u5_40:
  1629  00132A                     
  1630                           ;interrupts.c: 75: duty = 580;
  1631  00132A  0E02                  movlw   2
  1632  00132C  6E47                  movwf   _duty+1,c
  1633  00132E  0E44                  movlw   68
  1634  001330  6E46                  movwf   _duty,c
  1635                           
  1636                           ;interrupts.c: 76: }
  1637  001332  D01B                  goto   i2l836
  1638  001334                     i2l826:
  1639                           
  1640                           ;interrupts.c: 77: else if (count == 1)
  1641  001334  044A                  decf   _count,w,c
  1642  001336  104B                  iorwf   _count+1,w,c
  1643  001338  A4D8                  btfss   status,2,c
  1644  00133A  D001                  goto   i2u6_41
  1645  00133C  D001                  goto   i2u6_40
  1646  00133E                     i2u6_41:
  1647  00133E  D005                  goto   i2l830
  1648  001340                     i2u6_40:
  1649  001340                     
  1650                           ;interrupts.c: 78: {
  1651                           ;interrupts.c: 79: duty = 666;
  1652  001340  0E02                  movlw   2
  1653  001342  6E47                  movwf   _duty+1,c
  1654  001344  0E9A                  movlw   154
  1655  001346  6E46                  movwf   _duty,c
  1656                           
  1657                           ;interrupts.c: 80: }
  1658  001348  D010                  goto   i2l836
  1659  00134A                     i2l830:
  1660                           
  1661                           ;interrupts.c: 81: else if (count ==2){
  1662  00134A  504A                  movf   _count,w,c
  1663  00134C  0A02                  xorlw   2
  1664  00134E  104B                  iorwf   _count+1,w,c
  1665  001350  A4D8                  btfss   status,2,c
  1666  001352  D001                  goto   i2u7_41
  1667  001354  D001                  goto   i2u7_40
  1668  001356                     i2u7_41:
  1669  001356  D009                  goto   i2l836
  1670  001358                     i2u7_40:
  1671  001358                     
  1672                           ;interrupts.c: 82: duty = 770;
  1673  001358  0E03                  movlw   3
  1674  00135A  6E47                  movwf   _duty+1,c
  1675  00135C  0E02                  movlw   2
  1676  00135E  6E46                  movwf   _duty,c
  1677  001360                     
  1678                           ;interrupts.c: 83: count= -1;
  1679  001360  684A                  setf   _count,c
  1680  001362  684B                  setf   _count+1,c
  1681  001364  D002                  goto   i2l836
  1682  001366  D001                  goto   i2l836
  1683  001368  D000                  goto   i2l836
  1684  00136A                     i2l836:
  1685                           
  1686                           ;interrupts.c: 84: }
  1687                           ;interrupts.c: 85: INTCON3bits.INT1IF = 0;
  1688  00136A  90F0                  bcf   intcon3,0,c   ;volatile
  1689                           
  1690                           ;interrupts.c: 86: }
  1691  00136C  D010                  goto   i2l34
  1692  00136E                     i2l26:
  1693                           
  1694                           ;interrupts.c: 88: else if(INTCON3bits.INT2IF)
  1695  00136E  A2F0                  btfss   intcon3,1,c   ;volatile
  1696  001370  D001                  goto   i2u8_41
  1697  001372  D001                  goto   i2u8_40
  1698  001374                     i2u8_41:
  1699  001374  D00C                  goto   i2l34
  1700  001376                     i2u8_40:
  1701  001376                     
  1702                           ;interrupts.c: 89: {
  1703                           ;interrupts.c: 90: _delay((unsigned long)((15)*(48000000L/4000.0)));
  1704  001376  0EEA                  movlw   234
  1705  001378  6E37                  movwf   ??_high_isr& (0+255),c
  1706  00137A  0EC3                  movlw   195
  1707  00137C                     i2u44_47:
  1708  00137C  2EE8                  decfsz   wreg,f,c
  1709  00137E  D7FE                  goto   i2u44_47
  1710  001380  2E37                  decfsz   ??_high_isr& (0+255),f,c
  1711  001382  D7FC                  goto   i2u44_47
  1712  001384                     
  1713                           ;interrupts.c: 91: PORTDbits.RD7 = ~PORTDbits.RD7;
  1714  001384  7E83                  btg   3971,7,c   ;volatile
  1715  001386                     
  1716                           ;interrupts.c: 92: INTCON3bits.INT2IF = 0;
  1717  001386  92F0                  bcf   intcon3,1,c   ;volatile
  1718  001388  D002                  goto   i2l34
  1719  00138A  D001                  goto   i2l34
  1720  00138C  D000                  goto   i2l34
  1721  00138E                     i2l34:
  1722  00138E  C045  FFF5            movff   ??_high_isr+14,tablat
  1723  001392  C044  FFF8            movff   ??_high_isr+13,tblptru
  1724  001396  C043  FFF7            movff   ??_high_isr+12,tblptrh
  1725  00139A  C042  FFF6            movff   ??_high_isr+11,tblptrl
  1726  00139E  C041  FFF4            movff   ??_high_isr+10,prodh
  1727  0013A2  C040  FFF3            movff   ??_high_isr+9,prodl
  1728  0013A6  C03F  FFDA            movff   ??_high_isr+8,fsr2h
  1729  0013AA  C03E  FFD9            movff   ??_high_isr+7,fsr2l
  1730  0013AE  C03D  FFE2            movff   ??_high_isr+6,fsr1h
  1731  0013B2  C03C  FFE1            movff   ??_high_isr+5,fsr1l
  1732  0013B6  C03B  FFEA            movff   ??_high_isr+4,fsr0h
  1733  0013BA  C03A  FFE9            movff   ??_high_isr+3,fsr0l
  1734  0013BE  C039  FFFB            movff   ??_high_isr+2,pclatu
  1735  0013C2  C038  FFFA            movff   ??_high_isr+1,pclath
  1736  0013C6  0011                  retfie      f
  1737  0013C8                     __end_of_high_isr:
  1738                              opt stack 0
  1739                           pclatu   equ   0xFFB
  1740                           pclath   equ   0xFFA
  1741                           tblptru   equ   0xFF8
  1742                           tblptrh   equ   0xFF7
  1743                           tblptrl   equ   0xFF6
  1744                           tablat   equ   0xFF5
  1745                           prodh   equ   0xFF4
  1746                           prodl   equ   0xFF3
  1747                           intcon   equ   0xFF2
  1748                           intcon2   equ   0xFF1
  1749                           intcon3   equ   0xFF0
  1750                           fsr0h   equ   0xFEA
  1751                           fsr0l   equ   0xFE9
  1752                           wreg   equ   0xFE8
  1753                           fsr1h   equ   0xFE2
  1754                           fsr1l   equ   0xFE1
  1755                           bsr   equ   0xFE0
  1756                           fsr2h   equ   0xFDA
  1757                           fsr2l   equ   0xFD9
  1758                           status   equ   0xFD8
  1759                           
  1760 ;; *************** function i2_freq_t0 *****************
  1761 ;; Defined at:
  1762 ;;      line 80 in file "user.c"
  1763 ;; Parameters:    Size  Location     Type
  1764 ;;  freq_t0         4   44[COMRAM] long
  1765 ;;  freq_t0         4   48[COMRAM] long
  1766 ;; Auto vars:     Size  Location     Type
  1767 ;;  freq_t0         2   52[COMRAM] int
  1768 ;; Return value:  Size  Location     Type
  1769 ;;      None               void
  1770 ;; Registers used:
  1771 ;;      wreg, status,2, cstack
  1772 ;; Tracked objects:
  1773 ;;      On entry : 0/0
  1774 ;;      On exit  : 0/0
  1775 ;;      Unchanged: 0/0
  1776 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
  1777 ;;      Params:         8       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1778 ;;      Locals:         2       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1779 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1780 ;;      Totals:        10       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1781 ;;Total ram usage:       10 bytes
  1782 ;; Hardware stack levels used:    1
  1783 ;; Hardware stack levels required when called:    1
  1784 ;; This function calls:
  1785 ;;      i2___aldiv
  1786 ;;      i2___lmul
  1787 ;; This function is called by:
  1788 ;;      _high_isr
  1789 ;; This function uses a non-reentrant model
  1790 ;;
  1791                           
  1792                              psect   text10
  1793  0015B4                     __ptext10:
  1794                              opt stack 0
  1795  0015B4                     i2_freq_t0:
  1796                              opt stack 25
  1797                           
  1798                           ;user.c: 81: int timer = (int) (65536 - (48000000L/4)/(f*presc));
  1799                           
  1800                           ;incstack = 0
  1801                           ;incstack = 0
  1802  0015B4  0E00                  movlw   0
  1803  0015B6  6E1E                  movwf   ?i2___aldiv,c
  1804  0015B8  0E1B                  movlw   27
  1805  0015BA  6E1F                  movwf   ?i2___aldiv+1,c
  1806  0015BC  0EB7                  movlw   183
  1807  0015BE  6E20                  movwf   ?i2___aldiv+2,c
  1808  0015C0  0E00                  movlw   0
  1809  0015C2  6E21                  movwf   ?i2___aldiv+3,c
  1810  0015C4  C031  F016            movff   i2freq_t0@presc,?i2___lmul+4
  1811  0015C8  C032  F017            movff   i2freq_t0@presc+1,?i2___lmul+5
  1812  0015CC  C033  F018            movff   i2freq_t0@presc+2,?i2___lmul+6
  1813  0015D0  C034  F019            movff   i2freq_t0@presc+3,?i2___lmul+7
  1814  0015D4  C02D  F012            movff   i2freq_t0@f,?i2___lmul
  1815  0015D8  C02E  F013            movff   i2freq_t0@f+1,?i2___lmul+1
  1816  0015DC  C02F  F014            movff   i2freq_t0@f+2,?i2___lmul+2
  1817  0015E0  C030  F015            movff   i2freq_t0@f+3,?i2___lmul+3
  1818  0015E4  EC0B  F00B            call   i2___lmul   ;wreg free
  1819  0015E8  C015  F025            movff   ?i2___lmul+3,?i2___aldiv+7
  1820  0015EC  C014  F024            movff   ?i2___lmul+2,?i2___aldiv+6
  1821  0015F0  C013  F023            movff   ?i2___lmul+1,?i2___aldiv+5
  1822  0015F4  C012  F022            movff   ?i2___lmul,?i2___aldiv+4
  1823  0015F8  ECE4  F009            call   i2___aldiv   ;wreg free
  1824  0015FC  1E1E                  comf   ?i2___aldiv,f,c
  1825  0015FE  1E1F                  comf   ?i2___aldiv+1,f,c
  1826  001600  4A1E                  infsnz   ?i2___aldiv,f,c
  1827  001602  2A1F                  incf   ?i2___aldiv+1,f,c
  1828  001604  C01E  F035            movff   ?i2___aldiv,i2freq_t0@timer
  1829  001608  C01F  F036            movff   ?i2___aldiv+1,i2freq_t0@timer+1
  1830                           
  1831                           ;user.c: 83: TMR0H = timer >> 8;
  1832  00160C  5036                  movf   i2freq_t0@timer+1,w,c
  1833  00160E  6ED7                  movwf   4055,c   ;volatile
  1834                           
  1835                           ;user.c: 84: TMR0L = timer;
  1836  001610  C035  FFD6            movff   i2freq_t0@timer,4054   ;volatile
  1837  001614  0012                  return   
  1838  001616                     __end_ofi2_freq_t0:
  1839                              opt stack 0
  1840                           pclatu   equ   0xFFB
  1841                           pclath   equ   0xFFA
  1842                           tblptru   equ   0xFF8
  1843                           tblptrh   equ   0xFF7
  1844                           tblptrl   equ   0xFF6
  1845                           tablat   equ   0xFF5
  1846                           prodh   equ   0xFF4
  1847                           prodl   equ   0xFF3
  1848                           intcon   equ   0xFF2
  1849                           intcon2   equ   0xFF1
  1850                           intcon3   equ   0xFF0
  1851                           fsr0h   equ   0xFEA
  1852                           fsr0l   equ   0xFE9
  1853                           wreg   equ   0xFE8
  1854                           fsr1h   equ   0xFE2
  1855                           fsr1l   equ   0xFE1
  1856                           bsr   equ   0xFE0
  1857                           fsr2h   equ   0xFDA
  1858                           fsr2l   equ   0xFD9
  1859                           status   equ   0xFD8
  1860                           
  1861 ;; *************** function i2___lmul *****************
  1862 ;; Defined at:
  1863 ;;      line 3 in file "C:\Program Files (x86)\Microchip\xc8\v1.20\sources\common\lmul.c"
  1864 ;; Parameters:    Size  Location     Type
  1865 ;;  __lmul          4   17[COMRAM] unsigned long
  1866 ;;  __lmul          4   21[COMRAM] unsigned long
  1867 ;; Auto vars:     Size  Location     Type
  1868 ;;  __lmul          4   25[COMRAM] unsigned long
  1869 ;; Return value:  Size  Location     Type
  1870 ;;                  4   17[COMRAM] unsigned long
  1871 ;; Registers used:
  1872 ;;      wreg, status,2, status,0
  1873 ;; Tracked objects:
  1874 ;;      On entry : 0/0
  1875 ;;      On exit  : 0/0
  1876 ;;      Unchanged: 0/0
  1877 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
  1878 ;;      Params:         8       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1879 ;;      Locals:         4       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1880 ;;      Temps:          0       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1881 ;;      Totals:        12       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1882 ;;Total ram usage:       12 bytes
  1883 ;; Hardware stack levels used:    1
  1884 ;; This function calls:
  1885 ;;      Nothing
  1886 ;; This function is called by:
  1887 ;;      i2_freq_t0
  1888 ;; This function uses a non-reentrant model
  1889 ;;
  1890                           
  1891                              psect   text11
  1892  001616                     __ptext11:
  1893                              opt stack 0
  1894  001616                     i2___lmul:
  1895                              opt stack 25
  1896                           
  1897                           ;incstack = 0
  1898                           ;incstack = 0
  1899  001616  0E00                  movlw   0
  1900  001618  6E1A                  movwf   i2___lmul@product,c
  1901  00161A  0E00                  movlw   0
  1902  00161C  6E1B                  movwf   i2___lmul@product+1,c
  1903  00161E  0E00                  movlw   0
  1904  001620  6E1C                  movwf   i2___lmul@product+2,c
  1905  001622  0E00                  movlw   0
  1906  001624  6E1D                  movwf   i2___lmul@product+3,c
  1907  001626                     i2l1064:
  1908  001626  A012                  btfss   i2___lmul@multiplier,0,c
  1909  001628  D008                  goto   i2l1068
  1910  00162A  5016                  movf   i2___lmul@multiplicand,w,c
  1911  00162C  261A                  addwf   i2___lmul@product,f,c
  1912  00162E  5017                  movf   i2___lmul@multiplicand+1,w,c
  1913  001630  221B                  addwfc   i2___lmul@product+1,f,c
  1914  001632  5018                  movf   i2___lmul@multiplicand+2,w,c
  1915  001634  221C                  addwfc   i2___lmul@product+2,f,c
  1916  001636  5019                  movf   i2___lmul@multiplicand+3,w,c
  1917  001638  221D                  addwfc   i2___lmul@product+3,f,c
  1918  00163A                     i2l1068:
  1919  00163A  90D8                  bcf   status,0,c
  1920  00163C  3616                  rlcf   i2___lmul@multiplicand,f,c
  1921  00163E  3617                  rlcf   i2___lmul@multiplicand+1,f,c
  1922  001640  3618                  rlcf   i2___lmul@multiplicand+2,f,c
  1923  001642  3619                  rlcf   i2___lmul@multiplicand+3,f,c
  1924  001644  90D8                  bcf   status,0,c
  1925  001646  3215                  rrcf   i2___lmul@multiplier+3,f,c
  1926  001648  3214                  rrcf   i2___lmul@multiplier+2,f,c
  1927  00164A  3213                  rrcf   i2___lmul@multiplier+1,f,c
  1928  00164C  3212                  rrcf   i2___lmul@multiplier,f,c
  1929  00164E  5015                  movf   i2___lmul@multiplier+3,w,c
  1930  001650  1012                  iorwf   i2___lmul@multiplier,w,c
  1931  001652  1013                  iorwf   i2___lmul@multiplier+1,w,c
  1932  001654  1014                  iorwf   i2___lmul@multiplier+2,w,c
  1933  001656  A4D8                  btfss   status,2,c
  1934  001658  D7E6                  goto   i2l1064
  1935  00165A  C01A  F012            movff   i2___lmul@product,?i2___lmul
  1936  00165E  C01B  F013            movff   i2___lmul@product+1,?i2___lmul+1
  1937  001662  C01C  F014            movff   i2___lmul@product+2,?i2___lmul+2
  1938  001666  C01D  F015            movff   i2___lmul@product+3,?i2___lmul+3
  1939  00166A  0012                  return   
  1940  00166C                     __end_ofi2___lmul:
  1941                              opt stack 0
  1942                           pclatu   equ   0xFFB
  1943                           pclath   equ   0xFFA
  1944                           tblptru   equ   0xFF8
  1945                           tblptrh   equ   0xFF7
  1946                           tblptrl   equ   0xFF6
  1947                           tablat   equ   0xFF5
  1948                           prodh   equ   0xFF4
  1949                           prodl   equ   0xFF3
  1950                           intcon   equ   0xFF2
  1951                           intcon2   equ   0xFF1
  1952                           intcon3   equ   0xFF0
  1953                           fsr0h   equ   0xFEA
  1954                           fsr0l   equ   0xFE9
  1955                           wreg   equ   0xFE8
  1956                           fsr1h   equ   0xFE2
  1957                           fsr1l   equ   0xFE1
  1958                           bsr   equ   0xFE0
  1959                           fsr2h   equ   0xFDA
  1960                           fsr2l   equ   0xFD9
  1961                           status   equ   0xFD8
  1962                           
  1963 ;; *************** function i2___aldiv *****************
  1964 ;; Defined at:
  1965 ;;      line 10 in file "C:\Program Files (x86)\Microchip\xc8\v1.20\sources\common\aldiv.c"
  1966 ;; Parameters:    Size  Location     Type
  1967 ;;  __aldiv         4   29[COMRAM] long
  1968 ;;  __aldiv         4   33[COMRAM] long
  1969 ;; Auto vars:     Size  Location     Type
  1970 ;;  __aldiv         4   40[COMRAM] long
  1971 ;;  __aldiv         1   39[COMRAM] unsigned char
  1972 ;;  __aldiv         1   38[COMRAM] unsigned char
  1973 ;; Return value:  Size  Location     Type
  1974 ;;                  4   29[COMRAM] long
  1975 ;; Registers used:
  1976 ;;      wreg, status,2, status,0
  1977 ;; Tracked objects:
  1978 ;;      On entry : 0/0
  1979 ;;      On exit  : 0/0
  1980 ;;      Unchanged: 0/0
  1981 ;; Data sizes:     COMRAM   BANK0   BANK1   BANK2   BANK3   BANK4   BANK5   BANK6   BANK7   BANK8   BANK9  BANK10  BANK1
      +1  BANK12  BANK13  BANK14
  1982 ;;      Params:         8       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1983 ;;      Locals:         6       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1984 ;;      Temps:          1       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1985 ;;      Totals:        15       0       0       0       0       0       0       0       0       0       0       0       
      +0       0       0       0
  1986 ;;Total ram usage:       15 bytes
  1987 ;; Hardware stack levels used:    1
  1988 ;; This function calls:
  1989 ;;      Nothing
  1990 ;; This function is called by:
  1991 ;;      i2_freq_t0
  1992 ;; This function uses a non-reentrant model
  1993 ;;
  1994                           
  1995                              psect   text12
  1996  0013C8                     __ptext12:
  1997                              opt stack 0
  1998  0013C8                     i2___aldiv:
  1999                              opt stack 25
  2000                           
  2001                           ;incstack = 0
  2002                           ;incstack = 0
  2003  0013C8  6E26                  movwf   ??i2___aldiv& (0+255),c
  2004  0013CA  0E00                  movlw   0
  2005  0013CC  6E28                  movwf   i2___aldiv@sign,c
  2006  0013CE  5026                  movf   ??i2___aldiv& (0+255),w,c
  2007  0013D0  AE25                  btfss   i2___aldiv@divisor+3,7,c
  2008  0013D2  D00C                  goto   i2l1016
  2009  0013D4  1E25                  comf   i2___aldiv@divisor+3,f,c
  2010  0013D6  1E24                  comf   i2___aldiv@divisor+2,f,c
  2011  0013D8  1E23                  comf   i2___aldiv@divisor+1,f,c
  2012  0013DA  6C22                  negf   i2___aldiv@divisor,c
  2013  0013DC  0E00                  movlw   0
  2014  0013DE  2223                  addwfc   i2___aldiv@divisor+1,f,c
  2015  0013E0  2224                  addwfc   i2___aldiv@divisor+2,f,c
  2016  0013E2  2225                  addwfc   i2___aldiv@divisor+3,f,c
  2017  0013E4  6E26                  movwf   ??i2___aldiv& (0+255),c
  2018  0013E6  0E01                  movlw   1
  2019  0013E8  6E28                  movwf   i2___aldiv@sign,c
  2020  0013EA  5026                  movf   ??i2___aldiv& (0+255),w,c
  2021  0013EC                     i2l1016:
  2022  0013EC  AE21                  btfss   i2___aldiv@dividend+3,7,c
  2023  0013EE  D00A                  goto   i2l1022
  2024  0013F0  1E21                  comf   i2___aldiv@dividend+3,f,c
  2025  0013F2  1E20                  comf   i2___aldiv@dividend+2,f,c
  2026  0013F4  1E1F                  comf   i2___aldiv@dividend+1,f,c
  2027  0013F6  6C1E                  negf   i2___aldiv@dividend,c
  2028  0013F8  0E00                  movlw   0
  2029  0013FA  221F                  addwfc   i2___aldiv@dividend+1,f,c
  2030  0013FC  2220                  addwfc   i2___aldiv@dividend+2,f,c
  2031  0013FE  2221                  addwfc   i2___aldiv@dividend+3,f,c
  2032  001400  0E01                  movlw   1
  2033  001402  1A28                  xorwf   i2___aldiv@sign,f,c
  2034  001404                     i2l1022:
  2035  001404  0E00                  movlw   0
  2036  001406  6E29                  movwf   i2___aldiv@quotient,c
  2037  001408  0E00                  movlw   0
  2038  00140A  6E2A                  movwf   i2___aldiv@quotient+1,c
  2039  00140C  0E00                  movlw   0
  2040  00140E  6E2B                  movwf   i2___aldiv@quotient+2,c
  2041  001410  0E00                  movlw   0
  2042  001412  6E2C                  movwf   i2___aldiv@quotient+3,c
  2043  001414  5025                  movf   i2___aldiv@divisor+3,w,c
  2044  001416  1022                  iorwf   i2___aldiv@divisor,w,c
  2045  001418  1023                  iorwf   i2___aldiv@divisor+1,w,c
  2046  00141A  1024                  iorwf   i2___aldiv@divisor+2,w,c
  2047  00141C  B4D8                  btfsc   status,2,c
  2048  00141E  D02C                  goto   i2l1044
  2049  001420  6E26                  movwf   ??i2___aldiv& (0+255),c
  2050  001422  0E01                  movlw   1
  2051  001424  6E27                  movwf   i2___aldiv@counter,c
  2052  001426  5026                  movf   ??i2___aldiv& (0+255),w,c
  2053  001428  D006                  goto   i2l1030
  2054  00142A                     i2l1028:
  2055  00142A  90D8                  bcf   status,0,c
  2056  00142C  3622                  rlcf   i2___aldiv@divisor,f,c
  2057  00142E  3623                  rlcf   i2___aldiv@divisor+1,f,c
  2058  001430  3624                  rlcf   i2___aldiv@divisor+2,f,c
  2059  001432  3625                  rlcf   i2___aldiv@divisor+3,f,c
  2060  001434  2A27                  incf   i2___aldiv@counter,f,c
  2061  001436                     i2l1030:
  2062  001436  AE25                  btfss   i2___aldiv@divisor+3,7,c
  2063  001438  D7F8                  goto   i2l1028
  2064  00143A                     i2l1032:
  2065  00143A  90D8                  bcf   status,0,c
  2066  00143C  3629                  rlcf   i2___aldiv@quotient,f,c
  2067  00143E  362A                  rlcf   i2___aldiv@quotient+1,f,c
  2068  001440  362B                  rlcf   i2___aldiv@quotient+2,f,c
  2069  001442  362C                  rlcf   i2___aldiv@quotient+3,f,c
  2070  001444  5022                  movf   i2___aldiv@divisor,w,c
  2071  001446  5C1E                  subwf   i2___aldiv@dividend,w,c
  2072  001448  5023                  movf   i2___aldiv@divisor+1,w,c
  2073  00144A  581F                  subwfb   i2___aldiv@dividend+1,w,c
  2074  00144C  5024                  movf   i2___aldiv@divisor+2,w,c
  2075  00144E  5820                  subwfb   i2___aldiv@dividend+2,w,c
  2076  001450  5025                  movf   i2___aldiv@divisor+3,w,c
  2077  001452  5821                  subwfb   i2___aldiv@dividend+3,w,c
  2078  001454  A0D8                  btfss   status,0,c
  2079  001456  D009                  goto   i2l1040
  2080  001458  5022                  movf   i2___aldiv@divisor,w,c
  2081  00145A  5E1E                  subwf   i2___aldiv@dividend,f,c
  2082  00145C  5023                  movf   i2___aldiv@divisor+1,w,c
  2083  00145E  5A1F                  subwfb   i2___aldiv@dividend+1,f,c
  2084  001460  5024                  movf   i2___aldiv@divisor+2,w,c
  2085  001462  5A20                  subwfb   i2___aldiv@dividend+2,f,c
  2086  001464  5025                  movf   i2___aldiv@divisor+3,w,c
  2087  001466  5A21                  subwfb   i2___aldiv@dividend+3,f,c
  2088  001468  8029                  bsf   i2___aldiv@quotient,0,c
  2089  00146A                     i2l1040:
  2090  00146A  90D8                  bcf   status,0,c
  2091  00146C  3225                  rrcf   i2___aldiv@divisor+3,f,c
  2092  00146E  3224                  rrcf   i2___aldiv@divisor+2,f,c
  2093  001470  3223                  rrcf   i2___aldiv@divisor+1,f,c
  2094  001472  3222                  rrcf   i2___aldiv@divisor,f,c
  2095  001474  2E27                  decfsz   i2___aldiv@counter,f,c
  2096  001476  D7E1                  goto   i2l1032
  2097  001478                     i2l1044:
  2098  001478  5028                  movf   i2___aldiv@sign,w,c
  2099  00147A  B4D8                  btfsc   status,2,c
  2100  00147C  D008                  goto   i2l1048
  2101  00147E  1E2C                  comf   i2___aldiv@quotient+3,f,c
  2102  001480  1E2B                  comf   i2___aldiv@quotient+2,f,c
  2103  001482  1E2A                  comf   i2___aldiv@quotient+1,f,c
  2104  001484  6C29                  negf   i2___aldiv@quotient,c
  2105  001486  0E00                  movlw   0
  2106  001488  222A                  addwfc   i2___aldiv@quotient+1,f,c
  2107  00148A  222B                  addwfc   i2___aldiv@quotient+2,f,c
  2108  00148C  222C                  addwfc   i2___aldiv@quotient+3,f,c
  2109  00148E                     i2l1048:
  2110  00148E  C029  F01E            movff   i2___aldiv@quotient,?i2___aldiv
  2111  001492  C02A  F01F            movff   i2___aldiv@quotient+1,?i2___aldiv+1
  2112  001496  C02B  F020            movff   i2___aldiv@quotient+2,?i2___aldiv+2
  2113  00149A  C02C  F021            movff   i2___aldiv@quotient+3,?i2___aldiv+3
  2114  00149E  0012                  return   
  2115  0014A0                     __end_ofi2___aldiv:
  2116                              opt stack 0
  2117  0000                     pclatu   equ   0xFFB
  2118                           pclath   equ   0xFFA
  2119                           tblptru   equ   0xFF8
  2120                           tblptrh   equ   0xFF7
  2121                           tblptrl   equ   0xFF6
  2122                           tablat   equ   0xFF5
  2123                           prodh   equ   0xFF4
  2124                           prodl   equ   0xFF3
  2125                           intcon   equ   0xFF2
  2126                           intcon2   equ   0xFF1
  2127                           intcon3   equ   0xFF0
  2128                           fsr0h   equ   0xFEA
  2129                           fsr0l   equ   0xFE9
  2130                           wreg   equ   0xFE8
  2131                           fsr1h   equ   0xFE2
  2132                           fsr1l   equ   0xFE1
  2133                           bsr   equ   0xFE0
  2134                           fsr2h   equ   0xFDA
  2135                           fsr2l   equ   0xFD9
  2136                           status   equ   0xFD8
  2137                           pclatu   equ   0xFFB
  2138                           pclath   equ   0xFFA
  2139                           tblptru   equ   0xFF8
  2140                           tblptrh   equ   0xFF7
  2141                           tblptrl   equ   0xFF6
  2142                           tablat   equ   0xFF5
  2143                           prodh   equ   0xFF4
  2144                           prodl   equ   0xFF3
  2145                           intcon   equ   0xFF2
  2146                           intcon2   equ   0xFF1
  2147                           intcon3   equ   0xFF0
  2148                           fsr0h   equ   0xFEA
  2149                           fsr0l   equ   0xFE9
  2150                           wreg   equ   0xFE8
  2151                           fsr1h   equ   0xFE2
  2152                           fsr1l   equ   0xFE1
  2153                           bsr   equ   0xFE0
  2154                           fsr2h   equ   0xFDA
  2155                           fsr2l   equ   0xFD9
  2156                           status   equ   0xFD8
  2157                           
  2158                              psect   rparam
  2159  0000                     pclatu   equ   0xFFB
  2160                           pclath   equ   0xFFA
  2161                           tblptru   equ   0xFF8
  2162                           tblptrh   equ   0xFF7
  2163                           tblptrl   equ   0xFF6
  2164                           tablat   equ   0xFF5
  2165                           prodh   equ   0xFF4
  2166                           prodl   equ   0xFF3
  2167                           intcon   equ   0xFF2
  2168                           intcon2   equ   0xFF1
  2169                           intcon3   equ   0xFF0
  2170                           fsr0h   equ   0xFEA
  2171                           fsr0l   equ   0xFE9
  2172                           wreg   equ   0xFE8
  2173                           fsr1h   equ   0xFE2
  2174                           fsr1l   equ   0xFE1
  2175                           bsr   equ   0xFE0
  2176                           fsr2h   equ   0xFDA
  2177                           fsr2l   equ   0xFD9
  2178                           status   equ   0xFD8


Data Sizes:
    Strings     0
    Constant    0
    Data        3
    BSS         4
    Persistent  0
    Stack       0

Auto Spaces:
    Space          Size  Autos    Used
    COMRAM           95     69      76
    BANK0           160     37      37
    BANK1           256      0       0
    BANK2           256      0       0
    BANK3           256      0       0
    BANK4           256      0       0
    BANK5           256      0       0
    BANK6           256      0       0
    BANK7           256      0       0
    BANK8           256      0       0
    BANK9           256      0       0
    BANK10          256      0       0
    BANK11          256      0       0
    BANK12          256      0       0
    BANK13          256      0       0
    BANK14          176      0       0

Pointer List with Targets:

    ?___aldiv   long  size(2) Largest target is 0

    ?___lmul   unsigned long  size(2) Largest target is 0


Critical Paths under _main in COMRAM

    None.

Critical Paths under _high_isr in COMRAM

    _high_isr->i2_freq_t0
    i2_freq_t0->i2___aldiv
    i2___aldiv->i2___lmul

Critical Paths under _main in BANK0

    _main->_freq_t0
    _freq_t0->___aldiv
    ___aldiv->___lmul

Critical Paths under _high_isr in BANK0

    None.

Critical Paths under _main in BANK1

    None.

Critical Paths under _high_isr in BANK1

    None.

Critical Paths under _main in BANK2

    None.

Critical Paths under _high_isr in BANK2

    None.

Critical Paths under _main in BANK3

    None.

Critical Paths under _high_isr in BANK3

    None.

Critical Paths under _main in BANK4

    None.

Critical Paths under _high_isr in BANK4

    None.

Critical Paths under _main in BANK5

    None.

Critical Paths under _high_isr in BANK5

    None.

Critical Paths under _main in BANK6

    None.

Critical Paths under _high_isr in BANK6

    None.

Critical Paths under _main in BANK7

    None.

Critical Paths under _high_isr in BANK7

    None.

Critical Paths under _main in BANK8

    None.

Critical Paths under _high_isr in BANK8

    None.

Critical Paths under _main in BANK9

    None.

Critical Paths under _high_isr in BANK9

    None.

Critical Paths under _main in BANK10

    None.

Critical Paths under _high_isr in BANK10

    None.

Critical Paths under _main in BANK11

    None.

Critical Paths under _high_isr in BANK11

    None.

Critical Paths under _main in BANK12

    None.

Critical Paths under _high_isr in BANK12

    None.

Critical Paths under _main in BANK13

    None.

Critical Paths under _high_isr in BANK13

    None.

Critical Paths under _main in BANK14

    None.

Critical Paths under _high_isr in BANK14

    None.

Call Graph Tables:

---------------------------------------------------------------------------------
(Depth) Function              Calls       Base Space   Used Autos Params    Refs
---------------------------------------------------------------------------------
(0) _main                                                 0     0      0     481
                            _freq_t0
                _ConfigureOscillator
                            _InitApp
                         _usart_init
                        _timer0_init
---------------------------------------------------------------------------------
(1) _timer0_init                                          0     0      0       0
---------------------------------------------------------------------------------
(1) _usart_init                                           0     0      0       0
---------------------------------------------------------------------------------
(1) _InitApp                                              0     0      0       0
---------------------------------------------------------------------------------
(1) _ConfigureOscillator                                  1     1      0       0
                                              0 BANK0      1     1      0
---------------------------------------------------------------------------------
(1) _freq_t0                                             10     2      8     481
                                             27 BANK0     10     2      8
                            ___aldiv
                             ___lmul
---------------------------------------------------------------------------------
(2) ___lmul                                              12     4      8      92
                                              0 BANK0     12     4      8
---------------------------------------------------------------------------------
(2) ___aldiv                                             15     7      8     300
                                             12 BANK0     15     7      8
                             ___lmul (ARG)
---------------------------------------------------------------------------------
Estimated maximum stack depth 2
---------------------------------------------------------------------------------
(Depth) Function              Calls       Base Space   Used Autos Params    Refs
---------------------------------------------------------------------------------
(3) _low_isr                                             17    17      0       0
                                              0 COMRAM    17    17      0
---------------------------------------------------------------------------------
(4) _high_isr                                            15    15      0    1260
                                             54 COMRAM    15    15      0
                          i2_freq_t0
---------------------------------------------------------------------------------
(5) i2_freq_t0                                           10     2      8    1260
                                             44 COMRAM    10     2      8
                          i2___aldiv
                           i2___lmul
---------------------------------------------------------------------------------
(6) i2___lmul                                            12     4      8     240
                                             17 COMRAM    12     4      8
---------------------------------------------------------------------------------
(6) i2___aldiv                                           15     7      8     780
                                             29 COMRAM    15     7      8
                           i2___lmul (ARG)
---------------------------------------------------------------------------------
Estimated maximum stack depth 6
---------------------------------------------------------------------------------

Call Graph Graphs:

_main (ROOT)
   _freq_t0
     ___aldiv
       ___lmul (ARG)
     ___lmul
   _ConfigureOscillator
   _InitApp
   _usart_init
   _timer0_init

_low_isr (ROOT)

Address spaces:
Name               Size   Autos  Total    Cost      Usage
BIGRAM             EAF      0       0      35        0.0%
BITBANK13          100      0       0      31        0.0%
BANK13             100      0       0      32        0.0%
BITBANK12          100      0       0      29        0.0%
BANK12             100      0       0      30        0.0%
BITBANK11          100      0       0      27        0.0%
BANK11             100      0       0      28        0.0%
BITBANK10          100      0       0      25        0.0%
BANK10             100      0       0      26        0.0%
BITBANK9           100      0       0      23        0.0%
BANK9              100      0       0      24        0.0%
BITBANK8           100      0       0      21        0.0%
BANK8              100      0       0      22        0.0%
BITBANK7           100      0       0      19        0.0%
BANK7              100      0       0      20        0.0%
BITBANK6           100      0       0      17        0.0%
BANK6              100      0       0      18        0.0%
BITBANK5           100      0       0      15        0.0%
BANK5              100      0       0      16        0.0%
BITBANK4           100      0       0      13        0.0%
BANK4              100      0       0      14        0.0%
BITBANK3           100      0       0      11        0.0%
BANK3              100      0       0      12        0.0%
BITBANK2           100      0       0       9        0.0%
BANK2              100      0       0      10        0.0%
BITBANK1           100      0       0       7        0.0%
BANK1              100      0       0       8        0.0%
BITBANK14           B0      0       0      33        0.0%
BANK14              B0      0       0      34        0.0%
BITBANK0            A0      0       0       4        0.0%
BANK0               A0     25      25       5       23.1%
BITCOMRAM           5F      0       0       0        0.0%
COMRAM              5F     45      4C       1       80.0%
BITSFR_2             0      0       0      40        0.0%
SFR_2                0      0       0      40        0.0%
BITSFR_1             0      0       0      40        0.0%
SFR_1                0      0       0      40        0.0%
BITSFR               0      0       0      40        0.0%
SFR                  0      0       0      40        0.0%
STACK                0      0       8       2        0.0%
NULL                 0      0       0       0        0.0%
ABS                  0      0      71       6        0.0%
DATA                 0      0      79       3        0.0%
CODE                 0      0       0       0        0.0%


Microchip Technology PIC18 Macro Assembler V1.20 build 52243
Symbol Table                                                                                   Sat May 10 12:08:09 2014

                           _i 0048                            l60 16B6                            bsr 000FE0 
                __CFG_CP0$OFF 000000                           u427 175C                           wreg 000FE8 
                  _TXSTA1bits 000FAD                          l1150 111E                          l1160 117C 
                        l1144 10EE                          l1156 115A                          l1172 1216 
                        l1158 1174                          l1182 14BA                          l1176 1240 
                        l1168 11FA                          l1186 14F2                          i2l21 12FC 
                        i1l37 105C                          i2l30 1368                          i2l22 12C0 
                        i2l31 1366                          i2l23 12F6                          i2l32 138C 
                        i2l24 12F4                          i2l25 138E                          i2l33 138A 
                        i2l26 136E                          i2l34 138E                          i2l27 1334 
                        i2l28 136A                          i2l29 134A                          _main 166C 
                        _duty 0046                          fsr0h 000FEA                          fsr1h 000FE2 
                        fsr0l 000FE9                          fsr2h 000FDA                          fsr1l 000FE1 
                        fsr2l 000FD9                          pclat 000FFA                          prodh 000FF4 
                        prodl 000FF3                          start 10A2                 __CFG_IESO$OFF 000000 
             __end_of_InitApp 1726                 __CFG_PLLDIV$3 000000                  _BAUDCON1bits 000F7E 
             __end_of___aldiv 1252                         ?_main 0001                         _T0CON 000FD5 
                  i2freq_t0@f 002D                         i2l800 1286                         i2l810 12C8 
                       i2l802 1288                         i2l820 1304                         i2l812 12CA 
                       i2l804 1292                         i2l830 134A                         i2l822 1312 
                       i2l814 12EE                         i2l806 12B8                         i2l840 1384 
                       i2l832 1358                         i2l824 132A                         i2l816 12F6 
                       i2l808 12BC                         i2l842 1386                         i2l834 1360 
                       i2l826 1334                         i2l818 12F8                         i2l828 1340 
                       i2l836 136A                         i2l838 1376                         i2l798 127E 
                       _TMR0H 000FD7                         _TMR0L 000FD6           _ConfigureOscillator 1752 
         ___lmul@multiplicand 0064                __CFG_FCMEN$OFF 000000               __end_of_freq_t0 15B4 
                       _count 004A               __end_of_low_isr 10A2                         tablat 000FF5 
            __end_ofi2___lmul 166C                         status 000FD8             __CFG_DSWDTPS$8192 000000 
          __size_ofi2___aldiv 00D8          ?_ConfigureOscillator 0001       __CFG_DSWDTOSC$INTOSCREF 000000 
             __initialization 1726                  __end_of_main 16B8            __size_ofi2_freq_t0 0062 
              __CFG_OSC$HSPLL 000000                        ??_main 0085                 __activetblptr 000000 
              i2___aldiv@sign 0028                        i2l1030 1436                        i2l1022 1404 
                      i2l1040 146A                        i2l1032 143A                        i2l1016 13EC 
                      i2l1028 142A                        i2l1044 1478                        i2l1048 148E 
                      i2l1064 1626                        i2l1068 163A                __CFG_WDTEN$OFF 000000 
                      _INTCON 000FF2                        _SPBRG1 000FB0              i2___lmul@product 001A 
                      _RPINR1 000EE1                        _RPINR2 000EE2                        i2u1_40 1286 
                      i2u1_41 1284                        i2u2_40 1292                        i2u2_41 1290 
                      i2u3_40 12C8                        i2u3_41 12C6                        i2u4_40 1304 
                      i2u4_41 1302                        i2u5_40 132A                        i2u5_41 1328 
                      i2u6_40 1340                        i2u6_41 133E                        i2u7_40 1358 
                      i2u7_41 1356                        i2u8_40 1376                        i2u8_41 1374 
              __CFG_WPCFG$OFF 000000                        _TXREG1 000FAE                     ??_InitApp 0060 
       ??_ConfigureOscillator 0060                __CFG_WPDIS$OFF 000000                __CFG_XINST$OFF 000000 
            __end_of_high_isr 13C8                        ___lmul 14A0                     ??___aldiv 0074 
              __CFG_STVREN$ON 000000                  ?_timer0_init 0001                  freq_t0@presc 007F 
                freq_t0@timer 0083                     ??_freq_t0 0083             __end_ofi2___aldiv 14A0 
                __pdataCOMRAM 004A                     ??_low_isr 0001                        tblptrh 000FF7 
                      tblptrl 000FF6                        tblptru 000FF8             __end_ofi2_freq_t0 1616 
                  __accesstop 0060       __end_of__initialization 174C                __pcstackCOMRAM 0001 
                   ?i2___lmul 0012                       ?___lmul 0060                ___lmul@product 0068 
                  ??i2___lmul 001A                       i2u43_47 130A                       i2u44_47 137C 
                     _SPBRGH1 000F7F                     ?_high_isr 0001                       _InitApp 16F2 
           i2___aldiv@divisor 0022             i2___aldiv@counter 0027                       __Hparam 0000 
                     __Lparam 0000                       ___aldiv 10A6               __size_of___lmul 009C 
                     __pcinit 1726                       __ramtop 0F00          __size_of_timer0_init 000A 
                     __ptext0 166C                       __ptext1 1768                       __ptext2 16B8 
                     __ptext3 16F2                       __ptext4 1752                       __ptext5 153C 
                     __ptext6 14A0                       __ptext7 10A6                     _T0CONbits 000FD5 
                     _freq_t0 153C              ___aldiv@dividend 006C                i2freq_t0@presc 0031 
              i2freq_t0@timer 0035                       _low_isr 1018                    ??_high_isr 0037 
              __pintcode_body 1252          end_of_initialization 174C                       int_func 1252 
            ___aldiv@quotient 0077           i2___lmul@multiplier 0012                     _PORTDbits 000F83 
            __CFG_DSBOREN$OFF 000000              __CFG_CPUDIV$OSC1 000000                     _TRISCbits 000F94 
                   _TRISDbits 000F95                     i2___aldiv 13C8   __end_of_ConfigureOscillator 1768 
            __CFG_IOL1WAY$OFF 000000                     i2_freq_t0 15B4                    _usart_init 16B8 
           __CFG_WPEND$PAGE_0 000000           __CFG_MSSP7B_EN$MSK7 000000                __end_of___lmul 153C 
               __pidataCOMRAM 1772              __CFG_DSWDTEN$OFF 000000           start_initialization 1726 
           __size_ofi2___lmul 0056                    ?i2___aldiv 001E                    ?i2_freq_t0 002D 
               _periodo_lungo 004C                      ??___lmul 0068                   __pbssCOMRAM 0046 
               __pcstackBANK0 0060             __size_of_high_isr 03C0                      ?_InitApp 0001 
                 ?_usart_init 0001                     __pintcode 1008                      ?___aldiv 006C 
                 __pintcodelo 1018                      ?_freq_t0 007B          __CFG_RTCOSC$T1OSCREF 000000 
                    ?_low_isr 0001                   ??i2___aldiv 0026               ___aldiv@divisor 0070 
             ___aldiv@counter 0075                   ??i2_freq_t0 0035                      _IPR1bits 000F9F 
                    _PIE1bits 000F9D                      _PIR1bits 000F9E                      _RCONbits 000FD0 
            __CFG_WDTPS$32768 000000                 ??_timer0_init 0060                      i2___lmul 1616 
            __CFG_WPFP$PAGE_1 000000           __size_of_usart_init 003A             ___lmul@multiplier 0060 
                 _INTCON2bits 000FF1                   _INTCON3bits 000FF0            i2___aldiv@dividend 001E 
            __size_of_InitApp 0034                      __Hrparam 0000                      __Lrparam 0000 
            __size_of___aldiv 01AC            i2___aldiv@quotient 0029           __end_of_timer0_init 1772 
            __size_of_freq_t0 0078              __size_of_low_isr 008A                      __ptext10 15B4 
                    __ptext11 1616                      __ptext12 13C8                      _high_isr 1008 
               __size_of_main 004C  __size_of_ConfigureOscillator 0016                      freq_t0@f 007B 
                 _OSCTUNEbits 000F9B                    _INTCONbits 000FF2         i2___lmul@multiplicand 0016 
                    intlevel1 0000                      intlevel2 0000                  ??_usart_init 0060 
                  _RCSTA1bits 000FAC                   _timer0_init 1768                  ___aldiv@sign 0076 
          __end_of_usart_init 16F2 
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[8] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto Utentethexeno » 10 mag 2014, 14:52

Effettivamente è possibile! Vedendo la funzione freq_t0() e quelle chiamate da questa, siamo a 470 righe di istruzioni che non so se sono proprio una istruzione per riga o più. Nel senso che
Codice: Seleziona tutto
addwfc   (___aldiv@quotient+2)& (0+255),f,b
non credo valga una istruzione macchina. Però da quello che ho studiato, se ricordo, -deve- essere una istruzione macchina. Quello che cambia è il suo -tempo- di esecuzione che forse corrisponderà a più di 83ns.

Se mi confermate la cosa, mi sono tolto un dubbio. Ovviamente il problema per cui ho aperto il topic è fondamentalmente risolto (+1 a Walter).
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

1
voti

[9] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto UtenteWALTERmwp » 10 mag 2014, 15:31

Ciao @thexeno, ... senza presunzione, colgo solo l'occasione per aggiungere una considerazione, credo, a valenza generale e quindi non rivolta nei tuoi confronti: capita, scrivendo codice ad alto livello (in tal caso C language) di "perdere di vista" la tipologia del "supporto" destinato a ricevere il programma.
(un microcontrollore quale il gioiellino 18F47J53).
"Lui", certe cose, le può fare, ma sarebbe opportuno tenere presente quali sono le sue esigenze per metterlo nelle condizioni di "lavorare" al meglio.

Nello specifico, penso sia condivisibile l'osservazione per la quale, con l'inversione di posizione delle due istruzioni contenute all'interno della routine di interrupt, si sia ridotto il tempo (che ti risultava "troppo" lungo) per il quale l'uscita rimaneva "alta": una latente dilatazione della stima che avevi fatto rispetto al valore assegnato al Timer0.

Un'ultima nota.
Per il calcolo della variabile "timer", una cosa sarebbe eseguire l'operazione (65536 - (FCY)/(f*presc)) con, per esempio, FCY==2, f==1 e presc==2, mentre un altro impegno (temporale) richiede, la medesima operazione, per l'elaborazione dei valori previsti dal tuo codice, credo.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8981
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[10] Re: Imprecisione su Timer0 (PIC18)

Messaggioda Foto Utentethexeno » 10 mag 2014, 17:18

WALTERmwp ha scritto:Un'ultima nota.
Per il calcolo della variabile "timer", una cosa sarebbe eseguire l'operazione (65536 - (FCY)/(f*presc)) con, per esempio, FCY==2, f==1 e presc==2, mentre un altro impegno (temporale) richiede, la medesima operazione, per l'elaborazione dei valori previsti dal tuo codice, credo.

Saluti


Salvo consigli da altri utenti, infatti, vedrò se è possibile trovare altre soluzioni. Già solo quei long non mi piacciono affatto.
Visto che poi questo codice lo devo integrare (e vedrò come si comporta) in un progetto più grande un po' più complesso che gestisce anche altri interrupt e motori (stepper però, quindi tutto in hw con i CCP).
Grazie!
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti