Skickar med koden, som ni ser används inga "speciall"funktioner som är specifik för PIC12F675
Kod: Markera allt
;Pic12F675, Diod lyser ett par sek, sen sleep. Vid rising edge på
;gp2 startar kretsen igen.
;****************************************************************
List p=12f675
include <p12f675.inc>
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON &_PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
tid1 equ 0x21
tid2 equ 0x22
tid3 equ 0x23
org 0x00 ;Startar programmet på adress Hex 00
;****************************************************************
BANKSEL TRISIO ;Öppnar Bank 1
movlw b'00000000'
movwf ANSEL ;Alla portar är digitala(ans0-3=bit0-3)
movlw b'00000100'
movwf TRISIO ;Alla portar är utgångar utom gp2 (och gp3..)
BANKSEL GPIO ;Öppnar Bank 0
clrf GPIO ;init GPIO
bcf ADCON0,ADON ;A/D omvandlare avstängd.
movlw b'00000111'
movwf CMCON ;Comparator OFF
;-----------------------Fixar pull-up--------------------
bcf OPTION_REG, NOT_GPPU ;GPIO pullup's enabel
movlw b'00000001'
movwf WPU ;Sätter Pull-up enabled på GP0
;-----------------------Fixar wake on pinchange--------------------
bsf INTCON, INTE ;Enables the GP2/INT external interrupt
; bsf INTCON, GPIE ;Enables the GPIO port change interrupt
bsf OPTION_REG, INTEDG ;Interrupt on rising edge of GP2/INT
;******************************************************************
clrw
movwf tid1
movwf tid2
movwf tid3
loop
BTFSS GPIO,2 ;se till att den bara reagerar på possitiv flank
goto sov
bsf GPIO,5 ;etta ut på GP5
call timer
bcf GPIO,5 ;nolla ut på GP5
sov
SLEEP
bcf INTCON, INTF ;clear rising_edge biten igen
call timer2 ;Fördöjning mot knappstuds
goto loop
;--------------fördröjning ~4 sek----------------------
timer
movlw b'11111111'
movwf tid1
loop2
movlw b'11111111'
movwf tid2
loop1
movlw b'00001000'
movwf tid3
loop0
decfsz tid3
goto loop0
decfsz tid2
goto loop1
decfsz tid1
goto loop2
return
;--------------fördröjning ~ sek----------------------
timer2
movlw b'11111111'
movwf tid1
loop4
decfsz tid1
goto loop4
return
end