⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pulse.bak

📁 本程序为集中抄表系统中低压电力线载波数据采集器程序源代码
💻 BAK
字号:
;-----------------------------------------
;脉冲采集中断程序
;-----------------------------------------
PULSE_ACQUIRE:
                PUSH    ACC
                PUSH    PSW
		PUSH	00H
		PUSH	01H
		PUSH	02H
		PUSH	03H
		PUSH	04H
		PUSH	05H
		PUSH	06H
		PUSH	07H
		CLR	TR0
		MOV	P0,#0FFH
		CLR	C245_E_0_7
                NOP
		NOP
		MOV	PULSE_STATE_0_7,P0
		SETB	C245_E_0_7
		CLR	C245_E_8_15
		NOP
		NOP
		MOV	PULSE_STATE_8_15,P0
		SETB	C245_E_8_15
		MOV	R7,#1				;脉冲通道号1-16
            	CLR	BIT_CHANNEL								;0:通道号=1-8,1:通道号=9-16
		MOV	A,R7									;R5脉冲存储地址
		DEC	A
		ADD	A,#RAM_PULSES1_0
		MOV	R5,A
		MOV	R4,HIGH_PERSISTENCE_0_7					;R4脉冲状态
		MOV	R3,PULSE_STATE_0_7					;R3脉冲输入
		MOV	R2,#1									;R2置位
		MOV	A,R7									;R1高电平计数器地址
		DEC	A
		ADD     A,#HIGH_LEVEL_COUNT0
		MOV	R1,A
		MOV	A,R7									;R0低电平计数器地址
		DEC	A
		ADD     A,#LOW_LEVEL_COUNT0
		MOV	R0,A
NEXT_CHANNEL_S:
		MOV	A,R4									;读脉冲状态
		RRC	A
		MOV	R4,A
		JC      JUDGE_LOW								;高电平持续3*5ms到,则判低电平,否则继续判高电平
		MOV	A,R3									;读脉冲输入
		RRC	A
		MOV	R3,A
		JC      INC_HIGH_COUNT
		MOV	@R1,#0									;脉冲输入中有低电平,清高电平计数
		SJMP	NEXT_CHANNEL_E
INC_HIGH_COUNT:
		INC	@R1
		MOV	A,@R1
		CJNE    A,#12H,NEXT_CHANNEL_E		               	;18*1ms
		MOV	A,R2
		JB	BIT_CHANNEL,SET_HIGH
		ORL	HIGH_PERSISTENCE_0_7,A
		SJMP	SET_OVER
SET_HIGH:
		ORL	HIGH_PERSISTENCE_8_15,A
SET_OVER:       MOV	@R0,#0									;清0低计数
		SJMP	NEXT_CHANNEL_E
JUDGE_LOW:
		MOV	A,R3									;读脉冲输入
		RRC	A
		MOV	R3,A
		JNC     INC_LOW_COUNT
		MOV	@R0,#0									;清0低计数
		SJMP	NEXT_CHANNEL_E
INC_LOW_COUNT:
		INC	@R0
		MOV	A,@R0
		CJNE    A,#12H,NEXT_CHANNEL_E				;--18*1ms
		MOV	A,R2
		CPL	A
		JB	BIT_CHANNEL,CLR_HIGH
		ANL	HIGH_PERSISTENCE_0_7,A
		SJMP	CLR_OVER
CLR_HIGH:
		ANL	HIGH_PERSISTENCE_8_15,A
CLR_OVER:
		MOV	R6,00H
		MOV	R0,05H
		INC	@R0
		MOV	R0,06H									;1-0跳变,脉冲数+1
		SETB	SAVE_PULSE_FLAG
		MOV	@R1,#0									;清0高计数
		MOV	@R0,#0									;清0低计数
NEXT_CHANNEL_E:
                INC	R7
		MOV	A,R7
		CJNE	A,#9,NEXT_CHANNEL_JUDGE
		SETB	BIT_CHANNEL								;0:通道号=1-8,1:通道号=9-16
		MOV	R4,HIGH_PERSISTENCE_8_15			;R4脉冲状态
		MOV	R3,PULSE_STATE_8_15				;R3脉冲输入
		MOV	R2,#1						;R2置位
               	SJMP	NEXT_CHANNEL_BEG0
NEXT_CHANNEL_JUDGE:
		CJNE	A,#17,NEXT_CHANNEL_BEG
		LJMP	RESET_TIMER
NEXT_CHANNEL_BEG:
		MOV	A,R2
		RL	A
		MOV	R2,A
NEXT_CHANNEL_BEG0:
		INC	R5										;R5脉冲存储地址
		INC	R1										;R1高电平计数器地址
		INC	R0										;R0低电平计数器地址
		LJMP	NEXT_CHANNEL_S
RESET_TIMER:
         	MOV     TH0,#0FCH									;--12MHZ重置T0初值1ms
                MOV     TL0,#18H
	        INC     COUNTER_100
                MOV     A,COUNTER_100
                CJNE    A,#100,PULSE_INIT_BACK			;1.5s
                MOV     COUNTER_100,#00H
                INC     COUNTER_1S
                MOV     A,COUNTER_1S
                CJNE    A,#15,PULSE_INIT_20S			;2s
                SETB    SAVE_1S                                 ;2S时间标志
                SETB    ZJQ_SEND_WAIT                           ;中继等待时间2S标志
                MOV     COUNTER_1S,#00H
               	JB      INIT_PL2101S_FLAG,PULSE_INIT_BACK       ;30s初始化PL2101S标志
PULSE_INIT_20S:
                INC     COUNTER_200
                MOV     A,COUNTER_200
                CJNE    A,#200,PULSE_INIT_BACK			;30s
                SETB    INIT_PL2101S_FLAG
                MOV     COUNTER_200,#00H
PULSE_INIT_BACK:
                SETB    TR0                                     ;开定时器
                POP	07H
		POP	06H
		POP	05H
		POP	04H
                POP	03H
                POP	02H
		POP	01H
		POP	00H
                POP     PSW
                POP     ACC
                RETI

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -