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

📄 uart.lis

📁 一个6缸发动机的ECU控制程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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           ;      sprayNumH -> y+3
 021A           ;      sprayNumL -> y+2
 021A           ;      tPivDelay -> R12
 021A           ;      tSprayCyc -> R14,R15
 021A           ;       tSprayOn -> R10
 021A           ;       tPumpCyc -> y+1
 021A           ;          IisOn -> y+0
                        .even
 021A           _DisposeBufDatas::
 021A 00D0              rcall push_xgsetF0FC
 021C 2497              sbiw R28,4
 021E                   .dbline -1
 021E                   .dbline 133
 021E           ; } 
 021E           ; 
 021E           ; void DisposeBufDatas(void)
 021E           ; {
 021E                   .dbline 142
 021E           ;  //定义变量
 021E           ;  unsigned char tPumpCyc;         //换能器周期,单位s
 021E           ;  unsigned char tSprayOn;         //喷射脉宽,单位0.1ms
 021E           ;  unsigned int tSprayCyc;        //喷射周期,单位ms
 021E           ;  unsigned char tPivDelay;        //piv脉宽延时,单位0.1ms
 021E           ;  char sprayNumL;                 //SprayNum低字节
 021E           ;  char sprayNumH;                 //SprayNum高字节
 021E           ;  
 021E           ;  char IisOn = 1;
 021E 0024              clr R0
 0220 0394              inc R0
 0222 0882              std y+0,R0
 0224                   .dbline 143
 0224           ;  if((SREG & 0x80) == 0x00)  //I之前是否置位
 0224 2FB6              in R2,0x3f
 0226 27FC              sbrc R2,7
 0228 02C0              rjmp L44
 022A           X18:
 022A                   .dbline 144
 022A           ;    IisOn = 0;
 022A 0024              clr R0
 022C 0882              std y+0,R0
 022E           L44:
 022E                   .dbline 146
 022E           ;  
 022E           ;  if(rx_error0)                 //接收错误
 022E 20900C00          lds R2,_rx_error0
 0232 2220              tst R2
 0234 59F0              breq L46
 0236           X19:
 0236                   .dbline 147
 0236           ;   {
 0236                   .dbline 148
 0236           ;    CLI();
 0236 F894              cli
 0238                   .dbline 149
 0238           ;    putchar(SENDAGAIN);
 0238 0EEF              ldi R16,254
 023A BCDF              rcall _putchar
 023C                   .dbline 150
 023C           ;    putchar(SENDAGAIN);
 023C 0EEF              ldi R16,254
 023E BADF              rcall _putchar
 0240                   .dbline 151
 0240           ;    if(IisOn)  
 0240 0880              ldd R0,y+0
 0242 0020              tst R0
 0244 09F4              brne X23
 0246 76C0              rjmp L47
 0248           X23:
 0248           X20:
 0248                   .dbline 152
 0248           ;      SEI();
 0248 7894              sei
 024A                   .dbline 153
 024A           ;   } 
 024A 74C0              rjmp L47
 024C           L46:
 024C                   .dbline 155
 024C           ;  else
 024C           ;  { 
 024C                   .dbline 156
 024C           ;    sprayNumL = getchar();
 024C 60DF              rcall _getchar
 024E 0A83              std y+2,R16
 0250                   .dbline 157
 0250           ;    sprayNumH = getchar();
 0250 5EDF              rcall _getchar
 0252 0B83              std y+3,R16
 0254                   .dbline 158
 0254           ;    tPumpCyc = (unsigned int )getchar();
 0254 5CDF              rcall _getchar
 0256 A02E              mov R10,R16
 0258 2A2C              mov R2,R10
 025A 3324              clr R3
 025C 2982              std y+1,R2
 025E                   .dbline 159
 025E           ;    tSprayOn = getchar();
 025E 57DF              rcall _getchar
 0260 A02E              mov R10,R16
 0262                   .dbline 160
 0262           ;    tSprayCyc = getchar();
 0262 55DF              rcall _getchar
 0264 C02E              mov R12,R16
 0266 EC2C              mov R14,R12
 0268 FF24              clr R15
 026A                   .dbline 161
 026A           ;    tPivDelay = getchar();
 026A 51DF              rcall _getchar
 026C C02E              mov R12,R16
 026E                   .dbline 174
 026E           ;    
 026E           ; /************debug*****************
 026E           ;      putchar(sprayNumL);   //debug
 026E           ;        putchar(sprayNumH);   //debug
 026E           ;        putchar(tPumpCyc);   //debug
 026E           ;        putchar(tSprayOn);   //debug
 026E           ;        putchar(tSprayCyc);   //debug
 026E           ;        putchar(tPivDelay);   //debug
 026E           ; 
 026E           ; //**********************************/   
 026E           ;    
 026E           ;    //转换数据
 026E           ;    SprayNum = (int)sprayNumL + ((int)sprayNumH << 8);
 026E 2B80              ldd R2,y+3
 0270 3324              clr R3
 0272 322C              mov R3,R2
 0274 2224              clr R2
 0276 4A80              ldd R4,y+2
 0278 5524              clr R5
 027A 420C              add R4,R2
 027C 531C              adc R5,R3
 027E 50920100          sts _SprayNum+1,R5
 0282 40920000          sts _SprayNum,R4
 0286                   .dbline 175
 0286           ;    T1OveForPump = (unsigned char)(tPumpCyc * 1000 / (2 * 65.536));
 0286 2981              ldd R18,y+1
 0288 3327              clr R19
 028A 08EE              ldi R16,1000
 028C 13E0              ldi R17,3
 028E 00D0              rcall empy16s
 0290 00D0              rcall int2fp
 0292 1801              movw R2,R16
 0294 2901              movw R4,R18
 0296 00E0              ldi R16,<L50
 0298 10E0              ldi R17,>L50
 029A 00D0              rcall lpm32
 029C 3A93              st -y,R19
 029E 2A93              st -y,R18
 02A0 1A93              st -y,R17
 02A2 0A93              st -y,R16
 02A4 8101              movw R16,R2
 02A6 9201              movw R18,R4
 02A8 00D0              rcall fpdiv2
 02AA 00D0              rcall fpint
 02AC 202E              mov R2,R16
 02AE 3324              clr R3
 02B0 30920B00          sts _T1OveForPump+1,R3
 02B4 20920A00          sts _T1OveForPump,R2
 02B8                   .dbline 176
 02B8           ;    CSprayOn = (unsigned int)(tSprayOn  * 10 );
 02B8 8AE0              ldi R24,10
 02BA 8A9D              mul R24,R10
 02BC 10920700          sts _CSprayOn+1,R1
 02C0 00920600          sts _CSprayOn,R0
 02C4                   .dbline 177
 02C4           ;    CSprayCyc = (unsigned long )tSprayCyc * 1000 ;
 02C4 1701              movw R2,R14
 02C6 4424              clr R4
 02C8 5524              clr R5
 02CA 48EE              ldi R20,232
 02CC 53E0              ldi R21,3
 02CE 60E0              ldi R22,0
 02D0 70E0              ldi R23,0
 02D2 5A92              st -y,R5
 02D4 4A92              st -y,R4
 02D6 3A92              st -y,R3
 02D8 2A92              st -y,R2
 02DA 8A01              movw R16,R20
 02DC 9B01              movw R18,R22
 02DE 00D0              rcall empy32u
 02E0 10930300          sts _CSprayCyc+1,R17
 02E4 00930200          sts _CSprayCyc,R16
 02E8 30930500          sts _CSprayCyc+2+1,R19
 02EC 20930400          sts _CSprayCyc+2,R18
 02F0                   .dbline 178
 02F0           ;    CPivDelay = (unsigned int)(tPivDelay * 100 );
 02F0 84E6              ldi R24,100
 02F2 8C9D              mul R24,R12
 02F4 10920900          sts _CPivDelay+1,R1
 02F8 00920800          sts _CPivDelay,R0
 02FC                   .dbline 180
 02FC           ;    
 02FC           ;    if(CSprayCyc > 0xffff)
 02FC 4FEF              ldi R20,255
 02FE 5FEF              ldi R21,255
 0300 60E0              ldi R22,0
 0302 70E0              ldi R23,0
 0304 1801              movw R2,R16
 0306 2901              movw R4,R18
 0308 4017              cp R20,R16
 030A 5107              cpc R21,R17
 030C 6207              cpc R22,R18
 030E 7307              cpc R23,R19
 0310 40F4              brsh L51
 0312           X21:
 0312                   .dbline 181
 0312           ;    {
 0312                   .dbline 182
 0312           ;      IsLongCyc = 1;
 0312 81E0              ldi R24,1
 0314 80930E00          sts _IsLongCyc,R24
 0318                   .dbline 183
 0318           ;        HighByte = (unsigned char )(CSprayCyc >> 16);
 0318 1201              movw R2,R4
 031A 4424              clr R4
 031C 5524              clr R5
 031E 20920F00          sts _HighByte,R2
 0322                   .dbline 184
 0322           ;    }  
 0322           L51:
 0322                   .dbline 186
 0322           ;    
 0322           ;    CLI();                //禁止中断,保证以下发送的两字节连续
 0322 F894              cli
 0324                   .dbline 187
 0324           ;    putchar(REVSUCCEED);  //回传接收成功标志
 0324 0CEF              ldi R16,252
 0326 46DF              rcall _putchar
 0328                   .dbline 188
 0328           ;    putchar(REVSUCCEED);  //回传接收成功标志
 0328 0CEF              ldi R16,252
 032A 44DF              rcall _putchar
 032C                   .dbline 190
 032C           ; 
 032C           ;    if(IisOn)
 032C 0880              ldd R0,y+0
 032E 0020              tst R0
 0330 09F0              breq L53
 0332           X22:
 0332                   .dbline 191
 0332           ;      SEI();
 0332 7894              sei
 0334           L53:
 0334                   .dbline 192
 0334           ;  }
 0334           L47:
 0334                   .dbline 193
 0334           ;  FlashRxBuf(); 
 0334 65DE              rcall _FlashRxBuf
 0336                   .dbline -2
 0336           L43:
 0336                   .dbline 0 ; func end
 0336 2496              adiw R28,4
 0338 00C0              rjmp pop_xgsetF0FC
 033A                   .dbsym l sprayNumH 3 c
 033A                   .dbsym l sprayNumL 2 c
 033A                   .dbsym r tPivDelay 12 c
 033A                   .dbsym r tSprayCyc 14 i
 033A                   .dbsym r tSprayOn 10 c
 033A                   .dbsym l tPumpCyc 1 c
 033A                   .dbsym l IisOn 0 c
 033A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.c
 0000           _tx_counter0::
 0000                   .blkb 1
 0001                   .dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.h
 0001                   .dbsym e tx_counter0 _tx_counter0 c
 0001           _tx_rd_index0::
 0001                   .blkb 1
 0002                   .dbsym e tx_rd_index0 _tx_rd_index0 c
 0002           _tx_wr_index0::
 0002                   .blkb 1
 0003                   .dbsym e tx_wr_index0 _tx_wr_index0 c
 0003           _tx_buffer0::
 0003                   .blkb 8
 000B                   .dbsym e tx_buffer0 _tx_buffer0 A[8:8]c
 000B           _FrameHead0::
 000B                   .blkb 1
 000C                   .dbsym e FrameHead0 _FrameHead0 c
 000C           _rx_error0::
 000C                   .blkb 1
 000D                   .dbsym e rx_error0 _rx_error0 c
 000D           _rx_counter0::
 000D                   .blkb 1
 000E                   .dbsym e rx_counter0 _rx_counter0 c
 000E           _rx_rd_index0::
 000E                   .blkb 1
 000F                   .dbsym e rx_rd_index0 _rx_rd_index0 c
 000F           _rx_buffer0::
 000F                   .blkb 8
 0017                   .dbsym e rx_buffer0 _rx_buffer0 A[8:8]c
                        .area lit(rom, con, rel)
 0000           L50:
 0000 6F120343          .word 0x126f,0x4303
 0004           ;    
 0004           ; }//DisposeBufDatas(void)结束

⌨️ 快捷键说明

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