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

📄 read_card.s

📁 环保型IC卡门禁系统的C程序
💻 S
字号:
	.module Read_Card.c
	.area data(ram, con, rel)
_IC_Codes_8::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.blkb 15
	.area idata
	.word 0,0,0,0,0
	.byte 0,0,0,0,0
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Read_Card.c
	.dbsym e IC_Codes_8 _IC_Codes_8 A[16:16]c
_Wrong_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Read_Card.c
	.dbsym e Wrong_flag _Wrong_flag c
	.area lit(rom, con, rel)
L2:
	.byte 0
	.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	.byte 0,0,0,0,0,0,0
	.area text(rom, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Read_Card.c
	.dbfunc e Read_Card _Read_Card fV
;     IC_Codes_2 -> y+0
;              i -> R20
;              k -> R22
;              j -> R10
	.even
_Read_Card::
	rcall push_gset3
	sbiw R28,63
	sbiw R28,63
	sbiw R28,2  ; offset = 128
	.dbline -1
	.dbline 14
; /*******************************************************************************
; 
;                              读卡、显示 函数
; 							 
; *******************************************************************************/
; 
; #include <iom8v.h>
; #include <macros.h>
; #include "lcd1602.h"
; 
; unsigned char IC_Codes_8[16]={0} , Wrong_flag = 0 ;
; 
; void Read_Card(void)
; {                              // 卡内 128 bit 数据  // 卡内 16 字节数据 
	.dbline 15
;   unsigned char i=0 , j=0 , k=0 , IC_Codes_2[128]={0} ;
	clr R20
	.dbline 15
	clr R10
	.dbline 15
	clr R22
	.dbline 15
	ldi R24,<L2
	ldi R25,>L2
	movw R30,R28
	ldi R16,128
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 17
;   
;   for(i=0;i<16;i++)
	rjmp L6
L3:
	.dbline 18
	.dbline 19
	ldi R24,<_IC_Codes_8
	ldi R25,>_IC_Codes_8
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 20
L4:
	.dbline 17
	inc R20
L6:
	.dbline 17
	cpi R20,16
	brlo L3
	.dbline 22
;   {
;     IC_Codes_8[i] = 0 ;
;   }
;   
;   Reset_0 ;          
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 23
;   CLK_0 ;               //  IC_Card 卡复位
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 24
;   delay_nms(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_nms
	.dbline 26
;   
;   Reset_1 ;                    // 要使地址计数器复位"0",先让Resct复位端由
	sbi 0x18,6
	.dbline 27
;   delay_nus(8) ;               // "0"变成"1",然后跟着一个Clock脉冲从"0"变
	ldi R16,8
	ldi R17,0
	rcall _delay_nus
	.dbline 28
;   CLK_1 ;                      // 成"1"再降回"0"电平,Resct复位端再至"0",
	sbi 0x18,7
	.dbline 29
;   delay_nus(44) ;              // 把Clock脉冲包住,随着Reset端变低,地址0单
	ldi R16,44
	ldi R17,0
	rcall _delay_nus
	.dbline 30
;   CLK_0 ;                      // 元的数据从I/O上输出。对应 Clock端的每个脉
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 31
;   delay_nus(8) ;               // 冲,其上升沿使地址计数器增加。其下降沿使被
	ldi R16,8
	ldi R17,0
	rcall _delay_nus
	.dbline 32
;   Reset_0 ;                    // 选通地址单元的数据从I/O上输出。地址计数器
	in R24,0x18
	andi R24,191
	out 0x18,R24
	.dbline 33
;   delay_nus(5) ;               // 增加到127后返回到0
	ldi R16,5
	ldi R17,0
	rcall _delay_nus
	.dbline 34
;   if ( (PINB&0x02)==0 )
	sbic 0x16,1
	rjmp L7
	.dbline 35
;   {
	.dbline 36
; 	IC_Codes_2[0] = 0 ;    //读取IC卡I/O口输出的是电平 (地址0上的数据)
	clr R2
	std y+0,R2
	.dbline 37
;   }
	rjmp L8
L7:
	.dbline 39
;   else                     
;   {                       //并把电平值记入数组IC_Card_2[128]中
	.dbline 40
; 	IC_Codes_2[0] = 1;     
	ldi R24,1
	std y+0,R24
	.dbline 41
;   }
L8:
	.dbline 42
;   delay_nus(27) ;
	ldi R16,27
	ldi R17,0
	rcall _delay_nus
	.dbline 44
;   
;   for (i=1;i<128;i++)
	ldi R20,1
	rjmp L12
L9:
	.dbline 45
;   {
	.dbline 46
; 	CLK_1 ;
	sbi 0x18,7
	.dbline 47
;     delay_nus(40) ;
	ldi R16,40
	ldi R17,0
	rcall _delay_nus
	.dbline 48
; 	CLK_0 ;
	in R24,0x18
	andi R24,127
	out 0x18,R24
	.dbline 49
; 	delay_nus(20) ;
	ldi R16,20
	ldi R17,0
	rcall _delay_nus
	.dbline 50
; 	if ( (PINB&0x02)==0 )      //读取IC卡I/O口输出的是电平 (地址1~127上的数据)
	sbic 0x16,1
	rjmp L13
	.dbline 51
; 	{
	.dbline 52
; 	  IC_Codes_2[i] = 0 ;
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 53
; 	}
	rjmp L14
L13:
	.dbline 55
; 	else 
; 	{                       //并把电平值记入数组IC_Card_2[128]中
	.dbline 56
; 	  IC_Codes_2[i] = 1;
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
	.dbline 57
; 	}
L14:
	.dbline 59
	ldi R16,20
	ldi R17,0
	rcall _delay_nus
	.dbline 60
L10:
	.dbline 44
	inc R20
L12:
	.dbline 44
	cpi R20,128
	brlo L9
	.dbline 62
; 	  
; 	delay_nus(20) ;
;   }
;   
;   for(i=0;i<16;i++)
	clr R20
	rjmp L18
L15:
	.dbline 63
;   {
	.dbline 64
;     for(j=0;j<8;j++)      // 把IC_Card_2[128]中的128位数据转换成
	clr R10
	rjmp L22
L19:
	.dbline 65
	.dbline 66
	ldi R24,<_IC_Codes_8
	ldi R25,>_IC_Codes_8
	mov R2,R20
	clr R3
	add R2,R24
	adc R3,R25
	ldi R17,8
	sub R17,R10
	movw R24,R28
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall lsl8
	movw R30,R2
	ldd R4,z+0
	or R4,R16
	std z+0,R4
	.dbline 67
	inc R22
	.dbline 68
L20:
	.dbline 64
	inc R10
L22:
	.dbline 64
	mov R24,R10
	cpi R24,8
	brlo L19
	.dbline 69
L16:
	.dbline 62
	inc R20
L18:
	.dbline 62
	cpi R20,16
	brlo L15
	.dbline 71
; 	{                     // 16个字节并存放在IC_Card_8[16]
;       IC_Codes_8[i] |= (IC_Codes_2[k]<<(8-j));
; 	  k++;
; 	}
;   }
;   
;   if ( IC_Codes_8[2] == 0 )
	lds R2,_IC_Codes_8+2
	tst R2
	brne L23
	.dbline 72
;   {
	.dbline 73
;   IC_Codes_8[2] = 68 ;
	ldi R24,68
	sts _IC_Codes_8+2,R24
	.dbline 74
;   }
L23:
	.dbline 76
;   
;   if ( IC_Codes_8[2] == 0xfe )
	lds R24,_IC_Codes_8+2
	cpi R24,254
	brne L27
	.dbline 77
;   {
	.dbline 78
; 	if ( IC_Codes_8[3] == 0xfe )
	lds R24,_IC_Codes_8+3
	cpi R24,254
	brne L30
	.dbline 79
; 	{
	.dbline 80
; 	  if ( IC_Codes_8[4] == 0xfe )
	lds R24,_IC_Codes_8+4
	cpi R24,254
	brne L33
	.dbline 81
;       {
	.dbline 82
; 		if ( IC_Codes_8[5] == 0xfe )
	lds R24,_IC_Codes_8+5
	cpi R24,254
	brne L36
	.dbline 83
; 		{
	.dbline 84
; 		  if ( IC_Codes_8[6] == 0xfe )
	lds R24,_IC_Codes_8+6
	cpi R24,254
	brne L39
	.dbline 85
; 	      {
	.dbline 86
; 			if ( IC_Codes_8[7] == 0xfe )
	lds R24,_IC_Codes_8+7
	cpi R24,254
	brne L42
	.dbline 87
; 			{
	.dbline 88
; 			  Wrong_flag = 1 ;
	ldi R24,1
	sts _Wrong_flag,R24
	.dbline 90
; 			  
; 			  Wrong_Card();
	rcall _Wrong_Card
	.dbline 91
; 			}
L42:
	.dbline 92
; 	      }
L39:
	.dbline 93
; 		}
L36:
	.dbline 94
; 	  }
L33:
	.dbline 95
; 	}
L30:
	.dbline 96
L27:
	.dbline -2
L1:
	adiw R28,63
	adiw R28,63
	adiw R28,2  ; offset = 128
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l IC_Codes_2 0 A[128:128]c
	.dbsym r i 20 c
	.dbsym r k 22 c
	.dbsym r j 10 c
	.dbend

⌨️ 快捷键说明

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