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

📄 motor.lis

📁 直流电机驱动系统设计,以单片机实现电动机的调速控制.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0514           ;  int temp;
 0514           ;  operation=Data[3];
 0514 40911300          lds R20,_Data+3
 0518                   .dbline 170
 0518           ;  temp=Data[4];
 0518 60911400          lds R22,_Data+4
 051C 7727              clr R23
 051E                   .dbline 171
 051E           ;  temp=temp<<8;
 051E 762F              mov R23,R22
 0520 6627              clr R22
 0522                   .dbline 172
 0522           ;  adress=temp+Data[5];
 0522 20901500          lds R2,_Data+5
 0526 3324              clr R3
 0528 462E              mov R4,R22
 052A 572E              mov R5,R23
 052C 420C              add R4,R2
 052E 531C              adc R5,R3
 0530 50920F00          sts _adress+1,R5
 0534 40920E00          sts _adress,R4
 0538                   .dbline 173
 0538           ;  switch(operation&0x0F)
 0538 642F              mov R22,R20
 053A 7727              clr R23
 053C 6F70              andi R22,15
 053E 7070              andi R23,0
 0540 6030              cpi R22,0
 0542 6707              cpc R22,R23
 0544 49F0              breq L95
 0546           X5:
 0546 6130              cpi R22,1
 0548 E0E0              ldi R30,0
 054A 7E07              cpc R23,R30
 054C 51F0              breq L96
 054E 6230              cpi R22,2
 0550 E0E0              ldi R30,0
 0552 7E07              cpc R23,R30
 0554 91F0              breq L98
 0556 12C0              rjmp L93
 0558           X6:
 0558                   .dbline 174
 0558           L95:
 0558                   .dbline 174
 0558           ;  {case 0:readdata(operation>>4);break;
 0558 042F              mov R16,R20
 055A 0295              swap R16
 055C 0F70              andi R16,#0x0F
 055E 55DF              rcall _readdata
 0560                   .dbline 174
 0560 0DC0              rjmp L93
 0562           L96:
 0562                   .dbline 175
 0562           ;   case 1:EEPROMWriteBytes(adress,&Data[6],2);break;
 0562 82E0              ldi R24,2
 0564 90E0              ldi R25,0
 0566 9983              std y+1,R25
 0568 8883              std y+0,R24
 056A 20E0              ldi R18,<_Data+6
 056C 30E0              ldi R19,>_Data+6
 056E 00910E00          lds R16,_adress
 0572 10910F00          lds R17,_adress+1
 0576 00D0              rcall _EEPROMWriteBytes
 0578                   .dbline 175
 0578 01C0              rjmp L93
 057A           L98:
 057A                   .dbline 176
 057A 75DF              rcall _order
 057C                   .dbline 176
 057C                   .dbline 177
 057C           L93:
 057C                   .dbline -2
 057C                   .dbline 179
 057C           ;   case 2:order();break;
 057C           ;   default :break;
 057C           ;  }
 057C           ; }
 057C           L88:
 057C 2296              adiw R28,2
 057E 00D0              rcall pop_gset2
 0580                   .dbline 0 ; func end
 0580 0895              ret
 0582                   .dbsym r operation 20 c
 0582                   .dbsym r temp 22 I
 0582                   .dbend
 0582                   .dbfunc e main _main fV
                        .even
 0582           _main::
 0582                   .dbline -1
 0582                   .dbline 183
 0582           ; 
 0582           ; //***************************主函数********************************//
 0582           ; void main()
 0582           ; {USARTInit(25);              //初始化串口             
 0582                   .dbline 183
 0582 09E1              ldi R16,25
 0584 10E0              ldi R17,0
 0586 C1DE              rcall _USARTInit
 0588                   .dbline 184
 0588           ;  TCNT1=00;                   //定时器1初始化 
 0588 2224              clr R2
 058A 3324              clr R3
 058C 3DBC              out 0x2d,R3
 058E 2CBC              out 0x2c,R2
 0590                   .dbline 185
 0590           ;  TCCR1B=0x06;
 0590 86E0              ldi R24,6
 0592 8EBD              out 0x2e,R24
 0594                   .dbline 186
 0594           ;  DDRB=0x0F;                  //I/O口初始化
 0594 8FE0              ldi R24,15
 0596 87BB              out 0x17,R24
 0598                   .dbline 187
 0598           ;  DDRD=0xC0;     
 0598 80EC              ldi R24,192
 059A 81BB              out 0x11,R24
 059C                   .dbline 188
 059C           ;  TIMSK=0x40;                 //中断初始化 
 059C 80E4              ldi R24,64
 059E 89BF              out 0x39,R24
 05A0                   .dbline 189
 05A0           ;  OCR2 = 0x0F;                //PWM初始化
 05A0 8FE0              ldi R24,15
 05A2 83BD              out 0x23,R24
 05A4                   .dbline 190
 05A4           ;  TCCR2=0x72;
 05A4 82E7              ldi R24,114
 05A6 85BD              out 0x25,R24
 05A8                   .dbline 191
 05A8           ;  PORTB=PORTB&0xFC|0x01;
 05A8 88B3              in R24,0x18
 05AA 8C7F              andi R24,252
 05AC 8160              ori R24,1
 05AE 88BB              out 0x18,R24
 05B0                   .dbline 192
 05B0           ;  PORTD=PORTD&0x3F|0x80;
 05B0 82B3              in R24,0x12
 05B2 8F73              andi R24,63
 05B4 8068              ori R24,128
 05B6 82BB              out 0x12,R24
 05B8                   .dbline 193
 05B8           ;  SEI();
 05B8 7894              sei
 05BA           L100:
 05BA                   .dbline 194
 05BA                   .dbline 194
 05BA           L101:
 05BA                   .dbline 194
 05BA FFCF              rjmp L100
 05BC           X7:
 05BC                   .dbline -2
 05BC                   .dbline 195
 05BC           ;  do{} while(1);              //等待中断
 05BC           ; }
 05BC           L99:
 05BC                   .dbline 0 ; func end
 05BC 0895              ret
 05BE                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 DFC2              rjmp _UART_RXC
                        .area text(rom, con, rel)
 05BE                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 05BE                   .dbfunc e UART_RXC _UART_RXC fV
 05BE           ;              i -> R20
                        .even
 05BE           _UART_RXC::
 05BE 00D0              rcall push_lset
 05C0 00D0              rcall push_gset1
 05C2                   .dbline -1
 05C2                   .dbline 200
 05C2           ; 
 05C2           ; //***************************串行接收中断服务程序******************//
 05C2           ; #pragma interrupt_handler UART_RXC:12
 05C2           ; void UART_RXC(void)
 05C2           ; {char i=0;
 05C2                   .dbline 200
 05C2 4427              clr R20
 05C4                   .dbline 201
 05C4           ;  CLI();
 05C4 F894              cli
 05C6                   .dbline 202
 05C6           ;  Data[0]=UDR;
 05C6 2CB0              in R2,0xc
 05C8 20921000          sts _Data,R2
 05CC                   .dbline 203
 05CC           ;  if(Data[0]==0x55)           //起始位检测
 05CC 822D              mov R24,R2
 05CE 8535              cpi R24,85
 05D0 C1F4              brne L104
 05D2                   .dbline 204
 05D2           ;  {do
 05D2                   .dbline 205
 05D2           L109:
 05D2                   .dbline 205
 05D2           L110:
 05D2                   .dbline 205
 05D2           ;   {while(!(USR&(1<<RXC)));
 05D2 5F9B              sbis 0xb,7
 05D4 FECF              rjmp L109
 05D6                   .dbline 206
 05D6           ;    i++;
 05D6 4395              inc R20
 05D8                   .dbline 207
 05D8           ;    Data[i]=UDR;
 05D8 80E0              ldi R24,<_Data
 05DA 90E0              ldi R25,>_Data
 05DC E42F              mov R30,R20
 05DE FF27              clr R31
 05E0 E80F              add R30,R24
 05E2 F91F              adc R31,R25
 05E4 2CB0              in R2,0xc
 05E6 2082              std z+0,R2
 05E8                   .dbline 208
 05E8           ;    if(i==9)
 05E8 4930              cpi R20,9
 05EA 09F4              brne L112
 05EC                   .dbline 209
 05EC 01C0              rjmp L108
 05EE           L112:
 05EE                   .dbline 209
 05EE           L107:
 05EE                   .dbline 209
 05EE           ;    break;} while(1);
 05EE F1CF              rjmp L110
 05F0           L108:
 05F0                   .dbline 210
 05F0           ;   if((Data[8]==0xFE)&&(Data[9]==0xFF))  //检测结束位
 05F0 80911800          lds R24,_Data+8
 05F4 8E3F              cpi R24,254
 05F6 29F4              brne L114
 05F8 80911900          lds R24,_Data+9
 05FC 8F3F              cpi R24,255
 05FE 09F4              brne L114
 0600                   .dbline 211
 0600 87DF              rcall _Datadisposal
 0602           L114:
 0602                   .dbline 211
 0602           ;   Datadisposal();}
 0602           L104:
 0602                   .dbline 212
 0602           ;  SEI();
 0602 7894              sei
 0604                   .dbline -2
 0604                   .dbline 213
 0604           ; }
 0604           L103:
 0604 00D0              rcall pop_gset1
 0606 00D0              rcall pop_lset
 0608                   .dbline 0 ; func end
 0608 1895              reti
 060A                   .dbsym r i 20 c
 060A                   .dbend
                        .area vector(rom, abs)
                        .org 8
 0008 05C3              rjmp _TIM2_OVF
                        .area text(rom, con, rel)
 060A                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 060A                   .dbfunc e TIM2_OVF _TIM2_OVF fV
                        .even
 060A           _TIM2_OVF::
 060A 00D0              rcall push_lset
 060C 2297              sbiw R28,2
 060E                   .dbline -1
 060E                   .dbline 218
 060E           ; 
 060E           ; //***************************定时器2中断服务程序*******************//
 060E           ; #pragma interrupt_handler TIM2_OVF:5
 060E           ; void TIM2_OVF(void)    
 060E           ; {CLI();
 060E                   .dbline 218
 060E F894              cli
 0610                   .dbline 219
 0610           ;  EEPROMReadBytes(0x000C,&itime,2);//读采样次数
 0610 82E0              ldi R24,2
 0612 90E0              ldi R25,0
 0614 9983              std y+1,R25
 0616 8883              std y+0,R24
 0618 20E0              ldi R18,<_itime
 061A 30E0              ldi R19,>_itime
 061C 0CE0              ldi R16,12
 061E 10E0              ldi R17,0
 0620 00D0              rcall _EEPROMReadBytes
 0622                   .dbline 220
 0622           ;  a++;
 0622 80910C00          lds R24,_a
 0626 90910D00          lds R25,_a+1
 062A 0196              adiw R24,1
 062C 90930D00          sts _a+1,R25
 0630 80930C00          sts _a,R24
 0634                   .dbline 221
 0634           ;  if(a==itime)                //时间窗口判断,
 0634 20900600          lds R2,_itime
 0638 30900700          lds R3,_itime+1
 063C 8215              cp R24,R2
 063E 9305              cpc R25,R3
 0640 39F4              brne L119
 0642                   .dbline 222
 0642           ;   {a = 0;
 0642                   .dbline 222
 0642 2224              clr R2
 0644 3324              clr R3
 0646 30920D00          sts _a+1,R3
 064A 20920C00          sts _a,R2
 064E                   .dbline 223
 064E           ;    PIDB();} 
 064E 3BDD              rcall _PIDB
 0650                   .dbline 223
 0650           L119:
 0650                   .dbline 224
 0650           ;   SEI();
 0650 7894              sei
 0652                   .dbline -2
 0652                   .dbline 225
 0652           ; }
 0652           L118:
 0652 2296              adiw R28,2
 0654 00D0              rcall pop_lset
 0656                   .dbline 0 ; func end
 0656 1895              reti
 0658                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\张军\AVR\光盘内容\实例源文件\第九章工程\Motor.c
 0000           _intxin::
 0000                   .blkb 2
 0002                   .dbsym e intxin _intxin X
 0002           _floatxin::
 0002                   .blkb 4
 0006                   .dbsym e floatxin _floatxin X
 0006           _itime::
 0006                   .blkb 2
 0008                   .dbsym e itime _itime I
 0008           _t::
 0008                   .blkb 4
 000C                   .dbsym e t _t D
 000C           _a::
 000C                   .blkb 2
 000E                   .dbsym e a _a I
 000E           _adress::
 000E                   .blkb 2
 0010                   .dbsym e adress _adress I
 0010           _Data::
 0010                   .blkb 10
 001A                   .dbsym e Data _Data A[10:10]c
                        .area lit(rom, con, rel)
 0000           L27:
 0000 0000A040          .word 0x0,0x40a0
 0004           L26:
 0004 00007F43          .word 0x0,0x437f
 0008           L23:
 0008 85B10539          .word 0xb185,0x3905

⌨️ 快捷键说明

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