Prośba do bardziej doświadczonych kolegów.
Posiadam programator PICKIT2, który nie ma możliwości programowania PIC12C509.
Czy da się zmienić program na PIC12F509 lub 12F629 ?
Zaczynam dopiero przygodę z mikrokontrolerami i nie wiem czy jest to możliwe.
W załączniku plik ZIP.
Proszę o pomoc
Program napisany jest dla PIC12C509, posiadam 12F509 oraz 12F629 i stąd moja prośba.
; Filename ARC1
;********************************************************************
; Program for PIC based block cutout and reversing module
; Uses PIC 12C509A. Internal oscillator
; Hardware detect of overload. PIC handles the turn on / off
; of the DCC power via two N channel MOSFETs. Reversing by a
; relay. Minimal cutoff delay to beat the booster. Power is
; cut off while the relay reverses, then restored. If there is
; still an overload, system goes into a 0.5 second retry sequence
; Relay cycling only re-enabled after there is no longer an overload.
; Tested and working 23/01/02
Processor 12C509A
include "P12c509a.inc"
__CONFIG h'000E' ; CP off, WDT on, internal clock
;Definitions
DCCon equ 0
Ovl_in equ 1
Relay equ 2
Ovl_out equ 4
; registers used
CBLOCK 0x0007
state ;state sequence
time0 ;counter0
time1 ;counter1
time2 ;counter2
ENDC
org 0
;start of program
movwf OSCCAL ;set cal
;set ports etc.
bcf STATUS,PA0
movlw B'10001111'
option
;GP0 DCC ON/OFF (hi is ON)
;GP1 is overload input (active lo)
;GP2 Reverse output
;GP4 overload output (HI is overload)
movlw B'00000010'
tris GPIO
movlw B'00000001' ;set ports
movwf GPIO
clrf state
;main loop starts here. Scans for hi on overload.
test clrwdt
btfss GPIO,Ovl_in ;look for overload
goto set1
test1 btfsc state,0 ;check state
goto caltim ;reset delay
goto test ;look again
;here if true overload
set1 bcf GPIO,DCCon ;turn off
btfsc state,0 ;0 if first time after reset
goto state1
bsf state,0 ;set to state 1
movf GPIO,W ;get port setting
xorlw B'00000100' ;reverse relay
movwf GPIO
call dely25 ;delay 25 millisecs for relay
bsf GPIO,DCCon ;turn back on
goto test ;look for overload
state1 bsf GPIO,Ovl_out ;set alarm
call del500
bsf state,7 ;set timeout
bcf GPIO,Ovl_out ;alarm off
bsf GPIO,DCCon ;output on
goto test
caltim call timout ;reset timer
goto test
; delays
delay movlw 0xFF ;short delay
movwf time0
delay1 clrwdt
nop
nop
decfsz time0,F
goto delay1
retlw 0
dely25 clrwdt
movlw .30 ;25 millisecs
movwf time1
del25a movlw 0xFF
movwf time2
del25b decfsz time2,F
goto del25b
decfsz time1,F
goto del25a
retlw 0
del500 movlw 0xFF ;500 millisecs
movwf time1
del500a movlw 0xFF
movwf time2
del500b clrwdt
nop
nop
nop
nop
decfsz time2,F
goto del500b
decfsz time1,F
goto del500a
retlw 0
timout btfss state,7 ;continue countdown
goto countdn
movlw 0xFF ;set counters
movwf time1
timo2 movlw 0xFF
movwf time2
bcf state,7
countdn decfsz time2,F
retlw 0
decfsz time1,F
goto timo3
clrf state ;reset
retlw 0
timo3 movlw 0xFF
movwf time2
retlw 0
end
Posiadam programator PICKIT2, który nie ma możliwości programowania PIC12C509.
Czy da się zmienić program na PIC12F509 lub 12F629 ?
Zaczynam dopiero przygodę z mikrokontrolerami i nie wiem czy jest to możliwe.
W załączniku plik ZIP.
Proszę o pomoc
Program napisany jest dla PIC12C509, posiadam 12F509 oraz 12F629 i stąd moja prośba.
; Filename ARC1
;********************************************************************
; Program for PIC based block cutout and reversing module
; Uses PIC 12C509A. Internal oscillator
; Hardware detect of overload. PIC handles the turn on / off
; of the DCC power via two N channel MOSFETs. Reversing by a
; relay. Minimal cutoff delay to beat the booster. Power is
; cut off while the relay reverses, then restored. If there is
; still an overload, system goes into a 0.5 second retry sequence
; Relay cycling only re-enabled after there is no longer an overload.
; Tested and working 23/01/02
Processor 12C509A
include "P12c509a.inc"
__CONFIG h'000E' ; CP off, WDT on, internal clock
;Definitions
DCCon equ 0
Ovl_in equ 1
Relay equ 2
Ovl_out equ 4
; registers used
CBLOCK 0x0007
state ;state sequence
time0 ;counter0
time1 ;counter1
time2 ;counter2
ENDC
org 0
;start of program
movwf OSCCAL ;set cal
;set ports etc.
bcf STATUS,PA0
movlw B'10001111'
option
;GP0 DCC ON/OFF (hi is ON)
;GP1 is overload input (active lo)
;GP2 Reverse output
;GP4 overload output (HI is overload)
movlw B'00000010'
tris GPIO
movlw B'00000001' ;set ports
movwf GPIO
clrf state
;main loop starts here. Scans for hi on overload.
test clrwdt
btfss GPIO,Ovl_in ;look for overload
goto set1
test1 btfsc state,0 ;check state
goto caltim ;reset delay
goto test ;look again
;here if true overload
set1 bcf GPIO,DCCon ;turn off
btfsc state,0 ;0 if first time after reset
goto state1
bsf state,0 ;set to state 1
movf GPIO,W ;get port setting
xorlw B'00000100' ;reverse relay
movwf GPIO
call dely25 ;delay 25 millisecs for relay
bsf GPIO,DCCon ;turn back on
goto test ;look for overload
state1 bsf GPIO,Ovl_out ;set alarm
call del500
bsf state,7 ;set timeout
bcf GPIO,Ovl_out ;alarm off
bsf GPIO,DCCon ;output on
goto test
caltim call timout ;reset timer
goto test
; delays
delay movlw 0xFF ;short delay
movwf time0
delay1 clrwdt
nop
nop
decfsz time0,F
goto delay1
retlw 0
dely25 clrwdt
movlw .30 ;25 millisecs
movwf time1
del25a movlw 0xFF
movwf time2
del25b decfsz time2,F
goto del25b
decfsz time1,F
goto del25a
retlw 0
del500 movlw 0xFF ;500 millisecs
movwf time1
del500a movlw 0xFF
movwf time2
del500b clrwdt
nop
nop
nop
nop
decfsz time2,F
goto del500b
decfsz time1,F
goto del500a
retlw 0
timout btfss state,7 ;continue countdown
goto countdn
movlw 0xFF ;set counters
movwf time1
timo2 movlw 0xFF
movwf time2
bcf state,7
countdn decfsz time2,F
retlw 0
decfsz time1,F
goto timo3
clrf state ;reset
retlw 0
timo3 movlw 0xFF
movwf time2
retlw 0
end