微處理器 - Microchip PIC12F1822 - Assembly - Interrupt On Change(IOC)



1. 設定TRISA輸入
2. 設定WPUA提昇電阻
3. 設定IOCAx正緣、負緣觸發
4. 開啟GPE、IOC中斷
5. 進入中斷後,清除IOC以及IOCA旗標





main.s

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
    list p=12f1822, r=hex
    #include <p12f1822.inc>
    __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _MCLRE_OFF
    __config _CONFIG2, _LVP_OFF
 
    #define tmp 0x20
 
    org 0x0000
    goto start
 
    org 0x0004
    goto myisr
    
    org 0x0100
myisr:
    banksel INTCON
    bcf INTCON, 7
    bcf INTCON, 0
 
    banksel IOCAF
    movlw 0xff
    xorwf IOCAF, w
    andwf IOCAF, f
  
    banksel tmp
    btfss tmp, 0
    bcf PORTA, 0
    btfsc tmp, 0
    bsf PORTA, 0
    movlw 0xff
    xorwf tmp, f
 
    banksel INTCON
    bsf INTCON, 7
    retfie
 
start:
    banksel TRISA
    bcf TRISA, 0
    bsf TRISA, 3
 
    banksel OPTION_REG
    bcf OPTION_REG, 7
 
    banksel WPUA
    bsf WPUA, 3
 
    banksel PORTA
    bsf PORTA, 0
 
    banksel tmp
    clrf tmp
 
    banksel IOCAN
    bsf IOCAN, 3
 
    banksel INTCON
    bsf INTCON, 7
    bsf INTCON, 3
    bcf INTCON, 0
 
    goto $
    end

編譯

$ gpasm main.s

完成