📄 pic12c671.asm
字号:
ORG 000
GOTO A1
;-------------------------------------------------------------------
;程序初始化
;-------------------------------------------------------------------
ORG 005
A1 BSF 0X03,5 ;1区
MOVLW 0X5F ;定时256分
MOVWF 0X01
MOVLW 0x06 ;设模数输入
MOVWF 0X1F
MOVLW 0X00 ;关中断
MOVWF 0X0B
MOVLW 0X00 ;设输出
MOVWF 0X05
BCF 0X03,5 ;0区
MOVLW 0X00 ;输出清零
MOVWF 0X05
MOVLW 0X3D ;1.19V
MOVWF 30
MOVLW 0X60 ;1.79V
MOVWF 31
MOVLW 0X6B ;2.1V
MOVWF 32
MOVLW 0X2B ;0.85V
MOVWF 33
BTFSS 0X05,3 ;测输出设定 =1跳
GOTO D1
CLRF 34
GOTO D2
D1 MOVLW 0XFF ;GPI4=0
MOVWF 34
D2 CALL LD1 ;开机鉴定
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X31,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >19V
GOTO LD12 ;12V电源
GOTO LD24 ;24V电源
;----------------------------------------------------------------------
;12V电源运行区
;---------------------------------------------------------------------
LD12 CALL LD1 ;测试主电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X30,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >12.5V
GOTO B1 ;电压低
B2 BTFSC 0X34,3 ;测输出设定 =0跳
GOTO B9
MOVLW 0X30 ;12V电压足够
MOVWF 0X05 ;开主电源
GOTO B10
B9 MOVLW 0X20 ;12V电压足够
MOVWF 0X05 ;开主电源
B10 CALL DS1 ;定时1.5秒
GOTO LD12
B1 MOVLW 0X24
MOVWF 0X05
B5 CALL DS2 ;定时2秒
BTFSC 0X34,3 ;测输出设定 =0跳
GOTO B7
MOVLW 0X04 ;12V电压不足够
MOVWF 0X05 ;开备电源
GOTO B8
B7 MOVLW 0X14 ;输出报警 1
MOVWF 0X05
B8 CALL LD1 ;测试主电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X30,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >12.5V
GOTO B3
MOVLW 0X24 ;12V电压足够
MOVWF 0X05
CALL DS2 ;定时2秒
GOTO B2
B3 CALL DS1 ;定时1.5秒
CALL LD2 ;测试备电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X33,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >10V
GOTO B4
GOTO B5
B4 CALL DS2 ;定时2秒
CALL LD1 ;测试主电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X30,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >12.5V
GOTO B6
GOTO B5
B6 MOVLW 0X10 ;输出清零
MOVWF 0X05
CALL DS2
CALL LD1
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X30,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >12.5V
GOTO B6
GOTO LD12
;----------------------------------------------------------------------
;24V电源运行区
;---------------------------------------------------------------------
LD24 CALL LD1 ;测试主电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X32,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >23V
GOTO E1 ;电压低
E2 BTFSC 0X34,3 ;测输出设定 =0跳
GOTO E9
MOVLW 0X30 ;12V电压足够
MOVWF 0X05 ;开主电源
GOTO E10
E9 MOVLW 0X20 ;23V电压足够
MOVWF 0X05 ;开主电源
E10 CALL DS1 ;定时1.5秒 ;定时1.5秒
GOTO LD24
E1 MOVLW 0X24
MOVWF 0X05
E5 CALL DS2 ;定时2秒
BTFSC 0X34,3 ;测输出设定 =0跳
GOTO E7
MOVLW 0X04 ;23V电压不足够
MOVWF 0X05 ;开备电源
GOTO E8
E7 MOVLW 0X14 ;输出报警 1
MOVWF 0X05
E8 CALL LD1 ;测试主电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X32,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >23V
GOTO E3
MOVLW 0X24 ;23V电压足够
MOVWF 0X05
CALL DS2 ;定时2秒
GOTO E2
E3 CALL DS1 ;定时1.5秒
CALL LD2 ;测试备电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X33,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >10V
GOTO E4
GOTO E5
E4 CALL DS2 ;定时2秒
CALL LD1 ;测试主电压
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X32,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >23V
GOTO E6
GOTO E5
E6 MOVLW 0X10 ;输出清零
MOVWF 0X05
CALL DS2
CALL LD1
NOP
NOP
MOVF 0X1E,0 ;结果到W
SUBWF 0X32,0 ;F减W
BTFSC 0X3,0 ;C=0 即结果为负 就跳 >12.5V
GOTO E6
GOTO LD24
;-------------------------------------------------------------------
;模数转换区
;------------------------------------------------------------------
LD1 MOVLW 0X05 ;转AN0
MOVWF 0X4F
A5 BTFSC 0X1F,2 ;完否?
GOTO A5
RETURN
LD2 MOVLW 0X0f ;转AN1
MOVWF 0X1F
A6 BTFSC 0X1F,2 ;完否?
GOTO A6
RETURN
;------------------------------------------------------------
;定时程序区
;----------------------------------------------------------------
DS1 BCF 0X03,5 ;0区
MOVLW 0X64 ;定时1.5秒
MOVWF 40
C3 CLRWDT
MOVLW 0X80
MOVWF 41
C2 MOVLW 0X25
MOVWF 42
C1 DECFSZ 0X42,1 ;减1=0就跳
GOTO C1
DECFSZ 0X41,1
GOTO C2
DECFSZ 0X40,1
GOTO C3
CLRWDT
RETURN
DS2 BCF 0X03,5 ;0区
MOVLW 0X64 ;定时2秒
MOVWF 40
C6 CLRWDT
MOVLW 0X80
MOVWF 41
C5 MOVLW 0X32
MOVWF 42
C4 DECFSZ 0X42,1 ;减1=0就跳
GOTO C4
DECFSZ 0X41,1
GOTO C5
DECFSZ 0X40,1
GOTO C6
CLRWDT
RETURN
END
MOVLW 0x3C
MOVWF 0X05
CALL A2
MOVLW 0x00
MOVWF 0X05
CALL A2
GOTO LD24
A2 BCF 0X03,5 ;0区
MOVLW 0xFE
MOVWF 0X20
A3 MOVLW 0xFE
MOVWF 0X21
A4 DECFSZ 0X21,1
GOTO A4
DECFSZ 0X20,1
GOTO A3
RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -