📄 sle4442.lis
字号:
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 + -