هذه برنامج الاسمبلي الخاص بتشغيل واطفاء المولد الكهربائي
;* auto start stop
;* for electrical generator
;*
;*
;*
Fathi Idris
************************************************** *************
LIST
N1 = 23
N2 = 24
N3 = 25
N3H = 26
#Define SENSOR PORTA,0
#Define WATTER PORTA,1
#Define OIL PORTA,2
#Define FUEL PORTA,3
#Define RESET PORTA,4
#Define RUNING PORTB,0
#Define M_ON PORTB,1
#Define FAULT PORTB,2
#Define ALARM PORTB,3
#Define STARTER PORTB,4
#Define ACCL PORTB,5
#Define _M PORTB,6
#Define _G PORTB,7
F1_SOF equ $ ; AUTO_RUN_GENERATOR.BAS
F1_000030 equ $ ; in [AUTO_RUN_GENERATOR.BAS] trisa = $1f
Movlw 31
Bsf STATUS,5
ram_bank = 1
Movwf TRISA
F1_000031 equ $ ; in [AUTO_RUN_GENERATOR.BAS] trisb = $01
Movlw 1
Movwf TRISB
F1_000032 equ $ ; in [AUTO_RUN_GENERATOR.BAS] portb = 0
Bcf STATUS,5
ram_bank = 0
Clrf PORTB
F1_000033 equ $ ; in [AUTO_RUN_GENERATOR.BAS] While 1 = 1
bc*LL1
MAIN
F1_000035 equ $ ; in [AUTO_RUN_GENERATOR.BAS] m = 1
Bsf PORTB,6
F1_000036 equ $ ; in [AUTO_RUN_GENERATOR.BAS] m_on = 1
Bsf PORTB,1
F1_000037 equ $ ; in [AUTO_RUN_GENERATOR.BAS] g = 0
Bcf PORTB,7
F1_000038 equ $ ; in [AUTO_RUN_GENERATOR.BAS] If sensor = 1 Then
Btfss PORTA,0
Goto bc*LL4
F1_000039 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000040 equ $ ; in [AUTO_RUN_GENERATOR.BAS] portb = 0
Clrf PORTB
F1_000041 equ $ ; in [AUTO_RUN_GENERATOR.BAS] GoTo start
Goto START
Goto bc*LL5
bc*LL4
F1_000042 equ $ ; in [AUTO_RUN_GENERATOR.BAS] Else: GoTo main
Goto MAIN
F1_000043 equ $ ; in [AUTO_RUN_GENERATOR.BAS] End If
bc*LL5
START
F1_000045 equ $ ; in [AUTO_RUN_GENERATOR.BAS] For n1 = 1 To 3
Movlw 1
Movwf N1
fr*lb7
Movlw 4
Subwf N1,W
Btfsc STATUS,0
Goto nx*lb8
F1_000046 equ $ ; in [AUTO_RUN_GENERATOR.BAS] accl = 1
Bsf PORTB,5
F1_000047 equ $ ; in [AUTO_RUN_GENERATOR.BAS] starter = 1
Bsf PORTB,4
F1_000048 equ $ ; in [AUTO_RUN_GENERATOR.BAS] For n2 = 1 To 5
Movlw 1
Movwf N2
fr*lb9
Movlw 6
Subwf N2,W
Btfsc STATUS,0
Goto nx*lb10
F1_000049 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000050 equ $ ; in [AUTO_RUN_GENERATOR.BAS] Next n2
Incfsz N2,F
Goto fr*lb9
nx*lb10
F1_000051 equ $ ; in [AUTO_RUN_GENERATOR.BAS] If runing = 1 Then GoTo test_sensor
Btfss PORTB,0
Goto bc*LL11
Goto TEST_SENSOR
bc*LL11
F1_000052 equ $ ; in [AUTO_RUN_GENERATOR.BAS] starter = 0
Bcf PORTB,4
F1_000053 equ $ ; in [AUTO_RUN_GENERATOR.BAS] Next n1
Incfsz N1,F
Goto fr*lb7
nx*lb8
FAULT_RUN
F1_000055 equ $ ; in [AUTO_RUN_GENERATOR.BAS] portb = 0
Clrf PORTB
FAULT_RUN1
F1_000057 equ $ ; in [AUTO_RUN_GENERATOR.BAS] fault = 1
Bsf PORTB,2
F1_000058 equ $ ; in [AUTO_RUN_GENERATOR.BAS] sound alarm, [120,60,110,60,120,60]
Movlw PORTB
Movwf GEN
Movlw 8
Movwf GENH
Movlw 120
Movwf PP1
Movlw 60
Call Noise
Movlw 110
Movwf PP1
Movlw 60
Call Noise
Movlw 120
Movwf PP1
Movlw 60
Call Noise
F1_000059 equ $ ; in [AUTO_RUN_GENERATOR.BAS] toggle fault
Movlw 4
Xorwf PORTB,F
Bsf STATUS,5
ram_bank = 1
Bcf TRISB,2
F1_000060 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 500
Movlw 1
Bcf STATUS,5
ram_bank = 0
Movwf PP1H
Movlw 244
Call dly*w
F1_000061 equ $ ; in [AUTO_RUN_GENERATOR.BAS] If Reset = 0 Then GoTo main
Btfsc PORTA,4
Goto bc*LL13
Goto MAIN
bc*LL13
F1_000062 equ $ ; in [AUTO_RUN_GENERATOR.BAS] GoTo fault_run1
Goto FAULT_RUN1
TEST_SENSOR
F1_000064 equ $ ; in [AUTO_RUN_GENERATOR.BAS] starter = 0
Bcf PORTB,4
F1_000065 equ $ ; in [AUTO_RUN_GENERATOR.BAS] accl = 1
Bsf PORTB,5
F1_000066 equ $ ; in [AUTO_RUN_GENERATOR.BAS] For n3 = 1 To 10
Clrf N3H
Movlw 1
Movwf N3
fr*lb15
Movfw N3H
Btfss STATUS,2
Goto nx*lb16
Movlw 11
Subwf N3,W
Btfsc STATUS,0
Goto nx*lb16
F1_000067 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000068 equ $ ; in [AUTO_RUN_GENERATOR.BAS] Next n3
Incf N3,F
Skpnz
Incfsz N3H,F
Goto fr*lb15
nx*lb16
F1_000069 equ $ ; in [AUTO_RUN_GENERATOR.BAS] If fuel = 1 Then GoTo fault_run
Btfss PORTA,3
Goto bc*LL17
Goto FAULT_RUN
bc*LL17
F1_000070 equ $ ; in [AUTO_RUN_GENERATOR.BAS] If watter = 1 Then GoTo fault_run
Btfss PORTA,1
Goto bc*LL19
Goto FAULT_RUN
bc*LL19
F1_000071 equ $ ; in [AUTO_RUN_GENERATOR.BAS] If oil = 1 Then GoTo fault_run
Btfss PORTA,2
Goto bc*LL21
Goto FAULT_RUN
bc*LL21
F1_000072 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000073 equ $ ; in [AUTO_RUN_GENERATOR.BAS] m = 0
Bcf PORTB,6
F1_000074 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000075 equ $ ; in [AUTO_RUN_GENERATOR.BAS] g = 1
Bsf PORTB,7
F1_000076 equ $ ; in [AUTO_RUN_GENERATOR.BAS] m_on = 1
Bsf PORTB,1
F1_000077 equ $ ; in [AUTO_RUN_GENERATOR.BAS] If sensor = 0 Then
Btfsc PORTA,0
Goto bc*LL23
F1_000078 equ $ ; in [AUTO_RUN_GENERATOR.BAS] For n3 = 1 To 60
Clrf N3H
Movlw 1
Movwf N3
fr*lb25
Movfw N3H
Btfss STATUS,2
Goto nx*lb26
Movlw 61
Subwf N3,W
Btfsc STATUS,0
Goto nx*lb26
F1_000079 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000080 equ $ ; in [AUTO_RUN_GENERATOR.BAS] Next n3
Incf N3,F
Skpnz
Incfsz N3H,F
Goto fr*lb25
nx*lb26
F1_000081 equ $ ; in [AUTO_RUN_GENERATOR.BAS] g = 0
Bcf PORTB,7
F1_000082 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000083 equ $ ; in [AUTO_RUN_GENERATOR.BAS] m = 1
Bsf PORTB,6
F1_000084 equ $ ; in [AUTO_RUN_GENERATOR.BAS] m_on = 1
Bsf PORTB,1
F1_000085 equ $ ; in [AUTO_RUN_GENERATOR.BAS] For n3 = 1 To 60
Clrf N3H
Movlw 1
Movwf N3
fr*lb27
Movfw N3H
Btfss STATUS,2
Goto nx*lb28
Movlw 61
Subwf N3,W
Btfsc STATUS,0
Goto nx*lb28
F1_000086 equ $ ; in [AUTO_RUN_GENERATOR.BAS] delayms 1000 ; keep generator runing although main suplly come back
Movlw 3
Movwf PP1H
Movlw 232
Call dly*w
F1_000087 equ $ ; in [AUTO_RUN_GENERATOR.BAS] next n3 ; here generator is stop runing
Incf N3,F
Skpnz
Incfsz N3H,F
Goto fr*lb27
nx*lb28
F1_000088 equ $ ; in [AUTO_RUN_GENERATOR.BAS] accl = 0
Bcf PORTB,5
F1_000089 equ $ ; in [AUTO_RUN_GENERATOR.BAS] GoTo main
Goto MAIN
Goto bc*LL28
bc*LL23
F1_000090 equ $ ; in [AUTO_RUN_GENERATOR.BAS] Else: GoTo test_sensor
Goto TEST_SENSOR
F1_000091 equ $ ; in [AUTO_RUN_GENERATOR.BAS] End If
bc*LL28
F1_000094 equ $ ; in [AUTO_RUN_GENERATOR.BAS] GoTo main
Goto MAIN
F1_000101 equ $ ; in [AUTO_RUN_GENERATOR.BAS] Wend
Goto bc*LL1
bc*LL2
F1_000102 equ $ ; in [AUTO_RUN_GENERATOR.BAS] End
Pb*lb30
Sleep
Goto Pb*lb30
END
وهنا رابط لصورة المخطط وملف الاسمبلي
>>>>>>
http://www.zshare.net/download/50108542374a3d36 <<<<<<<