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

📄 m8pwm.lis

📁 电动车控制器
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01EA                   .dbline 183
 01EA                   .dbline 184
 01EA 2224              clr R2
 01EC 25BC              out 0x25,R2
 01EE                   .dbline 185
 01EE 85B7              in R24,0x35
 01F0 8460              ori R24,4
 01F2 85BF              out 0x35,R24
 01F4                   .dbline 186
 01F4 85B3              in R24,0x15
 01F6 8360              ori R24,3
 01F8 85BB              out 0x15,R24
 01FA                   .dbline 187
 01FA 85E5              ldi R24,85
 01FC 80930C00          sts _BrakeFlag,R24
 0200                   .dbline 188
 0200           L17:
 0200                   .dbline -2
 0200           L15:
 0200 2990              ld R2,y+
 0202 2FBE              out 0x3f,R2
 0204 8991              ld R24,y+
 0206 2990              ld R2,y+
 0208                   .dbline 0 ; func end
 0208 1895              reti
 020A                   .dbend
 020A                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
                        .even
 020A           _uart0_rx_isr::
 020A 00D0              rcall push_lset
 020C                   .dbline -1
 020C                   .dbline 194
 020C           ;    else
 020C           ;    {//下降沿触发中断,为刹车状态  
 020C           ;       TCCR2=0;//
 020C           ;         MCUCR|=(0x01<<ISC10);//set ISC10,设为上升沿触发
 020C           ;         BRAKE_LED_ON;
 020C           ;         BrakeFlag=0x55;
 020C           ;    }   
 020C           ; }
 020C           ; /*************************************************************************** 
 020C           ;                      串口接收中断程序
 020C           ; ****************************************************************************/ 
 020C           ; void uart0_rx_isr(void)
 020C           ; {
 020C                   .dbline 197
 020C           ;  //uart has received a character in UDR    
 020C           ;       
 020C           ;       UartBuf[UartBufCount++]= UDR;
 020C 20900A00          lds R2,_UartBufCount
 0210 3324              clr R3
 0212 822D              mov R24,R2
 0214 8F5F              subi R24,255    ; addi 1
 0216 80930A00          sts _UartBufCount,R24
 021A 80E0              ldi R24,<_UartBuf
 021C 90E0              ldi R25,>_UartBuf
 021E E22D              mov R30,R2
 0220 FF27              clr R31
 0222 E80F              add R30,R24
 0224 F91F              adc R31,R25
 0226 2CB0              in R2,0xc
 0228 2082              std z+0,R2
 022A                   .dbline 199
 022A           ;       //PORTC ^=0x20;
 022A           ;       if(UartBuf[0]==0xaa)//包头
 022A 80910000          lds R24,_UartBuf
 022E 8A3A              cpi R24,170
 0230 79F5              brne L19
 0232                   .dbline 200
 0232           ;       {
 0232                   .dbline 203
 0232           ;       //UartBuf[3]=Rev,Rev,Rev,RevMode,Rev,Rev,LEFT_LED,RIGHT_LED
 0232           ;       
 0232           ;            if(UartBufCount>4)
 0232 84E0              ldi R24,4
 0234 20900A00          lds R2,_UartBufCount
 0238 8215              cp R24,R2
 023A 68F5              brsh L20
 023C                   .dbline 204
 023C           ;                {
 023C                   .dbline 205
 023C           ;                   if( ((UartBuf[1]+UartBuf[2])==0xff)&&
 023C 20900200          lds R2,_UartBuf+2
 0240 80910100          lds R24,_UartBuf+1
 0244 820D              add R24,R2
 0246 8F3F              cpi R24,255
 0248 F9F4              brne L23
 024A 20900400          lds R2,_UartBuf+4
 024E 80910300          lds R24,_UartBuf+3
 0252 820D              add R24,R2
 0254 8F3F              cpi R24,255
 0256 C1F4              brne L23
 0258                   .dbline 207
 0258           ;                               ((UartBuf[3]+UartBuf[4])==0xff) ) 
 0258           ;                       {                                                       
 0258                   .dbline 208
 0258           ;                               LrLedReg=UartBuf[3]&0x03;//
 0258 80910300          lds R24,_UartBuf+3
 025C 8370              andi R24,3
 025E 80930B00          sts _LrLedReg,R24
 0262                   .dbline 209
 0262           ;                               if(BrakeFlag!=0x55)
 0262 80910C00          lds R24,_BrakeFlag
 0266 8535              cpi R24,85
 0268 41F0              breq L30
 026A                   .dbline 210
 026A           ;                               {
 026A                   .dbline 211
 026A           ;                                   PORTC&=0xfc;//
 026A 85B3              in R24,0x15
 026C 8C7F              andi R24,252
 026E 85BB              out 0x15,R24
 0270                   .dbline 212
 0270           ;                                   PORTC|=LrLedReg;    
 0270 20900B00          lds R2,_LrLedReg
 0274 35B2              in R3,0x15
 0276 3228              or R3,R2
 0278 35BA              out 0x15,R3
 027A                   .dbline 213
 027A           ;                               }              
 027A           L30:
 027A                   .dbline 214
 027A           ;                       tx_pack(UartBuf[3]);
 027A 00910300          lds R16,_UartBuf+3
 027E 11D0              rcall _tx_pack
 0280                   .dbline 215
 0280           ;                               PORTC ^=0x20;                                           
 0280 80E2              ldi R24,32
 0282 25B2              in R2,0x15
 0284 2826              eor R2,R24
 0286 25BA              out 0x15,R2
 0288                   .dbline 216
 0288           ;                   }
 0288           L23:
 0288                   .dbline 217
 0288           ;                   UartBufCount=0;                     
 0288 2224              clr R2
 028A 20920A00          sts _UartBufCount,R2
 028E                   .dbline 218
 028E           ;            }      
 028E                   .dbline 219
 028E           ;       }
 028E 03C0              rjmp L20
 0290           L19:
 0290                   .dbline 220
 0290 2224              clr R2
 0292 20920A00          sts _UartBufCount,R2
 0296           L20:
 0296                   .dbline -2
 0296           L18:
 0296 00D0              rcall pop_lset
 0298                   .dbline 0 ; func end
 0298 1895              reti
 029A                   .dbend
 029A                   .dbfunc e uart0_tx _uart0_tx fV
 029A           ;          tdata -> R16
                        .even
 029A           _uart0_tx::
 029A                   .dbline -1
 029A                   .dbline 227
 029A           ;       else UartBufCount=0;   
 029A           ;       
 029A           ; }
 029A           ; /*************************************************************************** 
 029A           ;                      串口接收程序
 029A           ; ****************************************************************************/ 
 029A           ; void uart0_tx(unsigned char tdata)
 029A           ; {
 029A           L34:
 029A                   .dbline 228
 029A           L35:
 029A                   .dbline 228
 029A           ;    while(!(UCSRA & (1<<UDRE) ));
 029A 5D9B              sbis 0xb,5
 029C FECF              rjmp L34
 029E                   .dbline 229
 029E           ;    UDR = tdata;
 029E 0CB9              out 0xc,R16
 02A0                   .dbline -2
 02A0           L33:
 02A0                   .dbline 0 ; func end
 02A0 0895              ret
 02A2                   .dbsym r tdata 16 c
 02A2                   .dbend
 02A2                   .dbfunc e tx_pack _tx_pack fV
 02A2           ;          tmptt -> R20
 02A2           ;           mode -> R20
                        .even
 02A2           _tx_pack::
 02A2 00D0              rcall push_gset1
 02A4 402F              mov R20,R16
 02A6                   .dbline -1
 02A6                   .dbline 232
 02A6           ; }
 02A6           ; void tx_pack(uchar mode)
 02A6           ; {   //revmode=mode&0x10
 02A6                   .dbline 234
 02A6           ;     uchar tmptt;
 02A6           ;       uart0_tx(0xaa);
 02A6 0AEA              ldi R16,170
 02A8 F8DF              rcall _uart0_tx
 02AA                   .dbline 235
 02AA           ;       if(mode&0x10)
 02AA 44FF              sbrs R20,4
 02AC 1BC0              rjmp L38
 02AE                   .dbline 236
 02AE           ;       {//revmode=1,返回里程;
 02AE                   .dbline 237
 02AE           ;           tmptt=KiloMeter&0x00ff;
 02AE 40910500          lds R20,_KiloMeter
 02B2 5070              andi R21,0
 02B4                   .dbline 238
 02B4           ;               uart0_tx(tmptt);
 02B4 042F              mov R16,R20
 02B6 F1DF              rcall _uart0_tx
 02B8                   .dbline 239
 02B8           ;         uart0_tx(0xff-tmptt);
 02B8 242E              mov R2,R20
 02BA 3324              clr R3
 02BC 0FEF              ldi R16,255
 02BE 0219              sub R16,R2
 02C0 1309              sbc R17,R3
 02C2 EBDF              rcall _uart0_tx
 02C4                   .dbline 240
 02C4           ;               tmptt=(KiloMeter>>8)&0x00ff;
 02C4 40910500          lds R20,_KiloMeter
 02C8 50910600          lds R21,_KiloMeter+1
 02CC 452F              mov R20,R21
 02CE 5527              clr R21
 02D0 5070              andi R21,0
 02D2                   .dbline 241
 02D2           ;           uart0_tx(tmptt);//+24V
 02D2 042F              mov R16,R20
 02D4 E2DF              rcall _uart0_tx
 02D6                   .dbline 242
 02D6           ;           uart0_tx(0xff-tmptt);
 02D6 242E              mov R2,R20
 02D8 3324              clr R3
 02DA 0FEF              ldi R16,255
 02DC 0219              sub R16,R2
 02DE 1309              sbc R17,R3
 02E0 DCDF              rcall _uart0_tx
 02E2                   .dbline 243
 02E2           ;       }
 02E2 14C0              rjmp L39
 02E4           L38:
 02E4                   .dbline 245
 02E4                   .dbline 246
 02E4 00910100          lds R16,_SpeedVal
 02E8 D8DF              rcall _uart0_tx
 02EA                   .dbline 247
 02EA 20900100          lds R2,_SpeedVal
 02EE 3324              clr R3
 02F0 0FEF              ldi R16,255
 02F2 0219              sub R16,R2
 02F4 1309              sbc R17,R3
 02F6 D1DF              rcall _uart0_tx
 02F8                   .dbline 248
 02F8 00910000          lds R16,_AdResult
 02FC CEDF              rcall _uart0_tx
 02FE                   .dbline 249
 02FE 20900000          lds R2,_AdResult
 0302 3324              clr R3
 0304 0FEF              ldi R16,255
 0306 0219              sub R16,R2
 0308 1309              sbc R17,R3
 030A C7DF              rcall _uart0_tx
 030C                   .dbline 251
 030C           L39:
 030C                   .dbline -2
 030C           L37:
 030C 00D0              rcall pop_gset1
 030E                   .dbline 0 ; func end
 030E 0895              ret
 0310                   .dbsym r tmptt 20 c
 0310                   .dbsym r mode 20 c
 0310                   .dbend
 0310                   .dbfunc e SpeedControl _SpeedControl fV
 0310           ;           tmp2 -> <dead>
 0310           ;           tmp1 -> R16,R17
                        .even
 0310           _SpeedControl::
 0310                   .dbline -1
 0310                   .dbline 254
 0310           ;       else
 0310           ;       {//revmode=0,返回电压和速度
 0310           ;           uart0_tx(SpeedVal);
 0310           ;         uart0_tx(0xff-SpeedVal);
 0310           ;           uart0_tx(AdResult);//+24V
 0310           ;           uart0_tx(0xff-AdResult);
 0310           ;       
 0310           ;       }       
 0310           ; }
 0310           ; void SpeedControl(void)
 0310           ; {
 0310                   .dbline 256
 0310           ;     uint tmp1,tmp2;
 0310           ;       tmp1=OCR2+SpeedVal+5;
 0310 20900100          lds R2,_SpeedVal
 0314 3324              clr R3
 0316 03B5              in R16,0x23
 0318 1127              clr R17
 031A 020D              add R16,R2
 031C 131D              adc R17,R3
 031E 0B5F              subi R16,251  ; offset = 5
 0320 1F4F              sbci R17,255
 0322                   .dbline 257
 0322           ;       if(tmp1>0xff)tmp1=0xff;  
 0322 8FEF              ldi R24,255
 0324 90E0              ldi R25,0
 0326 8017              cp R24,R16
 0328 9107              cpc R25,R17

⌨️ 快捷键说明

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