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

📄 main.s

📁 单片机USB接口模拟键盘,该程序可以控制PC机的PS/2键盘的NUM LOCK和SCROLL LOCK的灯,以此说明通讯正常
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile ./main.c
	.dbfunc e TD_init _TD_init fV
_TD_init::
	.dbline -1
	.dbline 54
; // Switch S1 is connected to P0.2 (Down=Start Movement/Up=Stop Movement)
; // Switch S2 is connected to P0.3 (Down=Left Button Down/Up=Left Button Up)
; // Switch S3 is connected to P0.4 (Not used)
; // 
; // LED D1 is connected to P0.5 (Tracks S1: On=Down/Off=Up)
; // LED D2 is connected to P0.6 (Tracks S2: On=Down/Off=Up)
; // LED D3 is connected to P1.3 (Not used)
; // 
; //----------------------------------------------------------------------------
; 
; #include <m8c.h>        // part specific constants and macros
; #include "PSoCAPI.h"    // PSoC API definitions for all User Modules
; 
; // Constant for button handling
; #define GO        1
; #define STOP      0
; #define UP        0
; #define DOWN      1
; #define NULL      0
; #define FULL      1
; // Constants for the mouse reports
; #define STEP_SIZE 1
; #define X_SIGN    1
; #define Y_SIGN    1
; #define Cap_L_UP	1
; #define Cap_L_DOWN	0
; #define Shift_UP	1
; #define Shift_DOWN	0
; // Movement Vectors for the letters U, S, and B
; 
; /*#define STEP(ctl,NULL,char1,char2,char3,char4,char5,char6)	( ctl ), \
;         (NULL),(char1),(char2),(char3),(char4),(char5),(char6),0
; 
; const BYTE a_logo_vectors[] =
; {
;   STEP(NULL, NULL,0x00,0x00,0x00,0x00,0x00,0x97),  //	;1
;   STEP(Shift_DOWN,NULL,0x00,0x00,0x00,0x00,0x00,0x97),  //	;1
; };
; 
; void delay(unsigned char ch)
; {
; unsigned char couter; 
; while(ch)
; 	{
; 	couter=0xff;
; 	while(couter)
; 		couter--;
; 	ch--;
; 	}
; 	return;
; }	
; 		*/
; void TD_init()
; {
	.dbline 55
; 	M8C_EnableGInt;
		or  F, 01h

	.dbline 62
; 	
; //	USB_INTERFACE_0_OUT_RPT_DATA[0] = 0;
; 	
; //	OSC_CR0 &= ~OSC_CR0_CPU;
; //	OSC_CR0 |=  OSC_CR0_CPU_24MHz;
; 	
; 	USB_Start(0);
	push X
	mov A,0
	xcall _USB_Start
	pop X
L3:
	.dbline 63
L4:
	.dbline 63
; 	while(USB_bGetConfiguration() == 0);
	push X
	xcall _USB_bGetConfiguration
	pop X
	cmp A,0
	jz L3
	.dbline -2
	.dbline 66
; 	
; //	while(USB_INTERFACE_0_OUT_RPT_DATA[0] == 0);
; }		
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area data(ram, con, rel)
	.dbfile ./main.c
_a_ram::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 'S,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.dbsym e a_ram _a_ram A[8:8]c
_b_ram::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 'G,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.dbsym e b_ram _b_ram A[8:8]c
_c_ram::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.dbsym e c_ram _c_ram A[8:8]c
_d_ram::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 57,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile ./main.c
	.dbsym e d_ram _d_ram A[8:8]c
	.area text(rom, con, rel)
	.dbfile ./main.c
	.dbfunc e main _main fV
_main::
	.dbline -1
	push X
	mov X,SP
	add SP,8
	.dbline 77
; // 
; BYTE left_button;
; BYTE move,right_button;
; BYTE pre_move,pre_LB_down,pre_RB_down;
; BYTE a_ram[8]={0x00, 0x00,0x53,0x00,0x00,0x00,0x00,0x00};
; BYTE b_ram[8]={0x00, 0x00,0x47,0x00,0x00,0x00,0x00,0x00};
; BYTE c_ram[8]={0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00};
; BYTE d_ram[8]={0x00, 0x00,0x39,0x00,0x00,0x00,0x00,0x00};
; //unsigned char *p_data;
; void main()
; {
	.dbline 78
;     TD_init();
	xcall _TD_init
	.dbline 82
;     
;     //p_data = &a_logo_vectors[0]; // Point to the first of the logo vectors
; 
;     move = STOP;
	mov [_move],0
	.dbline 83
;     left_button = UP;
	mov [_left_button],0
	.dbline 84
;     right_button= UP;
	mov [_right_button],0
	.dbline 85
;     pre_move=UP;
	mov [_pre_move],0
	.dbline 86
;     pre_LB_down=UP;
	mov [_pre_LB_down],0
	.dbline 87
;     pre_RB_down=UP;
	mov [_pre_RB_down],0
	.dbline 89
;     
;     P0DATA |= (0x20);		// P0.5 low (on)
	or REG[ 0],32
	.dbline 90
;     P0DATA |= (0x40);     	// P0.6 low (on)
	or REG[ 0],64
	.dbline 91
;     P1DATA |= (0x08);		// P1.3 low (on)
	or REG[0x1],8
	xjmp L8
L7:
	.dbline 94
;     
;     while (1)
;     {
	.dbline 95
;     	move         = ((P0DATA & 0x04) ? STOP : GO);  // P0.2 Up or Down
	tst REG[ 0],4
	jz L11
	mov [X+1],0
	mov [X+0],0
	xjmp L12
L11:
	mov [X+1],1
	mov [X+0],0
L12:
	mov A,[X+1]
	mov [_move],A
	.dbline 96
; 	    left_button  = ((P0DATA & 0x08) ? UP : DOWN);  // P0.3 Up or Down
	tst REG[ 0],8
	jz L14
	mov [X+3],0
	mov [X+2],0
	xjmp L15
L14:
	mov [X+3],1
	mov [X+2],0
L15:
	mov A,[X+3]
	mov [_left_button],A
	.dbline 97
; 	    right_button = ((P0DATA & 0x10) ? UP : DOWN);  // P0.4 Up or Down
	tst REG[ 0],16
	jz L17
	mov [X+5],0
	mov [X+4],0
	xjmp L18
L17:
	mov [X+5],1
	mov [X+4],0
L18:
	mov A,[X+5]
	mov [_right_button],A
	.dbline 98
; 	    if (move == STOP)
	cmp [_move],0
	jnz L19
	.dbline 99
; 	 	{
	.dbline 100
; 			P0DATA |= 0x20;        // P0.5 high (off)
	or REG[ 0],32
	.dbline 101
; 			pre_move=UP;
	mov [_pre_move],0
	.dbline 104
; 		//	while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
; 		//	USB_LoadEP(1, &c_ram[0], 8);			
; 		}
L19:
	.dbline 105
; 		if (move == GO && pre_move ==UP)
	cmp [_move],1
	jnz L21
	cmp [_pre_move],0
	jnz L21
	.dbline 106
; 		{
	.dbline 107
; 			P0DATA &= ~(0x20);     // P0.5 low (on)	
	and REG[ 0],-33
	.dbline 108
; 			pre_move=DOWN;
	mov [_pre_move],1
L23:
	.dbline 110
L24:
	.dbline 110
; 			// Check to see if the endpoint is empty
; 			while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
	push X
	mov A,1
	xcall _USB_bGetEPState
	pop X
	cmp A,1
	jnz L23
	.dbline 111
; 			USB_LoadEP(1, &a_ram[0], 8);
	mov [_USB_APIEPNumber],1
	.dbline 111
	mov [_USB_APICount],8
	.dbline 111
	push X
	mov A,>_a_ram
	push A
	mov A,<_a_ram
	mov X,A
	pop A
	xcall _USB_XLoadEP
	pop X
	.dbline 112
; 		}
L21:
	.dbline 114
; 		///////////////////
; 		if (left_button == UP)
	cmp [_left_button],0
	jnz L26
	.dbline 115
; 		{
	.dbline 116
; 		    P0DATA |= 0x40;        // P0.6 high (off)
	or REG[ 0],64
	.dbline 117
; 		    pre_LB_down =UP;
	mov [_pre_LB_down],0
	.dbline 120
; 		//	while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
; 		//	USB_LoadEP(1, &c_ram[0], 8);			
; 		}
L26:
	.dbline 121
; 		if (left_button == DOWN && pre_LB_down ==UP)
	cmp [_left_button],1
	jnz L28
	cmp [_pre_LB_down],0
	jnz L28
	.dbline 122
; 		{
	.dbline 123
; 		  	P0DATA &= ~(0x40);     // P0.6 low (on)	
	and REG[ 0],-65
	.dbline 124
; 		   	pre_LB_down=DOWN;
	mov [_pre_LB_down],1
	.dbline 125
; 		   	switch (USB_bGetEPState(1))
	push X
	mov A,1
	xcall _USB_bGetEPState
	pop X
	mov [X+7],A
	mov [X+6],0
	cmp [X+6],0
	jnz X2
	cmp [X+7],0
	jz L33
X2:
	cmp [X+6],0
	jnz X3
	cmp [X+7],1
	jz L34
X3:
	cmp [X+6],0
	jnz X4
	cmp [X+7],2
	jz L35
X4:
	xjmp L31
X0:
	.dbline 126
;     		{
L33:
	.dbline 127
;     			case 0:	P0DATA &= ~(0x20);break;		// P0.5 low (on)
	and REG[ 0],-33
	.dbline 127
	xjmp L31
L34:
	.dbline 128
;     			case 1:	P0DATA &= ~(0x40);break;     	// P0.6 low (on)
	and REG[ 0],-65
	.dbline 128
	xjmp L31
L35:
	.dbline 129

⌨️ 快捷键说明

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