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

📄 djs2.asm

📁 一个与电动车控制器配套的防盗报警并自动锁紧电机的汇编程序
💻 ASM
字号:
	list	p=16f630
	include "P16F630.inc"
;----------------------------------------------------
	;端口定义
	;--------------------------------------------
	RA	EQU	05		;
	 O_PW	EQU	0		;电源控制	
	 O_FD	EQU	1		;防盗输出
 	 O_LB	EQU	2		;喇叭输出
	 I_DM	EQU	4		;电门锁输入
	 I_DJ	EQU	5		;电机转动检测端
	 	
	RC	EQU	7
	 
	;---------------------------------------------
	;寄存器定义
	;---------------------------------------------
	B_W	EQU	20		;备份W
	B_STATUS	EQU	21		;备份STATUS
	FLAG1	EQU   	22		;标志位
	 F_DM	EQU	0		;电门锁状态,有电=1,无电=0
	 F_DJ	EQU	1		;电机转动状态,转动=1,静止=0
	 F_YB	EQU	2		;预报警,
	 F_BJ	EQU	3		;报警状态,报警=1,不报警=0
	 F_LBJ	EQU	4		;在报警状态时,喇叭叫=1,喇叭间歇=0	
	 F_F	EQU	5		;错误状态
	 F_YJ	EQU	6
	 F_DMG	EQU	7

;	REG1	EQU	23
;	REG2	EQU	24
;	REG3	EQU	25
	R_YJL	EQU	26
	R_YJH	EQU	27
	R_BJCT	EQU	28
;	REG4	EQU	29
	
	R_SOUND 	EQU 	30H  	;声音频率变化计数器,从1.8~3.55KHZ
	R_COUNT 	EQU 	31H   	;同一频率的重复次数保存地址
	R_REPEAT 	EQU 	32H   
	TEMP 		EQU 	33H      ;暂存寄存器

	REGCKDJ		EQU	34H
	REGDY1		EQU	35H
	REGDY2		EQU	36H
	REGDY3		EQU	37H
	REGCKDM1	EQU	38H
	REGCKDM2	EQU	39H
	REGBJ		EQU	3AH
	REGSOUND	EQU	3BH
	REGSD2		EQU	3CH
	REGSD3		EQU	3DH
	;-------------------------------------------------
	;立即数定义
	;-------------------------------------------------
	S_BJCT	EQU	2		;警笛声次数
	S_YJL	EQU	0FFH		;预警时间
	S_YJH	EQU	0ffh
	
	S_LOOP		EQU 	30  	;93-47=46
	S_MAX 		EQU 	93      ;最低频率1.8K 93*3=280US*2
	S_MIN 		EQU 	47      ;最高频率3.55K 47*3=140*2
	S_REPEAT 	EQU 	3     	;同一频率重复次数

	S_LOOP1		EQU 	46  	;93-47=46
	S_MAX1 		EQU 	93      ;最低频率1.8K 93*3=280US*2
	S_MIN1 		EQU 	47      ;最高频率3.55K 47*3=140*2
	S_REPEAT1 	EQU 	0C     	;同一频率重复次数

	RAIF	EQU	0
	CMCON	EQU	19
;----------------------------------------------------------
;	程序
;----------------------------------------------------------
	ORG	0
	GOTO	MAIN			;

	ORG	4
	GOTO	MAIN
	
	ORG	8
;---------------------------------------------	
MAIN	BCF	STATUS,RP0		;初始化
	MOVLW	55
	MOVWF	RC
	MOVLW	7
	MOVWF	CMCON			
					;B7  B6  B5    B4      B3   B2    B1    B0
	MOVLW	38H			;0   0   1     1       1    0     0     0		
	MOVWF	RA			;NC  NC  I_DJ  I_DM    NC   O_LB  O_FD  O_PW    

	BSF	STATUS,RP0
	MOVLW	38H			;00111000
	MOVWF	TRISA
	MOVLW	0
	MOVWF	TRISC

	MOVLW	87H			;10000111,TMR0用分频器,1:256,T0溢出周期=256*256US
	MOVWF	OPTION_REG	
	BCF	STATUS,RP0
	MOVLW	0
	MOVWF	INTCON			;中断控制字,关中断
	CLRF	FLAG1
	CALL	CK_DM
	BTFSC	FLAG1,F_DM
	GOTO	M_0			;开机有电,鸣两声
	GOTO	M_1			;开机无电,鸣一声

;-----------------------------
MMAIN	CALL	CK_DM
	CLRWDT
	BTFSS	FLAG1,F_DM			;电门锁有电,	
	GOTO	MM_0				;电门锁没电,
	BTFSC	FLAG1,F_DMG			;电门锁原来没电,
	GOTO	MM_00				;电门锁原来就有电

M_0	BSF	FLAG1,F_DMG			;上电,鸣两声
	CALL	SOUND
	MOVLW	10H
	MOVWF	REGDY3
	CALL	D_10MS
	CALL	SOUND
MM_00	BCF	RA,O_PW
	BSF	RA,O_FD
	BCF	RA,O_LB
	GOTO	MMAIN

MM_0	BTFSS	FLAG1,F_DMG			;电门锁原来有电,现在没电
	GOTO	MM_1				;电门锁原来没电,现在也没电,防盗状态,去检测电机
		
M_1	BCF	FLAG1,F_DMG			;关电,检测到电机停后鸣一声,进入防盗状态
M_10	CALL	CK_DJT
	BTFSC	FLAG1,F_DJ
	GOTO	M_10			;电机未停
	CALL	SOUND			;电机已停
	BCF	RA,O_PW			;?????
	BSF	RA,O_FD
	BCF	RA,O_LB
	MOVLW	30H			;0.5S	;???
	MOVWF	REGDY3				;???
	CALL	D_10MS				;???
	GOTO	MMAIN
	
MM_1	CALL	CK_DJ			;防盗状态,检测电机是否转动
	BTFSC	FLAG1,F_DJ
	GOTO	MM_2			;电机转动
				
	BCF	RA,O_PW			;电机不转动,保持防盗状态
	BCF	RA,O_LB
	BSF	RA,O_FD
	GOTO	MMAIN

MM_2	BCF	RA,O_FD			;
	BSF	RA,O_PW			;==============
	MOVLW	S_BJCT
	MOVWF	R_BJCT
MM_20	CALL	BJY			;BJ
	CALL	CK_DM
	BTFSC	FLAG1,F_DM
	GOTO	MM_21
	DECFSZ	R_BJCT
	GOTO	MM_20
MM_21	BCF	RA,O_PW			;报警结束OR报警过程中电门上电,立即解除防盗状态
	MOVLW	32H			;0.5S		
	MOVWF	REGDY3
	CALL	D_10MS
	BCF	RA,O_LB
	BSF	RA,O_FD
	GOTO	MMAIN			;主程序结束

						
;-----------------------------------------------------
BJY	MOVLW	15			;报警组合音
	MOVWF	REGBJ
Y1	CALL	SDJY			;急警音
	CALL	CK_DM
	BTFSC	FLAG1,F_DM
	GOTO	BJYR	
	DECFSZ	REGBJ
	GOTO	Y1
	
	MOVLW	4
	MOVWF	REGBJ			
Y2	CALL	SDJY1			;慢警音
	CALL	CK_DM
	BTFSC	FLAG1,F_DM
	GOTO	BJYR
	DECFSZ	REGBJ
	GOTO	Y2

	MOVLW	2
	MOVWF	REGBJ
Y3	CALL	SD1			;长声
	CALL	CK_DM
	BTFSC	FLAG1,F_DM
	GOTO	BJYR
	MOVLW	10
	MOVWF	REGDY3
	CALL	D_10MS
	DECFSZ	REGBJ
	GOTO	Y3
	
	RETURN

BJYR	BCF	RA,O_LB
	RETURN

;---------------------------------------------------------
SD1	MOVLW	8		  	;长声
	MOVWF	REGSD3
SD1_0	MOVLW	30
	MOVWF	REGSD2
SD1_1	BSF	RA,O_LB
	MOVLW	0
	CALL	SOUNDDELAY			;W*3US
	MOVLW	60
	CALL	SOUNDDELAY			;W*3US
	BCF	RA,O_LB
	MOVLW	0
	CALL	SOUNDDELAY
	MOVLW	60
	CALL	SOUNDDELAY			;W*3US
	DECFSZ	REGSD2
	GOTO	SD1_1
	DECFSZ	REGSD3
	GOTO	SD1_0
	RETURN
;----------------------------------------------------
SOUND	MOVLW	60H		  	;蜂鸣器固定频率响1.736k,短声
	MOVWF	REGSOUND
SOUND1	BSF	RA,O_LB
	MOVLW	60H
	CALL	SOUNDDELAY			;W*3US
	BCF	RA,O_LB
	MOVLW	60H
	CALL	SOUNDDELAY
	DECFSZ	REGSOUND
	GOTO	SOUND1	
	RETURN

;----------------------------------------------------

CK_DM	CLRWDT
	BCF	FLAG1,F_DM
			
	MOVLW	0FH
	MOVWF	REGCKDM1
DM1	BTFSS	RA,I_DM
	RETURN
	DECFSZ	REGCKDM1
	GOTO	DM1

	MOVLW	5
	MOVWF	REGDY3
	CALL	D_10MS

	CLRWDT
	MOVLW	0FH
	MOVWF	REGCKDM1
DM2	BTFSS	RA,I_DM
	RETURN
	DECFSZ	REGCKDM1
	GOTO	DM2

	BSF	FLAG1,F_DM		
	RETURN

;------------------------------------------------
CK_DJ	BCF	FLAG1,F_DJ
	MOVLW	0FH			;?????
	MOVWF	REGCKDJ
DJ1	BTFSS	RA,I_DJ
	RETURN
	DECFSZ	REGCKDJ
	GOTO	DJ1

	MOVLW	1
	MOVWF	REGDY3
	CALL	D_10MS

	CLRWDT
	MOVLW	0FH			;?????
	MOVWF	REGCKDJ
DJ2	BTFSS	RA,I_DJ
	RETURN
	DECFSZ	REGCKDJ
	GOTO	DJ2

	MOVLW	10H			;0.16s
	MOVWF	REGDY3
	CALL	D_10MS

	BSF	FLAG1,F_DJ
	RETURN

;------------------------------------------------
CK_DJT	BSF	FLAG1,F_DJ
	MOVLW	0FFH			;?????
	MOVWF	REGCKDJ
DJT1	BTFSC	RA,I_DJ
	RETURN
	DECFSZ	REGCKDJ
	GOTO	DJT1

	MOVLW	5
	MOVWF	REGDY3
	CALL	D_10MS

	CLRWDT
	MOVLW	0FH			;?????
	MOVWF	REGCKDJ
DJT2	BTFSC	RA,I_DJ
	RETURN
	DECFSZ	REGCKDJ
	GOTO	DJT2

	MOVLW	0C0H			;1.9s
	MOVWF	REGDY3
	CALL	D_10MS

	MOVLW	0C0H			;1.9s
	MOVWF	REGDY3
	CALL	D_10MS
	
	BCF	FLAG1,F_DJ
	RETURN
;---------------------------------------------

D_10MS	CLRWDT
	MOVLW	0DH
	MOVWF	REGDY1			;
	CLRF	REGDY2
D10_1	DECFSZ	REGDY2
	GOTO	D10_1
	DECFSZ	REGDY1
	GOTO	D10_1
	DECFSZ	REGDY3
	GOTO	D_10MS
	RETURN
;--------------------------------------------------
SDJY1 	MOVLW 	S_LOOP1		;长警音
  	MOVWF 	R_COUNT   		;46=93-47 最低频率的计数减去最高频率的计数等于频率变化的次数
JY1_L_P
  	MOVLW 	S_REPEAT1   		;同一频率重复次数送FRE_REPEAT
  	MOVWF 	R_REPEAT
  	MOVFW 	R_COUNT
  	ADDLW 	S_MIN1    		;计数值加最小值
  	MOVWF 	TEMP
JY1_RP1
  	MOVFW 	TEMP
  	BSF 	RA,O_LB    
  	CALL 	SOUNDDELAY  		;廷时W*3US
  	BCF 	RA,O_LB
  	MOVFW 	TEMP
  	CALL 	SOUNDDELAY
  	DECFSZ 	R_REPEAT,1 		;每四次减频率计数一次
  	GOTO 	JY1_RP1
  	DECFSZ	R_COUNT,1
  	GOTO 	JY1_L_P

 	MOVLW 	S_LOOP1
  	MOVWF 	R_COUNT 
JY1_P_L 		
  	MOVLW 	S_REPEAT1 		;同一频率重复次数送FRE_REPEAT
  	MOVWF 	R_REPEAT
  	MOVFW 	R_COUNT
  	SUBLW 	S_MAX1    		;最大值减计数值
  	MOVWF 	TEMP
JY1_RP2
  	MOVFW 	TEMP
  	BSF 	RA,O_LB
  	CALL 	SOUNDDELAY  		;廷时W*3US
  	BCF 	RA,O_LB
  	MOVFW 	TEMP
  	CALL 	SOUNDDELAY
  	DECFSZ 	R_REPEAT,1		;四次减频率计数一次
  	GOTO 	JY1_RP2
  	DECFSZ 	R_COUNT,1
  	GOTO 	JY1_P_L
JY1_END
  	RETLW 	0

;----------------------------------------------------
SDJY  	MOVLW 	S_LOOP			;急警音
  	MOVWF 	R_COUNT   		;46=93-47 最低频率的计数减去最高频率的计数等于频率变化的次数
SOUND_LH_LP
  	MOVLW 	S_REPEAT   		;同一频率重复次数送FRE_REPEAT
  	MOVWF 	R_REPEAT
  	MOVFW 	R_COUNT
  	ADDLW 	S_MIN    		;计数值加最小值
  	MOVWF 	TEMP
REPEAT0_LP
  	MOVFW 	TEMP
  	BSF 	RA,O_LB    
  	CALL 	SOUNDDELAY  		;廷时W*3US
  	BCF 	RA,O_LB
  	MOVFW 	TEMP
  	CALL 	SOUNDDELAY
  	DECFSZ 	R_REPEAT,1 		;每四次减频率计数一次
  	GOTO 	REPEAT0_LP
  	DECFSZ	R_COUNT,1
  	GOTO 	SOUND_LH_LP

  	MOVLW 	S_LOOP
  	MOVWF 	R_COUNT 
SOUND_HL_LP 		
  	MOVLW 	S_REPEAT  		;同一频率重复次数送FRE_REPEAT
  	MOVWF 	R_REPEAT
  	MOVFW 	R_COUNT
  	SUBLW 	S_MAX    		;最大值减计数值
  	MOVWF 	TEMP
REPEAT1_LP
  	MOVFW 	TEMP
  	BSF 	RA,O_LB
  	CALL 	SOUNDDELAY  		;廷时W*3US
  	BCF 	RA,O_LB
  	MOVFW 	TEMP
  	CALL 	SOUNDDELAY
  	DECFSZ 	R_REPEAT,1		;四次减频率计数一次
  	GOTO 	REPEAT1_LP
  	DECFSZ 	R_COUNT,1
  	GOTO 	SOUND_HL_LP
SOUND_END
  	RETLW 	0
;------------------------------
SOUNDDELAY
	CLRWDT
  	MOVWF 	R_SOUND   	;廷时W*3US+2US
SOUNDDELAYUS_1
  	DECFSZ 	R_SOUND,1
  	GOTO 	SOUNDDELAYUS_1
  	RETLW 	0
;------------------------
  	END	
	
	

⌨️ 快捷键说明

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