📄 write_card.lis
字号:
.module Write_Card.c
.area text(rom, con, rel)
0000 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Write_Card.c
0000 .dbfunc e Write_bit _Write_bit fV
0000 ; i -> R20
0000 ; Write_flag -> R22
.even
0000 _Write_bit::
0000 00D0 rcall push_gset2
0002 602F mov R22,R16
0004 .dbline -1
0004 .dbline 12
0004 ; /*******************************************************************************
0004 ;
0004 ; 写卡 函数
0004 ;
0004 ; *******************************************************************************/
0004 ;
0004 ; #include <iom8v.h>
0004 ; #include <macros.h>
0004 ; #include "lcd1602.h"
0004 ;
0004 ; void Write_bit(unsigned char Write_flag) // 写卡位标志
0004 ; {
0004 .dbline 13
0004 ; unsigned char i=0 ;
0004 4427 clr R20
0006 .dbline 15
0006 ;
0006 ; Reset_0 ;
0006 88B3 in R24,0x18
0008 8F7B andi R24,191
000A 88BB out 0x18,R24
000C .dbline 16
000C ; CLK_0 ; // IC_Card 卡复位
000C 88B3 in R24,0x18
000E 8F77 andi R24,127
0010 88BB out 0x18,R24
0012 .dbline 17
0012 ; delay_nms(10);
0012 0AE0 ldi R16,10
0014 10E0 ldi R17,0
0016 00D0 rcall _delay_nms
0018 .dbline 19
0018 ;
0018 ; Reset_1 ; // 把
0018 C69A sbi 0x18,6
001A .dbline 20
001A ; delay_nus(8) ;
001A 08E0 ldi R16,8
001C 10E0 ldi R17,0
001E 00D0 rcall _delay_nus
0020 .dbline 21
0020 ; CLK_1 ; // 地
0020 C79A sbi 0x18,7
0022 .dbline 22
0022 ; delay_nus(44) ;
0022 0CE2 ldi R16,44
0024 10E0 ldi R17,0
0026 00D0 rcall _delay_nus
0028 .dbline 23
0028 ; CLK_0 ; // 址
0028 88B3 in R24,0x18
002A 8F77 andi R24,127
002C 88BB out 0x18,R24
002E .dbline 24
002E ; delay_nus(8) ;
002E 08E0 ldi R16,8
0030 10E0 ldi R17,0
0032 00D0 rcall _delay_nus
0034 .dbline 25
0034 ; Reset_0 ; // 加
0034 88B3 in R24,0x18
0036 8F7B andi R24,191
0038 88BB out 0x18,R24
003A .dbline 26
003A ; delay_nus(10) ;
003A 0AE0 ldi R16,10
003C 10E0 ldi R17,0
003E 00D0 rcall _delay_nus
0040 .dbline 27
0040 ; delay_nus(27) ; // 到
0040 0BE1 ldi R16,27
0042 10E0 ldi R17,0
0044 00D0 rcall _delay_nus
0046 .dbline 29
0046 ;
0046 ; for (i=1;i<Write_flag;i++) // 要
0046 41E0 ldi R20,1
0048 0EC0 rjmp L5
004A L2:
004A .dbline 30
004A .dbline 31
004A C79A sbi 0x18,7
004C .dbline 32
004C 08E2 ldi R16,40
004E 10E0 ldi R17,0
0050 00D0 rcall _delay_nus
0052 .dbline 33
0052 88B3 in R24,0x18
0054 8F77 andi R24,127
0056 88BB out 0x18,R24
0058 .dbline 34
0058 09E1 ldi R16,25
005A 10E0 ldi R17,0
005C 00D0 rcall _delay_nus
005E .dbline 35
005E 04E1 ldi R16,20
0060 10E0 ldi R17,0
0062 00D0 rcall _delay_nus
0064 .dbline 36
0064 L3:
0064 .dbline 29
0064 4395 inc R20
0066 L5:
0066 .dbline 29
0066 4617 cp R20,R22
0068 80F3 brlo L2
006A .dbline 38
006A ; {
006A ; CLK_1 ; // 写
006A ; delay_nus(40) ;
006A ; CLK_0 ; // 的
006A ; delay_nus(25) ;
006A ; delay_nus(20) ; // 位
006A ; }
006A ;
006A ; Reset_1 ; // 写
006A C69A sbi 0x18,6
006C .dbline 39
006C ; delay_nus(50) ; //
006C 02E3 ldi R16,50
006E 10E0 ldi R17,0
0070 00D0 rcall _delay_nus
0072 .dbline 40
0072 ; Reset_0 ; // 位
0072 88B3 in R24,0x18
0074 8F7B andi R24,191
0076 88BB out 0x18,R24
0078 .dbline 41
0078 ; delay_nus(10) ; //
0078 0AE0 ldi R16,10
007A 10E0 ldi R17,0
007C 00D0 rcall _delay_nus
007E .dbline 42
007E ; CLK_1 ; // 时
007E C79A sbi 0x18,7
0080 .dbline 43
0080 ; delay_nus(15000) ; //
0080 08E9 ldi R16,15000
0082 1AE3 ldi R17,58
0084 00D0 rcall _delay_nus
0086 .dbline 44
0086 ; CLK_0 ; // 序
0086 88B3 in R24,0x18
0088 8F77 andi R24,127
008A 88BB out 0x18,R24
008C .dbline 46
008C ;
008C ; Read_Card(); // 读卡
008C 00D0 rcall _Read_Card
008E .dbline -2
008E L1:
008E 00D0 rcall pop_gset2
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbsym r i 20 c
0092 .dbsym r Write_flag 22 c
0092 .dbend
0092 .dbfunc e Write_Card _Write_Card fV
0092 ; j -> R20
0092 ; Write_flag -> R22
0092 ; i -> R10
0092 ; flag -> R12
0092 ; Write_Value -> R14
.even
0092 _Write_Card::
0092 00D0 rcall push_gset5
0094 E02E mov R14,R16
0096 .dbline -1
0096 .dbline 50
0096 ; }
0096 ;
0096 ; void Write_Card(unsigned char Write_Value) // 检测写位操作
0096 ; {
0096 .dbline 52
0096 ; //移位标志 //写位位置
0096 ; unsigned char i=0 , j = 0 , flag=0 , Write_flag=0 ;
0096 AA24 clr R10
0098 .dbline 52
0098 4427 clr R20
009A .dbline 52
009A CC24 clr R12
009C .dbline 52
009C 6627 clr R22
009E .dbline 54
009E ;
009E ; for(j=0;j<Write_Value;j++)
009E 1BC0 rjmp L10
00A0 L7:
00A0 .dbline 55
00A0 ; {
00A0 .dbline 56
00A0 ; flag=0x01 ;
00A0 CC24 clr R12
00A2 C394 inc R12
00A4 .dbline 58
00A4 ;
00A4 ; if( IC_Codes_8[12] != 0 ) // 检测个位是否为0,不为0则写该位
00A4 20900C00 lds R2,_IC_Codes_8+12
00A8 2220 tst R2
00AA 81F0 breq L11
00AC .dbline 59
00AC ; {
00AC .dbline 60
00AC ; for(i=0;i<8;i++)
00AC AA24 clr R10
00AE 0AC0 rjmp L17
00B0 L14:
00B0 .dbline 61
00B0 ; {
00B0 .dbline 62
00B0 ; if ( (IC_Codes_8[12]&flag) != 0 ) // 检测到不为0的位则进行下面操作
00B0 20900C00 lds R2,_IC_Codes_8+12
00B4 2C20 and R2,R12
00B6 21F0 breq L18
00B8 .dbline 63
00B8 ; {
00B8 .dbline 64
00B8 ; Write_flag = 104-i ; // 确定要写的位
00B8 68E6 ldi R22,104
00BA 6A19 sub R22,R10
00BC .dbline 65
00BC ; Write_bit(Write_flag); // 写位
00BC 062F mov R16,R22
00BE A0DF rcall _Write_bit
00C0 .dbline 66
00C0 ; }
00C0 L18:
00C0 .dbline 67
00C0 CC0C lsl R12
00C2 .dbline 68
00C2 L15:
00C2 .dbline 60
00C2 A394 inc R10
00C4 L17:
00C4 .dbline 60
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -