📄 bldcm.lst
字号:
(0124) Shut_PWMAB(); //关上桥臂 1,2
00A5 DFCA RCALL _Shut_PWMAB
(0125) Start_PWMC(); //开上桥臂PWMC
00A6 DFCE RCALL _Start_PWMC
(0126) PORTB = PORTB|0x02; //开下桥臂4
00A7 9A29 SBI 0x05,1
00A8 9508 RET
(0127) }
(0128)
(0129) void phase_three_five(void)
(0130) {
(0131) PORTB = PORTB&0xF5; //关下桥臂6,4
_phase_three_five:
00A9 B185 IN R24,0x05
00AA 7F85 ANDI R24,0xF5
00AB B985 OUT 0x05,R24
(0132) Shut_PWMAB(); //关上桥臂 1,2
00AC DFC3 RCALL _Shut_PWMAB
(0133) Start_PWMC(); //开上桥臂PWMC
00AD DFC7 RCALL _Start_PWMC
(0134) PORTB = PORTB|0x04; //开下桥臂5
00AE 9A2A SBI 0x05,2
00AF 9508 RET
(0135) }
(0136)
(0137)
(0138)
(0139) void uart0_init(void)
(0140) {
(0141) UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
00B0 2422 CLR R2
00B1 922000C1 STS 0xC1,R2
(0142) UCSR0A = 0x00;
00B3 922000C0 STS 0xC0,R2
(0143) UCSR0C = 0x06; //8位数据传送
00B5 E086 LDI R24,6
00B6 938000C2 STS 0xC2,R24
(0144) UBRR0L = 0x33; //set baud rate lo
00B8 E383 LDI R24,0x33
00B9 938000C4 STS 0xC4,R24
(0145) UBRR0H = 0x00; //set baud rate hi
00BB 922000C5 STS 0xC5,R2
(0146) UCSR0B = 0x18; //
00BD E188 LDI R24,0x18
00BE 938000C1 STS 0xC1,R24
00C0 9508 RET
(0147) }
(0148)
(0149) void init_devices(void)
(0150) {
(0151) //stop errant interrupts until set up
(0152) CLI(); //disable all interrupts
_init_devices:
00C1 94F8 BCLR 7
(0153) port_init();
00C2 DF77 RCALL _port_init
(0154) timer0_init();
00C3 DF81 RCALL _timer0_init
(0155) timer2_init();
00C4 DF88 RCALL _timer2_init
(0156) uart0_init();
00C5 DFEA RCALL _uart0_init
(0157)
(0158) MCUCR = 0x00;
00C6 2422 CLR R2
00C7 BE25 OUT 0x35,R2
(0159) EICRA = 0x00; //extended ext ints
00C8 92200069 STS 0x69,R2
(0160) EIMSK = 0x00;
00CA BA2D OUT 0x1D,R2
(0161)
(0162) TIMSK0 = 0x00; //timer 0 interrupt sources
00CB 9220006E STS 0x6E,R2
(0163) TIMSK1 = 0x00; //timer 1 interrupt sources
00CD 9220006F STS 0x6F,R2
(0164) TIMSK2 = 0x00; //timer 2 interrupt sources
00CF 92200070 STS 0x70,R2
(0165)
(0166) PCMSK0 = 0x00; //pin change mask 0
00D1 9220006B STS 0x6B,R2
(0167) PCMSK1 = 0x00; //pin change mask 1
00D3 9220006C STS 0x6C,R2
(0168) PCMSK2 = 0x00; //pin change mask 2
00D5 9220006D STS 0x6D,R2
(0169) PCICR = 0x00; //pin change enable
00D7 92200068 STS 0x68,R2
(0170) PRR = 0x00; //power controller
00D9 92200064 STS 0x64,R2
(0171) SEI(); //re-enable interrupts
00DB 9478 BSET 7
00DC 9508 RET
(0172) //all peripherals are now initialized
(0173) }
(0174)
(0175)
(0176) void USART_Transmit(unsigned char data)
(0177) {
(0178) //等待发送器缓冲为空
(0179) while(!(UCSR0A&(1<<UDRE0)))
_USART_Transmit:
data --> R16
00DD 902000C0 LDS R2,0xC0
00DF FE25 SBRS R2,5
00E0 CFFC RJMP _USART_Transmit
(0180) ;
(0181)
(0182) //发送数据
(0183) UDR0 = data;
00E1 930000C6 STS 0xC6,R16
00E3 9508 RET
(0184) }
(0185)
(0186)
(0187) unsigned char USART_Receive(void)
(0188) {
(0189) //等待接收数据
(0190) while(!(UCSR0A&(1<<RXC0)))
_USART_Receive:
00E4 902000C0 LDS R2,0xC0
00E6 FE27 SBRS R2,7
00E7 CFFC RJMP _USART_Receive
(0191) ;
(0192) return UDR0;
00E8 910000C6 LDS R16,0xC6
00EA 9508 RET
(0193) }
(0194)
(0195) void set_speed(unsigned char speed)
(0196) {
(0197) OCR0A = speed;
_set_speed:
speed --> R16
00EB BD07 OUT 0x27,R16
(0198) OCR0B = speed;
00EC BD08 OUT 0x28,R16
(0199) OCR2B = speed;
00ED 930000B4 STS 0xB4,R16
00EF 9508 RET
(0200) }
(0201)
(0202) void main(void)
(0203) {
(0204) unsigned int Pos_Val,Speed_Val;
(0205) init_devices();
_main:
Speed_Val --> R20
Pos_Val --> R22
00F0 DFD0 RCALL _init_devices
00F1 C033 RJMP 0x0125
(0206) //Start_PWMA_Close_PWMB();
(0207) // Start_PWMC();
(0208) // Start_PWMAB();
(0209)
(0210) /* while(1)
(0211) {
(0212) Speed_Val = USART_Receive();
(0213) set_speed(Speed_Val);
(0214) }*/
(0215) while(1)
(0216) {
(0217)
(0218) if((UCSR0A&0x80)!=0)
00F2 902000C0 LDS R2,0xC0
00F4 FE27 SBRS R2,7
00F5 C007 RJMP 0x00FD
(0219) {
(0220) Speed_Val = UDR0;
00F6 914000C6 LDS R20,0xC6
00F8 2755 CLR R21
(0221) OCR0A = Speed_Val;
00F9 BD47 OUT 0x27,R20
(0222) OCR0B = Speed_Val;
00FA BD48 OUT 0x28,R20
(0223) OCR2B = Speed_Val;
00FB 934000B4 STS 0xB4,R20
(0224) }
(0225) Pos_Val = PINC&0x07;
00FD B166 IN R22,0x06
00FE 2777 CLR R23
00FF 7067 ANDI R22,7
0100 7070 ANDI R23,0
(0226) /* // 500w轮毂电机
(0227) switch(Pos_Val)
(0228) {
(0229) case 3:
(0230) phase_three_five();
(0231) break;
(0232) case 2:
(0233) phase_one_five();
(0234) break;
(0235) case 6:
(0236) phase_one_six();
(0237) break;
(0238) case 4:
(0239) phase_two_six();
(0240) break;
(0241) case 5:
(0242) phase_two_four();
(0243) break;
(0244) case 1:
(0245) phase_three_four();
(0246) break;
(0247) default:
(0248) break;
(0249)
(0250) }
(0251) */
(0252)
(0253) // 2.2kw电机
(0254) switch(Pos_Val)
0101 3061 CPI R22,1
0102 E0E0 LDI R30,0
0103 077E CPC R23,R30
0104 F0A9 BEQ 0x011A
0105 3062 CPI R22,2
0106 E0E0 LDI R30,0
0107 077E CPC R23,R30
0108 F0A9 BEQ 0x011E
0109 3063 CPI R22,3
010A E0E0 LDI R30,0
010B 077E CPC R23,R30
010C F079 BEQ 0x011C
010D 3064 CPI R22,4
010E E0E0 LDI R30,0
010F 077E CPC R23,R30
0110 F089 BEQ 0x0122
0111 3065 CPI R22,5
0112 E0E0 LDI R30,0
0113 077E CPC R23,R30
0114 F079 BEQ 0x0124
0115 3066 CPI R22,6
0116 E0E0 LDI R30,0
0117 077E CPC R23,R30
0118 F039 BEQ 0x0120
0119 C00B RJMP 0x0125
(0255) {
(0256) case 1:
(0257) phase_three_five(); //C+ B-
011A DF8E RCALL _phase_three_five
(0258) break;
011B C009 RJMP 0x0125
(0259) case 3:
(0260) phase_one_five(); //A+ B-
011C DF69 RCALL _phase_one_five
(0261) break;
011D C007 RJMP 0x0125
(0262) case 2:
(0263) phase_one_six(); //A+ C-
011E DF6E RCALL _phase_one_six
(0264) break;
011F C005 RJMP 0x0125
(0265) case 6:
(0266) phase_two_six(); //B+ C-
0120 DF73 RCALL _phase_two_six
(0267) break;
0121 C003 RJMP 0x0125
(0268) case 4:
(0269) phase_two_four(); //B+ A-
0122 DF78 RCALL _phase_two_four
(0270) break;
0123 C001 RJMP 0x0125
(0271) case 5:
(0272) phase_three_four(); //C+ B-
FILE: <library>
0124 DF7D RCALL _phase_three_four
0125 CFCC RJMP 0x00F2
0126 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -