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

📄 m8pwm.lis

📁 电动车控制器
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 005E 83BD              out 0x23,R24
 0060                   .dbline 124
 0060           ;  TCCR2 = 0x69; //8M/8=1MHz,0x79
 0060 89E6              ldi R24,105
 0062 85BD              out 0x25,R24
 0064                   .dbline -2
 0064           L4:
 0064                   .dbline 0 ; func end
 0064 0895              ret
 0066                   .dbend
 0066                   .dbfunc e adc_init _adc_init fV
                        .even
 0066           _adc_init::
 0066                   .dbline -1
 0066                   .dbline 130
 0066           ; }
 0066           ; /*************************************************************************** 
 0066           ;                                                     A/D初始化 
 0066           ; ****************************************************************************/ 
 0066           ; void adc_init(void) 
 0066           ; { 
 0066                   .dbline 131
 0066           ;  ADCSRA =0x0; //关闭AD 
 0066 2224              clr R2
 0068 26B8              out 0x6,R2
 006A                   .dbline 132
 006A           ;  ADMUX = (1<<REFS0)|(1<<ADLAR)|(1<<MUX1)|(1<<MUX0); //选择外部参考电源 ADC3 左对齐 
 006A 83E6              ldi R24,99
 006C 87B9              out 0x7,R24
 006E                   .dbline 133
 006E           ;  ACSR = (1<<ACD); //关闭模拟比较器 
 006E 80E8              ldi R24,128
 0070 88B9              out 0x8,R24
 0072                   .dbline 134
 0072           ;  ADCSRA = (1<<ADEN)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);//中断允许 32分频 
 0072 8DE9              ldi R24,157
 0074 86B9              out 0x6,R24
 0076                   .dbline -2
 0076           L5:
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbend
 0078                   .dbfunc e Adc_isr _Adc_isr fV
                        .even
 0078           _Adc_isr::
 0078 2A92              st -y,R2
 007A 2FB6              in R2,0x3f
 007C 2A92              st -y,R2
 007E                   .dbline -1
 007E                   .dbline 140
 007E           ;  } 
 007E           ; /*************************************************************************** 
 007E           ;                                                     A/D中断处理 
 007E           ; ****************************************************************************/ 
 007E           ; void Adc_isr(void) 
 007E           ; { 
 007E                   .dbline 141
 007E           ;  AdResult=ADCH; //读取高位数据(左对齐)
 007E 25B0              in R2,0x5
 0080 20920000          sts _AdResult,R2
 0084                   .dbline -2
 0084           L6:
 0084 2990              ld R2,y+
 0086 2FBE              out 0x3f,R2
 0088 2990              ld R2,y+
 008A                   .dbline 0 ; func end
 008A 1895              reti
 008C                   .dbend
 008C                   .dbfunc e Timer1_vof _Timer1_vof fV
                        .even
 008C           _Timer1_vof::
 008C 0A92              st -y,R0
 008E 1A92              st -y,R1
 0090 2A92              st -y,R2
 0092 3A92              st -y,R3
 0094 4A92              st -y,R4
 0096 5A92              st -y,R5
 0098 0A93              st -y,R16
 009A 1A93              st -y,R17
 009C 2A93              st -y,R18
 009E 3A93              st -y,R19
 00A0 8A93              st -y,R24
 00A2 9A93              st -y,R25
 00A4 EA93              st -y,R30
 00A6 FA93              st -y,R31
 00A8 0FB6              in R0,0x3f
 00AA 0A92              st -y,R0
 00AC 00D0              rcall push_gset1
 00AE 2497              sbiw R28,4
 00B0                   .dbline -1
 00B0                   .dbline 150
 00B0           ;  //OCR2 = 0xff - AdResult; //更新PWM参数  
 00B0           ;  
 00B0           ; } 
 00B0           ; /*************************************************************************** 
 00B0           ;           定时器1中断处理程序 
 00B0           ; ****************************************************************************/ 
 00B0           ; void Timer1_vof(void)                                      
 00B0           ; //1s中断程序,用于检测转速
 00B0           ; {    
 00B0                   .dbline 151
 00B0           ;    TCNT1=0xD23A;
 00B0 8AE3              ldi R24,53818
 00B2 92ED              ldi R25,210
 00B4 9DBD              out 0x2d,R25
 00B6 8CBD              out 0x2c,R24
 00B8                   .dbline 152
 00B8           ;    SpeedVal=RolCount*1.13;  //3.1415*3.6*后轮半径(0.1m)=1.13                   
 00B8 00E0              ldi R16,<L10
 00BA 10E0              ldi R17,>L10
 00BC 00D0              rcall lpm32
 00BE 3A93              st -y,R19
 00C0 2A93              st -y,R18
 00C2 1A93              st -y,R17
 00C4 0A93              st -y,R16
 00C6 00910200          lds R16,_RolCount
 00CA 1127              clr R17
 00CC 00D0              rcall int2fp
 00CE 3A93              st -y,R19
 00D0 2A93              st -y,R18
 00D2 1A93              st -y,R17
 00D4 0A93              st -y,R16
 00D6 00D0              rcall empy32f
 00D8 FE01              movw R30,R28
 00DA 0083              std z+0,R16
 00DC 1183              std z+1,R17
 00DE 2283              std z+2,R18
 00E0 3383              std z+3,R19
 00E2 FE01              movw R30,R28
 00E4 2080              ldd R2,z+0
 00E6 3180              ldd R3,z+1
 00E8 4280              ldd R4,z+2
 00EA 5380              ldd R5,z+3
 00EC 5A92              st -y,R5
 00EE 4A92              st -y,R4
 00F0 3A92              st -y,R3
 00F2 2A92              st -y,R2
 00F4 00E0              ldi R16,<L11
 00F6 10E0              ldi R17,>L11
 00F8 00D0              rcall lpm32
 00FA 3A93              st -y,R19
 00FC 2A93              st -y,R18
 00FE 1A93              st -y,R17
 0100 0A93              st -y,R16
 0102 00D0              rcall cmp32f
 0104 B4F0              brlt L8
 0106 FE01              movw R30,R28
 0108 2080              ldd R2,z+0
 010A 3180              ldd R3,z+1
 010C 4280              ldd R4,z+2
 010E 5380              ldd R5,z+3
 0110 5A92              st -y,R5
 0112 4A92              st -y,R4
 0114 3A92              st -y,R3
 0116 2A92              st -y,R2
 0118 00E0              ldi R16,<L11
 011A 10E0              ldi R17,>L11
 011C 00D0              rcall lpm32
 011E 3A93              st -y,R19
 0120 2A93              st -y,R18
 0122 1A93              st -y,R17
 0124 0A93              st -y,R16
 0126 00D0              rcall sub32f
 0128 00D0              rcall fp2int
 012A A801              movw R20,R16
 012C 4050              subi R20,0  ; offset = 32768
 012E 5048              sbci R21,128
 0130 07C0              rjmp L9
 0132           L8:
 0132 FE01              movw R30,R28
 0134 0081              ldd R16,z+0
 0136 1181              ldd R17,z+1
 0138 2281              ldd R18,z+2
 013A 3381              ldd R19,z+3
 013C 00D0              rcall fp2int
 013E A801              movw R20,R16
 0140           L9:
 0140 40930100          sts _SpeedVal,R20
 0144                   .dbline 153
 0144           ;    RolCount=0;    
 0144 2224              clr R2
 0146 20920200          sts _RolCount,R2
 014A                   .dbline -2
 014A           L7:
 014A 2496              adiw R28,4
 014C 00D0              rcall pop_gset1
 014E 0990              ld R0,y+
 0150 0FBE              out 0x3f,R0
 0152 F991              ld R31,y+
 0154 E991              ld R30,y+
 0156 9991              ld R25,y+
 0158 8991              ld R24,y+
 015A 3991              ld R19,y+
 015C 2991              ld R18,y+
 015E 1991              ld R17,y+
 0160 0991              ld R16,y+
 0162 5990              ld R5,y+
 0164 4990              ld R4,y+
 0166 3990              ld R3,y+
 0168 2990              ld R2,y+
 016A 1990              ld R1,y+
 016C 0990              ld R0,y+
 016E                   .dbline 0 ; func end
 016E 1895              reti
 0170                   .dbend
 0170                   .dbfunc e int0_isr _int0_isr fV
                        .even
 0170           _int0_isr::
 0170 2A92              st -y,R2
 0172 3A92              st -y,R3
 0174 8A93              st -y,R24
 0176 9A93              st -y,R25
 0178 2FB6              in R2,0x3f
 017A 2A92              st -y,R2
 017C                   .dbline -1
 017C                   .dbline 160
 017C                   .dbline 162
 017C 80910200          lds R24,_RolCount
 0180 8F5F              subi R24,255    ; addi 1
 0182 80930200          sts _RolCount,R24
 0186                   .dbline 163
 0186 8FE6              ldi R24,3183
 0188 9CE0              ldi R25,12
 018A 20900300          lds R2,_RolNum
 018E 30900400          lds R3,_RolNum+1
 0192 8215              cp R24,R2
 0194 9305              cpc R25,R3
 0196 78F4              brsh L13
 0198                   .dbline 164
 0198                   .dbline 165
 0198 2224              clr R2
 019A 3324              clr R3
 019C 30920400          sts _RolNum+1,R3
 01A0 20920300          sts _RolNum,R2
 01A4                   .dbline 166
 01A4 80910500          lds R24,_KiloMeter
 01A8 90910600          lds R25,_KiloMeter+1
 01AC 0196              adiw R24,1
 01AE 90930600          sts _KiloMeter+1,R25
 01B2 80930500          sts _KiloMeter,R24
 01B6                   .dbline 167
 01B6           L13:
 01B6                   .dbline -2
 01B6           L12:
 01B6 2990              ld R2,y+
 01B8 2FBE              out 0x3f,R2
 01BA 9991              ld R25,y+
 01BC 8991              ld R24,y+
 01BE 3990              ld R3,y+
 01C0 2990              ld R2,y+
 01C2                   .dbline 0 ; func end
 01C2 1895              reti
 01C4                   .dbend
 01C4                   .dbfunc e int1_isr _int1_isr fV
                        .even
 01C4           _int1_isr::
 01C4 2A92              st -y,R2
 01C6 8A93              st -y,R24
 01C8 2FB6              in R2,0x3f
 01CA 2A92              st -y,R2
 01CC                   .dbline -1
 01CC                   .dbline 173
 01CC           ;      
 01CC           ; } 
 01CC           ; /*************************************************************************** 
 01CC           ;           外部中断0处理程序 
 01CC           ; ****************************************************************************/
 01CC           ; void int0_isr(void)
 01CC           ; {
 01CC           ;  //external interupt on INT0
 01CC           ;     RolCount++;//半圈数增加   
 01CC           ;       if(RolNum> 3183)//半圈=3.1416*0.1米=0.31416米,1000/0,31416=3183
 01CC           ;       {
 01CC           ;          RolNum=0;
 01CC           ;          ++KiloMeter;//个位,十位不为0,只需要改变个位十位    
 01CC           ;       }
 01CC           ; }
 01CC           ; /*************************************************************************** 
 01CC           ;           外部中断1处理程序 
 01CC           ; ****************************************************************************/
 01CC           ; void int1_isr(void)
 01CC           ; {
 01CC                   .dbline 175
 01CC           ;    //external interupt on INT1
 01CC           ;    if(MCUCR&(0x01<<ISC10))
 01CC 25B6              in R2,0x35
 01CE 22FE              sbrs R2,2
 01D0 0CC0              rjmp L16
 01D2                   .dbline 176
 01D2           ;    {//上升沿触发中断,为释放状态  
 01D2                   .dbline 177
 01D2           ;       TCCR2=0x69; //8M/8=1MHz
 01D2 89E6              ldi R24,105
 01D4 85BD              out 0x25,R24
 01D6                   .dbline 178
 01D6           ;         MCUCR&=~(0x01<<ISC10);//clear ISC10 ,设为下降沿触发
 01D6 85B7              in R24,0x35
 01D8 8B7F              andi R24,251
 01DA 85BF              out 0x35,R24
 01DC                   .dbline 179
 01DC           ;         BRAKE_LED_OFF;
 01DC 85B3              in R24,0x15
 01DE 8C7F              andi R24,252
 01E0 85BB              out 0x15,R24
 01E2                   .dbline 180
 01E2           ;         BrakeFlag=0;
 01E2 2224              clr R2
 01E4 20920C00          sts _BrakeFlag,R2
 01E8                   .dbline 181
 01E8           ;    }
 01E8 0BC0              rjmp L17
 01EA           L16:

⌨️ 快捷键说明

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