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

📄 sle4442.lis

📁 avr单片机读写ic卡程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 007C           ;       io_value -> R20
 007C           ;          count -> R22
 007C           ;          value -> R10
                        .even
 007C           _ReceiveData::
 007C 00D0              rcall push_gset3
 007E                   .dbline -1
 007E                   .dbline 75
 007E           ; 
 007E           ; //****************接收数据**************//
 007E           ; uchar ReceiveData(void)
 007E           ; {uchar count;
 007E                   .dbline 78
 007E           ;  uchar value;
 007E           ;  uchar io_value;
 007E           ;  value=0;
 007E AA24              clr R10
 0080                   .dbline 79
 0080           ;  SetIO(0);//设置IO脚为输入;
 0080 0027              clr R16
 0082 D8DF              rcall _SetIO
 0084                   .dbline 80
 0084           ;  CLK(0);
 0084 0027              clr R16
 0086 CADF              rcall _CLK
 0088                   .dbline 82
 0088           ;  //IO=1;
 0088           ;  for(count=0;count<8;count++)
 0088 6627              clr R22
 008A 14C0              rjmp L38
 008C           L35:
 008C                   .dbline 83
 008C           ;   {value=value>>1; 
 008C                   .dbline 83
 008C A694              lsr R10
 008E                   .dbline 84
 008E           ;    CLK(1);
 008E 01E0              ldi R16,1
 0090 C5DF              rcall _CLK
 0092                   .dbline 85
 0092           ;    DelayUs(2);
 0092 02E0              ldi R16,2
 0094 D9DF              rcall _DelayUs
 0096                   .dbline 86
 0096           ;    io_value=PIND;
 0096 40B3              in R20,0x10
 0098                   .dbline 87
 0098           ;    CLK(0);
 0098 0027              clr R16
 009A C0DF              rcall _CLK
 009C                   .dbline 88
 009C           ;    DelayUs(2);
 009C 02E0              ldi R16,2
 009E D4DF              rcall _DelayUs
 00A0                   .dbline 89
 00A0           ;    if(io_value&0x10==0x10) value|=0x80;//判断IO脚是否为1
 00A0 40FF              sbrs R20,0
 00A2 04C0              rjmp L39
 00A4                   .dbline 89
 00A4 8A2D              mov R24,R10
 00A6 8068              ori R24,128
 00A8 A82E              mov R10,R24
 00AA 03C0              rjmp L40
 00AC           L39:
 00AC                   .dbline 90
 00AC           ;    else value&=0x7f;
 00AC 8A2D              mov R24,R10
 00AE 8F77              andi R24,127
 00B0 A82E              mov R10,R24
 00B2           L40:
 00B2                   .dbline 91
 00B2           L36:
 00B2                   .dbline 82
 00B2 6395              inc R22
 00B4           L38:
 00B4                   .dbline 82
 00B4 6830              cpi R22,8
 00B6 50F3              brlo L35
 00B8                   .dbline 92
 00B8           ;   }
 00B8           ;  return (value);
 00B8 0A2D              mov R16,R10
 00BA                   .dbline -2
 00BA           L34:
 00BA 00D0              rcall pop_gset3
 00BC                   .dbline 0 ; func end
 00BC 0895              ret
 00BE                   .dbsym r io_value 20 c
 00BE                   .dbsym r count 22 c
 00BE                   .dbsym r value 10 c
 00BE                   .dbend
 00BE                   .dbfunc e SendData _SendData fV
 00BE           ;          value -> R20
 00BE           ;          count -> R20
 00BE           ;          Xdata -> R22
                        .even
 00BE           _SendData::
 00BE 00D0              rcall push_gset2
 00C0 602F              mov R22,R16
 00C2                   .dbline -1
 00C2                   .dbline 97
 00C2           ; }
 00C2           ; 
 00C2           ; //********************发送数据************//
 00C2           ; void SendData(uchar Xdata)  
 00C2           ; {uchar count;
 00C2                   .dbline 99
 00C2           ;  uchar value;
 00C2           ;  SetIO(1);////设置IO脚为输出;
 00C2 01E0              ldi R16,1
 00C4 B7DF              rcall _SetIO
 00C6                   .dbline 100
 00C6           ;  value=Xdata;
 00C6                   .dbline 101
 00C6           ;  for(count=8;count!=0;count--)
 00C6 48E0              ldi R20,8
 00C8 15C0              rjmp L45
 00CA           L42:
 00CA                   .dbline 102
 00CA           ;       {CLK(0);
 00CA                   .dbline 102
 00CA 0027              clr R16
 00CC A7DF              rcall _CLK
 00CE                   .dbline 103
 00CE           ;        if((Xdata<<(count-1))&0x80) IO(1);
 00CE 142F              mov R17,R20
 00D0 1150              subi R17,1
 00D2 062F              mov R16,R22
 00D4 00D0              rcall lsl8
 00D6 802F              mov R24,R16
 00D8 8078              andi R24,128
 00DA 19F0              breq L46
 00DC                   .dbline 103
 00DC 01E0              ldi R16,1
 00DE A4DF              rcall _IO
 00E0 02C0              rjmp L47
 00E2           L46:
 00E2                   .dbline 104
 00E2           ;        else IO(0);
 00E2 0027              clr R16
 00E4 A1DF              rcall _IO
 00E6           L47:
 00E6                   .dbline 105
 00E6 01E0              ldi R16,1
 00E8 99DF              rcall _CLK
 00EA                   .dbline 106
 00EA 02E0              ldi R16,2
 00EC ADDF              rcall _DelayUs
 00EE                   .dbline 107
 00EE 0027              clr R16
 00F0 95DF              rcall _CLK
 00F2                   .dbline 107
 00F2           L43:
 00F2                   .dbline 101
 00F2 4A95              dec R20
 00F4           L45:
 00F4                   .dbline 101
 00F4 4423              tst R20
 00F6 49F7              brne L42
 00F8                   .dbline -2
 00F8                   .dbline 108
 00F8           ;        CLK(1);
 00F8           ;        DelayUs(2);
 00F8           ;        CLK(0);}
 00F8           ; }
 00F8           L41:
 00F8 00D0              rcall pop_gset2
 00FA                   .dbline 0 ; func end
 00FA 0895              ret
 00FC                   .dbsym r value 20 c
 00FC                   .dbsym r count 20 c
 00FC                   .dbsym r Xdata 22 c
 00FC                   .dbend
 00FC                   .dbfunc e ResetIC _ResetIC fV
 00FC           ;          count -> R20
 00FC           ;          Xdata -> R22,R23
                        .even
 00FC           _ResetIC::
 00FC 00D0              rcall push_gset2
 00FE 602F              mov R22,R16
 0100 712F              mov R23,R17
 0102                   .dbline -1
 0102                   .dbline 112
 0102           ; 
 0102           ; //****************IC卡复位************************//
 0102           ; void ResetIC(uchar *Xdata)
 0102           ; {uchar count;
 0102                   .dbline 113
 0102           ;  SetIO(1); //设置IC卡引脚的属性
 0102 01E0              ldi R16,1
 0104 97DF              rcall _SetIO
 0106                   .dbline 114
 0106           ;  RST(0);
 0106 0027              clr R16
 0108 83DF              rcall _RST
 010A                   .dbline 115
 010A           ;  CLK(0);
 010A 0027              clr R16
 010C 87DF              rcall _CLK
 010E                   .dbline 116
 010E           ;  IO(1);
 010E 01E0              ldi R16,1
 0110 8BDF              rcall _IO
 0112                   .dbline 117
 0112           ;  DelayUs(5);
 0112 05E0              ldi R16,5
 0114 99DF              rcall _DelayUs
 0116                   .dbline 118
 0116           ;  RST(1);
 0116 01E0              ldi R16,1
 0118 7BDF              rcall _RST
 011A                   .dbline 119
 011A           ;  DelayUs(5);
 011A 05E0              ldi R16,5
 011C 95DF              rcall _DelayUs
 011E                   .dbline 120
 011E           ;  CLK(1);
 011E 01E0              ldi R16,1
 0120 7DDF              rcall _CLK
 0122                   .dbline 121
 0122           ;  DelayUs(5);
 0122 05E0              ldi R16,5
 0124 91DF              rcall _DelayUs
 0126                   .dbline 122
 0126           ;  CLK(0);
 0126 0027              clr R16
 0128 79DF              rcall _CLK
 012A                   .dbline 123
 012A           ;  DelayUs(5);
 012A 05E0              ldi R16,5
 012C 8DDF              rcall _DelayUs
 012E                   .dbline 124
 012E           ;  RST(0);
 012E 0027              clr R16
 0130 6FDF              rcall _RST
 0132                   .dbline 125
 0132           ;  for(count=4;count!=0;count--)
 0132 44E0              ldi R20,4
 0134 07C0              rjmp L52
 0136           L49:
 0136                   .dbline 126
 0136                   .dbline 126
 0136 A2DF              rcall _ReceiveData
 0138 E62F              mov R30,R22
 013A F72F              mov R31,R23
 013C 0083              std z+0,R16
 013E                   .dbline 127
 013E 6E5F              subi R22,254  ; offset = 2
 0140 7F4F              sbci R23,255
 0142                   .dbline 127
 0142           L50:
 0142                   .dbline 125
 0142 4A95              dec R20
 0144           L52:
 0144                   .dbline 125
 0144 4423              tst R20
 0146 B9F7              brne L49
 0148                   .dbline -2
 0148                   .dbline 128
 0148           ;       {*Xdata=ReceiveData();
 0148           ;        Xdata+=2;}
 0148           ; } 
 0148           L48:
 0148 00D0              rcall pop_gset2
 014A                   .dbline 0 ; func end
 014A 0895              ret
 014C                   .dbsym r count 20 c
 014C                   .dbsym r Xdata 22 pc
 014C                   .dbend
 014C                   .dbfunc e Start _Start fV
                        .even
 014C           _Start::
 014C                   .dbline -1
 014C                   .dbline 132
 014C           ; 
 014C           ; //*******************Start条件****************//
 014C           ; void Start(void)
 014C           ; {SetIO(1);
 014C                   .dbline 132
 014C 01E0              ldi R16,1
 014E 72DF              rcall _SetIO
 0150                   .dbline 133
 0150           ;  CLK(0);
 0150 0027              clr R16
 0152 64DF              rcall _CLK
 0154                   .dbline 134
 0154           ;  IO(0);
 0154 0027              clr R16
 0156 68DF              rcall _IO
 0158                   .dbline 135
 0158           ;  DelayUs(2);
 0158 02E0              ldi R16,2
 015A 76DF              rcall _DelayUs
 015C                   .dbline 136
 015C           ;  CLK(1);
 015C 01E0              ldi R16,1
 015E 5EDF              rcall _CLK
 0160                   .dbline 137
 0160           ;  IO(1);
 0160 01E0              ldi R16,1
 0162 62DF              rcall _IO
 0164                   .dbline 138
 0164           ;  DelayUs(2);
 0164 02E0              ldi R16,2
 0166 70DF              rcall _DelayUs
 0168                   .dbline 139
 0168           ;  IO(0);
 0168 0027              clr R16
 016A 5EDF              rcall _IO
 016C                   .dbline 140
 016C           ;  CLK(0);
 016C 0027              clr R16
 016E                   .dbline -2
 016E                   .dbline 141
 016E           ; }
 016E           L53:
 016E                   .dbline 0 ; func end
 016E 56CF              rjmp _CLK
 0170                   .dbend
 0170                   .dbfunc e Stop _Stop fV
                        .even
 0170           _Stop::
 0170                   .dbline -1
 0170                   .dbline 145
 0170           ; 
 0170           ; //*******************Stop条件****************//
 0170           ; void Stop(void)
 0170           ; {CLK(0);
 0170                   .dbline 145
 0170 0027              clr R16
 0172 54DF              rcall _CLK
 0174                   .dbline 146
 0174           ;  IO(0);
 0174 0027              clr R16
 0176 58DF              rcall _IO
 0178                   .dbline 147
 0178           ;  DelayUs(2);
 0178 02E0              ldi R16,2
 017A 66DF              rcall _DelayUs
 017C                   .dbline 148
 017C           ;  CLK(1);
 017C 01E0              ldi R16,1
 017E 4EDF              rcall _CLK
 0180                   .dbline 149
 0180           ;  IO(0);
 0180 0027              clr R16
 0182 52DF              rcall _IO
 0184                   .dbline 150

⌨️ 快捷键说明

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