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

📄 m16pwm-led.lis

📁 电动车控制器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0094 90E0              ldi R25,>_UartBuf
 0096 E22D              mov R30,R2
 0098 FF27              clr R31
 009A E80F              add R30,R24
 009C F91F              adc R31,R25
 009E 2CB0              in R2,0xc
 00A0 2082              std z+0,R2
 00A2                   .dbline 102
 00A2           ;       if(UartBuf[0]==0xaa)//包头
 00A2 80910000          lds R24,_UartBuf
 00A6 8A3A              cpi R24,170
 00A8 59F5              brne L5
 00AA                   .dbline 103
 00AA           ;       {
 00AA                   .dbline 105
 00AA           ;       //UartBuf[3]=Rev,Rev,Rev,Rev,Rev,Rev,LEFT_LED,RIGHT_LED 
 00AA           ;            if(UartBufCount>4)
 00AA 84E0              ldi R24,4
 00AC 20901700          lds R2,_UartBufCount
 00B0 8215              cp R24,R2
 00B2 48F5              brsh L6
 00B4                   .dbline 106
 00B4           ;                {
 00B4                   .dbline 107
 00B4           ;                   if( ((UartBuf[1]+UartBuf[2])==0xff)&&
 00B4 20900200          lds R2,_UartBuf+2
 00B8 80910100          lds R24,_UartBuf+1
 00BC 820D              add R24,R2
 00BE 8F3F              cpi R24,255
 00C0 D9F4              brne L9
 00C2 20900400          lds R2,_UartBuf+4
 00C6 80910300          lds R24,_UartBuf+3
 00CA 820D              add R24,R2
 00CC 8F3F              cpi R24,255
 00CE A1F4              brne L9
 00D0                   .dbline 109
 00D0           ;                               ((UartBuf[3]+UartBuf[4])==0xff) ) 
 00D0           ;                       {                               
 00D0                   .dbline 110
 00D0           ;                               LedBuf[0]=UartBuf[1];//SpeedVal
 00D0 20900100          lds R2,_UartBuf+1
 00D4 20921400          sts _LedBuf,R2
 00D8                   .dbline 111
 00D8           ;                               voldata=UartBuf[3];
 00D8 40910300          lds R20,_UartBuf+3
 00DC                   .dbline 112
 00DC           ;                               if(voldata<105)voldata=105; //电压范围21~29.5,每个码表示0.2V
 00DC 4936              cpi R20,105
 00DE 08F4              brsh L17
 00E0                   .dbline 112
 00E0 49E6              ldi R20,105
 00E2           L17:
 00E2                   .dbline 114
 00E2           ;                               // result=100*((tmpvol/5)-21)/(29.5-21)
 00E2           ;                               LedBuf[1]=40*(voldata-105)/17;//+24V
 00E2 88E2              ldi R24,40
 00E4 849F              mul R24,R20
 00E6 8001              movw R16,R0
 00E8 0856              subi R16,104
 00EA 1041              sbci R17,16
 00EC 21E1              ldi R18,17
 00EE 30E0              ldi R19,0
 00F0 0E940000          xcall div16s
 00F4 00931500          sts _LedBuf+1,R16
 00F8                   .dbline 116
 00F8           ;                                                                                                       
 00F8           ;                   }
 00F8           L9:
 00F8                   .dbline 117
 00F8           ;                   UartBufCount=0;                     
 00F8 2224              clr R2
 00FA 20921700          sts _UartBufCount,R2
 00FE                   .dbline 118
 00FE           ;            }      
 00FE                   .dbline 119
 00FE           ;       }
 00FE 03C0              xjmp L6
 0100           L5:
 0100                   .dbline 120
 0100 2224              clr R2
 0102 20921700          sts _UartBufCount,R2
 0106           L6:
 0106                   .dbline -2
 0106           L4:
 0106 0E940000          xcall pop_gset1
 010A 0990              ld R0,y+
 010C 0FBE              out 0x3f,R0
 010E F991              ld R31,y+
 0110 E991              ld R30,y+
 0112 9991              ld R25,y+
 0114 8991              ld R24,y+
 0116 3991              ld R19,y+
 0118 2991              ld R18,y+
 011A 1991              ld R17,y+
 011C 0991              ld R16,y+
 011E 3990              ld R3,y+
 0120 2990              ld R2,y+
 0122 1990              ld R1,y+
 0124 0990              ld R0,y+
 0126                   .dbline 0 ; func end
 0126 1895              reti
 0128                   .dbsym r voldata 20 c
 0128                   .dbend
 0128                   .dbfunc e uart0_tx _uart0_tx fV
 0128           ;          tdata -> R16
                        .even
 0128           _uart0_tx::
 0128                   .dbline -1
 0128                   .dbline 126
 0128           ;       else UartBufCount=0;   
 0128           ; }
 0128           ; /*************************************************************************** 
 0128           ;                                                     
 0128           ; ****************************************************************************/ 
 0128           ; void uart0_tx(uchar tdata)
 0128           ; {
 0128           L21:
 0128                   .dbline 127
 0128           L22:
 0128                   .dbline 127
 0128           ;    while(!(UCSRA & (1<<UDRE) ));
 0128 5D9B              sbis 0xb,5
 012A FECF              rjmp L21
 012C                   .dbline 128
 012C           ;    UDR = tdata;
 012C 0CB9              out 0xc,R16
 012E                   .dbline -2
 012E           L20:
 012E                   .dbline 0 ; func end
 012E 0895              ret
 0130                   .dbsym r tdata 16 c
 0130                   .dbend
 0130                   .dbfunc e tx_pack _tx_pack fV
                        .even
 0130           _tx_pack::
 0130                   .dbline -1
 0130                   .dbline 131
 0130           ; }
 0130           ; void tx_pack(void)
 0130           ; {
 0130                   .dbline 133
 0130           ;   
 0130           ;       uart0_tx(0xaa);
 0130 0AEA              ldi R16,170
 0132 FADF              xcall _uart0_tx
 0134                   .dbline 134
 0134           ;       if(SpeedMode)
 0134 20900100          lds R2,_SpeedMode
 0138 2220              tst R2
 013A 59F0              breq L25
 013C                   .dbline 135
 013C           ;       {   //巡航模式
 013C                   .dbline 136
 013C           ;           uart0_tx(SpeedVal);
 013C 00910200          lds R16,_SpeedVal
 0140 F3DF              xcall _uart0_tx
 0142                   .dbline 137
 0142           ;           uart0_tx(0xff-SpeedVal);            
 0142 20900200          lds R2,_SpeedVal
 0146 3324              clr R3
 0148 0FEF              ldi R16,255
 014A 0219              sub R16,R2
 014C 1309              sbc R17,R3
 014E ECDF              xcall _uart0_tx
 0150                   .dbline 138
 0150           ;       }       
 0150 0AC0              xjmp L26
 0152           L25:
 0152                   .dbline 140
 0152           ;       else
 0152           ;       {   //手动模式
 0152                   .dbline 141
 0152           ;           uart0_tx(AdResult);
 0152 00910000          lds R16,_AdResult
 0156 E8DF              xcall _uart0_tx
 0158                   .dbline 142
 0158           ;           uart0_tx(0xff-AdResult);    
 0158 20900000          lds R2,_AdResult
 015C 3324              clr R3
 015E 0FEF              ldi R16,255
 0160 0219              sub R16,R2
 0162 1309              sbc R17,R3
 0164 E1DF              xcall _uart0_tx
 0166                   .dbline 143
 0166           ;       }
 0166           L26:
 0166                   .dbline 144
 0166           ;       uart0_tx(M8Mode);
 0166 00910300          lds R16,_M8Mode
 016A DEDF              xcall _uart0_tx
 016C                   .dbline 145
 016C           ;       uart0_tx(0xff-M8Mode);
 016C 20900300          lds R2,_M8Mode
 0170 3324              clr R3
 0172 0FEF              ldi R16,255
 0174 0219              sub R16,R2
 0176 1309              sbc R17,R3
 0178 D7DF              xcall _uart0_tx
 017A                   .dbline -2
 017A           L24:
 017A                   .dbline 0 ; func end
 017A 0895              ret
 017C                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C94BE00          jmp _int0_isr
                        .area text(rom, con, rel)
 017C                   .dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
 017C                   .dbfunc e int0_isr _int0_isr fV
                        .even
 017C           _int0_isr::
 017C 2A92              st -y,R2
 017E 8A93              st -y,R24
 0180 2FB6              in R2,0x3f
 0182 2A92              st -y,R2
 0184                   .dbline -1
 0184                   .dbline 152
 0184           ; }
 0184           ; /*************************************************************************** 
 0184           ;           用于手动模式和巡航模式的选择                                    
 0184           ; ****************************************************************************/ 
 0184           ; #pragma interrupt_handler int0_isr:2
 0184           ; void int0_isr(void)
 0184           ; {
 0184                   .dbline 154
 0184           ;  //external interupt on INT0
 0184           ;      if(SpeedMode)
 0184 20900100          lds R2,_SpeedMode
 0188 2220              tst R2
 018A 31F0              breq L28
 018C                   .dbline 155
 018C           ;        {
 018C                   .dbline 156
 018C           ;            SpeedMode=0;//手动模式
 018C 2224              clr R2
 018E 20920100          sts _SpeedMode,R2
 0192                   .dbline 157
 0192           ;                LedDp=0;
 0192 20921600          sts _LedDp,R2
 0196                   .dbline 158
 0196           ;        }       
 0196 0AC0              xjmp L29
 0198           L28:
 0198                   .dbline 160
 0198                   .dbline 161
 0198 85E5              ldi R24,85
 019A 80930100          sts _SpeedMode,R24
 019E                   .dbline 162
 019E 81E0              ldi R24,1
 01A0 80931600          sts _LedDp,R24
 01A4                   .dbline 163
 01A4 20900000          lds R2,_AdResult
 01A8 20920200          sts _SpeedVal,R2
 01AC                   .dbline 164
 01AC           L29:
 01AC                   .dbline -2
 01AC           L27:
 01AC 2990              ld R2,y+
 01AE 2FBE              out 0x3f,R2
 01B0 8991              ld R24,y+
 01B2 2990              ld R2,y+
 01B4                   .dbline 0 ; func end
 01B4 1895              reti
 01B6                   .dbend
 01B6                   .dbfunc e adc_init _adc_init fV
                        .even
 01B6           _adc_init::
 01B6                   .dbline -1
 01B6                   .dbline 170
 01B6           ;        else
 01B6           ;        {
 01B6           ;            SpeedMode=0x55;//巡航模式
 01B6           ;                LedDp=0x01;
 01B6           ;                SpeedVal=AdResult;
 01B6           ;        }
 01B6           ; }
 01B6           ; /*************************************************************************** 
 01B6           ;                                                     A/D初始化 
 01B6           ; ****************************************************************************/ 
 01B6           ; void adc_init(void) 
 01B6           ; { 
 01B6                   .dbline 171
 01B6           ;  ADCSRA =0x0; //关闭AD 
 01B6 2224              clr R2
 01B8 26B8              out 0x6,R2
 01BA                   .dbline 172
 01BA           ;  ADMUX = (1<<REFS0)|(1<<ADLAR)|(1<<MUX1); //选择外部参考电源 ADC2 左对齐 
 01BA 82E6              ldi R24,98
 01BC 87B9              out 0x7,R24
 01BE                   .dbline 173
 01BE           ;  ACSR = (1<<ACD); //关闭模拟比较器 
 01BE 80E8              ldi R24,128
 01C0 88B9              out 0x8,R24
 01C2                   .dbline 174
 01C2           ;  ADCSRA = (1<<ADEN)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);//中断允许 32分频 
 01C2 8DE9              ldi R24,157
 01C4 86B9              out 0x6,R24
 01C6                   .dbline -2
 01C6           L30:
 01C6                   .dbline 0 ; func end
 01C6 0895              ret
 01C8                   .dbend
                        .area vector(rom, abs)
                        .org 56
 0038 0C94E400          jmp _Adc_isr
                        .area text(rom, con, rel)
 01C8                   .dbfile D:\EBIKE\eb_pro\M16PWM_led\m16pwm-led.c
 01C8                   .dbfunc e Adc_isr _Adc_isr fV
 01C8           ;         ad_tmp -> R20,R21
                        .even
 01C8           _Adc_isr::
 01C8 0A93              st -y,R16
 01CA 1A93              st -y,R17
 01CC 2A93              st -y,R18
 01CE 3A93              st -y,R19
 01D0 8A93              st -y,R24
 01D2 9A93              st -y,R25
 01D4 EA93              st -y,R30
 01D6 0FB7              in R16,0x3f
 01D8 0A93              st -y,R16
 01DA 0E940000          xcall push_gset1
 01DE                   .dbline -1
 01DE                   .dbline 181
 01DE           ; } 
 01DE           ; /*************************************************************************** 
 01DE           ;                                                     A/D中断处理 
 01DE           ; ****************************************************************************/ 
 01DE           ; #pragma interrupt_handler Adc_isr:15
 01DE           ; void Adc_isr(void) 
 01DE           ; { 
 01DE                   .dbline 183
 01DE           ;    uint ad_tmp;
 01DE           ;    ad_tmp=ADCH; //读取高位数据(左对齐)
 01DE 45B1              in R20,0x5
 01E0 5527              clr R21
 01E2                   .dbline 184
 01E2           ;    if(ad_tmp>0xd0)ad_tmp=0xd0;
 01E2 80ED              ldi R24,208

⌨️ 快捷键说明

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