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

📄 main.s

📁 陀螺仪程序
💻 S
字号:
	.module main.c
	.area data(ram, con, rel)
_firmwareMode::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile ./main.c
	.dbsym e firmwareMode _firmwareMode c
	.area text(rom, con, rel)
	.dbfile ./main.c
	.dbfunc e main _main fV
;              j -> X+4
;              i -> X+2
;         adcVal -> X+0
_main::
	.dbline -1
	push X
	mov X,SP
	add SP,6
	.dbline 20
; //----------------------------------------------------------------------------
; // C main line
; //----------------------------------------------------------------------------
; 
; #include <m8c.h>        // part specific constants and macros
; #include "PSoCAPI.h"    // PSoC API definitions for all User Modules
; 
; unsigned char buttonChar;
; unsigned char sendChar;
; int gyroYData, gyroZData, tempData;
; unsigned short p1;
; unsigned short p2;
; signed short p3;
; signed short p4;
; 
; //Change to 1 to compile as embedded mouse
; unsigned char firmwareMode = 1;
; 
; void main()
; {
	.dbline 21
; 	int i=0;
	mov [X+3],0
	mov [X+2],0
	.dbline 22
; 	int j=0;
	mov [X+5],0
	mov [X+4],0
	.dbline 26
; 	int adcVal;
; 	
; 
; 	PRT2DR |= 0x80;
	or REG[0x8],-128
	.dbline 27
; 	PRT0DR |= 0x80;	
	or REG[ 0],-128
	.dbline 28
; 	PRT0DR |= 0x02;		
	or REG[ 0],2
	.dbline 29
; 	M8C_EnableGInt; // Enable global interrupts
		or  F, 01h

	.dbline 30
; 	PGA_1_Start(PGA_1_HIGHPOWER);
	push X
	mov A,3
	xcall _PGA_1_Start
	.dbline 31
; 	ADCINC_1_Start(ADCINC_1_HIGHPOWER);
	mov A,3
	xcall _ADCINC_1_Start
	.dbline 33
; 	                     	
; 	UART_1_Start(UART_1_PARITY_NONE);
	mov A,0
	xcall _UART_1_Start
	pop X
	xjmp L3
L2:
	.dbline 35
; 
; 	while (1) {
	.dbline 36
; 		buttonChar = 48;
	mov [_buttonChar],48
	.dbline 38
; 				
; 		ADCINC_1_GetSamples(1);
	push X
	mov A,1
	xcall _ADCINC_1_GetSamples
	pop X
L5:
	.dbline 39
L6:
	.dbline 39
; 		while(ADCINC_1_fIsDataAvailable() == 0);   
	push X
	xcall _ADCINC_1_fIsDataAvailable
	pop X
	cmp A,0
	jz L5
	.dbline 40
; 		AMX_IN ^= 0x0c;
	xor REG[0x60],12
	.dbline 41
; 		adcVal = ADCINC_1_iClearFlagGetData();
	push X
	xcall _ADCINC_1_iClearFlagGetData
	mov [__r0],X
	pop X
	mov [X+1],A
	mov A,[__r0]
	mov [X+0],A
	.dbline 42
; 		gyroZData = adcVal+2048;
	mov A,[X+1]
	add A,0
	mov [_gyroZData+1],A
	mov A,[X+0]
	adc A,8
	mov [_gyroZData],A
	.dbline 44
; 				
; 		ADCINC_1_GetSamples(1);
	push X
	mov A,1
	xcall _ADCINC_1_GetSamples
	pop X
L8:
	.dbline 45
L9:
	.dbline 45
; 		while(ADCINC_1_fIsDataAvailable() == 0);   
	push X
	xcall _ADCINC_1_fIsDataAvailable
	pop X
	cmp A,0
	jz L8
	.dbline 46
; 		AMX_IN |= 0x0c;
	or REG[0x60],12
	.dbline 47
; 		adcVal = ADCINC_1_iClearFlagGetData();		
	push X
	xcall _ADCINC_1_iClearFlagGetData
	mov [__r0],X
	pop X
	mov [X+1],A
	mov A,[__r0]
	mov [X+0],A
	.dbline 48
; 		gyroYData = adcVal+2048;
	mov A,[X+1]
	add A,0
	mov [_gyroYData+1],A
	mov A,[X+0]
	adc A,8
	mov [_gyroYData],A
	.dbline 50
; 				
; 		ADCINC_1_GetSamples(1);
	push X
	mov A,1
	xcall _ADCINC_1_GetSamples
	pop X
L11:
	.dbline 51
L12:
	.dbline 51
; 		while(ADCINC_1_fIsDataAvailable() == 0);   
	push X
	xcall _ADCINC_1_fIsDataAvailable
	pop X
	cmp A,0
	jz L11
	.dbline 52
; 		AMX_IN &= 0xfb;						
	and REG[0x60],-5
	.dbline 53
; 		adcVal = ADCINC_1_iClearFlagGetData();		
	push X
	xcall _ADCINC_1_iClearFlagGetData
	mov [__r0],X
	pop X
	mov [X+1],A
	mov A,[__r0]
	mov [X+0],A
	.dbline 54
; 		tempData = adcVal+2048;
	mov A,[X+1]
	add A,0
	mov [_tempData+1],A
	mov A,[X+0]
	adc A,8
	mov [_tempData],A
	.dbline 56
; 				
; 		p1 = (unsigned short)gyroYData;
	mov [_p1+1],[_gyroYData+1]
	mov [_p1],[_gyroYData]
	.dbline 57
; 		p2 = (unsigned short)gyroZData;
	mov [_p2+1],[_gyroZData+1]
	mov [_p2],[_gyroZData]
	.dbline 59
; 
; 		buttonChar = 0x30;
	mov [_buttonChar],48
	.dbline 62
; 
; 		//Get button state		
; 		if ((PRT0DR & 0x80) == 0) {
	tst REG[ 0],-128
	jnz L14
	.dbline 62
	.dbline 63
; 			buttonChar|=0x01; 
	or [_buttonChar],1
	.dbline 64
; 		}
L14:
	.dbline 65
; 		if ((PRT0DR & 0x02) == 0) {
	tst REG[ 0],2
	jnz L16
	.dbline 65
	.dbline 66
; 			buttonChar|=0x02; 
	or [_buttonChar],2
	.dbline 67
; 		}
L16:
	.dbline 70
; 
; 		//Run Mouse Algorithm
; 		updateMouse(&tempData, &p1, &p2, &p3, &p4, &buttonChar);				
	mov A,>_buttonChar
	push A
	mov A,<_buttonChar
	push A
	mov A,>_p4
	push A
	mov A,<_p4
	push A
	mov A,>_p3
	push A
	mov A,<_p3
	push A
	mov A,>_p2
	push A
	mov A,<_p2
	push A
	mov A,>_p1
	push A
	mov A,<_p1
	push A
	mov A,>_tempData
	push A
	mov A,<_tempData
	push A
	xcall _updateMouse
	add SP,-12
L18:
	.dbline 73
	.dbline 73
L19:
	.dbline 73
; 				
; 		//Send data		
; 		while (!UART_1_TX_COMPLETE) {}
	.dbline 74
; 		UART_1_PutChar('$');
	push X
	mov A,36
	xcall _UART_1_PutChar
	pop X
	.dbline 76
; 		
; 		if (firmwareMode==0) {
	cmp [_firmwareMode],0
	jnz L21
	.dbline 76
	.dbline 79
; 		
; 			//Send firmware mode
; 			UART_1_PutChar(0);
	push X
	mov A,0
	xcall _UART_1_PutChar
	pop X
	.dbline 82
; 			
; 			//Send raw data
; 			asm("mov [_sendChar], [_tempData]");
		mov [_sendChar], [_tempData]

	.dbline 83
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 84
; 			asm("mov [_sendChar], [_tempData+1]");		
		mov [_sendChar], [_tempData+1]

	.dbline 85
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 87
; 			
; 			asm("mov [_sendChar], [_gyroYData]");
		mov [_sendChar], [_gyroYData]

	.dbline 88
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 89
; 			asm("mov [_sendChar], [_gyroYData+1]");		
		mov [_sendChar], [_gyroYData+1]

	.dbline 90
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 92
; 			
; 			asm("mov [_sendChar], [_gyroZData]");
		mov [_sendChar], [_gyroZData]

	.dbline 93
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 94
; 			asm("mov [_sendChar], [_gyroZData+1]");		
		mov [_sendChar], [_gyroZData+1]

	.dbline 95
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
L23:
	.dbline 97
	.dbline 97
L24:
	.dbline 97
; 			
; 			while (!UART_1_TX_COMPLETE) {}
	.dbline 99
; 			
; 			UART_1_PutChar(0);
	push X
	mov A,0
	xcall _UART_1_PutChar
	.dbline 100
; 			UART_1_PutChar(0);
	mov A,0
	xcall _UART_1_PutChar
	.dbline 102
; 				
; 			UART_1_PutChar(0);
	mov A,0
	xcall _UART_1_PutChar
	.dbline 103
; 			UART_1_PutChar(0);
	mov A,0
	xcall _UART_1_PutChar
	.dbline 105
; 				
; 			UART_1_PutChar(0);
	mov A,0
	xcall _UART_1_PutChar
	.dbline 106
; 			UART_1_PutChar(0);
	mov A,0
	xcall _UART_1_PutChar
	pop X
	.dbline 107
; 		}
	xjmp L22
L21:
	.dbline 108
; 		else {
	.dbline 111
; 		
; 			//Send firmware mode
; 			UART_1_PutChar(1);
	push X
	mov A,1
	xcall _UART_1_PutChar
	pop X
	.dbline 114
; 			
; 			//Send output of mouse algorithm
; 			asm("mov [_sendChar], [_tempData]");
		mov [_sendChar], [_tempData]

	.dbline 115
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 116
; 			asm("mov [_sendChar], [_tempData+1]");		
		mov [_sendChar], [_tempData+1]

	.dbline 117
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 119
; 			
; 			asm("mov [_sendChar], [_gyroYData]");
		mov [_sendChar], [_gyroYData]

	.dbline 120
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 121
; 			asm("mov [_sendChar], [_gyroYData+1]");		
		mov [_sendChar], [_gyroYData+1]

	.dbline 122
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 124
; 			
; 			asm("mov [_sendChar], [_gyroZData]");
		mov [_sendChar], [_gyroZData]

	.dbline 125
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 126
; 			asm("mov [_sendChar], [_gyroZData+1]");		
		mov [_sendChar], [_gyroZData+1]

	.dbline 127
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	.dbline 129
; 		
; 			UART_1_PutChar(0);
	mov A,0
	xcall _UART_1_PutChar
	.dbline 130
; 			UART_1_PutChar(0);
	mov A,0
	xcall _UART_1_PutChar
	pop X
	.dbline 132
; 
; 			asm("mov [_sendChar], [_p3]");
		mov [_sendChar], [_p3]

	.dbline 133
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 134
; 			asm("mov [_sendChar], [_p3+1]");		
		mov [_sendChar], [_p3+1]

	.dbline 135
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 137
; 			
; 			asm("mov [_sendChar], [_p4]");
		mov [_sendChar], [_p4]

	.dbline 138
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 139
; 			asm("mov [_sendChar], [_p4+1]");		
		mov [_sendChar], [_p4+1]

	.dbline 140
; 			UART_1_PutChar(sendChar);
	push X
	mov A,[_sendChar]
	xcall _UART_1_PutChar
	pop X
	.dbline 142
; 		
; 		}		
L22:
	.dbline 146
	push X
	mov A,[_buttonChar]
	xcall _UART_1_PutChar
	.dbline 148
	mov A,13
	xcall _UART_1_PutChar
	.dbline 149
	mov A,10
	xcall _UART_1_PutChar
	pop X
	.dbline 151
L3:
	.dbline 35
	xjmp L2
X0:
	.dbline -2
	.dbline 153
; 		
; 		
; 		//Send button state
; 		UART_1_PutChar(buttonChar);
; 				
; 		UART_1_PutChar('\r');
; 		UART_1_PutChar('\n');
; 				
; 	}
; 
; }
L1:
	add SP,-6
	pop X
	.dbline 0 ; func end
	jmp .
	.dbsym l j 4 I
	.dbsym l i 2 I
	.dbsym l adcVal 0 I
	.dbend
	.area bss(ram, con, rel)
	.dbfile ./main.c
_p4::
	.blkb 2
	.dbsym e p4 _p4 S
_p3::
	.blkb 2
	.dbsym e p3 _p3 S
_p2::
	.blkb 2
	.dbsym e p2 _p2 s
_p1::
	.blkb 2
	.dbsym e p1 _p1 s
_tempData::
	.blkb 2
	.dbsym e tempData _tempData I
_gyroZData::
	.blkb 2
	.dbsym e gyroZData _gyroZData I
_gyroYData::
	.blkb 2
	.dbsym e gyroYData _gyroYData I
_sendChar::
	.blkb 1
	.dbsym e sendChar _sendChar c
_buttonChar::
	.blkb 1
	.dbsym e buttonChar _buttonChar c

⌨️ 快捷键说明

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