⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.s90

📁 MMA7361加速度倾角模块
💻 S90
📖 第 1 页 / 共 3 页
字号:
_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 + -