aboutsummaryrefslogtreecommitdiffstats
path: root/Disc02.X/disc02asm.s
blob: c718500f89c6ed8bf9ddcc2af7b9d22d8ae43182 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
        .equ __P24FJ64GA002,1        ;required "boiler-plate" (BP)
        .include "p24Fxxxx.inc"      ;BP

#include "xc.inc"                    ;BP
	; DO NOT include config statements. We define them in the C file
        ;the next two lines set up the actual chip for operation - required
        ;config __CONFIG2, POSCMOD_NONE & I2C1SEL_PRI & IOL1WAY_OFF & OSCIOFNC_ON & FCKSM_CSECME & FNOSC_FRCPLL & SOSCSEL_LPSOSC & WUTSEL_FST & IESO_OFF
        ;config __CONFIG1, FWDTEN_OFF & COE_OFF & BKBUG_OFF & GWRP_OFF & GCP_OFF & JTAGEN_OFF

    .bss                        ;put the following labels in RAM
_counter:  .space  2          ;declare a 16-bit variable
; you SHOULD NOT define stack, becasue this file is compiled 
; alongside a C file that contains main(). The C compiler
; will create stack space for us.
;stack:
;    .space  32                  ;this will be our stack area, from var_16_bit to here
    .text                       ;BP (put the following data in ROM(program memory))
    .global _myAsmFunc
    .global _myGlobalVar
    .global _counter

_myAsmFunc:
    push    w0
    
    inc	    _myGlobalVar
    inc	    _counter
    
    bra	    checkLoopEndCond
loopBody:
    btg    LATB, #2	    ; btg stands for bit-toggle.
    nop
    dec	    WREG0
checkLoopEndCond: 
    cp0	    w0
    bra	    nz, loopBody

    pop	    w0
    return
    .end