📄 s51.lis
字号:
00F8 ; OutBuf[1]=0x80;
00F8 80E8 ldi R24,128
00FA 80930500 sts _OutBuf+1,R24
00FE .dbline 86
00FE ; SendInstrc(4);
00FE 04E0 ldi R16,4
0100 7FDF rcall _SendInstrc
0102 .dbline 87
0102 ; Delay_ms(50);
0102 02E3 ldi R16,50
0104 10E0 ldi R17,0
0106 00D0 rcall _Delay_ms
0108 .dbline 89
0108 ; //-----------------------------------------------------------------------------
0108 ; ProOver02();
0108 B8DF rcall _ProOver02
010A .dbline -2
010A L31:
010A .dbline 0 ; func end
010A 0895 ret
010C .dbend
010C .dbfunc e Write02 _Write02 fc
010C ; Data -> R20
.even
010C _Write02::
010C 00D0 rcall push_gset1
010E 402F mov R20,R16
0110 .dbline -1
0110 .dbline 93
0110 ; }
0110 ;
0110 ; BOOL Write02(BYTE Data)//写器件
0110 ; {
0110 .dbline 98
0110 ;
0110 ; //-----------------------------------------------------------------------------
0110 ; //根据器件的DataSheet,设置相应的编程控制信号
0110 ; //写一个单元
0110 ; OutBuf[0]=0x40;
0110 80E4 ldi R24,64
0112 80930400 sts _OutBuf,R24
0116 .dbline 99
0116 ; OutBuf[1]=((BYTE*)&nAddress)[1];
0116 20900100 lds R2,_nAddress+1
011A 20920500 sts _OutBuf+1,R2
011E .dbline 100
011E ; OutBuf[2]=((BYTE*)&nAddress)[0];
011E E0E0 ldi R30,<_nAddress
0120 F0E0 ldi R31,>_nAddress
0122 2080 ldd R2,z+0
0124 20920600 sts _OutBuf+2,R2
0128 .dbline 101
0128 ; OutBuf[3]=Data;
0128 40930700 sts _OutBuf+3,R20
012C .dbline 102
012C ; SendInstrc(4);
012C 04E0 ldi R16,4
012E 68DF rcall _SendInstrc
0130 .dbline 103
0130 ; nTimeOut=0;
0130 2224 clr R2
0132 3324 clr R3
0134 30920100 sts _nTimeOut+1,R3
0138 20920000 sts _nTimeOut,R2
013C 14C0 rjmp L39
013E L38:
013E .dbline 105
013E ; while(Read02()!=Data)//效验:循环读,直到读出与写入的数相同
013E ; {
013E .dbline 106
013E ; nTimeOut++;
013E 80910000 lds R24,_nTimeOut
0142 90910100 lds R25,_nTimeOut+1
0146 0196 adiw R24,1
0148 90930100 sts _nTimeOut+1,R25
014C 80930000 sts _nTimeOut,R24
0150 .dbline 107
0150 ; if(nTimeOut>1000)//超时了
0150 88EE ldi R24,1000
0152 93E0 ldi R25,3
0154 20900000 lds R2,_nTimeOut
0158 30900100 lds R3,_nTimeOut+1
015C 8215 cp R24,R2
015E 9305 cpc R25,R3
0160 10F4 brsh L41
0162 .dbline 108
0162 ; {
0162 .dbline 109
0162 ; return 0;
0162 0027 clr R16
0164 04C0 rjmp L33
0166 L41:
0166 .dbline 112
0166 L39:
0166 .dbline 104
0166 8EDF rcall _Read02
0168 0417 cp R16,R20
016A 49F7 brne L38
016C .dbline 114
016C ; }
016C ;
016C ; }
016C ; //-----------------------------------------------------------------------------
016C ; return 1;
016C 01E0 ldi R16,1
016E .dbline -2
016E L33:
016E 00D0 rcall pop_gset1
0170 .dbline 0 ; func end
0170 0895 ret
0172 .dbsym r Data 20 c
0172 .dbend
0172 .dbfunc e Lock02 _Lock02 fV
.even
0172 _Lock02::
0172 .dbline -1
0172 .dbline 117
0172 ; }
0172 ; void Lock02()//写锁定位
0172 ; {
0172 .dbline 120
0172 ; //-----------------------------------------------------------------------------
0172 ; //根据器件的DataSheet,设置相应的编程控制信号
0172 ; if(ComBuf[2]>=1)//ComBuf[2]为锁定位
0172 80910A00 lds R24,_ComBuf+2
0176 8130 cpi R24,1
0178 60F0 brlo L44
017A .dbline 121
017A ; {
017A .dbline 122
017A ; InitPro02();
017A 60DF rcall _InitPro02
017C .dbline 123
017C ; OutBuf[0]=0xac;
017C 8CEA ldi R24,172
017E 80930400 sts _OutBuf,R24
0182 .dbline 124
0182 ; OutBuf[1]=0xe1;
0182 81EE ldi R24,225
0184 80930500 sts _OutBuf+1,R24
0188 .dbline 125
0188 ; SendInstrc(4);
0188 04E0 ldi R16,4
018A 3ADF rcall _SendInstrc
018C .dbline 126
018C ; Delay_ms(1);
018C 01E0 ldi R16,1
018E 10E0 ldi R17,0
0190 00D0 rcall _Delay_ms
0192 .dbline 127
0192 ; }
0192 L44:
0192 .dbline 128
0192 ; if(ComBuf[2]>=2)
0192 80910A00 lds R24,_ComBuf+2
0196 8230 cpi R24,2
0198 60F0 brlo L48
019A .dbline 129
019A ; {
019A .dbline 130
019A ; InitPro02();
019A 50DF rcall _InitPro02
019C .dbline 131
019C ; OutBuf[0]=0xac;
019C 8CEA ldi R24,172
019E 80930400 sts _OutBuf,R24
01A2 .dbline 132
01A2 ; OutBuf[1]=0xe2;
01A2 82EE ldi R24,226
01A4 80930500 sts _OutBuf+1,R24
01A8 .dbline 133
01A8 ; SendInstrc(4);
01A8 04E0 ldi R16,4
01AA 2ADF rcall _SendInstrc
01AC .dbline 134
01AC ; Delay_ms(1);
01AC 01E0 ldi R16,1
01AE 10E0 ldi R17,0
01B0 00D0 rcall _Delay_ms
01B2 .dbline 135
01B2 ; }
01B2 L48:
01B2 .dbline 136
01B2 ; if(ComBuf[2]==3)
01B2 80910A00 lds R24,_ComBuf+2
01B6 8330 cpi R24,3
01B8 61F4 brne L52
01BA .dbline 137
01BA ; {
01BA .dbline 138
01BA ; InitPro02();
01BA 40DF rcall _InitPro02
01BC .dbline 139
01BC ; OutBuf[0]=0xac;
01BC 8CEA ldi R24,172
01BE 80930400 sts _OutBuf,R24
01C2 .dbline 140
01C2 ; OutBuf[1]=0xe3;
01C2 83EE ldi R24,227
01C4 80930500 sts _OutBuf+1,R24
01C8 .dbline 141
01C8 ; SendInstrc(4);
01C8 04E0 ldi R16,4
01CA 1ADF rcall _SendInstrc
01CC .dbline 142
01CC ; Delay_ms(1);
01CC 01E0 ldi R16,1
01CE 10E0 ldi R17,0
01D0 00D0 rcall _Delay_ms
01D2 .dbline 143
01D2 ; }
01D2 L52:
01D2 .dbline 145
01D2 ; //-----------------------------------------------------------------------------
01D2 ; ProOver02();
01D2 53DF rcall _ProOver02
01D4 .dbline -2
01D4 L43:
01D4 .dbline 0 ; func end
01D4 0895 ret
01D6 .dbend
01D6 .dbfunc e PreparePro02 _PreparePro02 fV
.even
01D6 _PreparePro02::
01D6 .dbline -1
01D6 .dbline 148
01D6 ; }
01D6 ; void PreparePro02()//设置pw中的函数指针,让主程序可以调用上面的函数
01D6 ; {
01D6 .dbline 149
01D6 ; pw.fpInitPro=InitPro02;
01D6 80E0 ldi R24,<PL_InitPro02
01D8 90E0 ldi R25,>PL_InitPro02
01DA 90930100 sts _pw+1,R25
01DE 80930000 sts _pw,R24
01E2 .dbline 150
01E2 ; pw.fpReadSign=ReadSign02;
01E2 80E0 ldi R24,<PL_ReadSign02
01E4 90E0 ldi R25,>PL_ReadSign02
01E6 90930300 sts _pw+2+1,R25
01EA 80930200 sts _pw+2,R24
01EE .dbline 151
01EE ; pw.fpErase=Erase02;
01EE 80E0 ldi R24,<PL_Erase02
01F0 90E0 ldi R25,>PL_Erase02
01F2 90930500 sts _pw+4+1,R25
01F6 80930400 sts _pw+4,R24
01FA .dbline 152
01FA ; pw.fpWrite=Write02;
01FA 80E0 ldi R24,<PL_Write02
01FC 90E0 ldi R25,>PL_Write02
01FE 90930700 sts _pw+6+1,R25
0202 80930600 sts _pw+6,R24
0206 .dbline 153
0206 ; pw.fpRead=Read02;
0206 80E0 ldi R24,<PL_Read02
0208 90E0 ldi R25,>PL_Read02
020A 90930900 sts _pw+8+1,R25
020E 80930800 sts _pw+8,R24
0212 .dbline 154
0212 ; pw.fpLock=Lock02;
0212 80E0 ldi R24,<PL_Lock02
0214 90E0 ldi R25,>PL_Lock02
0216 90930B00 sts _pw+10+1,R25
021A 80930A00 sts _pw+10,R24
021E .dbline 155
021E ; pw.fpProOver=ProOver02;
021E 80E0 ldi R24,<PL_ProOver02
0220 90E0 ldi R25,>PL_ProOver02
0222 90930D00 sts _pw+12+1,R25
0226 80930C00 sts _pw+12,R24
022A .dbline -2
022A L56:
022A .dbline 0 ; func end
022A 0895 ret
022C .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\学习专区\AVR专区\个人创作区\ICC\s51.c
0000 _InBuf::
0000 .blkb 4
0004 .dbsym e InBuf _InBuf A[4:4]c
0004 _OutBuf::
0004 .blkb 4
0008 .dbsym e OutBuf _OutBuf A[4:4]c
0008 _ComBuf::
0008 .blkb 18
001A .dbsym e ComBuf _ComBuf A[18:18]c
.area func_lit
0000 3D00 PL_ProOver02: .word `_ProOver02
0002 B900 PL_Lock02: .word `_Lock02
0004 4200 PL_Read02: .word `_Read02
0006 8600 PL_Write02: .word `_Write02
0008 7800 PL_Erase02: .word `_Erase02
000A 5300 PL_ReadSign02: .word `_ReadSign02
000C 1E00 PL_InitPro02: .word `_InitPro02
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -