📄 main.s90
字号:
_A_SPCR:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,04bH
// <unnamed> volatile __io _A_GPIOR2
_A_GPIOR2:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,04aH
// <unnamed> volatile __io _A_GPIOR1
_A_GPIOR1:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,048H
// <unnamed> volatile __io _A_OCR0B
_A_OCR0B:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,047H
// <unnamed> volatile __io _A_OCR0A
_A_OCR0A:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,046H
// <unnamed> volatile __io _A_TCNT0
_A_TCNT0:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,045H
// <unnamed> volatile __io _A_TCCR0B
_A_TCCR0B:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,044H
// <unnamed> volatile __io _A_TCCR0A
_A_TCCR0A:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,043H
// <unnamed> volatile __io _A_GTCCR
_A_GTCCR:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,041H
// <unnamed> volatile __io _A_EEAR
_A_EEAR:
DS 2
ASEGN ABSOLUTE:DATA:ROOT,040H
// <unnamed> volatile __io _A_EEDR
_A_EEDR:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,03fH
// <unnamed> volatile __io _A_EECR
_A_EECR:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,03eH
// <unnamed> volatile __io _A_GPIOR0
_A_GPIOR0:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,03dH
// <unnamed> volatile __io _A_EIMSK
_A_EIMSK:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,03cH
// <unnamed> volatile __io _A_EIFR
_A_EIFR:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,03bH
// <unnamed> volatile __io _A_PCIFR
_A_PCIFR:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,037H
// <unnamed> volatile __io _A_TIFR2
_A_TIFR2:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,036H
// <unnamed> volatile __io _A_TIFR1
_A_TIFR1:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,035H
// <unnamed> volatile __io _A_TIFR0
_A_TIFR0:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,02bH
// <unnamed> volatile __io _A_PORTD
_A_PORTD:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,02aH
// <unnamed> volatile __io _A_DDRD
_A_DDRD:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,029H
// <unnamed> volatile __io _A_PIND
_A_PIND:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,028H
// <unnamed> volatile __io _A_PORTC
_A_PORTC:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,027H
// <unnamed> volatile __io _A_DDRC
_A_DDRC:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,026H
// <unnamed> volatile __io _A_PINC
_A_PINC:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,025H
// <unnamed> volatile __io _A_PORTB
_A_PORTB:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,024H
// <unnamed> volatile __io _A_DDRB
_A_DDRB:
DS 1
ASEGN ABSOLUTE:DATA:ROOT,023H
// <unnamed> volatile __io _A_PINB
_A_PINB:
DS 1
// 12 #include "inAVR.h"
// 13 #include "stdio.h"
// 14 #include "stdbool.h"
// 15
// 16 #define Max_Axis 3
// 17 #define X_Channel 0 //PC2
// 18 #define Y_Channel 1 //PC1
// 19 #define Z_Channel 2 //PC0
// 20 #define MMA7361_EN 0x08 //PC3
// 21
RSEG NEAR_I:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_I>`
// 22 const unsigned char Channel_Tbl[Max_Axis]={0x42,0x41,0x40}; //Z,Y,X
Channel_Tbl:
DS 3
REQUIRE `?<Initializer for Channel_Tbl>`
RSEG NEAR_I:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_I>`
// 23 const unsigned char Axis_Name[Max_Axis]={'X','Y','Z'};
Axis_Name:
DS 3
REQUIRE `?<Initializer for Axis_Name>`
RSEG NEAR_Z:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 24 unsigned char Temp, Temp1, ADC_Done,ShowDebug_Cnt; //Temporary saving cells
Temp:
DS 1
RSEG NEAR_Z:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
Temp1:
DS 1
RSEG NEAR_Z:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
ADC_Done:
DS 1
RSEG NEAR_Z:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
ShowDebug_Cnt:
DS 1
RSEG NEAR_Z:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 25 unsigned int Axis_Data[Max_Axis];
Axis_Data:
DS 6
RSEG NEAR_Z:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 26 unsigned long SumReg = 0; //Storage variable
SumReg:
DS 4
RSEG NEAR_Z:DATA:ROOT(0)
REQUIRE `?<Segment init: NEAR_Z>`
// 27 static char SampCnt; //ADC samples counter
SampCnt:
DS 1
// 28
// 29 #include "functions.c"
RSEG CODE:CODE:NOROOT(1)
// __nearfunc __version_3 void Timers_Init()
Timers_Init:
LDI R16, 195
OUT 0x24, R16
LDI R16, 1
OUT 0x25, R16
LDI R16, 0
OUT 0x27, R16
LDI R16, 0
STS 110, R16
LDI R16, 0
STS 128, R16
LDI R16, 9
STS 129, R16
LDI R16, 0
STS 130, R16
LDI R16, 0
LDI R17, 0
STS 137, R17
STS 136, R16
LDI R16, 0
STS 111, R16
LDI R16, 0
STS 176, R16
LDI R16, 6
STS 177, R16
LDI R16, 1
STS 112, R16
LDI R16, 0
STS 182, R16
RET
REQUIRE _A_ASSR
REQUIRE _A_TCCR2B
REQUIRE _A_TCCR2A
REQUIRE _A_OCR1A
REQUIRE _A_TCCR1C
REQUIRE _A_TCCR1B
REQUIRE _A_TCCR1A
REQUIRE _A_TIMSK2
REQUIRE _A_TIMSK1
REQUIRE _A_TIMSK0
REQUIRE _A_OCR0A
REQUIRE _A_TCCR0B
REQUIRE _A_TCCR0A
RSEG CODE:CODE:NOROOT(1)
// __nearfunc __version_3 void IO_Ports_Init()
IO_Ports_Init:
LDI R16, 0
OUT 0x05, R16
LDI R16, 63
OUT 0x04, R16
LDI R16, 0
OUT 0x08, R16
LDI R16, 248
OUT 0x07, R16
LDI R16, 0
OUT 0x0B, R16
LDI R16, 254
OUT 0x0A, R16
SBI 0x0B, 0x04
RET
REQUIRE _A_PORTD
REQUIRE _A_DDRD
REQUIRE _A_PORTC
REQUIRE _A_DDRC
REQUIRE _A_PORTB
REQUIRE _A_DDRB
RSEG CODE:CODE:NOROOT(1)
// __nearfunc __version_3 void ADC_Init()
ADC_Init:
LDI R16, 31
STS 126, R16
LDI R16, 128
OUT 0x30, R16
LDI R16, 131
STS 122, R16
LDI R16, 0
STS 123, R16
LDI R16, 66
STS 124, R16
RET
REQUIRE _A_DIDR0
REQUIRE _A_ADMUX
REQUIRE _A_ADCSRB
REQUIRE _A_ADCSRA
REQUIRE _A_ACSR
RSEG CODE:CODE:NOROOT(1)
// __nearfunc __version_3 void MMA7361_Init()
MMA7361_Init:
SBI 0x08, 0x03
RET
REQUIRE _A_PORTC
RSEG CODE:CODE:NOROOT(1)
// __nearfunc __version_3 unsigned int Get_ADC(unsigned char, unsigned char)
Get_ADC:
CALL ?PROLOGUE5_L09
REQUIRE ?Register_R4_is_cg_reg
MOV R24, R16
MOV R4, R17
LDI R25, 0
MOVW R31:R30, R25:R24
SUBI R30, LOW((-(Channel_Tbl) & 0xFFFF))
SBCI R31, (-(Channel_Tbl) & 0xFFFF) >> 8
LD R16, Z
STS 124, R16
LDI R16, 0
STS Temp1, R16
??Get_ADC_0:
LDS R16, Temp1
CPI R16, 50
BRCC ??Get_ADC_1
LDI R30, LOW(Temp1)
LDI R31, (Temp1) >> 8
LD R16, Z
INC R16
ST Z, R16
RJMP ??Get_ADC_0
??Get_ADC_1:
LDI R16, 0
LDI R17, 0
LDI R18, 0
LDI R19, 0
LDI R30, LOW(SumReg)
LDI R31, (SumReg) >> 8
ST Z, R16
STD Z+1, R17
STD Z+2, R18
STD Z+3, R19
STS SampCnt, R4
LDI R16, 0
STS ADC_Done, R16
LDI R16, 203
STS 122, R16
??Get_ADC_2:
LDS R16, ADC_Done
TST R16
BREQ ??Get_ADC_2
MOV R20, R4
LDI R21, 0
LDI R22, 0
LDI R23, 0
LDI R30, LOW(SumReg)
LDI R31, (SumReg) >> 8
LD R16, Z
LDD R17, Z+1
LDD R18, Z+2
LDD R19, Z+3
CALL ?UL_DIVMOD_L03
MOVW R27:R26, R17:R16
MOVW R17:R16, R27:R26
LDI R30, 5
JMP ?EPILOGUE_B5_L09
REQUIRE _A_ADMUX
REQUIRE _A_ADCSRA
RSEG CODE:CODE:NOROOT(1)
// __nearfunc __version_3 void SW_UART_Tx(unsigned char)
SW_UART_Tx:
MOV R22, R16
LDI R23, 0
MOVW R21:R20, R23:R22
LSL R20
ROL R21
ORI R20, 0x00
ORI R21, 0x02
LDI R18, 1
LDI R19, 0
??SW_UART_Tx_0:
CPI R18, 0
LDI R22, 4
CPC R19, R22
BREQ ??SW_UART_Tx_1
MOVW R23:R22, R21:R20
AND R22, R18
AND R23, R19
OR R22, R23
BRNE ??SW_UART_Tx_2
CBI 0x0B, 0x01
RJMP ??SW_UART_Tx_3
??SW_UART_Tx_2:
SBI 0x0B, 0x01
??SW_UART_Tx_3:
LDI R17, 0
??SW_UART_Tx_4:
CPI R17, 10
BRCC ??SW_UART_Tx_5
INC R17
RJMP ??SW_UART_Tx_4
??SW_UART_Tx_5:
LSL R18
ROL R19
RJMP ??SW_UART_Tx_0
??SW_UART_Tx_1:
RET
REQUIRE _A_PORTD
RSEG CODE:CODE:NOROOT(1)
// __nearfunc __version_3 void Show_Hex(unsigned int)
Show_Hex:
CALL ?PROLOGUE4_L09
MOVW R27:R26, R17:R16
LDI R24, 16
??Show_Hex_0:
CPI R24, 1
BRCS ??Show_Hex_1
SUBI R24, 4
MOV R20, R24
MOVW R17:R16, R27:R26
CALL ?US_SHR_L02
ANDI R16, 0x0F
MOV R25, R16
CPI R25, 10
BRCS ??Show_Hex_2
SUBI R25, 249
??Show_Hex_2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -