?? read_card.s
字號(hào):
.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)\環(huán)保型IC卡門禁系統(tǒng)\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)\環(huán)保型IC卡門禁系統(tǒng)\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)\環(huán)保型IC卡門禁系統(tǒng)\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
; /*******************************************************************************
;
; 讀卡、顯示 函數(shù)
;
; *******************************************************************************/
;
; #include <iom8v.h>
; #include <macros.h>
; #include "lcd1602.h"
;
; unsigned char IC_Codes_8[16]={0} , Wrong_flag = 0 ;
;
; void Read_Card(void)
; { // 卡內(nèi) 128 bit 數(shù)據(jù) // 卡內(nèi) 16 字節(jié)數(shù)據(jù)
.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 卡復(fù)位
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 ; // 要使地址計(jì)數(shù)器復(fù)位"0",先讓Resct復(fù)位端由
sbi 0x18,6
.dbline 27
; delay_nus(8) ; // "0"變成"1",然后跟著一個(gè)Clock脈沖從"0"變
ldi R16,8
ldi R17,0
rcall _delay_nus
.dbline 28
; CLK_1 ; // 成"1"再降回"0"電平,Resct復(fù)位端再至"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 ; // 元的數(shù)據(jù)從I/O上輸出。對(duì)應(yīng) Clock端的每個(gè)脈
in R24,0x18
andi R24,127
out 0x18,R24
.dbline 31
; delay_nus(8) ; // 沖,其上升沿使地址計(jì)數(shù)器增加。其下降沿使被
ldi R16,8
ldi R17,0
rcall _delay_nus
.dbline 32
; Reset_0 ; // 選通地址單元的數(shù)據(jù)從I/O上輸出。地址計(jì)數(shù)器
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上的數(shù)據(jù))
clr R2
std y+0,R2
.dbline 37
; }
rjmp L8
L7:
.dbline 39
; else
; { //并把電平值記入數(shù)組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上的數(shù)據(jù))
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
; { //并把電平值記入數(shù)組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位數(shù)據(jù)轉(zhuǎn)換成
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個(gè)字節(jié)并存放在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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -