aboutsummaryrefslogtreecommitdiffstats
path: root/Lab 2.X/Lab2A.s
blob: fc9f30cfd079a5bfdf3b48d5e585f9a11beda02e (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
.include "xc.inc"          ; required "boiler-plate" (BP)

;the next two lines set up the actual chip for operation - required
config __CONFIG2, POSCMOD_EC & I2C1SEL_SEC & IOL1WAY_OFF & OSCIOFNC_ON & FCKSM_CSECME & FNOSC_FRCPLL & SOSCSEL_LPSOSC & WUTSEL_FST & IESO_OFF
config __CONFIG1, WDTPS_PS1 & FWPSA_PR32 & WINDIS_OFF & FWDTEN_OFF & BKBUG_ON & GWRP_ON & GCP_ON & JTAGEN_OFF

    .bss        ; put the following labels in RAM
counter:
    .space 2    ; a variable that takes two bytes (we won?t use
                ; it for now, but put here to make this a generic
                ; template to be used later).
stack:
    .space  32  ; this will be our stack area, needed for func calls

.text           ; BP (put the following data in ROM(program memory))

;because we are using the C compiler to assemble our code, we need a "_main" label
;somewhere. (There's a link step that looks for it.)
.global _main               ;BP
;your functions go here

_main:

    bclr    CLKDIV,#8                 ;BP
    nop
    ;; --- Begin your main program below here ---
    
    
    mov     #0x9fff,w0  
    mov     w0,AD1PCFG            ; Set all pins to digital mode
    mov     #0b1111111111111110,w0  
    mov     w0,TRISA            ; set pin RA0 to output
    mov     #0x0001,w0  
    mov     w0,LATA            ; set pin RA0 high
    call foreverLoop
   
wait_24cycles:
                     ; 2 cycles for function call
    repeat #17        ; 1 cycle to load and prep
    nop              ; 17+1 cycles to execute NOP 18 times
    return           ; 3 cycles for the return
    
wait_32cycles: ; 2
    repeat #24 ; 1
    nop	       ; 25+1 cycles = 26
    return     ; 3
    
delay_100us:
    repeat #1593
    nop
    return
    
delay_1ms:
    repeat #15993
    nop
    return
    
foreverLoop:

    call    wait_24cycles     ; 24 cycles
    clr     LATA              ; set pin RA0 low = 1 cycle
    call    wait_32cycles     ; 32 cycles
    inc    LATA               ; set pin RA0 high = 1 cycle
    bra foreverLoop
    

.end