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

📄 main.asm

📁 RFCard锁源程序
💻 ASM
字号:
	list p=18f252
	include	"p18f252.inc"
Command						udata				
ReadBlocks					res					0x05;{0xBA,0x04,0x33,0x0,0x10};                                     
Delay_Count1				res					0x01
Delay_Count2				res					0x01
Delay_Count3				res					0x01
Delay_Count4				res					0x01
Delay_Para1					res					0x01
Delay_Para2					res					0x01  
_WREG						res					0x01
_STATUS						res					0x01
_BSR						res					0x01 
SendLength					res					0x01
CheckData					res					0x01 
ReceiveNum					res					0x01 
ReceiveLen					res					0x01    
Flag   						res					0x01
CardSelect					res					0x01
ResetCard_RAM				res					0x01
SetCodeCard_RAM				res					0x01	
SetKeyCard_RAM				res					0x01		
KeyCard_RAM					res					0x01
Code_RAM					res					0x01
Key_RAM						res					0x01
EEPROM_Count				res					0x01
Key_Temp					res					0x01
WREEPROM_ADD				res					0x01
WREEPROM_DAT				res					0x01
UsefullData					res					0x04
ReceiveBuffer				res					0x10 
#define						Flag_OpenDoor		Flag,0
#define						Flag_FourSecond		Flag,1
#define						Flag_Alern			Flag,2
#define						Flag_TwentySecond	Flag,3
#define						Flag_ReceiveReady	Flag,4
#define						Flag_ReceiveOver	Flag,5
#define						Flag_TimeOut		Flag,6
#define						Flag_DeterLen		Flag,7
#define						ResetCard			CardSelect,0
#define						SetCodeCard			CardSelect,1
#define						SetKeyCard			CardSelect,2
#define						KeyCard				CardSelect,3
#define						IllegalCard			CardSelect,4
#define						IO_Door				PORTB,1
#define						IO_Buzzer			PORTB,2
#define						IO_Trip				PORTB,3
#define						Dir_Door			TRISB,1
#define						Dir_Buzzer			TRISB,2
#define						Dir_Trip			TRISB,3   
ResetCard_EE				equ					0x00
SetCodeCard_EE				equ					0x01	
SetKeyCard_EE				equ					0x02		
KeyCard_EE					equ					0x03
Code_EE						equ					0x04
Key_EE						equ					0x05
FirstRun					equ					0x06
	org		0x00
	goto	start
	org		0x08
	goto	INTServer
	org		0x30
;**************************************************************************
;中断服务程序,包括接收串行中断和外部中断服务程序
;**************************************************************************
INTServer
	bcf		INTCON,GIE
	push
	movwf	_WREG
	movff	STATUS,_STATUS
	movff	BSR,_BSR
;*************************************************************************
	btfsc	INTCON,INT0IF
	call	INTServer_SendCMD
	btfsc	PIR1,RCIF
	call	INTServer_Receive
;*************************************************************************	
	movff	_BSR,BSR
	movff	_STATUS,STATUS
	movf	_WREG,W	
	pop
	bsf		INTCON,GIE
	retfie
;**************************************************************************
start
;**************************************************************************
;指令初始化
;**************************************************************************
	lfsr	FSR0,ReadBlocks
	movlw	0xba
	movwf	POSTINC0
	movlw	0x04
	movwf	POSTINC0
	movlw	0x33
	movwf	POSTINC0
	movlw	0x00
	movwf	POSTINC0
	movlw	0x10
	movwf	POSTINC0
;****************************************************************************
	movlw	FirstRun
	movwf	EEADR
	bcf		EECON1,EEPGD
	bcf		EECON1,CFGS
	bsf		EECON1,RD
a
	btfsc	EECON1,RD
	goto	a
	movf	EEDATA,W
	xorlw	0xff
	btfss	STATUS,Z
	goto	runwei
	movlw	ResetCard_EE
	movwf	WREEPROM_ADD
	movlw	0x00
	movwf	WREEPROM_DAT
	call	WREEPROM
	movlw	SetCodeCard_EE
	movwf	WREEPROM_ADD
	movlw	0x01
	movwf	WREEPROM_DAT
	call	WREEPROM
	movlw	SetKeyCard_EE
	movwf	WREEPROM_ADD
	movlw	0x02
	movwf	WREEPROM_DAT
	call	WREEPROM
	movlw	FirstRun
	movwf	WREEPROM_ADD
	movlw	0x00
	movwf	WREEPROM_DAT
	call	WREEPROM
runwei
;****************************************************************************
;端口初始化
;****************************************************************************
	bsf		Dir_Door
	bcf		Dir_Buzzer
	bcf		Dir_Trip
	bcf		IO_Door
	bcf		IO_Buzzer
	bcf		IO_Trip
;****************************************************************************
;标志初始化
;****************************************************************************
	clrf	Flag
	clrf	CardSelect
;****************************************************************************
;串口初始化
;****************************************************************************
	movlw	0x19
	movwf	SPBRG
	movlw	0x04
	movwf	TXSTA
	movlw	0x80
	movwf	RCSTA
	movlw	0x80
	movwf	TRISC
	bsf		TXSTA,TXEN
	bcf		RCSTA,CREN
	bcf		PIE1,RCIE
	movlw	0xc0
	movwf	INTCON
	bsf		INTCON,INT0IE
	bcf		INTCON2,INTEDG0
;****************************************************************************
;主程序
;****************************************************************************
IsDoorOpen	
	btfss	IO_Door	
	goto	IsDoorOpen
	movlw	0x01;20ms
	movwf	Delay_Para1
	movlw	0x01
	movwf	Delay_Para2
	call	Delay
	btfss	IO_Door
	goto	IsDoorOpen
	btfss	Flag_OpenDoor
	goto	Alern
OpenDoor
	bcf		Flag_OpenDoor
Continue_OpenDoor
	bsf		IO_Buzzer
	movlw	0x01;100ms
	movwf	Delay_Para1
	movlw	0x05
	movwf	Delay_Para2
	call	Delay
	bcf		IO_Buzzer
	bsf		Flag_FourSecond
	movlw	0x01;4s延时
	movwf	Delay_Para1
	movlw	0x90
	movwf	Delay_Para2
	call	Delay
	bcf		Flag_FourSecond
	goto	Continue_OpenDoor
Alern
	movlw	0xc0
	movwf	INTCON
	bsf		INTCON,INT0IE
	bcf		INTCON2,INTEDG0
	bsf		Flag_Alern
	bsf		IO_Buzzer
	movlw	0x01;250ms
	movwf	Delay_Para1
	movlw	0x0c
	movwf	Delay_Para2
	call	Delay
	bcf		IO_Buzzer
Countinue_Alern
	bsf		IO_Trip
	movlw	0x01;20ms
	movwf	Delay_Para1
	movlw	0x01
	movwf	Delay_Para2
	call	Delay
	bcf		IO_Trip
	bsf		Flag_TwentySecond
	movlw	0x03;20s
	movwf	Delay_Para1
	movlw	0xf2
	movwf	Delay_Para2
	call	Delay
	bcf		Flag_TwentySecond
	goto	Countinue_Alern	
;****************************************************************************
;延时子程序
;两个入口参数,分别是Delay_Para1、Delay_Para2
;****************************************************************************
Delay
	movf	Delay_Para1,W	
	movwf	Delay_Count1
Delay1
	movf	Delay_Para2,W
	movwf	Delay_Count2
Delay2
	movlw	0x09
	movwf	Delay_Count3
Delay3
	movlw	0x00
	movwf	Delay_Count4
Delay4
;******************************************************
	btfss	Flag_FourSecond
	goto	Next1
	btfsc	IO_Door
	goto	Next1
	bcf		Flag_FourSecond
	movlw	0xc0
	movwf	INTCON
	bsf		INTCON,INT0IE
	bcf		INTCON2,INTEDG0
	goto	IsDoorOpen
Next1
	btfss	Flag_TwentySecond
	goto	Next2
	btfsc	Flag_Alern
	goto	Next2
	bcf		Flag_TwentySecond
	goto	OpenDoor
Next2
;	btfss	Flag_Twelve
;	goto	Next3
;	btfsc	IO_Door
;	goto	Next3
;	bcf		Flag_Twelve
;	goto	
;Next3
;*******************************************************
	decfsz	Delay_Count4
	goto	Delay4
	decfsz	Delay_Count3
	goto	Delay3
	decfsz	Delay_Count2
	goto	Delay2
	decfsz	Delay_Count1
	goto	Delay1
	return
;*******************************************************************************
;读卡中断服务子程序
;*******************************************************************************
INTServer_SendCMD
	bcf		INTCON,INT0IF
	bcf		PIE1,RCIE
	lfsr	FSR0,ReadBlocks
	incf	FSR0L
	movf	POSTDEC0,W
	movwf	SendLength
	incf	SendLength,F
	clrf	CheckData
OneByte
	movf	POSTINC0,W
	xorwf	CheckData,F
	movwf	TXREG
	nop
IsAllBitsOver_OneByte
	btfss   PIR1,TXIF
    goto    IsAllBitsOver_OneByte
	decfsz	SendLength
	goto	OneByte
	movf	CheckData,W
	movwf	TXREG
	nop
IsAllBitsOver_CheckDataByte
	btfss   PIR1,TXIF
    goto    IsAllBitsOver_CheckDataByte
	bcf		INTCON,INT0IE
	bsf		Flag_ReceiveReady
	bcf		Flag_ReceiveOver
	bsf		RCSTA,CREN
	bsf		PIE1,RCIE
	bsf		INTCON,GIE
	lfsr	FSR0,ReceiveBuffer
WaitReceiveOver
	btfsc	Flag_ReceiveOver
	goto	VerifyData
	btfsc	Flag_TimeOut
	goto	VerifyData
	goto	WaitReceiveOver
VerifyData
	bsf		IO_Buzzer
	movlw	0x01;100ms
	movwf	Delay_Para1
	movlw	0x05
	movwf	Delay_Para2
	call	Delay
	bcf		IO_Buzzer
	bcf		INTCON,GIE
	bcf		PIE1,RCIE

	lfsr	FSR0,ReceiveBuffer	
	incf	FSR0L,F
	incf	FSR0L,F
	movf	POSTINC0,W
	xorlw	0x33
	btfss	STATUS,Z
	goto	DataError
	movf	POSTINC0,W
	xorlw	0x00
	btfss	STATUS,Z
	goto	DataError
	btfsc	Flag_TimeOut
	goto	DataError
ExtractUsefullData
	lfsr	FSR1,UsefullData
	movf	POSTINC0,W
	movwf	POSTINC1
	movf	POSTINC0,W
	movwf	POSTINC1
	movf	POSTINC0,W
	movwf	POSTINC1
	movf	POSTINC0,W
	movwf	POSTINC1
DetermineCard
	movlw	0x06
	movwf	EEPROM_Count
	movlw	ResetCard_EE
	movwf	EEADR
	lfsr	FSR0,ResetCard_RAM
	bcf		EECON1,EEPGD
	bcf		EECON1,CFGS
Continue_EEPROM		
	bsf		EECON1,RD
	movf	EEDATA,W
	movwf	POSTINC0
	incf	EEADR,F
	decfsz	EEPROM_Count
	goto	Continue_EEPROM
	movf	UsefullData,W

	
	cpfseq	ResetCard_RAM
	goto	a1
	goto	TheCardIsResetCard
a1
	cpfseq	SetCodeCard_RAM
	goto	b1
	goto	TheCardIsSetCodeCard
b1
	cpfseq	SetKeyCard_RAM
	goto	c1
	goto	TheCardIsSetKeyCard
c1
	cpfseq	KeyCard_RAM
	goto	d1
	goto	TheCardIsKeyCard
d1
	bsf		IllegalCard
	goto	Action
TheCardIsResetCard
	bsf		ResetCard
	goto	Action
TheCardIsSetCodeCard
	bsf		SetCodeCard
	goto	Action
TheCardIsSetKeyCard
	bsf		SetKeyCard
	goto	Action
TheCardIsKeyCard
	bsf		KeyCard
	goto	Action
Action
	btfsc	IllegalCard	
	goto	DataError
	btfsc	ResetCard
	goto	Action_ResetCard
	btfsc	SetCodeCard
	goto	Action_SetCodeCard
	btfsc	SetKeyCard
	goto	Action_SetKeyCard
	btfsc	KeyCard
	goto	Action_KeyCard
Action_ResetCard
	lfsr	FSR0,UsefullData
	incf	FSR0L,F
	movf	POSTINC0,W
	movwf	WREEPROM_DAT
	movlw	Code_EE
	movwf	WREEPROM_ADD
	call	WREEPROM
	movf	POSTINC0,W
	movwf	WREEPROM_DAT
	movlw	KeyCard_EE
	movwf	WREEPROM_ADD
	call	WREEPROM
	return
Action_SetCodeCard
	lfsr	FSR0,UsefullData
	incf	FSR0L,F
	movf	POSTINC0,W
	bcf		STATUS,Z
	xorwf	Code_RAM
	btfss	STATUS,Z
	return
	movf	POSTINC0,W
	movwf	WREEPROM_DAT
	movlw	Code_EE
	movwf	WREEPROM_ADD
	call	WREEPROM
	return
Action_SetKeyCard
	lfsr	FSR0,UsefullData
	incf	FSR0L,F
	movf	POSTINC0,W
	bcf		STATUS,Z
	xorwf	Code_RAM
	btfss	STATUS,Z
	return
	movf	POSTINC0,W
	movwf	WREEPROM_DAT
	movlw	KeyCard_EE
	movwf	WREEPROM_ADD
	call	WREEPROM
	return
Action_KeyCard
	lfsr	FSR0,UsefullData
	incf	FSR0L,F
	movf	POSTINC0,W
	bcf		STATUS,Z
	xorwf	Code_RAM
	btfss	STATUS,Z
	return
	btfss	Flag_Alern
	goto	wangrunwei
	bcf		Flag_Alern
	clrf	INTCON
	return
wangrunwei
	bsf		Flag_OpenDoor
;	bsf		Flag_Twelve
;	movlw	0x10
;	movwf	Delay_Para1
;	movlw	0x10
;	movwf	Delay_Para2
;	call	Delay
;	bcf		Flag_Twelve
;	goto	wangrunwei

	
	clrf	INTCON
	return
DataError
	nop
	nop
	return
;*******************************************************************************
;接收中断服务子程序
;*******************************************************************************
INTServer_Receive
	bcf		PIR1,RCIF
	movf	RCREG,W
	btfss	Flag_ReceiveReady
	goto	ReceiveOtherBytes
ReceiveFirstByte
	xorlw	0xbd
	btfss	STATUS,Z
	goto	FirstByteIsNotBD
FirstByteIsBD
	bcf		Flag_ReceiveReady
    bcf		Flag_ReceiveOver
    clrf	ReceiveNum
	movlw	0xbd
	movwf	POSTINC0
;	clrf	POSTINC0
	return
FirstByteIsNotBD
	incf	ReceiveNum,F
	return
ReceiveOtherBytes
	btfsc	Flag_DeterLen
	goto	ReceiveStart
	incf	ReceiveNum,F
	movwf	POSTINC0
	movwf	ReceiveLen
	bsf		Flag_DeterLen
	return
ReceiveStart
	movwf	POSTINC0
	movf	ReceiveNum,W
	incf	ReceiveNum,F
	cpfseq	ReceiveLen
	return
	bsf		Flag_ReceiveOver
	bcf		Flag_DeterLen
	return	
;*******************************************************************************
WREEPROM
	movf	WREEPROM_ADD,W
	movwf	EEADR
	movf	WREEPROM_DAT,W
	movwf	EEDATA
	bcf		EECON1,EEPGD
	bsf		EECON1,WREN
	bcf		INTCON,GIE
	movlw	0x55
	movwf	EECON2
	movlw	0xaa
	movwf	EECON2
	bsf		EECON1,WR
kk
	btfsc	EECON1,WR
	goto	kk
	bcf		EECON1,WREN
	bsf		INTCON,GIE
	return
;*******************************************************************************
	end

⌨️ 快捷键说明

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