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

📄 main.lis

📁 一个6缸发动机的ECU控制程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 019C 19F4              brne L28
 019E           X11:
 019E                   .dbline 106
 019E 2224              clr R2
 01A0 20920100          sts _tx_rd_index0,R2
 01A4           L28:
 01A4                   .dbline 107
 01A4           ;     }; 
 01A4           L26:
 01A4                   .dbline 107
 01A4                   .dbline -2
 01A4           L25:
 01A4                   .dbline 0 ; func end
 01A4 2990              ld R2,y+
 01A6 2FBE              out 0x3f,R2
 01A8 F991              ld R31,y+
 01AA E991              ld R30,y+
 01AC 9991              ld R25,y+
 01AE 8991              ld R24,y+
 01B0 2990              ld R2,y+
 01B2 1895              reti
 01B4                   .dbend
 01B4                   .dbfunc e putchar _putchar fV
 01B4           ;          IisOn -> R20
 01B4           ;              c -> R16
                        .even
 01B4           _putchar::
 01B4 4A93              st -y,R20
 01B6                   .dbline -1
 01B6                   .dbline 114
 01B6           ; } 
 01B6           ; 
 01B6           ; 
 01B6           ; 
 01B6           ; // Write a character to the USART0 Transmitter buffer 
 01B6           ; void putchar(char c) 
 01B6           ; { 
 01B6                   .dbline 115
 01B6           ;   char IisOn = 1;
 01B6 41E0              ldi R20,1
 01B8                   .dbline 116
 01B8           ;   if((SREG & 0x80) == 0x00)  //I之前是否置位
 01B8 2FB6              in R2,0x3f
 01BA 27FC              sbrc R2,7
 01BC 01C0              rjmp L34
 01BE           X12:
 01BE                   .dbline 117
 01BE           ;     IisOn = 0;
 01BE 4427              clr R20
 01C0           L33:
 01C0                   .dbline 118
 01C0           ;   while (tx_counter0 == TX_BUFFER_SIZE0); 
 01C0           L34:
 01C0                   .dbline 118
 01C0 80910000          lds R24,_tx_counter0
 01C4 8431              cpi R24,20
 01C6 E1F3              breq L33
 01C8           X13:
 01C8                   .dbline 119
 01C8           ;   CLI(); 
 01C8 F894              cli
 01CA                   .dbline 120
 01CA           ;   if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0)) 
 01CA 20900000          lds R2,_tx_counter0
 01CE 2220              tst R2
 01D0 21F4              brne L38
 01D2           X14:
 01D2 2090C000          lds R2,192
 01D6 25FC              sbrc R2,5
 01D8 19C0              rjmp L36
 01DA           X15:
 01DA           L38:
 01DA                   .dbline 121
 01DA           ;     { 
 01DA                   .dbline 122
 01DA           ;       tx_buffer0[tx_wr_index0]=c; 
 01DA 80E0              ldi R24,<_tx_buffer0
 01DC 90E0              ldi R25,>_tx_buffer0
 01DE E0910200          lds R30,_tx_wr_index0
 01E2 FF27              clr R31
 01E4 E80F              add R30,R24
 01E6 F91F              adc R31,R25
 01E8 0083              std z+0,R16
 01EA                   .dbline 123
 01EA           ;       if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0; 
 01EA 80910200          lds R24,_tx_wr_index0
 01EE 8F5F              subi R24,255    ; addi 1
 01F0 282E              mov R2,R24
 01F2 20920200          sts _tx_wr_index0,R2
 01F6 8431              cpi R24,20
 01F8 19F4              brne L39
 01FA           X16:
 01FA                   .dbline 123
 01FA 2224              clr R2
 01FC 20920200          sts _tx_wr_index0,R2
 0200           L39:
 0200                   .dbline 124
 0200           ;       ++tx_counter0; 
 0200 80910000          lds R24,_tx_counter0
 0204 8F5F              subi R24,255    ; addi 1
 0206 80930000          sts _tx_counter0,R24
 020A                   .dbline 125
 020A           ;     } 
 020A 02C0              rjmp L37
 020C           L36:
 020C                   .dbline 127
 020C           ;   else 
 020C           ;     UDR0=c;
 020C 0093C600          sts 198,R16
 0210           L37:
 0210                   .dbline 128
 0210           ;   if(IisOn)           
 0210 4423              tst R20
 0212 09F0              breq L41
 0214           X17:
 0214                   .dbline 129
 0214           ;     SEI(); 
 0214 7894              sei
 0216           L41:
 0216                   .dbline -2
 0216           L30:
 0216                   .dbline 0 ; func end
 0216 4991              ld R20,y+
 0218 0895              ret
 021A                   .dbsym r IisOn 20 c
 021A                   .dbsym r c 16 c
 021A                   .dbend
 021A                   .dbfunc e DisposeBufDatas _DisposeBufDatas fV
 021A           ;     spray2NumH -> R14
 021A           ;     spray2NumL -> R12
 021A           ;     spray1NumH -> y+6
 021A           ;     spray1NumL -> y+5
 021A           ;       tPump1On -> R10
 021A           ;     tSpray1Cyc -> y+3
 021A           ;      tSpray1On -> y+2
 021A           ;      tPump1Cyc -> y+1
 021A           ;          IisOn -> y+0
                        .even
 021A           _DisposeBufDatas::
 021A 00D0              rcall push_xgsetF0FC
 021C 2797              sbiw R28,7
 021E                   .dbline -1
 021E                   .dbline 133
 021E           ; } 
 021E           ; 
 021E           ; void DisposeBufDatas(void)
 021E           ; {
 021E                   .dbline 150
 021E           ;  //定义变量
 021E           ;  unsigned char tPump1Cyc;         //油泵1周期,单位ms
 021E           ;  unsigned char tSpray1On;         //喷射脉宽,单位0.1ms
 021E           ;  //unsigned char tSpray1OnH;
 021E           ;  unsigned int tSpray1Cyc;        //喷射周期,单位ms
 021E           ;  unsigned char tPump1On;       //油泵1脉宽,单位0.1ms
 021E           ;  char spray1NumL;                 //SprayNum低字节
 021E           ;  char spray1NumH;                 //SprayNum高字节
 021E           ;  
 021E           ;  //unsigned char tPump2Cyc;         //油泵2周期,单位ms
 021E           ;  //unsigned char tSpray2On;         //喷射脉宽,单位0.1ms
 021E           ;  //unsigned int tSpray2Cyc;        //喷射周期,单位ms
 021E           ;  //unsigned char tPump2On;       //油泵2脉宽,单位0.1ms
 021E           ;  char spray2NumL;                 //SprayNum低字节
 021E           ;  char spray2NumH;                 //SprayNum高字节
 021E           ;  
 021E           ;  char IisOn = 1;
 021E 0024              clr R0
 0220 0394              inc R0
 0222 0882              std y+0,R0
 0224                   .dbline 151
 0224           ;  if((SREG & 0x80) == 0x00)  //I之前是否置位
 0224 2FB6              in R2,0x3f
 0226 27FC              sbrc R2,7
 0228 02C0              rjmp L44
 022A           X18:
 022A                   .dbline 152
 022A           ;    IisOn = 0;
 022A 0024              clr R0
 022C 0882              std y+0,R0
 022E           L44:
 022E                   .dbline 154
 022E           ;  
 022E           ;  if(rx_error0)                 //接收错误
 022E 20901800          lds R2,_rx_error0
 0232 2220              tst R2
 0234 59F0              breq L46
 0236           X19:
 0236                   .dbline 155
 0236           ;   {
 0236                   .dbline 156
 0236           ;    CLI();
 0236 F894              cli
 0238                   .dbline 157
 0238           ;    putchar(SENDAGAIN);
 0238 0EEF              ldi R16,254
 023A BCDF              rcall _putchar
 023C                   .dbline 158
 023C           ;    putchar(SENDAGAIN);
 023C 0EEF              ldi R16,254
 023E BADF              rcall _putchar
 0240                   .dbline 159
 0240           ;    if(IisOn)  
 0240 0880              ldd R0,y+0
 0242 0020              tst R0
 0244 09F4              brne X22
 0246 F2C0              rjmp L47
 0248           X22:
 0248           X20:
 0248                   .dbline 160
 0248           ;      SEI();
 0248 7894              sei
 024A                   .dbline 161
 024A           ;   } 
 024A F0C0              rjmp L47
 024C           L46:
 024C                   .dbline 163
 024C           ;  else
 024C           ;  { 
 024C                   .dbline 164
 024C           ;    spray1NumL = getchar();
 024C 60DF              rcall _getchar
 024E 0D83              std y+5,R16
 0250                   .dbline 165
 0250           ;    spray1NumH = getchar();
 0250 5EDF              rcall _getchar
 0252 0E83              std y+6,R16
 0254                   .dbline 166
 0254           ;    tSpray1On = getchar();
 0254 5CDF              rcall _getchar
 0256 A02E              mov R10,R16
 0258 AA82              std y+2,R10
 025A                   .dbline 167
 025A           ;    tSpray1Cyc = getchar();
 025A 59DF              rcall _getchar
 025C A02E              mov R10,R16
 025E 2A2C              mov R2,R10
 0260 3324              clr R3
 0262 3C82              std y+4,R3
 0264 2B82              std y+3,R2
 0266                   .dbline 168
 0266           ;    tPump1Cyc = getchar();
 0266 53DF              rcall _getchar
 0268 A02E              mov R10,R16
 026A A982              std y+1,R10
 026C                   .dbline 169
 026C           ;    tPump1On = getchar();
 026C 50DF              rcall _getchar
 026E A02E              mov R10,R16
 0270                   .dbline 171
 0270           ;    
 0270           ;    spray2NumL = getchar();
 0270 4EDF              rcall _getchar
 0272 C02E              mov R12,R16
 0274                   .dbline 172
 0274           ;    spray2NumH = getchar();
 0274 4CDF              rcall _getchar
 0276 E02E              mov R14,R16
 0278                   .dbline 189
 0278           ;    //tSpray2On = getchar();
 0278           ;    //tSpray2Cyc = getchar();
 0278           ;    //tPump2Cyc = getchar();
 0278           ;    //tPump2On = getchar();
 0278           ;    
 0278           ; /************debug*****************/
 0278           ;      //putchar(sprayNumL);   //debug
 0278           ;        //putchar(sprayNumH);   //debug
 0278           ;       // putchar(tPump1Cyc);   //debug
 0278           ;        //putchar(tSprayOn);   //debug
 0278           ;        //putchar(tSprayCyc);   //debug
 0278           ;        //putchar(tPivDelay);   //debug
 0278           ; 
 0278           ; //**********************************/   
 0278           ;    
 0278           ;    //转换数据
 0278           ;    Pump1Num = (int)spray1NumL + ((int)spray1NumH << 8);
 0278 2E80              ldd R2,y+6
 027A 3324              clr R3
 027C 322C              mov R3,R2
 027E 2224              clr R2
 0280 4D80              ldd R4,y+5
 0282 5524              clr R5
 0284 420C              add R4,R2
 0286 531C              adc R5,R3
 0288 1201              movw R2,R4
 028A 4424              clr R4
 028C 37FC              sbrc R3,7
 028E 4094              com R4
 0290 5524              clr R5
 0292 47FC              sbrc R4,7
 0294 5094              com R5
 0296 30920B00          sts _Pump1Num+1,R3
 029A 20920A00          sts _Pump1Num,R2
 029E 50920D00          sts _Pump1Num+2+1,R5
 02A2 40920C00          sts _Pump1Num+2,R4
 02A6                   .dbline 190
 02A6           ;    PPump1Num = Pump1Num;
 02A6 30921900          sts _PPump1Num+1,R3
 02AA 20921800          sts _PPump1Num,R2
 02AE 50921B00          sts _PPump1Num+2+1,R5
 02B2 40921A00          sts _PPump1Num+2,R4
 02B6                   .dbline 191
 02B6           ;    Spray1Num = Pump1Num ;
 02B6 30920100          sts _Spray1Num+1,R3
 02BA 20920000          sts _Spray1Num,R2
 02BE 50920300          sts _Spray1Num+2+1,R5
 02C2 40920200          sts _Spray1Num+2,R4
 02C6                   .dbline 192
 02C6           ;    SSpray1Num = Spray1Num;
 02C6 40900200          lds R4,_Spray1Num+2
 02CA 50900300          lds R5,_Spray1Num+2+1
 02CE 20900000          lds R2,_Spray1Num
 02D2 30900100          lds R3,_Spray1Num+1
 02D6 30921D00          sts _SSpray1Num+1,R3
 02DA 20921C00          sts _SSpray1Num,R2
 02DE 50921F00          sts _SSpray1Num+2+1,R5
 02E2 40921E00          sts _SSpray1Num+2,R4
 02E6                   .dbline 193
 02E6           ;    CPump1Cyc = tPump1Cyc * 1000-370;//修正0.37ms
 02E6 2981              ldd R18,y+1
 02E8 3327              clr R19

⌨️ 快捷键说明

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