📄 bldc1-w.asm
字号:
;
;Z
; R30(ZL)
; R31(ZH)
;IJMP 间接跳转到(Z) PC ← Z 无 2
;ICALL 间接调用(Z) PC ← Z 无 3
;
;LD Rd, Z 加载间接寻址数据Rd ← (Z) 无2
;LD Rd, Z+ 加载间接寻址数据,然后地址加一Rd ← (Z), Z ← Z+1 无2
;LD Rd, -Z 地址减一后加载间接寻址数据Z ← Z - 1, Rd ← (Z) 无2
;LDD Rd, Z+q 加载带偏移量的间接寻址数据Rd ← (Z + q) 无2
;
;ST Z, Rr 加载间接寻址数据(Z) ← Rr 无2
;ST Z+, Rr 加载间接寻址数据,然后地址加一(Z) ← Rr, Z ← Z + 1 无2
;ST -Z, Rr 地址减一后加载间接寻址数据Z ← Z - 1, (Z) ← Rr 无2
;STD Z+q,Rr 加载带偏移量的间接寻址数据(Z + q) ← Rr 无2
;
;LPM 加载程序空间的数据R0 ← (Z) 无3
;LPM Rd, Z 加载程序空间的数据Rd ← (Z) 无3
;LPM Rd, Z+ 加载程序空间的数据,然后地址加一Rd ← (Z), Z ← Z+1 无3
;SPM 保存程序空间的数据(Z) ← R1:R0 无-
;
;----------------------------------------------------------------------------------------
; 端口定义:
;
; PB0 OUTPUT 0 WL
; PB1 OUTPUT 0 WH
; PB2 OUTPUT 0 VL
; PB3 OUTPUT 0 VH
; PB4 OUTPUT 0 UL
; PB5 OUTPUT 0 UH
; PB6 OUTPUT 0 NO USE >>>> >>>>
; PB7 OUTPUT 0 NO USE >>>> >>>>
;
; PC0 ADC U
; PC1 ADC V
; PC2 ADC W
; PC3 OUTPUT 0 NO USE >>>> >>>>
; PC4 OUTPUT 0 NO USE >>>> >>>>
; PC5 OUTPUT 0 NO USE >>>> >>>>
; PC6 OUTPUT(RESET) 0 NO USE >>>> >>>>
; ADC6 VDD1/4
; ADC7 NO USE
;
; PD0 INPUT PULL-UP 1 KEY
; PD1 OUTPUT 0 排水
; PD2 OUTPUT 0 NO USE
; PD3 INPUT PULL-UP 1 SPEED
; 用作结束速度测量,运行时中断禁止,仅仅在刹车时使用
;
; PD4 OUTPUT 0 LOCK
; 刹车时启动,旋转停止后释放
;
; PD5 OC0B 1 PWM_L
; 调速(只调低端的三个NMOS管)
;
; PD6 OUTPUT 0 NO USE
; PD7 OUTPUT 0 NO USE
;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;寄存器概述:
;
;Address Name Bit7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
;
;(0xFF)---(0xC7) Reserved
;
;(0xC6) UDR0 USART I/O Data Register
;(0xC5) UBRR0H -------- -------- -------- -------- USART Baud Rate Register High
;(0xC4) UBRR0L USART Baud Rate Register Low
;(0xC3) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0xC2) UCSR0C UMSEL01 UMSEL00 UPM01 UPM00 USBS0 UCSZ01 UCSZ00 UCPOL0
; /UDORD0 /UCPHA0
;(0xC1) UCSR0B RXCIE0 TXCIE0 UDRIE0 RXEN0 TXEN0 UCSZ02 RXB80 TXB80
;(0xC0) UCSR0A RXC0 TXC0 UDRE0 FE0 DOR0 UPE0 U2X0 MPCM0
;(0xBF) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0xBE) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0xBD) TWAMR TWAM6 TWAM5 TWAM4 TWAM3 TWAM2 TWAM1 TWAM0 --------
;(0xBC) TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN -------- TWIE
;(0xBB) TWDR 2-wire Serial Interface Data Register
;(0xBA) TWAR TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
;(0xB9) TWSR TWS7 TWS6 TWS5 TWS4 TWS3 -------- TWPS1 TWPS0
;(0xB8) TWBR 2-wire Serial Interface Bit Rate Register
;(0xB7) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0xB6) ASSR -------- EXCLK AS2 TCN2UB OCR2AUB OCR2BUB TCR2AUB TCR2BUB
;(0xB5) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0xB4) OCR2B Timer/Counter2 Output Compare Register B
;(0xB3) OCR2A Timer/Counter2 Output Compare Register A
;(0xB2) TCNT2 Timer/Counter2 (8-bit)
;(0xB1) TCCR2B FOC2A FOC2B -------- -------- WGM22 CS22 CS21 CS20
;(0xB0) TCCR2A COM2A1 COM2A0 COM2B1 COM2B0 -------- -------- WGM21 WGM20
;
;(0xAF)---(0x8C) Reserved
;
;(0x8B) OCR1BH Timer/Counter1 - Output Compare Register B High Byte
;(0x8A) OCR1BL Timer/Counter1 - Output Compare Register B Low Byte
;(0x89) OCR1AH Timer/Counter1 - Output Compare Register A High Byte
;(0x88) OCR1AL Timer/Counter1 - Output Compare Register A Low Byte
;(0x87) ICR1H Timer/Counter1 - Input Capture Register High Byte
;(0x86) ICR1L Timer/Counter1 - Input Capture Register Low Byte
;(0x85) TCNT1H Timer/Counter1 - Counter Register High Byte
;(0x84) TCNT1L Timer/Counter1 - Counter Register Low Byte
;(0x83) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0x82) TCCR1C FOC1A FOC1B -------- -------- -------- -------- -------- --------
;(0x81) TCCR1B ICNC1 ICES1 -------- WGM13 WGM12 CS12 CS11 CS10
;(0x80) TCCR1A COM1A1 COM1A0 COM1B1 COM1B0 -------- -------- WGM11 WGM10
;(0x7F) DIDR1 -------- -------- -------- -------- -------- -------- AIN1D AIN0D
;(0x7E) DIDR0 -------- -------- ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D
;(0x7D) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0x7C) ADMUX REFS1 REFS0 ADLAR -------- MUX3 MUX2 MUX1 MUX0
;(0x7B) ADCSRB -------- ACME -------- -------- -------- ADTS2 ADTS1 ADTS0
;(0x7A) ADCSRA ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
;(0x79) ADCH ADC Data Register High byte
;(0x78) ADCL ADC Data Register Low byte
;
;(0x77)--(0x71) Reserved
;
;(0x70) TIMSK2 -------- -------- -------- -------- -------- OCIE2B OCIE2A TOIE2
;(0x6F) TIMSK1 -------- -------- ICIE1 -------- -------- OCIE1B OCIE1A TOIE1
;(0x6E) TIMSK0 -------- -------- -------- -------- -------- OCIE0B OCIE0A TOIE0
;(0x6D) PCMSK2 PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16
;(0x6C) PCMSK1 -------- PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT8
;(0x6B) PCMSK0 PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0
;(0x6A) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0x69) EICRA -------- -------- -------- -------- ISC11 ISC10 ISC01 ISC00
;(0x68) PCICR -------- -------- -------- -------- -------- PCIE2 PCIE1 PCIE0
;(0x67) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0x66) OSCCAL Oscillator Calibration Register
;(0x65) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0x64) PRR PRTWI PRTIM2 PRTIM0 -------- PRTIM1 PRSPI PRUSART0 PRADC
;(0x63) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0x62) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;(0x61) CLKPR CLKPCE -------- -------- -------- CLKPS3 CLKPS2 CLKPS1 CLKPS0
;(0x60) WDTCSR WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0
;
;0x3F (0x5F) SREG I T H S V N Z C
;0x3E (0x5E) SPH (SP10=Only valid for ATmega88/168) SP9 SP8
;0x3D (0x5D) SPL SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0
;0x3C (0x5C) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x3B (0x5B) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x3A (0x5A) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x39 (0x59) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x38 (0x58) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x37 (0x57) SPMCSR SPMIE (RWWSB) -------- (RWWSRE) BLBSET PGWRT PGERS SELFPRGEN
; =Only valid for ATmega88/168
;0x36 (0x56) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x35 (0x55) MCUCR -------- -------- -------- PUD -------- -------- IVSEL IVCE
;0x34 (0x54) MCUSR -------- -------- -------- -------- WDRF BORF EXTRF PORF
;0x33 (0x53) SMCR -------- -------- -------- -------- SM2 SM1 SM0 SE
;0x32 (0x52) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x31 (0x51) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x30 (0x50) ACSR ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
;0x2F (0x4F) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x2E (0x4E) SPDR SPI Data Register
;0x2D (0x4D) SPSR SPIF WCOL -------- -------- -------- -------- -------- SPI2X
;0x2C (0x4C) SPCR SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
;0x2B (0x4B) GPIOR2 General Purpose I/O Register 2
;0x2A (0x4A) GPIOR1 General Purpose I/O Register 1
;0x29 (0x49) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x28 (0x48) OCR0B Timer/Counter0 Output Compare Register B
;0x27 (0x47) OCR0A Timer/Counter0 Output Compare Register A
;0x26 (0x46) TCNT0 Timer/Counter0 (8-bit)
;0x25 (0x45) TCCR0B FOC0A FOC0B -------- -------- WGM02 CS02 CS01 CS00
;0x24 (0x44) TCCR0A COM0A1 COM0A0 COM0B1 COM0B0 -------- -------- WGM01 WGM00
;0x23 (0x43) GTCCR TSM -------- -------- -------- -------- -------- PSRASY PSRSYNC
;0x22 (0x42) EEARH (EEPROM Address Register High Byte=Only valid for ATmega88/168)
;0x21 (0x41) EEARL EEPROM Address Register Low Byte
;0x20 (0x40) EEDR EEPROM Data Register
;
;0x1F (0x3F) EECR -------- -------- EEPM1 EEPM0 EERIE EEMPE EEPE EERE
;0x1E (0x3E) GPIOR0 General Purpose I/O Register 0
;0x1D (0x3D) EIMSK -------- -------- -------- -------- -------- -------- INT1 INT0
;0x1C (0x3C) EIFR -------- -------- -------- -------- -------- -------- INTF1 INTF0
;0x1B (0x3B) PCIFR -------- -------- -------- -------- -------- PCIF2 PCIF1 PCIF0
;0x1A (0x3A) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x19 (0x39) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x18 (0x38) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x17 (0x37) TIFR2 -------- -------- -------- -------- -------- OCF2B OCF2A TOV2
;0x16 (0x36) TIFR1 -------- -------- ICF1 -------- -------- OCF1B OCF1A TOV1
;0x15 (0x35) TIFR0 -------- -------- -------- -------- -------- OCF0B OCF0A TOV0
;0x14 (0x34) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x13 (0x33) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x12 (0x32) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x11 (0x31) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x10 (0x30) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x0F (0x2F) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x0E (0x2E) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x0D (0x2D) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x0C (0x2C) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x0B (0x2B) PORTD PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0
;0x0A (0x2A) DDRD DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0
;0x09 (0x29) PIND PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0
;0x08 (0x28) PORTC -------- PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0
;0x07 (0x27) DDRC -------- DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0
;0x06 (0x26) PINC -------- PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0
;0x05 (0x25) PORTB PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
;0x04 (0x24) DDRB DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0
;0x03 (0x23) PINB PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
;0x02 (0x22) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x01 (0x21) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;0x00 (0x20) Reserved -------- -------- -------- -------- -------- -------- -------- --------
;
;1. For compatibility with future devices, reserved bits should be written to zero if accessed.
;Reserved I/O memory addresses should never be written.
;2. I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI
;and CBI instructions. In these registers, the value of single bits can be checked by using the
;SBIS and SBIC instructions.
;3. Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most
;other AVRs, the CBI and SBI instructions will only operate on the specified bit,and can therefore
;be used on registers containing such Status Flags.The CBI and SBI instructions work with registers
;0x00 to 0x1F only.
;4. When using the I/O specific commands IN and OUT, the I/O addresses 0x00 - 0x3F must be used.
;When addressing I/O Registers as data space using LD and ST instructions, 0x20 must be added to
;these addresses. The ATmega48/88/168 is a complex microcontroller with more peripheral units than
;can be supported within the 64 location reserved in Opcode for the IN and OUT instructions. For
;the Extended I/O space from 0x60 - 0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD instructions
;can be used.
;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
;今后使用MEGA48 !!!!
;
; .include "m48def.inc"
.include "m88def.inc"
;
;R0
;R1
;
.DEF SREG_BAK = R2 ;---- ---- ---- ---- ---- ---- ---- ----
.DEF INT_R3 = R3 ;---- ---- ---- ---- ---- ---- ---- ----
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -