📄 ic01.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 + -