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

📄 ic01.asm

📁 基于51单片机的IC卡读写程序 包括寻卡
💻 ASM
字号:
        RC500RST    BIT   P3.1
;第0页,命令和状态
       	PAGE_REG		EQU	00H
       	Command			EQU	01H	;开始(停止)命令的执行
       	FIFOData		EQU	02H	;64字节FIFO的输入输出
       	PrimaryStatus	EQU	03H	;接收器/传送器/FIFO的状态标志
       	FIFOLength		EQU	04H	;FIFO中存储数据的字节数
       	SecondaryStatus	EQU	05H	;不同的状态标志
       	InterruptEn		EQU	06H	;使能请求中断传送的控制位
        InterruptRq		EQU	07H	;中断请求标志
        ;第1页,控制和状态
        Control			EQU	09H	;不同的控制标志,例如:定时、功耗等
       	ErrorFlag		EQU	0AH	;显示最后一次执行的命令的错误状态的标志
       	CollPos			EQU	0BH	;在RF接口检测到的第一个冲突位的位置
       	TimerValue		EQU	0CH	;定时器的实际值
       	CRCResultLSB	EQU	0DH	;CRC协处理器寄存器的最低有效字节
       	CRCResultMSB	EQU	0EH	;CRC协处理器寄存器的最高有效字节
        BitFraming		EQU	0FH	;调整位定向帧
        ;第2页,传送器和编码控制
        TxControl		EQU	11H	;控制天线驱动引脚Tx1、Tx2的逻辑行为
       	CWConductance	EQU	12H	;选择天线驱动引脚Tx1、Tx2的电导
       	PreSet13		EQU	13H	;这些值不可以改变
       	PreSet14		EQU	14H	;这些值不可以改变
       	ModWidth		EQU	15H	;选择调制脉冲的宽度
       	PreSet16		EQU	16H	;这些值不可以改变
        PreSet17		EQU	17H	;这些值不可以改变
        ;第3页,接收器及解码控制
        RxControl1		EQU	19H	;控制接收器行为
       	DecoderControl	EQU	1AH	;控制解码器行为
       	BitPhase		EQU	1BH	;选择接收器和传送器时钟间的位相
       	RxThreshold		EQU	1CH	;选择位解码器的阈值
       	PreSet1D		EQU	1DH	;这些值不可以改变
       	RxControl2		EQU 1EH	;控制解码器行为并定义接收器的输入源
        ClockQControl	EQU	1FH	;控制时钟产生
        ;第4页,射频时间和通道冗余
        RxWait			EQU	21H	;选择在传送之后,接收器工作之前的时间间隔
       	ChannelRedundancy	EQU	22H	;选择验证RF通道数据完整性得类型和模式
       	CRCPresetLSB	EQU	23H	;CRC寄存器预置值的最低有效字节
       	CRCPresetMSB	EQU	24H	;CRC寄存器预置值的最高有效字节
       	PreSet25		EQU	25H	;这些值不可以改变
       	MFOUTSelect		EQU	26H	;选择应用到MFOUT引脚的内部信号
        PreSet27		EQU	27H	;这些值不可以改变
        ;第5页,FIFO、定时器及中断引脚配置
        FIFOLevel		EQU	29H	;定义FIFO的大小,是
       	TimerClock		EQU	2AH	;选择时钟的分频
       	TimerControl	EQU	2BH	;选择定时器的开始和结束条件
       	TimerReload		EQU	2CH	;定义定时器的预置值
       	IRQPinConfig	EQU	2DH	;配置引脚IRQ的输出状态
       	PreSet2E		EQU	2EH	;这些值不可以改变
        PreSet2F		EQU	2FH	;这些值不可以改变
        ;第6页,预留
        CryptoSelect	EQU	31H	;论证模式选择,可选择飞利蒲标准和上海标准
       	REG62	EQU	32H	;预留未来使用
       	REG63	EQU	33H	;预留未来使用
       	REG64	EQU	34H	;预留未来使用
       	REG65	EQU	35H	;预留未来使用
       	REG66	EQU	36H	;预留未来使用
        REG67	EQU	37H	;预留未来使用
        ;第7页,测试控制
        REG71	EQU	39H	;预留未来使用
       	REG72	EQU	3AH	;预留未来使用
       	REG73	EQU	3BH	;预留未来使用
       	REG74	EQU	3CH	;预留未来使用
       	REG75	EQU	3DH	;预留未来使用
       	REG76	EQU	3EH	;预留未来使用
        REG77	EQU	3FH	;预留未来使用

ORG 0000H
START:MOV P1,#0FFH

START1:
      LCALL PCD_RST                         ;复位PCD
 
      MOV    R7,#00H
      LCALL    READ_REG
      MOV   R7,#00H
      MOV   R6,#80H
      LCALL  WRITE_REG   
      LCALL  READE2_PCD_SNR
      LCALL  DELAY_1MS

MOV   R7,#FIFOLength
      LCALL	READ_REG
	
      MOV		R0,#39H
      MOV		R7,#FIFOData

PCD_SNR:
      LCALL READ_REG
      MOV     @R0,A
      INC     R0
      CJNE    R0,#3DH,PCD_SNR

      LCALL   PCD_CONFIG



REQ:

      SETB   P1.0
      LCALL      REQ_STD
      
      LCALL DELAY_1MS

      MOV           R7,#ErrorFlag
      LCALL  READ_REG
      
      MOV           R7,FIFOLength
      LCALL  READ_REG 
      CJNE  A,#02H,REQ

      CLR  P1.0

;****************************SUB PROGRAM*********************************

;****************CLR_RAM 清30H到5FH单元***************
CLR_RAM:
		MOV		R0,#30H
CLR_RAM_1:
		MOV		@R0,#0FFH
		INC		R0
		CJNE	R0,#60H,CLR_RAM_1
		MOV		R0,#00H		
		RET


;*************start config***************		
PCD_CONFIG:		
		MOV		R7,#ClockQControl
		MOV		R6,#00H
		LCALL	WRITE_REG
		
		MOV		R6,#40H
		LCALL	WRITE_REG
		
		LCALL	DELAY_50us
		LCALL	DELAY_50us
		
		LCALL	CLRB_REG
		
		MOV		R7,#BitPhase
		MOV		R6,#0ADH
		LCALL	WRITE_REG
		
		MOV		R7,#RxThreshold
		MOV		R6,#0FFH
		LCALL	WRITE_REG
		
		MOV		R7,#RxControl2
		MOV		R6,#01H
		LCALL	WRITE_REG
		
		MOV		R7,#FIFOLevel
		MOV		R6,#04H
		LCALL	WRITE_REG
		
		MOV		R7,#TimerControl
		MOV		R6,#02H
		LCALL	WRITE_REG
		
		MOV		R7,#TimerClock
		MOV		R6,#07H
		LCALL	WRITE_REG
		
		MOV		R7,#TimerReload
		MOV		R6,#6AH
		LCALL	WRITE_REG
		
		MOV		R7,#IRqPinConfig
		MOV		R6,#03H
		LCALL	WRITE_REG
		
		MOV		R7,#TxControl
		LCALL	READ_REG
		NOP					;设断点,观察A,或R6
		MOV		R6,#03H
		LCALL	CLRB_REG
		
		LCALL	DELAY_1ms
		
		MOV		R6,#03H
		LCALL	SETB_REG
		LCALL	READ_REG
		NOP					;设断点,观察A,或R6
		RET

;***************end config*********************

;******************PCD_RST 读卡芯片复位***********************		
PCD_RST:
		CLR		RC500RST    
		mov		R5,#20		
delay_20ms:		
		lcall	DELAY_10ms
		DJNZ	R5,DELAY_20ms
		
		SETB	RC500RST
		lcall	delay_10ms
		lcall	delay_10ms
		lcall	delay_10ms
		CLR		RC500RST
				
WAIT_IDLE:
		LCALL	DELAY_10MS
		MOV		R7,#COMMAND
		LCALL	READ_REG
		CJNE	A,#00H,WAIT_IDLE
		NOP
		RET


;RC500RST BIT P3.1  P3.1口接开发板上的REST



;*******************READ_REG 读寄存器**********************
;R7保存寄存器序号,R6为读取的值

READ_REG:MOV	A,R7
		RR  A	;寄存器序号除以8即为页号
		RR	A
		RR	A
		ANL	A,#07H
		ORL	A,#80H
		MOV	DPTR,#PAGES	;选页
		MOVX	@DPTR,A
		
		MOV	A,R7
		ANL	A,#07H	;得到页内地址
		MOV	DPTR,#PAGES	;基地址
		ORL	DPL,A	;加上偏移地址
		
		MOVX	A,@DPTR	;读寄存器
		MOV		R6,A
		NOP
		
		RET	


;*************** READE2_PCD_SNR *****************
READE2_PCD_SNR:

		MOV		R7,#InterruptEn
		MOV		R6,#7FH                         ;chsin此控制字将关闭所有中断
		LCALL	WRITE_REG
		
		MOV		R7,#InterruptRq
		MOV		R6,#7FH
		LCALL	WRITE_REG			
		
		MOV		R7,#Command
		MOV		R6,#PCD_IDLE
		LCALL	WRITE_REG		
				
		MOV		R7,#Control			;清除内部FIFO缓冲区的读/写指针和FIFOOvfl标志
		MOV		R6,#01H
		LCALL	SETB_REG
		
		MOV		R7,#FIFOData
		MOV		R6,#08H
		LCALL	WRITE_REG
		MOV		R6,#00H
		LCALL	WRITE_REG
		MOV		R6,#04H
		LCALL	WRITE_REG
		
		MOV		R7,#InterruptEn		;necessary interrupts are enabled
		MOV		R6,#0A7H
		LCALL	WRITE_REG
		
		MOV		R7,#COMMAND
		MOV		R6,#03H				;
		LCALL	WRITE_REG		
		
		RET


;******************* REQ_STD ****************************	
REQ_STD:
		MOV		R7,#ChannelRedundancy
		MOV		R6,#03H
		LCALL	WRITE_REG
		
		MOV		R7,#Control
		MOV		R6,#08H
		LCALL	CLRB_REG
		
		MOV		R7,#BitFraming
		MOV		R6,#07H
		LCALL	WRITE_REG
		
		MOV		R7,#TxControl
		MOV		R6,#03H
		LCALL	SETB_REG
		
		MOV		R7,#TxControl
		LCALL	READ_REG
		
		MOV		R7,#Control			;清除内部FIFO缓冲区的读/写指针和FIFOOvfl标志
		MOV		R6,#01H
		LCALL	SETB_REG
		
		MOV		R7,#FIFOData
		MOV		R6,#26H
		LCALL	WRITE_REG
		
		MOV		R7,#InterruptEn		;necessary interrupts are enabled
		MOV		R6,#0BDH
		LCALL	WRITE_REG
		
		MOV		R7,#COMMAND
		MOV		R6,#1EH				;
		LCALL	WRITE_REG
		
		MOV		R7,#FIFOLength
		LCALL	READ_REG
		NOP
		
		RET	


;*******************WRITE_REG 写寄存器**********************
;R7保存寄存器序号,R6为操作值

WRITE_REG:MOV	A,R7
		RR  A	;寄存器序号除以8即为页号
		RR	A
		RR	A
		ANL	A,#07H
		ORL	A,#80H
		MOV	DPTR,#PAGES	;选页
		MOVX	@DPTR,A
		
		MOV	A,R7
		ANL	A,#07H	;得到页内地址
		MOV	DPTR,#PAGES	;基地址
		ORL	DPL,A	;加上偏移地址
		
		MOV	A,R6
		MOVX	@DPTR,A	;操作数送寄存器
		NOP
		
		RET

;******************* DELAY_1ms **************************		
DELAY_1ms: 	
		MOV 3FH,#10
DLY1_1ms:    
		MOV 3EH,#23
DLY2_1ms:    
		DJNZ 3EH,DLY2_1ms
		DJNZ 3FH,DLY1_1ms
		RET

;******************* DELAY_50us *************************
DELAY_50us: 	
		MOV 3FH,#11
		NOP
DLY_50us:    		
		DJNZ 3FH,DLY_50us
		RET

;********************CLRB_REG 清除寄存器位****************************	
;R7,保存寄存器序号,R6为操作值

CLRB_REG:
		MOV	A,R7
		RR  A	;寄存器序号除以8即为页号
		RR	A
		RR	A
		ANL	A,#07H
		ORL	A,#80H
		MOV	DPTR,#PAGES	;选页
		MOVX	@DPTR,A
		
		MOV	A,R7
		ANL	A,#07H	;得到页内地址
		MOV	DPTR,#PAGES	;基地址
		ORL	DPL,A	;加上偏移地址
		
		MOV		A,R6
		XRL		A,#0FFH
		MOV		R6,A
		MOVX	A,@DPTR
		ANL		A,R6
		
		MOVX	@DPTR,A	;操作数送寄存器
		NOP
		RET			

;********************SETB_REG 置位寄存器位****************************	
;R7,保存寄存器序号,R6为操作值

SETB_REG:
		MOV	A,R7
		RR  A	;寄存器序号除以8即为页号
		RR	A
		RR	A
		ANL	A,#07H
		ORL	A,#80H
		MOV	DPTR,#PAGES	;选页
		MOVX	@DPTR,A
		
		MOV	A,R7
		ANL	A,#07H	;得到页内地址
		MOV	DPTR,#PAGES	;基地址
		ORL	DPL,A	;加上偏移地址
		
		MOVX	A,@DPTR
		ORL		A,R6
		MOVX	@DPTR,A	;操作数送寄存器
		NOP
		RET
	
;******************* DELAY_10ms **************************		
DELAY_10ms: 	
		MOV 3FH,#10
DLY1_10ms:    
		MOV 3EH,#248
DLY2_10ms:    
		DJNZ 3EH,DLY2_10ms
		DJNZ 3FH,DLY1_10ms
		RET		
END

⌨️ 快捷键说明

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