📄 motor.lis
字号:
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 + -