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

📄 main.lis

📁 二轴陀螺仪IDG300源程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module main.c
                        .area data(ram, con, rel)
 0000           _firmwareMode::
 0000                   .blkb 1
                        .area idata
 0000 01                .byte 1
                        .area data(ram, con, rel)
 0000                   .dbfile ./main.c
 0000                   .dbsym e firmwareMode _firmwareMode c
                        .area text(rom, con, rel)
 0000                   .dbfile ./main.c
 0000                   .dbfunc e main _main fV
 0000           ;              j -> X+4
 0000           ;              i -> X+2
 0000           ;         adcVal -> X+0
 0000           _main::
 0000                   .dbline -1
 0000 10                push X
 0001 4F                mov X,SP
 0002 3806              add SP,6
 0004                   .dbline 20
 0004           ; //----------------------------------------------------------------------------
 0004           ; // C main line
 0004           ; //----------------------------------------------------------------------------
 0004           ; 
 0004           ; #include <m8c.h>        // part specific constants and macros
 0004           ; #include "PSoCAPI.h"    // PSoC API definitions for all User Modules
 0004           ; 
 0004           ; unsigned char buttonChar;
 0004           ; unsigned char sendChar;
 0004           ; int gyroYData, gyroZData, tempData;
 0004           ; unsigned short p1;
 0004           ; unsigned short p2;
 0004           ; signed short p3;
 0004           ; signed short p4;
 0004           ; 
 0004           ; //Change to 1 to compile as embedded mouse
 0004           ; unsigned char firmwareMode = 1;
 0004           ; 
 0004           ; void main()
 0004           ; {
 0004                   .dbline 21
 0004           ;       int i=0;
 0004 560300            mov [X+3],0
 0007 560200            mov [X+2],0
 000A                   .dbline 22
 000A           ;       int j=0;
 000A 560500            mov [X+5],0
 000D 560400            mov [X+4],0
 0010                   .dbline 26
 0010           ;       int adcVal;
 0010           ;       
 0010           ; 
 0010           ;       PRT2DR |= 0x80;
 0010 430880            or REG[0x8],-128
 0013                   .dbline 27
 0013           ;       PRT0DR |= 0x80; 
 0013 430080            or REG[ 0],-128
 0016                   .dbline 28
 0016           ;       PRT0DR |= 0x02;         
 0016 430002            or REG[ 0],2
 0019                   .dbline 29
 0019           ;       M8C_EnableGInt; // Enable global interrupts
 0019 7101                      or  F, 01h
 001B           
 001B                   .dbline 30
 001B           ;       PGA_1_Start(PGA_1_HIGHPOWER);
 001B 10                push X
 001C 5003              mov A,3
 001E 7C0000            xcall _PGA_1_Start
 0021                   .dbline 31
 0021           ;       ADCINC_1_Start(ADCINC_1_HIGHPOWER);
 0021 5003              mov A,3
 0023 7C0000            xcall _ADCINC_1_Start
 0026                   .dbline 33
 0026           ;                               
 0026           ;       UART_1_Start(UART_1_PARITY_NONE);
 0026 5000              mov A,0
 0028 7C0000            xcall _UART_1_Start
 002B 20                pop X
 002C 81C7              xjmp L3
 002E           L2:
 002E                   .dbline 35
 002E           ; 
 002E           ;       while (1) {
 002E                   .dbline 36
 002E           ;               buttonChar = 48;
 002E 550F30            mov [_buttonChar],48
 0031                   .dbline 38
 0031           ;                               
 0031           ;               ADCINC_1_GetSamples(1);
 0031 10                push X
 0032 5001              mov A,1
 0034 7C0000            xcall _ADCINC_1_GetSamples
 0037 20                pop X
 0038           L5:
 0038                   .dbline 39
 0038           L6:
 0038                   .dbline 39
 0038           ;               while(ADCINC_1_fIsDataAvailable() == 0);   
 0038 10                push X
 0039 7C0000            xcall _ADCINC_1_fIsDataAvailable
 003C 20                pop X
 003D 3900              cmp A,0
 003F AFF8              jz L5
 0041                   .dbline 40
 0041           ;               AMX_IN ^= 0x0c;
 0041 45600C            xor REG[0x60],12
 0044                   .dbline 41
 0044           ;               adcVal = ADCINC_1_iClearFlagGetData();
 0044 10                push X
 0045 7C0000            xcall _ADCINC_1_iClearFlagGetData
 0048 5A00              mov [__r0],X
 004A 20                pop X
 004B 5401              mov [X+1],A
 004D 5100              mov A,[__r0]
 004F 5400              mov [X+0],A
 0051                   .dbline 42
 0051           ;               gyroZData = adcVal+2048;
 0051 5201              mov A,[X+1]
 0053 0100              add A,0
 0055 530B              mov [_gyroZData+1],A
 0057 5200              mov A,[X+0]
 0059 0908              adc A,8
 005B 530A              mov [_gyroZData],A
 005D                   .dbline 44
 005D           ;                               
 005D           ;               ADCINC_1_GetSamples(1);
 005D 10                push X
 005E 5001              mov A,1
 0060 7C0000            xcall _ADCINC_1_GetSamples
 0063 20                pop X
 0064           L8:
 0064                   .dbline 45
 0064           L9:
 0064                   .dbline 45
 0064           ;               while(ADCINC_1_fIsDataAvailable() == 0);   
 0064 10                push X
 0065 7C0000            xcall _ADCINC_1_fIsDataAvailable
 0068 20                pop X
 0069 3900              cmp A,0
 006B AFF8              jz L8
 006D                   .dbline 46
 006D           ;               AMX_IN |= 0x0c;
 006D 43600C            or REG[0x60],12
 0070                   .dbline 47
 0070           ;               adcVal = ADCINC_1_iClearFlagGetData();          
 0070 10                push X
 0071 7C0000            xcall _ADCINC_1_iClearFlagGetData
 0074 5A00              mov [__r0],X
 0076 20                pop X
 0077 5401              mov [X+1],A
 0079 5100              mov A,[__r0]
 007B 5400              mov [X+0],A
 007D                   .dbline 48
 007D           ;               gyroYData = adcVal+2048;
 007D 5201              mov A,[X+1]
 007F 0100              add A,0
 0081 530D              mov [_gyroYData+1],A
 0083 5200              mov A,[X+0]
 0085 0908              adc A,8
 0087 530C              mov [_gyroYData],A
 0089                   .dbline 50
 0089           ;                               
 0089           ;               ADCINC_1_GetSamples(1);
 0089 10                push X
 008A 5001              mov A,1
 008C 7C0000            xcall _ADCINC_1_GetSamples
 008F 20                pop X
 0090           L11:
 0090                   .dbline 51
 0090           L12:
 0090                   .dbline 51
 0090           ;               while(ADCINC_1_fIsDataAvailable() == 0);   
 0090 10                push X
 0091 7C0000            xcall _ADCINC_1_fIsDataAvailable
 0094 20                pop X
 0095 3900              cmp A,0
 0097 AFF8              jz L11
 0099                   .dbline 52
 0099           ;               AMX_IN &= 0xfb;                                         
 0099 4160FB            and REG[0x60],-5
 009C                   .dbline 53
 009C           ;               adcVal = ADCINC_1_iClearFlagGetData();          
 009C 10                push X
 009D 7C0000            xcall _ADCINC_1_iClearFlagGetData
 00A0 5A00              mov [__r0],X
 00A2 20                pop X
 00A3 5401              mov [X+1],A
 00A5 5100              mov A,[__r0]
 00A7 5400              mov [X+0],A
 00A9                   .dbline 54
 00A9           ;               tempData = adcVal+2048;
 00A9 5201              mov A,[X+1]
 00AB 0100              add A,0
 00AD 5309              mov [_tempData+1],A
 00AF 5200              mov A,[X+0]
 00B1 0908              adc A,8
 00B3 5308              mov [_tempData],A
 00B5                   .dbline 56
 00B5           ;                               
 00B5           ;               p1 = (unsigned short)gyroYData;
 00B5 5F070D            mov [_p1+1],[_gyroYData+1]
 00B8 5F060C            mov [_p1],[_gyroYData]
 00BB                   .dbline 57
 00BB           ;               p2 = (unsigned short)gyroZData;
 00BB 5F050B            mov [_p2+1],[_gyroZData+1]
 00BE 5F040A            mov [_p2],[_gyroZData]
 00C1                   .dbline 59
 00C1           ; 
 00C1           ;               buttonChar = 0x30;
 00C1 550F30            mov [_buttonChar],48
 00C4                   .dbline 62
 00C4           ; 
 00C4           ;               //Get button state              
 00C4           ;               if ((PRT0DR & 0x80) == 0) {
 00C4 490080            tst REG[ 0],-128
 00C7 B004              jnz L14
 00C9                   .dbline 62
 00C9                   .dbline 63
 00C9           ;                       buttonChar|=0x01; 
 00C9 2E0F01            or [_buttonChar],1
 00CC                   .dbline 64
 00CC           ;               }
 00CC           L14:
 00CC                   .dbline 65
 00CC           ;               if ((PRT0DR & 0x02) == 0) {
 00CC 490002            tst REG[ 0],2
 00CF B004              jnz L16
 00D1                   .dbline 65
 00D1                   .dbline 66
 00D1           ;                       buttonChar|=0x02; 
 00D1 2E0F02            or [_buttonChar],2
 00D4                   .dbline 67
 00D4           ;               }
 00D4           L16:
 00D4                   .dbline 70
 00D4           ; 
 00D4           ;               //Run Mouse Algorithm
 00D4           ;               updateMouse(&tempData, &p1, &p2, &p3, &p4, &buttonChar);                                
 00D4 500F              mov A,>_buttonChar
 00D6 08                push A
 00D7 500F              mov A,<_buttonChar
 00D9 08                push A
 00DA 5000              mov A,>_p4
 00DC 08                push A
 00DD 5000              mov A,<_p4
 00DF 08                push A
 00E0 5002              mov A,>_p3
 00E2 08                push A
 00E3 5002              mov A,<_p3
 00E5 08                push A
 00E6 5004              mov A,>_p2
 00E8 08                push A
 00E9 5004              mov A,<_p2
 00EB 08                push A
 00EC 5006              mov A,>_p1
 00EE 08                push A
 00EF 5006              mov A,<_p1
 00F1 08                push A
 00F2 5008              mov A,>_tempData
 00F4 08                push A
 00F5 5008              mov A,<_tempData
 00F7 08                push A
 00F8 7C0000            xcall _updateMouse
 00FB 38F4              add SP,-12
 00FD           L18:
 00FD                   .dbline 73
 00FD                   .dbline 73
 00FD           L19:
 00FD                   .dbline 73
 00FD           ;                               
 00FD           ;               //Send data             
 00FD           ;               while (!UART_1_TX_COMPLETE) {}
 00FD                   .dbline 74
 00FD           ;               UART_1_PutChar('$');
 00FD 10                push X
 00FE 5024              mov A,36
 0100 7C0000            xcall _UART_1_PutChar
 0103 20                pop X
 0104                   .dbline 76
 0104           ;               
 0104           ;               if (firmwareMode==0) {
 0104 3C0000            cmp [_firmwareMode],0
 0107 B066              jnz L21
 0109                   .dbline 76
 0109                   .dbline 79
 0109           ;               
 0109           ;                       //Send firmware mode
 0109           ;                       UART_1_PutChar(0);
 0109 10                push X
 010A 5000              mov A,0
 010C 7C0000            xcall _UART_1_PutChar
 010F 20                pop X
 0110                   .dbline 82
 0110           ;                       
 0110           ;                       //Send raw data
 0110           ;                       asm("mov [_sendChar], [_tempData]");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -