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

📄 s51.lis

📁 笔者的《用M8L制作的89S51单片机 USB下载线》在无线电2007年第9期已刊登过
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -