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

📄 baojing.asm

📁 利用无线模块开发的报警器源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	MOVLW 	.20					
	MOVWF	10H					;2S计数器
	BTFSC	BUTTON				;判断有无按键操作 =0 跳
	RETLW	0					; =1 无按键操作
	CALL	DELAY_100MS
	BTFSC	BUTTON				;消除干扰信号
	RETLW	0
	CALL 	FMING				;有键按下鸣一声
BNT_SET1:
	CALL	DELAY_100MS
	BTFSC	BUTTON				; =0 有按键操作,判'0'结束
	GOTO    BNT_SET2			;2S内抬手,进入"设防/解防"及解除报警
	DECFSZ  10H, 0
	GOTO 	BNT_SET1			;判按键抬手
	CALL 	FMING
	CALL 	FMING
	CALL 	FMING
;	CALL	REV_SET_DAT			;鸣三声,进入号码设置			
	RETLW	0
BNT_SET2:						;"设防/解防"及解除报警
	DECFSZ	DATA_H_93C46, 0			
	GOTO 	BNT_SET3			;解防状态,进入设防状态
	CLRF	SYS_STATUS			;设防->解除
	BCF		ZJ_CTRL				;解除报警挂机
	BCF   	CTR_LAMP			;灯灭
	BSF		INH_9170			;9170停止工作
	BSF		CS_93C46			;93C46停止工作
	BCF		ZJ_CTRL				;挂机
	BSF		MING				;关蜂鸣
	BSF		BUTTON				;设置按钮收零有效
	BSF		BAOJING				;报警'0'有效
	CLRF	ADDRESS_93C46		;93C46 '00'地址内容清零
	CLRF	DATA_H_93C46		
	CLRF	DATA_L_93C46
	BSF		PAGE1
	CALL 	WRITE
	BCF		PAGE1	
	RETLW	0
BNT_SET3:	
	CLRF	ADDRESS_93C46		;进入设防
	MOVLW	01H	
	MOVWF	DATA_H_93C46		;设防
	CLRF	DATA_L_93C46		;首次设防,写入'0'
	BSF		PAGE1
	CALL 	WRITE
	BCF		PAGE1
	BCF   	CTR_LAMP			;灯亮		
	CALL 	FMING
	RETLW	0
;************************************************************
;名称: WCODE
;功能:写入设置的脉冲号码
;注:  每次写入"号码"+"FFFF","FFFF"=结束,下一个号码写在"FFFF"
;     位置
;************************************************************	
WCODE:	
;	MOV ADDRESS_93C46, 40H
;	MOV DATA_H_93C46, 50H
;	MOV DATA_L_93C46, #0FFH
;	LCALL  WRITE
;	MOV A,  40H
;	INC A
;	MOV ADDRESS_93C46, A
;	MOV DATA_H_93C46, #0FFH
;	MOV DATA_L_93C46, #0FFH
;	LCALL  WRITE
 ;       MOV R0, 40H
  ;      MOV @R0, 50H
   ;     INC R0  
    ;    MOV 40H, R0
     ;   MOV  50H,  #00H	
	RETLW	0
;**************************************************************
;名称: BJ_INIT
;功能: 收到报警延时10S同时接收是否有解除
;**************************************************************
BJ_INIT:
	MOVLW	064H				;延时10S同时接收是否有解除
	MOVWF	DELAY_CNT3
D_10S:
	CALL	DELAY_100MS
	CALL	BNT_SET
	MOVLW	02H
	SUBWF	SYS_STATUS, W		
	BZ		D_10S1
	GOTO 	M_LOOP				;报警解除,返回主循环
D_10S1:								
	DECFSZ	DELAY_CNT3,F
	GOTO	D_10S
;-------------------------------------------------------------	
;闪断500MS同时接收是否有解除
	BCF		ZJ_CTRL				;??*闪断????**********控制挂机
	MOVLW	05H
	MOVWF	DELAY_CNT3
D_500MS:
	CALL	DELAY_100MS
	CALL	BNT_SET
	MOVLW	02H
	SUBWF	SYS_STATUS, W		
	BZ		D_500MS1
	GOTO 	M_LOOP				;报警解除,返回主循环
D_500MS1:								
	DECFSZ	DELAY_CNT3,F
	GOTO	D_500MS
	BSF		ZJ_CTRL
	GOTO 	SYS_3
;******************************************************************
;名称: SEND_DTMF_DAT
;功能: 发送一组设置好的被叫号码
;******************************************************************
SEND_DTMF_DAT:
	NOP
SEND_1:
	MOVLW	02H
	SUBWF	SYS_STATUS, W		
	BZ		SEND_11
	GOTO 	M_LOOP				;报警解除,返回主循环
SEND_11:	
	CALL	READ
	MOVF	DATA_H_93C46,W		;读出要发送的号码
	MOVWF	SEND_DAT_9200
	MOVLW	0FFH
	SUBWF	SEND_DAT_9200,W
	BNZ		SEND_2
	GOTO	SYS_4				;号码结束返回
SEND_2:
	CALL	SEND_DTMF
	CALL	DELAY_100MS
	MOVLW	0FFH
	MOVWF	SEND_DAT_9200
	CALL	SEND_DTMF
	CALL	DELAY_100MS
	INCF	ADDRESS_93C46,F		;发号地址加1
	GOTO	SEND_1

;******************************************************************
;			分页处
;******************************************************************
	ORG		0200H
	BSF		PAGE1
;******************************************************************
;名称: 读指令(READ指令)
;功能: 把93C46中ADDRESS_93C46所指向的存储器的数据读到
;	   DATA_H_93C46(H),DATA_L_93C46(L)
;******************************************************************
READ:
	CALL	START_93C46
	MOVLW	06H								;发送读操作指令
	MOVWF	DATSEND_93C46
	MOVLW	03H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA
	MOVF	ADDRESS_93C46,W 				;发送写入地址
	MOVWF	DATSEND_93C46
	MOVLW	06H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA
	BSF		DO_93C46						;准备读入数据
	MOVLW	10H
	MOVWF	BIT_CNT_93C46
READ1:
	BSF		SK_93C46						;产生一个时钟信号
	BSF		SK_93C46
	BCF		SK_93C46
	BCF		SK_93C46
	NOP
	BTFSC	DO_93C46						;读取DO的信息
	GOTO 	READ2
	GOTO	READ3
READ2:
	SETC
	GOTO 	READ4
READ3:
	CLRC
READ4:
	RLF		DATA_L_93C46, F					;
	RLF		DATA_H_93C46, F	
	DECFSZ	BIT_CNT_93C46,F
	GOTO	READ1
	CALL	STOP_93C46
	RETLW    0
;******************************************************************
;名称:START_93C46
;功能:片选93C46做好读/写数据的准备
;******************************************************************
START_93C46:
	BSF		DO_93C46
	BSF		DI_93C46
	BCF		SK_93C46
	BSF		CS_93C46
BUSY_93C46:
	BTFSS	DO_93C46			;查询器件是否繁忙
	GOTO	BUSY_93C46
	BSF		SK_93C46
	BCF		SK_93C46
	BCF		CS_93C46
	BCF		SK_93C46
	BCF		DI_93C46
	BSF		CS_93C46
	RETLW	0
;******************************************************************
;名称:SEND_DATA
;功能:数据发送子程序,把待发送数据DATSEND_93C46的低BIT_SEND_93C46位
;	  送到DI上
;******************************************************************
SEND_DATA:
;因为为了使程序容易读懂,前面把要发送的内容直接送给DATSEND_93C46,
;而现在就要把DATSEND_93C46中无用的位去掉,把要发送的内容移到最高位来
	MOVF	BIT_SEND_93C46, W
	MOVWF	BIT_CNT_93C46
	MOVLW	08H						;计算要移位的个数
	MOVWF	BIT_CNT_93C46
	MOVF	BIT_SEND_93C46,W
	SUBWF	BIT_CNT_93C46,F
	MOVF	BIT_CNT_93C46,F
	BZ		SEND_DATA2				;如果发送的位数为8位,则不用移位,跳转
SEND_DATA1:
	RLF		DATSEND_93C46,F			;把要送出数据的移到DATSEND_93C46的最高位
	DECFSZ	BIT_CNT_93C46,F
	GOTO	SEND_DATA1
SEND_DATA2:
	MOVF	BIT_SEND_93C46,W
	MOVWF	BIT_CNT_93C46
SEND_DATA4:
	RLF		DATSEND_93C46,F
	BC		SEND_DATA5
	BCF		DI_93C46				;发送0码
	GOTO	SEND_DATA6
SEND_DATA5:
	BSF		DI_93C46				;发送1码
	NOP
	NOP
SEND_DATA6:
	BSF		SK_93C46
	BCF		SK_93C46
	DECFSZ	BIT_CNT_93C46,F
	GOTO 	SEND_DATA4
	RETLW    0	
;******************************************************************
;名称:写指令(WRITE指令)
;功能:把DATA_H_93C46(H),DATA_L_93C46(L)的数据写到93C46中
;	  ADDRESS_93C46所指向的存储器中
;******************************************************************
WRITE:
	CALL	WEN_93C46
	CALL	START_93C46
	MOVLW	05H
	MOVWF	DATSEND_93C46				;发送写入操作指令
	MOVLW	03H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA
	MOVF	ADDRESS_93C46,W				;发送写入地址
	MOVWF	DATSEND_93C46
	MOVLW	06H
	MOVWF	BIT_SEND_93C46
	CALL 	SEND_DATA
	MOVF	DATA_H_93C46,W				;发送写入数据
	MOVWF	DATSEND_93C46
	MOVLW	08H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA
	MOVF	DATA_L_93C46,W
	MOVWF	DATSEND_93C46
	MOVLW	08H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA
	CALL	STOP_93C46
	CALL	WDS_93C46
	RETLW	0

;******************************************************************
;名称:STOP_93C46
;功能:停止对93C46操作
;******************************************************************
STOP_93C46:
	BCF		SK_93C46
	BCF		DI_93C46
	BCF		CS_93C46
	BSF		DO_93C46
	RETLW    0
;******************************************************************
;名称:WEN_93C46(EWEN指令)
;功能:93C46写允许
;******************************************************************
WEN_93C46:
	CALL	START_93C46
	MOVLW	04H
	MOVWF	DATSEND_93C46		;发送开始位和写允许操作码,共3位
	MOVLW	03H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA			;调用发送子程序
	MOVLW	30H
	MOVWF	DATSEND_93C46		;发送6位的指令操作码
	MOVLW	06H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA
	CALL	STOP_93C46
	RETLW	0
;******************************************************************
;名称:WDS_93C46(EWDS指令)
;功能:93C46写禁止
;******************************************************************
WDS_93C46:
	CALL	START_93C46
	MOVLW	04H
	MOVWF	DATSEND_93C46		;发送开始位和写禁止操作码,共3位
	MOVLW	03H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA			;调用发送子程序
	CLRF	DATSEND_93C46		;发送6位的指令操作码
	MOVLW	06H
	MOVWF	BIT_SEND_93C46
	CALL	SEND_DATA
	CALL	STOP_93C46
	RETLW    0
	END

⌨️ 快捷键说明

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