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

📄 jb8_io~1.lst

📁 使用RC531读卡芯片读取二代身份证的模块软件设计部分
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    DC00 45 0140      ldHX	#0x0140
    DC03 94           tXS	
    DC04 CD E5F0      jsr	__HC08Setup
    DC07 45 004E      ldHX	#0x004E
    DC0A 65 005C      cpHX	#0x005C
    DC0D 27 06        beq	0xDC15
    DC0F 6F 00        clr	0,X
    DC11 AF 01        aiX	#1
    DC13 20 F5        bra	0xDC0A
    DC15 45 004F      ldHX	#0x004F
    DC18 94           tXS	
    DC19 45 DC00      ldHX	#0xDC00
    DC1C 65 DC00      cpHX	#0xDC00
    DC1F 27 0B        beq	0xDC2C
    DC21 E6 00        ldA	0,X
    DC23 9EE7 00      stA	0,S
    DC26 AF 01        aiX	#1
    DC28 A7 01        aiS	#1
    DC2A 20 F0        bra	0xDC1C
    DC2C 45 0140      ldHX	#0x0140
    DC2F 94           tXS	
    DC30 CD DC35      jsr	_main
_exit:
    DC33 20 FE        bra	0xDC33
_main:
  JB8_RSTState         --> X+0
  UIDLen               --> X+1
  CardB_OK             --> X+2
  CardA_OK             --> X+3
  UID                  --> X+4
  i                    --> X+15
    DC35 A7 F0        aiS	#-16
    DC37 95           tSX	
FILE: main.c
(0001) //------------------------------------------------------------------------*
(0002) //工 程 名:JB8_IO_SPI.prj                                                 *
(0003) //硬件连接:读写模块为标准DIP40封装                                        *
(0004) //说    明:                                                               *
(0005) //      (1)运行指示灯长闪烁3次表示初始化成功                              *
(0006) //      (2)运行指示灯短闪烁1次表示读卡成功                                *
(0007) //      (3)UID信息存储在内存中的Card_inform[]数组中,首字节表示电子标签类型*
(0008) //      (4)外部控制系统通过SPI接口与读写模块通信,每次交互1个字节。读写模  *
(0009) //         块作为SPI从机,响应SPI主机的从机选择信号,根据前一次接收的数据, *
(0010) //         发送相应的读写模块获取的电子标签UID信息(详见键盘中断处理函数)  *
(0011) //------------------------------------------------------------------------*
(0012) 
(0013) //总头文件
(0014) #include "Includes.h"
(0015) 
(0016) //主函数
(0017) void main()
(0018) {
    DC38 7F           clr	0,X
(0019)     INT8U JB8_RSTState;         //JB8复位状态标志位 0-成功 ,1-失败
(0020)     INT8U CardA_OK,CardB_OK;
(0021)     INT8U i;
(0022)     INT8U UIDLen;
(0023)     INT8U UID[11];
(0024)     
(0025)     JB8_RSTState = 0;
(0026)     
(0027)     //初始化
(0028)     DisableMCUint();     //禁止总中断    
    DC39 9B           seI	
(0029)     MCUinit();           //芯片初始化
    DC3A CD DEA4      jsr	_MCUinit
(0030)     LEDinit();           //运行指示灯初始化
    DC3D CD DE31      jsr	_LEDinit
(0031)     SPI0Init();          //SPI0初始化(与NE64通信)模拟从机    
    DC40 CD DEAB      jsr	_SPI0Init
(0032)     Card_inform[0] = 'A';//UID数据数组,Card_inform[0]:“A”-A卡,“B”-B卡 
    DC43 A6 41        ldA	#65
    DC45 B7 4E        stA	*_Card_inform
(0033)     EnableKBint();       //开放键盘中断,响应从机选择   
    DC47 13 16        Bclr	1,0x16
(0034)     EnableMCUint();      //开总中断
    DC49 9A           clI	
(0035)     LED_Spark(3, 'L');   //运行指示灯长闪烁3次,表明初始化成功
    DC4A A6 4C        ldA	#76
    DC4C 87           pshA	
    DC4D A6 03        ldA	#3
    DC4F 87           pshA	
    DC50 CD DE4A      jsr	_LED_Spark
    DC53 A7 02        aiS	#2
    DC55 95           tSX	
    DC56 CC DD32      jmp	0xDD32
(0036)     
(0037)     //总循环
(0038)     while (1)
(0039)     {
    DC59 CD E107      jsr	_RFReset
    DC5C 95           tSX	
    DC5D B7 41        stA	*__r1
    DC5F F7           stA	0,X
(0040)         //复位及初始化RC531
(0041)         JB8_RSTState = RFReset();    
(0042) 		
(0043)         //ISO14443A 处理部分
(0044) 		RC531_14443ABInit(1);                //按ISO14443A标准设置相关寄存器	 
    DC60 A6 01        ldA	#1
    DC62 87           pshA	
    DC63 CD E179      jsr	_RC531_14443ABInit
    DC66 A7 01        aiS	#1
    DC68 95           tSX	
(0045) 		CardA_OK = ReadTag(1, &UIDLen, UID); //读TypeA卡
    DC69 AF 04        aiX	#4
    DC6B 89           pshX	
    DC6C 8B           pshH	
    DC6D 95           tSX	
    DC6E AF 03        aiX	#3
    DC70 89           pshX	
    DC71 8B           pshH	
    DC72 A6 01        ldA	#1
    DC74 87           pshA	
    DC75 CD E2CE      jsr	_ReadTag
    DC78 A7 05        aiS	#5
    DC7A 95           tSX	
    DC7B B7 41        stA	*__r1
    DC7D E7 03        stA	3,X
(0046) 		if(CardA_OK == 0)
    DC7F 26 49        bne	0xDCCA
(0047) 		{
    DC81 A6 41        ldA	#65
    DC83 B7 4E        stA	*_Card_inform
(0048) 		    //获取A卡UID成功,并记录UID信息
(0049) 		    Card_inform[0] = 'A';
(0050) 		    for(i = 0; i < 5; i++)
    DC85 6F 0F        clr	15,X
    DC87 20 2F        bra	0xDCB8
(0051) 		        Card_inform[i + 1] = UID[i];
    DC89 AF 04        aiX	#4
    DC8B 35 40        stHX	*__r0
    DC8D 95           tSX	
    DC8E 3F 42        clr	*__r2
    DC90 E6 0F        ldA	15,X
    DC92 BB 41        add	*__r1
    DC94 B7 41        stA	*__r1
    DC96 B6 42        ldA	*__r2
    DC98 B9 40        adc	*__r0
    DC9A B7 40        stA	*__r0
    DC9C 55 40        ldHX	*__r0
    DC9E F6           ldA	0,X
    DC9F 95           tSX	
    DCA0 B7 41        stA	*__r1
    DCA2 3F 42        clr	*__r2
    DCA4 E6 0F        ldA	15,X
    DCA6 AB 4F        add	#79
    DCA8 B7 43        stA	*__r3
    DCAA B6 42        ldA	*__r2
    DCAC A9 00        adc	#0
    DCAE B7 42        stA	*__r2
    DCB0 B6 41        ldA	*__r1
    DCB2 55 42        ldHX	*__r2
    DCB4 F7           stA	0,X
    DCB5 95           tSX	
    DCB6 6C 0F        inc	15,X
    DCB8 E6 0F        ldA	15,X
    DCBA A1 05        cmp	#5
    DCBC 25 CB        bcs	0xDC89
(0052)             LED_Spark(1, 'S');               //运行指示灯短闪烁一次,表明读卡成功
    DCBE A6 53        ldA	#83
    DCC0 87           pshA	
    DCC1 A6 01        ldA	#1
    DCC3 87           pshA	
    DCC4 CD DE4A      jsr	_LED_Spark
    DCC7 A7 02        aiS	#2
    DCC9 95           tSX	
(0053) 		}
    DCCA 4F           clrA	
    DCCB 87           pshA	
    DCCC CD E179      jsr	_RC531_14443ABInit
    DCCF A7 01        aiS	#1
    DCD1 95           tSX	
(0054) 		
(0055)         //ISO14443B 处理部分      
(0056) 		RC531_14443ABInit(0);                //按ISO14443B标准设置相关寄存器	 
(0057) 		CardB_OK = ReadTag(0, &UIDLen, UID); //读TypeB卡				
    DCD2 AF 04        aiX	#4
    DCD4 89           pshX	
    DCD5 8B           pshH	
    DCD6 95           tSX	
    DCD7 AF 03        aiX	#3
    DCD9 89           pshX	
    DCDA 8B           pshH	
    DCDB 4F           clrA	
    DCDC 87           pshA	
    DCDD CD E2CE      jsr	_ReadTag
    DCE0 A7 05        aiS	#5
    DCE2 95           tSX	
    DCE3 B7 41        stA	*__r1
    DCE5 E7 02        stA	2,X
(0058) 		if(CardB_OK == 0)
    DCE7 26 49        bne	0xDD32
(0059) 		{
    DCE9 A6 42        ldA	#66
    DCEB B7 4E        stA	*_Card_inform
(0060) 		    //获取B卡卡号成功,并记录UID信息
(0061) 		    Card_inform[0] = 'B';
(0062) 		    for(i = 0; i < 10; i++)
    DCED 6F 0F        clr	15,X
    DCEF 20 2F        bra	0xDD20
(0063) 		        Card_inform[i + 1] = UID[i];
    DCF1 AF 04        aiX	#4
    DCF3 35 40        stHX	*__r0
    DCF5 95           tSX	
    DCF6 3F 42        clr	*__r2
    DCF8 E6 0F        ldA	15,X
    DCFA BB 41        add	*__r1
    DCFC B7 41        stA	*__r1
    DCFE B6 42        ldA	*__r2
    DD00 B9 40        adc	*__r0
    DD02 B7 40        stA	*__r0
    DD04 55 40        ldHX	*__r0
    DD06 F6           ldA	0,X
    DD07 95           tSX	
    DD08 B7 41        stA	*__r1
    DD0A 3F 42        clr	*__r2
    DD0C E6 0F        ldA	15,X
    DD0E AB 4F        add	#79
    DD10 B7 43        stA	*__r3
    DD12 B6 42        ldA	*__r2
    DD14 A9 00        adc	#0
    DD16 B7 42        stA	*__r2
    DD18 B6 41        ldA	*__r1
    DD1A 55 42        ldHX	*__r2
    DD1C F7           stA	0,X
    DD1D 95           tSX	
    DD1E 6C 0F        inc	15,X
    DD20 E6 0F        ldA	15,X
    DD22 A1 0A        cmp	#10
    DD24 25 CB        bcs	0xDCF1
(0064)             LED_Spark(1, 'S');               //运行指示灯短闪烁一次,表明读卡成功
    DD26 A6 53        ldA	#83
    DD28 87           pshA	
    DD29 A6 01        ldA	#1
    DD2B 87           pshA	
    DD2C CD DE4A      jsr	_LED_Spark
    DD2F A7 02        aiS	#2
    DD31 95           tSX	
(0065) 		}					
    DD32 CC DC59      jmp	0xDC59
    DD35 A7 10        aiS	#16
    DD37 81           rts	
_isrKeyBoard:
    DD38 8B           pshH	
    DD39 B6 40        ldA	*__r0
    DD3B 87           pshA	
    DD3C B6 41        ldA	*__r1
    DD3E 87           pshA	
    DD3F B6 42        ldA	*__r2
    DD41 87           pshA	
    DD42 B6 43        ldA	*__r3
    DD44 87           pshA	
    DD45 B6 44        ldA	*__r4
    DD47 87           pshA	
    DD48 B6 45        ldA	*__r5
    DD4A 87           pshA	
    DD4B B6 46        ldA	*__r6
    DD4D 87           pshA	
    DD4E B6 47        ldA	*__r7
    DD50 87           pshA	
    DD51 B6 48        ldA	*__r8
    DD53 87           pshA	
    DD54 B6 49        ldA	*__r9
    DD56 87           pshA	
    DD57 B6 4A        ldA	*__r10
    DD59 87           pshA	
    DD5A B6 4B        ldA	*__r11
    DD5C 87           pshA	
    DD5D B6 4C        ldA	*__rhi
    DD5F 87           pshA	
    DD60 B6 4D        ldA	*__rlo
    DD62 87           pshA	
FILE: vectors08.c
(0001) //[vectors08.c]用于定义中断矢量表------------------------------------------*
(0002) //本文件包含:                                                              *
(0003) //    (1)isrKeyBoard   : 键盘中断处理函数(SPI从机选择)                     *
(0004) //    (2)isrDummy      : 未定义的中断处理函数                              *
(0005) //    (3)中断矢量表                                                        *
(0006) //-------------------------------------------------------------------------*
(0007) //[头文件]
(0008) #include "JB8C.H"        //JB8映像寄存器名定义
(0009) #include "SPI.h"         //SPI函数头文件
(0010) #include "Type.h"        //类型别名定义
(0011) #include "EnDisInt.h"    //开放或禁止MCU各模块中断的宏定义
(0012) #include "LED.h"         //该头文件中包含了LED驱动函数声明
(0013) 
(0014) //变量
(0015) INT8U i;
(0016) INT8U SPI0redata ;       //SPI0模块当前接收数据    
(0017) INT8U SPI0snddata;       //SPI0模块当前发送数据
(0018) //外部变量
(0019) extern   INT8U Card_inform[11];    //存储电子标签UID信息
(0020)  
(0021) //isrKeyBoard:键盘中断处理函数---------------------------------------------*
(0022) //功能:响应SPI主机的从机选择信号,根据前一次接收的数据,发送相应的读写模块 *
(0023) //     获取的电子标签UID信息                                               *
(0024) //调用函数:                                                                *
(0025) //    (1)DisableMCUint : 关总中断                                          *
(0026) //    (2)DisableKBint  : 屏蔽键盘中断                                      *
(0027) //    (3)SPI0SLAVECOM  : SPI0从机通信子函数                                *
(0028) //    (4)EnableKBint   : 开放键盘中断                                      *
(0029) //    (5)EnableMCUint  : 开总中断                                          *
(0030) //-------------------------------------------------------------------------*
(0031) #pragma interrupt_handler isrKeyBoard
(0032) void isrKeyBoard(void)  
(0033) {
    DD63 9B           seI	
(0034)     //static INT8U SPI0redata ;    //SPI0模块当前接收数据    
(0035)     //static INT8U SPI0snddata;    //SPI0模块当前发送数据
(0036)     
(0037)     
(0038)     DisableMCUint();    //关总中断
(0039)     DisableKBint() ;    //屏蔽键盘中断
    DD64 12 16        Bset	1,0x16
(0040) 
(0041)     //调用SPI0从机通信函数
(0042)     //接收的数据为下次要发送的Card_inform数组下标值
(0043)     SPI0redata = SPI0SLAVECOM(SPI0snddata);
    DD66 B6 59        ldA	*_SPI0snddata
    DD68 87           pshA	
    DD69 CD DEBA      jsr	_SPI0SLAVECOM
    DD6C A7 01        aiS	#1
    DD6E 95           tSX	
    DD6F B7 5A        stA	*_SPI0redata
(0044)     if((SPI0redata >= 0) && (SPI0redata < 11))
    DD71 B6 5A        ldA	*_SPI0redata
    DD73 A1 00        cmp	#0
    DD75 25 1C        bcs	0xDD93
    DD77 B6 5A        ldA	*_SPI0redata
    DD79 A1 0B        cmp	#11

⌨️ 快捷键说明

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