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

📄 main.s

📁 单片机USB接口模拟键盘,该程序可以控制PC机的PS/2键盘的NUM LOCK和SCROLL LOCK的灯,以此说明通讯正常
💻 S
📖 第 1 页 / 共 2 页
字号:
;     			case 2:	P1DATA &= ~(0x08);break;		// P1.3 low (on)
	and REG[0x1],-9
	.dbline 129
	.dbline 130
;     			default: break;
L31:
	.dbline 134
;     		}
; 		    // Check to see if the endpoint is empty
; //			while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
; 			USB_LoadEP(1, &b_ram[0], 8);
	mov [_USB_APIEPNumber],1
	.dbline 134
	mov [_USB_APICount],8
	.dbline 134
	push X
	mov A,>_b_ram
	push A
	mov A,<_b_ram
	mov X,A
	pop A
	xcall _USB_XLoadEP
	pop X
	.dbline 135
; 		}
L28:
	.dbline 137
; 				///////////////////
; 		if (right_button == UP)
	cmp [_right_button],0
	jnz L36
	.dbline 138
; 		{
	.dbline 139
; 		    P1DATA |= 0x08;        // P1.3 high (off)
	or REG[0x1],8
	.dbline 140
; 		    pre_RB_down =UP;
	mov [_pre_RB_down],0
	.dbline 143
; 		//	while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
; 		//	USB_LoadEP(1, &c_ram[0], 8);			
; 		}
L36:
	.dbline 144
; 		if (right_button == DOWN && pre_RB_down ==UP)
	cmp [_right_button],1
	jnz L38
	cmp [_pre_RB_down],0
	jnz L38
	.dbline 145
; 		{
	.dbline 146
; 		  	P1DATA &= ~(0x08);     // P0.6 low (on)	
	and REG[0x1],-9
	.dbline 147
; 		   	pre_RB_down=DOWN;
	mov [_pre_RB_down],1
	.dbline 149
; //		   	USB_EnableEP(1);
; 		   	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 X5
	cmp [X+7],0
	jz L43
X5:
	cmp [X+6],0
	jnz X6
	cmp [X+7],1
	jz L44
X6:
	cmp [X+6],0
	jnz X7
	cmp [X+7],2
	jz L45
X7:
	xjmp L41
X1:
	.dbline 150
;     		{
L43:
	.dbline 151
;     			case 0:	P0DATA &= ~(0x20);break;		// P0.5 low (on)
	and REG[ 0],-33
	.dbline 151
	xjmp L41
L44:
	.dbline 152
;     			case 1:	P0DATA &= ~(0x40);break;     	// P0.6 low (on)
	and REG[ 0],-65
	.dbline 152
	xjmp L41
L45:
	.dbline 153
;     			case 2:	P1DATA &= ~(0x08);break;		// P1.3 low (on)
	and REG[0x1],-9
	.dbline 153
	.dbline 154
;     			default: break;
L41:
	.dbline 158
;     		}
; 		    // Check to see if the endpoint is empty
; //			while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
; 			USB_LoadEP(1, &d_ram[0], 8);
	mov [_USB_APIEPNumber],1
	.dbline 158
	mov [_USB_APICount],8
	.dbline 158
	push X
	mov A,>_d_ram
	push A
	mov A,<_d_ram
	mov X,A
	pop A
	xcall _USB_XLoadEP
	pop X
	.dbline 159
; 		}
L38:
	.dbline 193
L8:
	.dbline 93
	xjmp L7
L46:
	.dbline 196
; 		/*
; 		        
; 	    switch (USB_bGetEPState(1))
;     	{
;     		case 0:	P0DATA &= ~(0x20);break;		// P0.5 low (on)
;     		case 1:	P0DATA &= ~(0x40);break;     	// P0.6 low (on)
;     		case 2:	P1DATA &= ~(0x08);break;		// P1.3 low (on)
;     		default: break;
;     	}
;     	while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
;     	USB_LoadEP(1, &b_ram[0], 8);
;     	USB_LoadEP(1, &c_ram[0], 8);
;     
;     	USB_EnableEP(1);
;     
;     	switch (USB_bGetEPState(1))
;     	{
;     		case 0:	P0DATA &= ~(0x20);break;		// P0.5 low (on)
;     		case 1:	P0DATA &= ~(0x40);break;     	// P0.6 low (on)
;     		case 2:	P1DATA &= ~(0x08);break;		// P1.3 low (on)
;     		default: break;
;     	}
;     
;     	USB_LoadEP(1, &a_ram[0], 8);
;     
;     	USB_DisableEP(1);
;     	switch (USB_bGetEPState(1))
;     	{
;     		case 0:	P0DATA &= ~(0x20);break;		// P0.5 low (on)
;     		case 1:	P0DATA &= ~(0x40);break;     	// P0.6 low (on)
;     		case 2:	P1DATA &= ~(0x08);break;		// P1.3 low (on)
;     		default: break;
;     	}*/
; 	}
; 	
;     while (0)
;     {
	.dbline 199
;     	//USB接收保存PC数据
;   //  	while (USB_bGetEPState(1) == OUT_BUFFER_EMPTY)
;     	{
	.dbline 203
;    // 		USB_EnableEP(1);
; 
; 		    //USB按键发送键盘数据
; 	        move        = ((P0DATA & 0x04) ? STOP : GO);  // P0.2 Up or Down
	tst REG[ 0],4
	jz L50
	mov [X+1],0
	mov [X+0],0
	xjmp L51
L50:
	mov [X+1],1
	mov [X+0],0
L51:
	mov A,[X+1]
	mov [_move],A
	.dbline 204
; 	        left_button = ((P0DATA & 0x08) ? UP : DOWN);  // P0.3 Up or Down
	tst REG[ 0],8
	jz L53
	mov [X+3],0
	mov [X+2],0
	xjmp L54
L53:
	mov [X+3],1
	mov [X+2],0
L54:
	mov A,[X+3]
	mov [_left_button],A
	.dbline 206
; 	        ///////////////////
; 	        if(move== GO || left_button==DOWN)
	cmp [_move],1
	jz L57
	cmp [_left_button],1
	jnz L55
L57:
	.dbline 207
; 	        {
	.dbline 208
; 	        	if (move == STOP)
	cmp [_move],0
	jnz L58
	.dbline 209
; 	 	       	{
	.dbline 210
; 		            P0DATA |= 0x20;        // P0.5 high (off)
	or REG[ 0],32
	.dbline 211
; 		            pre_move=UP;
	mov [_pre_move],0
L60:
	.dbline 212
L61:
	.dbline 212
; 		            while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
	push X
	mov A,1
	xcall _USB_bGetEPState
	pop X
	cmp A,1
	jnz L60
	.dbline 213
; 		            USB_LoadEP(1, &c_ram[0], 8);			
	mov [_USB_APIEPNumber],1
	.dbline 213
	mov [_USB_APICount],8
	.dbline 213
	push X
	mov A,>_c_ram
	push A
	mov A,<_c_ram
	mov X,A
	pop A
	xcall _USB_XLoadEP
	pop X
	.dbline 214
; 		        }
L58:
	.dbline 215
; 		        if (move == GO && pre_move ==UP)
	cmp [_move],1
	jnz L63
	cmp [_pre_move],0
	jnz L63
	.dbline 216
; 		        {
	.dbline 217
; 		        	P0DATA &= ~(0x20);     // P0.5 low (on)	
	and REG[ 0],-33
	.dbline 218
; 		        	pre_move=DOWN;
	mov [_pre_move],1
L65:
	.dbline 220
L66:
	.dbline 220
; 		            // 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 L65
	.dbline 221
; 		            USB_LoadEP(1, &a_ram[0], 8);
	mov [_USB_APIEPNumber],1
	.dbline 221
	mov [_USB_APICount],8
	.dbline 221
	push X
	mov A,>_a_ram
	push A
	mov A,<_a_ram
	mov X,A
	pop A
	xcall _USB_XLoadEP
	pop X
	.dbline 222
; 		        }
L63:
	.dbline 224
; 		        ///////////////////
; 		        if (left_button == UP)
	cmp [_left_button],0
	jnz L68
	.dbline 225
; 		        {
	.dbline 226
; 		            P0DATA |= 0x40;        // P0.6 high (off)
	or REG[ 0],64
	.dbline 227
; 		            pre_LB_down =UP;
	mov [_pre_LB_down],0
L70:
	.dbline 228
L71:
	.dbline 228
; 		            while(USB_bGetEPState(1) != IN_BUFFER_EMPTY);
	push X
	mov A,1
	xcall _USB_bGetEPState
	pop X
	cmp A,1
	jnz L70
	.dbline 229
; 		            USB_LoadEP(1, &c_ram[0], 8);			
	mov [_USB_APIEPNumber],1
	.dbline 229
	mov [_USB_APICount],8
	.dbline 229
	push X
	mov A,>_c_ram
	push A
	mov A,<_c_ram
	mov X,A
	pop A
	xcall _USB_XLoadEP
	pop X
	.dbline 230
; 		        }
L68:
	.dbline 231
; 		        if (left_button == DOWN && pre_LB_down ==UP)
	cmp [_left_button],1
	jnz L73
	cmp [_pre_LB_down],0
	jnz L73
	.dbline 232
; 		        {
	.dbline 233
; 		        	P0DATA &= ~(0x40);     // P0.6 low (on)	
	and REG[ 0],-65
	.dbline 234
; 		        	pre_LB_down=DOWN;
	mov [_pre_LB_down],1
L75:
	.dbline 236
L76:
	.dbline 236
; 		            // 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 L75
	.dbline 237
; 		            USB_LoadEP(1, &b_ram[0], 8);
	mov [_USB_APIEPNumber],1
	.dbline 237
	mov [_USB_APICount],8
	.dbline 237
	push X
	mov A,>_b_ram
	push A
	mov A,<_b_ram
	mov X,A
	pop A
	xcall _USB_XLoadEP
	pop X
	.dbline 238
; 		        }
L73:
	.dbline 239
; 		    }
L55:
	.dbline 240
	.dbline 241
L47:
	.dbline 195
	.dbline -2
	.dbline 242
; 	    }
;     }
; }
L6:
	add SP,-8
	pop X
	.dbline 0 ; func end
	jmp .
	.dbend
	.area bss(ram, con, rel)
	.dbfile ./main.c
_pre_RB_down::
	.blkb 1
	.dbsym e pre_RB_down _pre_RB_down c
_pre_LB_down::
	.blkb 1
	.dbsym e pre_LB_down _pre_LB_down c
_pre_move::
	.blkb 1
	.dbsym e pre_move _pre_move c
_right_button::
	.blkb 1
	.dbsym e right_button _right_button c
_move::
	.blkb 1
	.dbsym e move _move c
_left_button::
	.blkb 1
	.dbsym e left_button _left_button c

⌨️ 快捷键说明

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