📄 main.s
字号:
.module main.c
.area text
.dbfile main.c
.dbfunc e main _main fV
; JB8_RSTState -> 0,X
; UIDLen -> 1,X
; CardB_OK -> 2,X
; CardA_OK -> 3,X
; UID -> 4,X
; i -> 15,X
_main::
.dbline -1
ais #-16
tsx
.dbline 18
; //------------------------------------------------------------------------*
; //工 程 名:JB8_IO_SPI.prj *
; //硬件连接:读写模块为标准DIP40封装 *
; //说 明: *
; // (1)运行指示灯长闪烁3次表示初始化成功 *
; // (2)运行指示灯短闪烁1次表示读卡成功 *
; // (3)UID信息存储在内存中的Card_inform[]数组中,首字节表示电子标签类型*
; // (4)外部控制系统通过SPI接口与读写模块通信,每次交互1个字节。读写模 *
; // 块作为SPI从机,响应SPI主机的从机选择信号,根据前一次接收的数据, *
; // 发送相应的读写模块获取的电子标签UID信息(详见键盘中断处理函数) *
; //------------------------------------------------------------------------*
;
; //总头文件
; #include "Includes.h"
;
; //主函数
; void main()
; {
.dbline 25
; INT8U JB8_RSTState; //JB8复位状态标志位 0-成功 ,1-失败
; INT8U CardA_OK,CardB_OK;
; INT8U i;
; INT8U UIDLen;
; INT8U UID[11];
;
; JB8_RSTState = 0;
clr ,X
.dbline 28
;
; //初始化
; DisableMCUint(); //禁止总中断
SEI
.dbline 29
; MCUinit(); //芯片初始化
jsr _MCUinit
.dbline 30
; LEDinit(); //运行指示灯初始化
jsr _LEDinit
.dbline 31
; SPI0Init(); //SPI0初始化(与NE64通信)模拟从机
jsr _SPI0Init
.dbline 32
; Card_inform[0] = 'A';//UID数据数组,Card_inform[0]:“A”-A卡,“B”-B卡
lda #65
sta *_Card_inform
.dbline 33
; EnableKBint(); //开放键盘中断,响应从机选择
bclr #1,0x16
.dbline 34
; EnableMCUint(); //开总中断
CLI
.dbline 35
; LED_Spark(3, 'L'); //运行指示灯长闪烁3次,表明初始化成功
lda #76
psha
lda #3
psha
jsr _LED_Spark
ais #2
tsx
jmp L3
L2:
.dbline 39
;
; //总循环
; while (1)
; {
.dbline 41
; //复位及初始化RC531
; JB8_RSTState = RFReset();
jsr _RFReset
tsx
sta *__r1
sta ,X
.dbline 44
;
; //ISO14443A 处理部分
; RC531_14443ABInit(1); //按ISO14443A标准设置相关寄存器
lda #1
psha
jsr _RC531_14443ABInit
ais #1
tsx
.dbline 45
; CardA_OK = ReadTag(1, &UIDLen, UID); //读TypeA卡
aix #4
pshx
pshh
tsx
aix #3
pshx
pshh
lda #1
psha
jsr _ReadTag
ais #5
tsx
sta *__r1
sta 3,X
.dbline 46
; if(CardA_OK == 0)
bne L5
.dbline 47
; {
.dbline 49
; //获取A卡UID成功,并记录UID信息
; Card_inform[0] = 'A';
lda #65
sta *_Card_inform
.dbline 50
; for(i = 0; i < 5; i++)
clr 15,X
bra L10
L7:
.dbline 51
aix #4
sthx *__r0
tsx
clr *__r2
lda 15,X
add *__r1
sta *__r1
lda *__r2
adc *__r0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
clr *__r2
lda 15,X
add #<_Card_inform+1
sta *__r3
lda *__r2
adc #>_Card_inform+1
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
L8:
.dbline 50
inc 15,X
L10:
.dbline 50
lda 15,X
cmp #5
blo L7
.dbline 52
; Card_inform[i + 1] = UID[i];
; LED_Spark(1, 'S'); //运行指示灯短闪烁一次,表明读卡成功
lda #83
psha
lda #1
psha
jsr _LED_Spark
ais #2
tsx
.dbline 53
; }
L5:
.dbline 56
;
; //ISO14443B 处理部分
; RC531_14443ABInit(0); //按ISO14443B标准设置相关寄存器
clra
psha
jsr _RC531_14443ABInit
ais #1
tsx
.dbline 57
; CardB_OK = ReadTag(0, &UIDLen, UID); //读TypeB卡
aix #4
pshx
pshh
tsx
aix #3
pshx
pshh
clra
psha
jsr _ReadTag
ais #5
tsx
sta *__r1
sta 2,X
.dbline 58
; if(CardB_OK == 0)
bne L12
.dbline 59
; {
.dbline 61
; //获取B卡卡号成功,并记录UID信息
; Card_inform[0] = 'B';
lda #66
sta *_Card_inform
.dbline 62
; for(i = 0; i < 10; i++)
clr 15,X
bra L17
L14:
.dbline 63
aix #4
sthx *__r0
tsx
clr *__r2
lda 15,X
add *__r1
sta *__r1
lda *__r2
adc *__r0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
clr *__r2
lda 15,X
add #<_Card_inform+1
sta *__r3
lda *__r2
adc #>_Card_inform+1
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
L15:
.dbline 62
inc 15,X
L17:
.dbline 62
lda 15,X
cmp #10
blo L14
.dbline 64
; Card_inform[i + 1] = UID[i];
; LED_Spark(1, 'S'); //运行指示灯短闪烁一次,表明读卡成功
lda #83
psha
lda #1
psha
jsr _LED_Spark
ais #2
tsx
.dbline 65
; }
L12:
.dbline 66
L3:
.dbline 38
jmp L2
X0:
.dbline -2
L1:
ais #16
.dbline 0 ; func end
rts
.dbsym l JB8_RSTState 0 c
.dbsym l UIDLen 1 c
.dbsym l CardB_OK 2 c
.dbsym l CardA_OK 3 c
.dbsym l UID 4 A[11:11]c
.dbsym l i 15 c
.dbend
.area bss
.dbfile main.c
_Card_inform::
.blkb 11
.dbfile D:\项目\RC531读写模块\03软件设计\0508\JB8\JB8_NE64_RC531/Includes.h
.dbsym e Card_inform _Card_inform A[11:11]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -