📄 motor_master.lst
字号:
0148 9508 RET
FILE: F:\IccAvr_Pro\Motor_master.c
(0001)
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) //#include "Display.h"
(0005) #include "SPI_master.h"
(0006) #include "time_master.h"
(0007)
(0008) extern unsigned char timeflag,dispflag;
(0009)
(0010)
(0011) extern unsigned char SPI_rx_buff[SIZE];
(0012) extern unsigned char SPI_tx_buff[SIZE];
(0013) extern unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow;
(0014) extern unsigned char tx_wr_index,tx_rd_index,tx_counter,SPI_ok,SPI_datain,temp;
(0015)
(0016) unsigned char pwm[2]={0x7f,0xff};
(0017) unsigned char qep_data1[3],qep_data2[3];
(0018) void port_init(void)
(0019) {
(0020) PORTA = 0x00;
_port_init:
0149 2422 CLR R2
014A BA2B OUT 0x1B,R2
(0021) DDRA = 0x00;
014B BA2A OUT 0x1A,R2
(0022) PORTB = 0x00;
014C BA28 OUT 0x18,R2
(0023) DDRB = 0x00;
014D BA27 OUT 0x17,R2
(0024) PORTC = 0x00; //m103 output only
014E BA25 OUT 0x15,R2
(0025) DDRC = 0x00;
014F BA24 OUT 0x14,R2
(0026) PORTD = 0x00;
0150 BA22 OUT 0x12,R2
(0027) DDRD = 0x00;
0151 BA21 OUT 0x11,R2
0152 9508 RET
(0028) }
(0029)
(0030)
(0031)
(0032) //call this routine to initialize all peripherals
(0033) void init_devices(void)
(0034) {
(0035) //stop errant interrupts until set up
(0036) CLI(); //disable all interrupts
_init_devices:
0153 94F8 BCLR 7
(0037) port_init();
0154 DFF4 RCALL _port_init
(0038) timer0_init();
0155 940E004C CALL _timer0_init
(0039) timer2_init();
0157 940E0064 CALL _timer2_init
(0040) spi_init();
0159 940E0131 CALL _spi_init
(0041)
(0042)
(0043) MCUCR = 0x00;
015B 2422 CLR R2
015C BE25 OUT 0x35,R2
(0044) GICR = 0x00;
015D BE2B OUT 0x3B,R2
(0045) TIMSK = 0x41; //timer interrupt sources
015E E481 LDI R24,0x41
015F BF89 OUT 0x39,R24
(0046) SEI(); //re-enable interrupts
0160 9478 BSET 7
0161 9508 RET
_main:
t --> R20
set_pwm --> R10
SPI_flag --> R20
c --> R14
i --> Y+2
j --> Y+0
0162 9723 SBIW R28,3
(0047) //all peripherals are now initialized
(0048) }
(0049)
(0050) //
(0051) void main(void)
(0052) {
(0053) unsigned char i=0,t=0;
0163 2400 CLR R0
0164 820A STD Y+2,R0
0165 2744 CLR R20
(0054) int j=0;
0166 2411 CLR R1
0167 8219 STD Y+1,R1
0168 8208 STD Y+0,R0
(0055) unsigned char SPI_flag=1;
0169 E041 LDI R20,1
(0056) unsigned char c;
(0057) unsigned char set_pwm=1;
016A 24AA CLR R10
016B 94A3 INC R10
(0058)
(0059) //unsigned char aa_flag;
(0060)
(0061)
(0062) init_devices();
016C DFE6 RCALL _init_devices
(0063) //insert your functional code here...
(0064) PORTB&=~BIT(SS);
016D 98C4 CBI 0x18,4
(0065) putSPIchar(0xaa);
016E EA0A LDI R16,0xAA
016F 940E0104 CALL _putSPIchar
(0066) getSPIchar();
0171 940E00E5 CALL _getSPIchar
(0067) putSPIchar(0x00);
0173 2700 CLR R16
0174 940E0104 CALL _putSPIchar
(0068) getSPIchar();
0176 940E00E5 CALL _getSPIchar
(0069) putSPIchar(0x00);
0178 2700 CLR R16
0179 940E0104 CALL _putSPIchar
(0070) getSPIchar();
017B 940E00E5 CALL _getSPIchar
(0071) putSPIchar(0x00);
017D 2700 CLR R16
017E 940E0104 CALL _putSPIchar
(0072) getSPIchar();
0180 940E00E5 CALL _getSPIchar
(0073) PORTB|=BIT(SS);
0182 9AC4 SBI 0x18,4
0183 C0D3 RJMP 0x0257
(0074)
(0075)
(0076)
(0077)
(0078) while(1)
(0079) {
(0080) while(timeflag)
(0081) {
(0082) timeflag=0;
0184 2422 CLR R2
0185 92200064 STS timeflag,R2
(0083) if(SPI_flag)
0187 2344 TST R20
0188 F409 BNE 0x018A
0189 C0AE RJMP 0x0238
(0084) {
(0085) PORTB&=~BIT(SS);
018A 98C4 CBI 0x18,4
(0086) putSPIchar(0xaa);
018B EA0A LDI R16,0xAA
018C 940E0104 CALL _putSPIchar
(0087) getSPIchar();
018E 940E00E5 CALL _getSPIchar
(0088) putSPIchar(0x01);
0190 E001 LDI R16,1
0191 940E0104 CALL _putSPIchar
(0089) getSPIchar();
0193 940E00E5 CALL _getSPIchar
(0090) putSPIchar(0x00);
0195 2700 CLR R16
0196 940E0104 CALL _putSPIchar
(0091) for(i=0,j=-1;i<10&j<3;i++)
0198 2400 CLR R0
0199 820A STD Y+2,R0
019A EF8F LDI R24,0xFF
019B EF9F LDI R25,0xFF
019C 8399 STD Y+1,R25
019D 8388 STD Y+0,R24
019E C01F RJMP 0x01BE
(0092) {
(0093) if((c=getSPIchar())==0x55)
019F 940E00E5 CALL _getSPIchar
01A1 2EE0 MOV R14,R16
01A2 3505 CPI R16,0x55
01A3 F421 BNE 0x01A8
(0094) j=0;
01A4 2400 CLR R0
01A5 2411 CLR R1
01A6 8219 STD Y+1,R1
01A7 8208 STD Y+0,R0
(0095) putSPIchar(0x44);
01A8 E404 LDI R16,0x44
01A9 940E0104 CALL _putSPIchar
(0096) if(j>=0)
01AB 8188 LDD R24,Y+0
01AC 8199 LDD R25,Y+1
01AD 3080 CPI R24,0
01AE E0E0 LDI R30,0
01AF 079E CPC R25,R30
01B0 F054 BLT 0x01BB
(0097) qep_data1[j++]=c;
01B1 011C MOVW R2,R24
01B2 9601 ADIW R24,1
01B3 8399 STD Y+1,R25
01B4 8388 STD Y+0,R24
01B5 E38A LDI R24,0x3A
01B6 E091 LDI R25,1
01B7 01F1 MOVW R30,R2
01B8 0FE8 ADD R30,R24
01B9 1FF9 ADC R31,R25
01BA 82E0 STD Z+0,R14
01BB 800A LDD R0,Y+2
01BC 9403 INC R0
01BD 820A STD Y+2,R0
01BE 818A LDD R24,Y+2
01BF 308A CPI R24,0xA
01C0 F420 BCC 0x01C5
01C1 E081 LDI R24,1
01C2 E090 LDI R25,0
01C3 016C MOVW R12,R24
01C4 C002 RJMP 0x01C7
01C5 24CC CLR R12
01C6 24DD CLR R13
01C7 8188 LDD R24,Y+0
01C8 8199 LDD R25,Y+1
01C9 3083 CPI R24,3
01CA E0E0 LDI R30,0
01CB 079E CPC R25,R30
01CC F41C BGE 0x01D0
01CD E061 LDI R22,1
01CE E070 LDI R23,0
01CF C002 RJMP 0x01D2
01D0 2766 CLR R22
01D1 2777 CLR R23
01D2 0116 MOVW R2,R12
01D3 2226 AND R2,R22
01D4 2237 AND R3,R23
01D5 2022 TST R2
01D6 F009 BEQ 0x01D8
01D7 CFC7 RJMP 0x019F
01D8 2033 TST R3
01D9 F009 BEQ 0x01DB
01DA CFC4 RJMP 0x019F
(0098) }
(0099) getSPIchar();
01DB 940E00E5 CALL _getSPIchar
(0100)
(0101) putSPIchar(0x00);
01DD 2700 CLR R16
01DE 940E0104 CALL _putSPIchar
(0102) getSPIchar();
01E0 940E00E5 CALL _getSPIchar
(0103)
(0104) NOP();
01E2 0000 NOP
(0105) putSPIchar(0xaa);
01E3 EA0A LDI R16,0xAA
01E4 940E0104 CALL _putSPIchar
(0106) getSPIchar();
01E6 940E00E5 CALL _getSPIchar
(0107) putSPIchar(0x02);
01E8 E002 LDI R16,2
01E9 940E0104 CALL _putSPIchar
(0108) getSPIchar();
01EB 940E00E5 CALL _getSPIchar
(0109) putSPIchar(0x00);
01ED 2700 CLR R16
01EE 940E0104 CALL _putSPIchar
(0110) for(i=0,j=-1;i<10&j<3;i++)
01F0 2400 CLR R0
01F1 820A STD Y+2,R0
01F2 EF8F LDI R24,0xFF
01F3 EF9F LDI R25,0xFF
01F4 8399 STD Y+1,R25
01F5 8388 STD Y+0,R24
01F6 C01F RJMP 0x0216
(0111) {
(0112) if((c=getSPIchar())==0x56)
01F7 940E00E5 CALL _getSPIchar
01F9 2EE0 MOV R14,R16
01FA 3506 CPI R16,0x56
01FB F421 BNE 0x0200
(0113) j=0;
01FC 2400 CLR R0
01FD 2411 CLR R1
01FE 8219 STD Y+1,R1
01FF 8208 STD Y+0,R0
(0114) putSPIchar(0x44);
0200 E404 LDI R16,0x44
0201 940E0104 CALL _putSPIchar
(0115) if(j>=0)
0203 8188 LDD R24,Y+0
0204 8199 LDD R25,Y+1
0205 3080 CPI R24,0
0206 E0E0 LDI R30,0
0207 079E CPC R25,R30
0208 F054 BLT 0x0213
(0116) qep_data2[j++]=c;
0209 011C MOVW R2,R24
020A 9601 ADIW R24,1
020B 8399 STD Y+1,R25
020C 8388 STD Y+0,R24
020D E387 LDI R24,0x37
020E E091 LDI R25,1
020F 01F1 MOVW R30,R2
0210 0FE8 ADD R30,R24
0211 1FF9 ADC R31,R25
0212 82E0 STD Z+0,R14
0213 800A LDD R0,Y+2
0214 9403 INC R0
0215 820A STD Y+2,R0
0216 818A LDD R24,Y+2
0217 308A CPI R24,0xA
0218 F418 BCC 0x021C
0219 E061 LDI R22,1
021A E070 LDI R23,0
021B C002 RJMP 0x021E
021C 2766 CLR R22
021D 2777 CLR R23
021E 8188 LDD R24,Y+0
021F 8199 LDD R25,Y+1
0220 3083 CPI R24,3
0221 E0E0 LDI R30,0
0222 079E CPC R25,R30
0223 F424 BGE 0x0228
0224 E081 LDI R24,1
0225 E090 LDI R25,0
0226 016C MOVW R12,R24
0227 C002 RJMP 0x022A
0228 24CC CLR R12
0229 24DD CLR R13
022A 011B MOVW R2,R22
022B 202C AND R2,R12
022C 203D AND R3,R13
022D 2022 TST R2
022E F009 BEQ 0x0230
022F CFC7 RJMP 0x01F7
0230 2033 TST R3
0231 F009 BEQ 0x0233
0232 CFC4 RJMP 0x01F7
(0117) }
(0118) getSPIchar();
0233 940E00E5 CALL _getSPIchar
(0119) NOP();
0235 0000 NOP
(0120) PORTB|=BIT(SS);
0236 9AC4 SBI 0x18,4
(0121) NOP();
0237 0000 NOP
(0122) }
(0123) if(set_pwm)
0238 20AA TST R10
0239 F0C1 BEQ 0x0252
(0124) {
(0125) PORTB&=~BIT(SS);
023A 98C4 CBI 0x18,4
(0126) putSPIchar(0x55);
023B E505 LDI R16,0x55
023C 940E0104 CALL _putSPIchar
(0127) getSPIchar();
023E 940E00E5 CALL _getSPIchar
(0128) putSPIchar(pwm[0]);
0240 91000060 LDS R16,pwm
0242 940E0104 CALL _putSPIchar
(0129) getSPIchar();
0244 940E00E5 CALL _getSPIchar
(0130) putSPIchar(pwm[1]);
0246 91000061 LDS R16,pwm+1
0248 940E0104 CALL _putSPIchar
(0131) getSPIchar();
024A 940E00E5 CALL _getSPIchar
(0132) putSPIchar(0x00);
024C 2700 CLR R16
024D 940E0104 CALL _putSPIchar
(0133) getSPIchar();
024F 940E00E5 CALL _getSPIchar
(0134) PORTB|=BIT(SS);
FILE: <library>
0251 9AC4 SBI 0x18,4
0252 90200064 LDS R2,timeflag
0254 2022 TST R2
0255 F009 BEQ 0x0257
0256 CF2D RJMP 0x0184
0257 CFFA RJMP 0x0252
0258 9623 ADIW R28,3
0259 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -