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

📄 mainloop.src

📁 Comlete files for fullfile the slave USB function!
💻 SRC
📖 第 1 页 / 共 3 页
字号:
	CLR  	A
	MOV  	bEPPflags,A
	MOV  	bEPPflags+01H,A
; 	ENABLE;
			; SOURCE LINE # 292
	SETB 	EA
; 
; 	// disable normal+sof interrupt
; 	D12_SetDMA(0x00);
			; SOURCE LINE # 295
	MOV  	R7,A
	LCALL	_D12_SetDMA
; 	
; 	// Initialize D12 working mode
; 	D12_SetMode(D12_NOLAZYCLOCK|D12_CLOCKRUNNING|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
			; SOURCE LINE # 298
	MOV  	R5,#043H
	MOV  	R7,#016H
	LJMP 	_D12_SetMode
; END OF connect_USB

; 	//D12_SetMode(D12_SOFTCONNECT, 0x00);	/* Enable softconnect */
; }
; 
; 
; void reconnect_USB(void)

	RSEG  ?PR?reconnect_USB?MAINLOOP
reconnect_USB:
	USING	0
			; SOURCE LINE # 303
; {
			; SOURCE LINE # 304
; 	unsigned long clk_cnt;
; 
; 	//Turn on LEDs
; 	MCU_LED0 = 0; 
			; SOURCE LINE # 308
	CLR  	MCU_LED0
; 	MCU_LED1 = 0;
			; SOURCE LINE # 309
	CLR  	MCU_LED1
; 
; 	//D12SUSPD = 0;	/* wakeup D12 */
; 	disconnect_USB();
			; SOURCE LINE # 312
	LCALL	disconnect_USB
; 
; 	clk_cnt = ClockTicks;
			; SOURCE LINE # 314
	MOV  	clk_cnt?946+03H,ClockTicks+03H
	MOV  	clk_cnt?946+02H,ClockTicks+02H
	MOV  	clk_cnt?946+01H,ClockTicks+01H
	MOV  	clk_cnt?946,ClockTicks
?C0025:
; 	while(ClockTicks < clk_cnt + 20)
			; SOURCE LINE # 315
	MOV  	A,clk_cnt?946+03H
	ADD  	A,#014H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,clk_cnt?946+02H
	MOV  	R6,A
	CLR  	A
	ADDC 	A,clk_cnt?946+01H
	MOV  	R5,A
	CLR  	A
	ADDC 	A,clk_cnt?946
	MOV  	R4,A
	MOV  	R3,ClockTicks+03H
	MOV  	R2,ClockTicks+02H
	MOV  	R1,ClockTicks+01H
	MOV  	R0,ClockTicks
	CLR  	C
	LCALL	?C?ULCMP
	JC   	?C0025
?C0026:
; 		;
; 
; 	connect_USB();
			; SOURCE LINE # 318
	LCALL	connect_USB
; 
; 	//Trun off LEDs
; 	MCU_LED0 = 1;
			; SOURCE LINE # 321
	SETB 	MCU_LED0
; 	MCU_LED1 = 1;
			; SOURCE LINE # 322
	SETB 	MCU_LED1
; 
; }
			; SOURCE LINE # 324
	RET  	
; END OF reconnect_USB

; 
; void init_unconfig(void)

	RSEG  ?PR?init_unconfig?MAINLOOP
init_unconfig:
	USING	0
			; SOURCE LINE # 326
; {
			; SOURCE LINE # 327
; 	unsigned char i;
; 
; 	D12_SetEndpointEnable(0);	/* Disable all endpoints but EPP0. */
			; SOURCE LINE # 330
	CLR  	A
	MOV  	R7,A
	LJMP 	_D12_SetEndpointEnable
; END OF init_unconfig

; }
; 
; void init_config(void)

	RSEG  ?PR?init_config?MAINLOOP
init_config:
	USING	0
			; SOURCE LINE # 333
; {
			; SOURCE LINE # 334
; 	D12_SetEndpointEnable(1);	/* Enable  generic/iso endpoints. */
			; SOURCE LINE # 335
	MOV  	R7,#01H
	LJMP 	_D12_SetEndpointEnable
; END OF init_config

; }
; 
; void single_transmit(unsigned char * buf, unsigned char len)

	RSEG  ?PR?_single_transmit?MAINLOOP
_single_transmit:
	USING	0
			; SOURCE LINE # 338
;---- Variable 'len?1249' assigned to Register 'R5' ----
;---- Variable 'buf?1248' assigned to Register 'R1/R2/R3' ----
; {
			; SOURCE LINE # 339
; 	if( len <= EP0_PACKET_SIZE) {
			; SOURCE LINE # 340
	MOV  	A,R5
	SETB 	C
	SUBB 	A,#010H
	JNC  	?C0031
; 		D12_WriteEndpoint(1, buf, len);
			; SOURCE LINE # 341
	MOV  	?_D12_WriteEndpoint?BYTE+04H,R5
	MOV  	R7,#01H
	LCALL	_D12_WriteEndpoint
; 	}
			; SOURCE LINE # 342
; }
			; SOURCE LINE # 343
?C0031:
	RET  	
; END OF _single_transmit

; 
; void code_transmit(unsigned char code * pRomData, unsigned short len)

	RSEG  ?PR?_code_transmit?MAINLOOP
_code_transmit:
	USING	0
			; SOURCE LINE # 345
	MOV  	pRomData?1350,R6
	MOV  	pRomData?1350+01H,R7
;---- Variable 'len?1351' assigned to Register 'R4/R5' ----
; {
			; SOURCE LINE # 346
; 	ControlData.wCount = 0;
			; SOURCE LINE # 347
	CLR  	A
	MOV  	ControlData+0AH,A
	MOV  	ControlData+0BH,A
; 	if(ControlData.wLength > len)
			; SOURCE LINE # 348
	SETB 	C
	MOV  	A,ControlData+09H
	SUBB 	A,R5
	MOV  	A,ControlData+08H
	SUBB 	A,R4
	JC   	?C0032
; 		ControlData.wLength = len;
			; SOURCE LINE # 349
	MOV  	ControlData+08H,R4
	MOV  	ControlData+09H,R5
?C0032:
; 
; 	ControlData.pData = pRomData;
			; SOURCE LINE # 351
	MOV  	ControlData+0CH,#0FFH
	MOV  	ControlData+0DH,pRomData?1350
	MOV  	ControlData+0EH,pRomData?1350+01H
; 	if( ControlData.wLength >= EP0_PACKET_SIZE) {
			; SOURCE LINE # 352
	CLR  	C
	MOV  	A,ControlData+09H
	SUBB 	A,#010H
	MOV  	A,ControlData+08H
	SUBB 	A,#00H
	JC   	?C0033
; 		D12_WriteEndpoint(1, ControlData.pData, EP0_PACKET_SIZE);
			; SOURCE LINE # 353
	MOV  	R3,ControlData+0CH
	MOV  	R2,ControlData+0DH
	MOV  	R1,ControlData+0EH
	MOV  	?_D12_WriteEndpoint?BYTE+04H,#010H
	MOV  	R7,#01H
	LCALL	_D12_WriteEndpoint
; 		ControlData.wCount += EP0_PACKET_SIZE;
			; SOURCE LINE # 354
	MOV  	A,#010H
	ADD  	A,ControlData+0BH
	MOV  	ControlData+0BH,A
	CLR  	A
	ADDC 	A,ControlData+0AH
	MOV  	ControlData+0AH,A
; 
; 		DISABLE;
			; SOURCE LINE # 356
	CLR  	EA
; 		bEPPflags.bits.control_state = USB_TRANSMIT;
			; SOURCE LINE # 357
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#03FH
	ORL  	A,#040H
; 		ENABLE;
			; SOURCE LINE # 358
; 	}
			; SOURCE LINE # 359
	SJMP 	?C0057
?C0033:
; 	else {
			; SOURCE LINE # 360
; 		D12_WriteEndpoint(1, pRomData, ControlData.wLength);
			; SOURCE LINE # 361
	MOV  	R2,pRomData?1350
	MOV  	R1,pRomData?1350+01H
	MOV  	R3,#0FFH
	MOV  	?_D12_WriteEndpoint?BYTE+04H,ControlData+09H
	MOV  	R7,#01H
	LCALL	_D12_WriteEndpoint
; 		ControlData.wCount += ControlData.wLength;
			; SOURCE LINE # 362
	MOV  	A,ControlData+09H
	ADD  	A,ControlData+0BH
	MOV  	ControlData+0BH,A
	MOV  	A,ControlData+08H
	ADDC 	A,ControlData+0AH
	MOV  	ControlData+0AH,A
; 		DISABLE;
			; SOURCE LINE # 363
	CLR  	EA
; 		bEPPflags.bits.control_state = USB_IDLE;
			; SOURCE LINE # 364
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ANL  	A,#03FH
?C0057:
	MOV  	bEPPflags,A
; 		ENABLE;
			; SOURCE LINE # 365
	SETB 	EA
; 	}
			; SOURCE LINE # 366
; }
			; SOURCE LINE # 367
?C0035:
	RET  	
; END OF _code_transmit

; 
; /* LED and Key Processing subroutine */
; void check_key_LED(void)

	RSEG  ?PR?check_key_LED?MAINLOOP
check_key_LED:
	USING	0
			; SOURCE LINE # 370
; {
			; SOURCE LINE # 371
; 	static unsigned char c, last_key = 0xf;
; 
; 	// Key processing (infor current key status to host)
; 	c = MCU_SWM0 & MCU_SWM1;	/* get two keys status */
			; SOURCE LINE # 375
	MOV  	C,MCU_SWM1
	ANL  	C,MCU_SWM0
	CLR  	A
	RLC  	A
	MOV  	c?1452,A
; 	c &= 0x0f;
			; SOURCE LINE # 376
	ANL  	c?1452,#0FH
; 	if (c != last_key & bEPPflags.bits.ep1_sxdone) { /* Keys status have been changed */
			; SOURCE LINE # 377
	MOV  	A,c?1452
	XRL  	A,last_key?1453
	JZ   	?C0037
	MOV  	R7,#01H
	SJMP 	?C0038
?C0037:
	MOV  	R7,#00H
?C0038:
	MOV  	R6,bEPPflags+01H
	MOV  	A,R6
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01H
	ANL  	A,R7
	JZ   	?C0036
; 		bEPPflags.bits.ep1_sxdone = 0;
			; SOURCE LINE # 378
	MOV  	R7,bEPPflags+01H
	MOV  	A,R7
	ANL  	A,#0F7H
	MOV  	bEPPflags+01H,A
; 		D12_WriteEndpoint(3, &c, 1); /* send key information to host */
			; SOURCE LINE # 379
	MOV  	R3,#00H
	MOV  	R2,#HIGH (c?1452)
	MOV  	R1,#LOW (c?1452)
	MOV  	?_D12_WriteEndpoint?BYTE+04H,#01H
	MOV  	R7,#03H
	LCALL	_D12_WriteEndpoint
; 	}
			; SOURCE LINE # 380
?C0036:
; 	last_key = c;	/* store current key status */
			; SOURCE LINE # 381
	MOV  	last_key?1453,c?1452
; 
; 	// LED processing (get LED info, and set LED
; 	if(bEPPflags.bits.ep1_rxdone) {	/* Get LED control command */
			; SOURCE LINE # 384
	MOV  	R7,bEPPflags+01H
	MOV  	A,R7
	RRC  	A
	RRC  	A
	ANL  	A,#03FH
	JNB  	ACC.0,?C0040
; 		DISABLE;
			; SOURCE LINE # 385
	CLR  	EA
; 		bEPPflags.bits.ep1_rxdone = 0;	/* Clear the endpoint receiving flag */
			; SOURCE LINE # 386
	MOV  	R7,bEPPflags+01H
	MOV  	A,R7
	ANL  	A,#0FBH
	MOV  	bEPPflags+01H,A
; 		ENABLE;
			; SOURCE LINE # 387
	SETB 	EA
; 
; 		MCU_LED0 = !(GenEpBuf[3] & 0x1);	/* Cnage LED status */
			; SOURCE LINE # 389
	MOV  	R0,#LOW (GenEpBuf+03H)
	MOV  	A,@R0
	MOV  	R7,A
	RRC  	A
	CPL  	C
	MOV  	MCU_LED0,C
; 		MCU_LED1 = !(GenEpBuf[3] & 0x2);
			; SOURCE LINE # 390
	MOV  	A,R7
	MOV  	C,ACC.1
	CPL  	C
	MOV  	MCU_LED1,C
; 	}
			; SOURCE LINE # 391
; }
			; SOURCE LINE # 392
?C0040:
	RET  	
; END OF check_key_LED

; 
; 
; void control_handler()

	RSEG  ?PR?control_handler?MAINLOOP
control_handler:
	USING	0
			; SOURCE LINE # 395
; {
			; SOURCE LINE # 396
; 	unsigned char type, req;
; 
; 	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;	/*0x60*/
			; SOURCE LINE # 399
	MOV  	A,ControlData
	ANL  	A,#060H
	MOV  	type?1554,A
; 	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;	/*0x0F*/
			; SOURCE LINE # 400
	MOV  	A,ControlData+01H
	ANL  	A,#0FH
	MOV  	req?1555,A
; 
; 	if (type == USB_STANDARD_REQUEST)
			; SOURCE LINE # 402
	MOV  	A,type?1554
	JNZ  	?C0041
; 		(*StandardDeviceRequest[req])();
			; SOURCE LINE # 403
	MOV  	A,req?1555
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (StandardDeviceRequest)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (StandardDeviceRequest)
	SJMP 	?C0058
?C0041:
; //	if (type == USB_CLASS_REQUEST) {
; //blinkLED(0);
; //		(*ClassRequest[req])();
; //	}
; 	else if (type == USB_VENDOR_REQUEST)
			; SOURCE LINE # 408
	MOV  	A,type?1554
	CJNE 	A,#040H,?C0043
; 		(*VendorDeviceRequest[req])();
			; SOURCE LINE # 409
	MOV  	A,req?1555
	MOV  	B,#03H
	MUL  	AB
	ADD  	A,#LOW (VendorDeviceRequest)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (VendorDeviceRequest)
?C0058:
	MOV  	DPH,A
	MOV  	A,#01H
	MOVC 	A,@A+DPTR
	MOV  	R2,A
	MOV  	A,#02H
	MOVC 	A,@A+DPTR
	MOV  	R1,A
	LJMP 	?C?ICALL
?C0043:
; 	else
; 		stall_ep0();
			; SOURCE LINE # 411
	LCALL	stall_ep0
; }
			; SOURCE LINE # 412
?C0045:
	RET  	
; END OF control_handler

; 
; void loop_delay(const unsigned int nDelay)

	RSEG  ?PR?_loop_delay?MAINLOOP
_loop_delay:
	USING	0
			; SOURCE LINE # 414
;---- Variable 'nDelay?1656' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 415
;     unsigned int x, y;
;     for (x=0; x<=nDelay;x++) {
			; SOURCE LINE # 417
;---- Variable 'x?1657' assigned to Register 'R4/R5' ----
	CLR  	A
	MOV  	R5,A
	MOV  	R4,A
?C0046:
	SETB 	C
	MOV  	A,R5
	SUBB 	A,R7
	MOV  	A,R4
	SUBB 	A,R6
	JNC  	?C0052
;         for (y=0;y<=110;y++) ;
			; SOURCE LINE # 418
;---- Variable 'y?1658' assigned to Register 'R2/R3' ----
	CLR  	A
	MOV  	R3,A
	MOV  	R2,A
?C0049:
	INC  	R3
	CJNE 	R3,#00H,?C0054
	INC  	R2
?C0054:
	MOV  	A,R3
	XRL  	A,#06FH
	ORL  	A,R2
	JNZ  	?C0049
;     }
			; SOURCE LINE # 419
?C0048:
	INC  	R5
	CJNE 	R5,#00H,?C0055
	INC  	R4
?C0055:
	SJMP 	?C0046
; }			; SOURCE LINE # 420
?C0052:
	RET  	
; END OF _loop_delay

	END

⌨️ 快捷键说明

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