📄 read_card.lis
字号:
.module Read_Card.c
.area data(ram, con, rel)
0000 _IC_Codes_8::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .blkb 15
.area idata
0001 00000000000000000000 .word 0,0,0,0,0
000B 0000000000 .byte 0,0,0,0,0
.area data(ram, con, rel)
0010 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Read_Card.c
0010 .dbsym e IC_Codes_8 _IC_Codes_8 A[16:16]c
0010 _Wrong_flag::
0010 .blkb 1
.area idata
0010 00 .byte 0
.area data(ram, con, rel)
0011 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Read_Card.c
0011 .dbsym e Wrong_flag _Wrong_flag c
.area lit(rom, con, rel)
0000 L2:
0000 00 .byte 0
0001 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .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
003D 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .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
0079 00000000000000 .byte 0,0,0,0,0,0,0
.area text(rom, con, rel)
0000 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Read_Card.c
0000 .dbfunc e Read_Card _Read_Card fV
0000 ; IC_Codes_2 -> y+0
0000 ; i -> R20
0000 ; k -> R22
0000 ; j -> R10
.even
0000 _Read_Card::
0000 00D0 rcall push_gset3
0002 EF97 sbiw R28,63
0004 EF97 sbiw R28,63
0006 2297 sbiw R28,2 ; offset = 128
0008 .dbline -1
0008 .dbline 14
0008 ; /*******************************************************************************
0008 ;
0008 ; 读卡、显示 函数
0008 ;
0008 ; *******************************************************************************/
0008 ;
0008 ; #include <iom8v.h>
0008 ; #include <macros.h>
0008 ; #include "lcd1602.h"
0008 ;
0008 ; unsigned char IC_Codes_8[16]={0} , Wrong_flag = 0 ;
0008 ;
0008 ; void Read_Card(void)
0008 ; { // 卡内 128 bit 数据 // 卡内 16 字节数据
0008 .dbline 15
0008 ; unsigned char i=0 , j=0 , k=0 , IC_Codes_2[128]={0} ;
0008 4427 clr R20
000A .dbline 15
000A AA24 clr R10
000C .dbline 15
000C 6627 clr R22
000E .dbline 15
000E 80E0 ldi R24,<L2
0010 90E0 ldi R25,>L2
0012 FE01 movw R30,R28
0014 00E8 ldi R16,128
0016 10E0 ldi R17,0
0018 FA93 st -y,R31
001A EA93 st -y,R30
001C 9A93 st -y,R25
001E 8A93 st -y,R24
0020 00D0 rcall asgncblk
0022 .dbline 17
0022 ;
0022 ; for(i=0;i<16;i++)
0022 09C0 rjmp L6
0024 L3:
0024 .dbline 18
0024 .dbline 19
0024 80E0 ldi R24,<_IC_Codes_8
0026 90E0 ldi R25,>_IC_Codes_8
0028 E42F mov R30,R20
002A FF27 clr R31
002C E80F add R30,R24
002E F91F adc R31,R25
0030 2224 clr R2
0032 2082 std z+0,R2
0034 .dbline 20
0034 L4:
0034 .dbline 17
0034 4395 inc R20
0036 L6:
0036 .dbline 17
0036 4031 cpi R20,16
0038 A8F3 brlo L3
003A .dbline 22
003A ; {
003A ; IC_Codes_8[i] = 0 ;
003A ; }
003A ;
003A ; Reset_0 ;
003A 88B3 in R24,0x18
003C 8F7B andi R24,191
003E 88BB out 0x18,R24
0040 .dbline 23
0040 ; CLK_0 ; // IC_Card 卡复位
0040 88B3 in R24,0x18
0042 8F77 andi R24,127
0044 88BB out 0x18,R24
0046 .dbline 24
0046 ; delay_nms(10);
0046 0AE0 ldi R16,10
0048 10E0 ldi R17,0
004A 00D0 rcall _delay_nms
004C .dbline 26
004C ;
004C ; Reset_1 ; // 要使地址计数器复位"0",先让Resct复位端由
004C C69A sbi 0x18,6
004E .dbline 27
004E ; delay_nus(8) ; // "0"变成"1",然后跟着一个Clock脉冲从"0"变
004E 08E0 ldi R16,8
0050 10E0 ldi R17,0
0052 00D0 rcall _delay_nus
0054 .dbline 28
0054 ; CLK_1 ; // 成"1"再降回"0"电平,Resct复位端再至"0",
0054 C79A sbi 0x18,7
0056 .dbline 29
0056 ; delay_nus(44) ; // 把Clock脉冲包住,随着Reset端变低,地址0单
0056 0CE2 ldi R16,44
0058 10E0 ldi R17,0
005A 00D0 rcall _delay_nus
005C .dbline 30
005C ; CLK_0 ; // 元的数据从I/O上输出。对应 Clock端的每个脉
005C 88B3 in R24,0x18
005E 8F77 andi R24,127
0060 88BB out 0x18,R24
0062 .dbline 31
0062 ; delay_nus(8) ; // 冲,其上升沿使地址计数器增加。其下降沿使被
0062 08E0 ldi R16,8
0064 10E0 ldi R17,0
0066 00D0 rcall _delay_nus
0068 .dbline 32
0068 ; Reset_0 ; // 选通地址单元的数据从I/O上输出。地址计数器
0068 88B3 in R24,0x18
006A 8F7B andi R24,191
006C 88BB out 0x18,R24
006E .dbline 33
006E ; delay_nus(5) ; // 增加到127后返回到0
006E 05E0 ldi R16,5
0070 10E0 ldi R17,0
0072 00D0 rcall _delay_nus
0074 .dbline 34
0074 ; if ( (PINB&0x02)==0 )
0074 B199 sbic 0x16,1
0076 03C0 rjmp L7
0078 .dbline 35
0078 ; {
0078 .dbline 36
0078 ; IC_Codes_2[0] = 0 ; //读取IC卡I/O口输出的是电平 (地址0上的数据)
0078 2224 clr R2
007A 2882 std y+0,R2
007C .dbline 37
007C ; }
007C 02C0 rjmp L8
007E L7:
007E .dbline 39
007E ; else
007E ; { //并把电平值记入数组IC_Card_2[128]中
007E .dbline 40
007E ; IC_Codes_2[0] = 1;
007E 81E0 ldi R24,1
0080 8883 std y+0,R24
0082 .dbline 41
0082 ; }
0082 L8:
0082 .dbline 42
0082 ; delay_nus(27) ;
0082 0BE1 ldi R16,27
0084 10E0 ldi R17,0
0086 00D0 rcall _delay_nus
0088 .dbline 44
0088 ;
0088 ; for (i=1;i<128;i++)
0088 41E0 ldi R20,1
008A 1FC0 rjmp L12
008C L9:
008C .dbline 45
008C ; {
008C .dbline 46
008C ; CLK_1 ;
008C C79A sbi 0x18,7
008E .dbline 47
008E ; delay_nus(40) ;
008E 08E2 ldi R16,40
0090 10E0 ldi R17,0
0092 00D0 rcall _delay_nus
0094 .dbline 48
0094 ; CLK_0 ;
0094 88B3 in R24,0x18
0096 8F77 andi R24,127
0098 88BB out 0x18,R24
009A .dbline 49
009A ; delay_nus(20) ;
009A 04E1 ldi R16,20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -