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

📄 d12ci.asm

📁 KeilC51下的USB的slave设备源码,MCS51开发.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0F5H
	MOVX 	@DPTR,A
; 	i= inportb(D12_DATA);
			; SOURCE LINE # 148
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
	MOV  	R7,A

; 	j = inportb(D12_DATA);
			; SOURCE LINE # 149
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR

	MOV  	R6,A
; 
; 	i += (j<<8);
			; SOURCE LINE # 151
; 
; 	if(bEPPflags.bits.in_isr == 0)
			; SOURCE LINE # 153
	MOV  	A,bEPPflags
	JB   	ACC.5,?C0028
; 		ENABLE;
			; SOURCE LINE # 154
	SETB 	EA
?C0028:
; 
; 	return i;
			; SOURCE LINE # 156
; }
			; SOURCE LINE # 157
?C0029:
	RET  	
; END OF D12_ReadCurrentFrameNumber


; 
; unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)

	RSEG  ?PR?_D12_ReadEndpoint?D12CI
_D12_ReadEndpoint:
	USING	0
			; SOURCE LINE # 159
	MOV  	endp?1055,R7
	MOV  	len?1056,R5
	MOV  	buf?1057,R3
	MOV  	buf?1057+01H,R2
	MOV  	buf?1057+02H,R1
; {
			; SOURCE LINE # 160
; 	unsigned char i, j;
; 
; 	if(bEPPflags.bits.in_isr == 0)
			; SOURCE LINE # 163
	MOV  	A,bEPPflags
	JB   	ACC.5,?C0030
; 		DISABLE;
			; SOURCE LINE # 164
	CLR  	EA
?C0030:
; 
; 	outportb(D12_COMMAND, 0x80 + endp);
			; SOURCE LINE # 166
	MOV  	A,endp?1055
	ADD  	A,#080H
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOVX 	@DPTR,A
; 	i = inportb(D12_DATA);
			; SOURCE LINE # 167
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
	MOV  	i?1058,A
; 	i=i & 0x60;
			; SOURCE LINE # 168
	ANL  	i?1058,#060H
; 	if (endp == 2)
			; SOURCE LINE # 169
	MOV  	A,endp?1055
	CJNE 	A,#02H,?C0031
; 	{
			; SOURCE LINE # 170
; 		if (i == 0x60)
			; SOURCE LINE # 171
	MOV  	A,i?1058
	CJNE 	A,#060H,?C0032
; 			bEPPflags.bits.ep1buf_full = 1;
			; SOURCE LINE # 172
	MOV  	A,bEPPflags+01H
	ORL  	A,#010H
	MOV  	bEPPflags+01H,A
	SJMP 	?C0031
?C0032:
; 		else
; 			bEPPflags.bits.ep1buf_full = 0;
			; SOURCE LINE # 174
	MOV  	A,bEPPflags+01H
	ANL  	A,#0EFH
	MOV  	bEPPflags+01H,A
; 	}
			; SOURCE LINE # 175
?C0031:
; 
; 	if (endp == 4)
			; SOURCE LINE # 177
	MOV  	A,endp?1055
	CJNE 	A,#04H,?C0034
; 	{
			; SOURCE LINE # 178
; 		if (i == 0x60)
			; SOURCE LINE # 179
	MOV  	A,i?1058
	CJNE 	A,#060H,?C0035
; 			bEPPflags.bits.ep2buf_full = 1;
			; SOURCE LINE # 180
	MOV  	A,bEPPflags+01H
	ORL  	A,#020H
	MOV  	bEPPflags+01H,A
	SJMP 	?C0034
?C0035:
; 		else
; 			bEPPflags.bits.ep2buf_full = 0;
			; SOURCE LINE # 182
	MOV  	A,bEPPflags+01H
	ANL  	A,#0DFH
	MOV  	bEPPflags+01H,A
; 	}
			; SOURCE LINE # 183
?C0034:
; 
; 
; 	outportb(D12_COMMAND, endp);
			; SOURCE LINE # 186
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,endp?1055
	MOVX 	@DPTR,A
; 	if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {
			; SOURCE LINE # 187
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
	JB   	ACC.0,?C0037
; 		if(bEPPflags.bits.in_isr == 0)
			; SOURCE LINE # 188
	MOV  	A,bEPPflags
	JB   	ACC.0,?C0038
; 			ENABLE;
			; SOURCE LINE # 189
	SETB 	EA
?C0038:
; 		return 0;
			; SOURCE LINE # 190
	MOV  	R7,#00H
	RET  	
; 	}
			; SOURCE LINE # 191
?C0037:
; 
; 	outportb(D12_COMMAND, 0xF0);
			; SOURCE LINE # 193
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0F0H
	MOVX 	@DPTR,A
; 	j = inportb(D12_DATA);
			; SOURCE LINE # 194
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
; 	j = inportb(D12_DATA);
			; SOURCE LINE # 195
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
	MOV  	j?1059,A
; 
; 	if(j > len)
			; SOURCE LINE # 197
;	MOV  	A,j?1059
	SETB 	C
	SUBB 	A,len?1056
	JC   	?C0040
; 		j = len;
			; SOURCE LINE # 198
	MOV  	j?1059,len?1056
?C0040:
; 
; 	for(i=0; i<j; i++)
			; SOURCE LINE # 200

	MOV	A,j?1059
	JZ	WRITEDAT_END

	MOV	R6,A
	MOV  	R3,buf?1057

	CJNE	R3,#01H,WRITE_DATA

	MOV  	DPH,buf?1057+01H
	MOV  	DPL,buf?1057+02H
WRITE_XDATA1:
; 	for(i=0; i<j; i++)
; 		*(buf+i) = D12_DATA;
			; SOURCE LINE # 219
	PUSH	DPH
	PUSH	DPL
	MOV	DPH,D12_DATA
	MOV	DPL,D12_DATA+1
	MOVX 	A,@DPTR
	POP	DPL
	POP	DPH
	MOVX	@DPTR,A
	INC	DPTR
	DJNZ	R6,WRITE_XDATA1
	SJMP	WRITEDAT_END

WRITE_DATA:
	JNC	WRITE_PDATA
	MOV  	R1,buf?1057+02H
	MOV	DPH,D12_DATA
	MOV	DPL,D12_DATA+1

WRITE_DATA1:
; 	for(i=0; i<j; i++)
; 		*(buf+i) = D12_DATA;
			; SOURCE LINE # 219

	MOVX 	A,@DPTR
	MOV	@R1,A
	INC	R1
	DJNZ	R6,WRITE_DATA1
	SJMP	WRITEDAT_END

WRITE_PDATA:
	CJNE	R3,#0FEH,WRITEDAT_END
	MOV  	R1,buf?1057+02H
	MOV	DPH,D12_DATA
	MOV	DPL,D12_DATA+1
	
WRITE_PDATA1:
; 	for(i=0; i<j; i++)
; 		*(buf+i) = D12_DATA;
			; SOURCE LINE # 219

	MOVX 	A,@DPTR
	MOVX	@R1,A
	INC	R1
	DJNZ	R6,WRITE_PDATA1

WRITEDAT_END:

?C0042:
; 
; 	outportb(D12_COMMAND, 0xF2);
			; SOURCE LINE # 203
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0F2H
	MOVX 	@DPTR,A
; 
; 	if(bEPPflags.bits.in_isr == 0)
			; SOURCE LINE # 205
	MOV  	A,bEPPflags
	JB   	ACC.5,?C0044
; 		ENABLE;
			; SOURCE LINE # 206
	SETB 	EA
?C0044:
; 
; 	return j;
			; SOURCE LINE # 208
	MOV  	R7,j?1059
; }
			; SOURCE LINE # 209
?C0039:
	RET  	
; END OF _D12_ReadEndpoint


; 
; unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)

	RSEG  ?PR?_D12_WriteEndpoint?D12CI
_D12_WriteEndpoint:
	USING	0
			; SOURCE LINE # 211
	MOV  	endp?1160,R7
	MOV  	len?1161,R5
	MOV  	buf?1162,R3
	MOV  	buf?1162+01H,R2
	MOV  	buf?1162+02H,R1
; {
			; SOURCE LINE # 212
; 	unsigned char i;
; 
; 	if(bEPPflags.bits.in_isr == 0)
			; SOURCE LINE # 215
	MOV  	A,bEPPflags
	JB   	ACC.5,?C0045
; 		DISABLE;
			; SOURCE LINE # 216
	CLR  	EA
?C0045:
; 
; 	outportb(D12_COMMAND, endp);
			; SOURCE LINE # 218
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,endp?1160
	MOVX 	@DPTR,A
; 	i = inportb(D12_DATA);
			; SOURCE LINE # 219
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	i?1163,R7
; 
; 	outportb(D12_COMMAND, 0xF0);
			; SOURCE LINE # 221
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0F0H
	MOVX 	@DPTR,A
; 	outportb(D12_DATA, 0);
			; SOURCE LINE # 222
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	CLR  	A
	MOVX 	@DPTR,A
; 	outportb(D12_DATA, len);
			; SOURCE LINE # 223
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOV  	A,len?1161
	MOVX 	@DPTR,A
; 
; 	for(i=0; i<len; i++)
			; SOURCE LINE # 225
; 		outportb(D12_DATA, *(buf+i));
			; SOURCE LINE # 226
	MOV	R7,A
	JZ	READDAT_END
	MOV  	R3,buf?1162
	CJNE	R3,#00H,READ_PDATA
	MOV  	R1,buf?1162+02H
; 
; 	for(i=0; i<len; i++)
			; SOURCE LINE # 243
	MOV	DPH,D12_DATA
	MOV	DPL,D12_DATA+1

READ_DATA1:
	MOV	A,@R1
	INC	R1
; 		D12_DATA = *(buf+i);
			; SOURCE LINE # 244
	MOVX 	@DPTR,A
	DJNZ	R5,READ_DATA1
	SJMP	READDAT_END

READ_XDATA:
	CJNE	R3,#01,READ_PDATA
	MOV  	DPH,buf?1162+01H
	MOV  	DPL,buf?1162+02H
; 
; 	for(i=0; i<len; i++)
			; SOURCE LINE # 243
READ_XDATA1:
	MOVX	A,@DPTR
	INC	DPTR
	PUSH	DPH
	PUSH	DPL
; 		D12_DATA = *(buf+i);
			; SOURCE LINE # 244
;	MOV  	DPTR,#0FF02H
	MOV	DPH,D12_DATA
	MOV	DPL,D12_DATA+1
	MOVX 	@DPTR,A
	POP	DPL
	POP	DPH
	DJNZ	R5,READ_XDATA1
	SJMP	READDAT_END
READ_PDATA:
	CJNE	R3,#0FEH,READ_CODE
	MOV  	R1,buf?1162+02H
	MOV	DPH,D12_DATA
	MOV	DPL,D12_DATA+1
; 
; 	for(i=0; i<len; i++)
			; SOURCE LINE # 243
READ_PDATA1:
	MOVX	A,@R1
	INC	R1
; 		D12_DATA = *(buf+i);
			; SOURCE LINE # 244
	MOVX 	@DPTR,A
	DJNZ	R5,READ_PDATA1
	SJMP	READDAT_END
READ_CODE:
	JC	READDAT_END
	MOV  	DPH,buf?1162+01H
	MOV  	DPL,buf?1162+02H
; 
; 	for(i=0; i<len; i++)
			; SOURCE LINE # 243
READ_CODE1:
	CLR	A
	MOVC	A,@A+DPTR
	INC	DPTR
	PUSH	DPH
	PUSH	DPL
; 		D12_DATA = *(buf+i);
			; SOURCE LINE # 244
	MOV	DPH,D12_DATA
	MOV	DPL,D12_DATA+1
	MOVX 	@DPTR,A
	POP	DPL
	POP	DPH
	DJNZ	R5,READ_CODE1

READDAT_END:
?C0047:
; 
; 	outportb(D12_COMMAND, 0xFA);
			; SOURCE LINE # 228
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0FAH
	MOVX 	@DPTR,A
; 
; 	if(bEPPflags.bits.in_isr == 0)
			; SOURCE LINE # 230
	MOV  	A,bEPPflags
	JB   	ACC.5,?C0049
; 		ENABLE;
			; SOURCE LINE # 231
	SETB 	EA
?C0049:
; 
; 	return len;
			; SOURCE LINE # 233
	MOV  	R7,len?1161
; }
			; SOURCE LINE # 234
?C0050:
	RET  	
; END OF _D12_WriteEndpoint

; 
; void D12_AcknowledgeEndpoint(unsigned char endp)

	RSEG  ?PR?_D12_AcknowledgeEndpoint?D12CI
_D12_AcknowledgeEndpoint:
	USING	0
			; SOURCE LINE # 236
	MOV  	endp?1264,R7
; {
			; SOURCE LINE # 237
; 	outportb(D12_COMMAND, endp);
			; SOURCE LINE # 238
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,endp?1264
	MOVX 	@DPTR,A
; 	outportb(D12_COMMAND, 0xF1);
			; SOURCE LINE # 239
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0F1H
	MOVX 	@DPTR,A
; 	if(endp == 0)
			; SOURCE LINE # 240
	MOV  	A,endp?1264
	JNZ  	?C0052
; 		outportb(D12_COMMAND, 0xF2);
			; SOURCE LINE # 241
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0F2H
	MOVX 	@DPTR,A
; }
			; SOURCE LINE # 242
?C0052:
	RET  	
; END OF _D12_AcknowledgeEndpoint

; 
; 
; void fn_usb_isr()

	RSEG  ?PR?fn_usb_isr?D12CI
fn_usb_isr:
	USING	0
			; SOURCE LINE # 245
; {
			; SOURCE LINE # 246
; 	unsigned int i_st;
; 	unsigned char b1;
; 
; 	bEPPflags.bits.in_isr = 1;
			; SOURCE LINE # 250
	MOV  	A,bEPPflags
	ORL  	A,#020H
	MOV  	bEPPflags,A
; //	i_st = D12_ReadInterruptRegister();
; 
; 
; 	outportb(D12_COMMAND, 0xF4);
			; SOURCE LINE # 254
	MOV  	DPH,D12_COMMAND
	MOV  	DPL,D12_COMMAND+01H
	MOV  	A,#0F4H
	MOVX 	@DPTR,A
; 	b1 = inportb(D12_DATA);
			; SOURCE LINE # 255
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
	MOV  	i_st?1365+01H,A

; 	i_st = inportb(D12_DATA);
			; SOURCE LINE # 256
	MOV  	DPH,D12_DATA
	MOV  	DPL,D12_DATA+01H
	MOVX 	A,@DPTR
	MOV  	i_st?1365,A
; 
; 	i_st <<= 8;
			; SOURCE LINE # 258
; 	i_st += b1;
			; SOURCE LINE # 259
; 
; 
; 	if(i_st != 0) {
			; SOURCE LINE # 262
	MOV  	A,i_st?1365+01H
	ORL  	A,i_st?1365
	JZ   	?C0053
; 
; 		if(i_st & D12_INT_ENDP2IN)
			; SOURCE LINE # 264
	MOV  	A,i_st?1365+01H
	JNB  	ACC.5,?C0054
; 			ep2_txdone();
			; SOURCE LINE # 265
	LCALL	ep2_txdone
?C0054:
; 		if(i_st & D12_INT_ENDP2OUT)
			; SOURCE LINE # 266
	MOV  	A,i_st?1365+01H
	JNB  	ACC.4,?C0055
; 			ep2_rxdone();
			; SOURCE LINE # 267
	LCALL	ep2_rxdone
?C0055:
; 
; 		if(i_st & D12_INT_BUSRESET) {
			; SOURCE LINE # 269
	MOV  	A,i_st?1365+01H
	JNB  	ACC.6,?C0056
; 		//	bus_reset();
; 			bEPPflags.bits.bus_reset = 1;
			; SOURCE LINE # 271
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ORL  	A,#02H
	MOV  	bEPPflags,A
; 		}
			; SOURCE LINE # 272
?C0056:
; 
; 		if(i_st & D12_INT_EOT)
			; SOURCE LINE # 274
	MOV  	A,i_st?1365
	JNB  	ACC.0,?C0057
; 			dma_eot();
			; SOURCE LINE # 275
	LCALL	dma_eot
?C0057:
; 
; 		if(i_st & D12_INT_SUSPENDCHANGE)
			; SOURCE LINE # 277
	MOV  	A,i_st?1365+01H
	JNB  	ACC.7,?C0058
; 			bEPPflags.bits.suspend = 1;
			; SOURCE LINE # 278
	MOV  	R7,bEPPflags
	MOV  	A,R7
	ORL  	A,#04H
	MOV  	bEPPflags,A
?C0058:
; 
; 		if(i_st & D12_INT_ENDP0IN)
			; SOURCE LINE # 280
	MOV  	A,i_st?1365+01H
	JNB  	ACC.1,?C0059
; 			ep0_txdone();
			; SOURCE LINE # 281
	LCALL	ep0_txdone
?C0059:
; 		if(i_st & D12_INT_ENDP0OUT)
			; SOURCE LINE # 282
	MOV  	A,i_st?1365+01H
	JNB  	ACC.0,?C0060
; 			ep0_rxdone();
			; SOURCE LINE # 283
	LCALL	ep0_rxdone
?C0060:
; 		if(i_st & D12_INT_ENDP1IN)
			; SOURCE LINE # 284
	MOV  	A,i_st?1365+01H
	JNB  	ACC.3,?C0061
; 			ep1_txdone();
			; SOURCE LINE # 285
	LCALL	ep1_txdone
?C0061:
; 		if(i_st & D12_INT_ENDP1OUT)
			; SOURCE LINE # 286
	MOV  	A,i_st?1365+01H
	JNB  	ACC.2,?C0053
; 			ep1_rxdone();
			; SOURCE LINE # 287
	LCALL	ep1_rxdone
; 	}
			; SOURCE LINE # 288
?C0053:
; 		
; 	bEPPflags.bits.in_isr = 0;
			; SOURCE LINE # 290
	MOV  	A,bEPPflags
	ANL  	A,#0DFH
	MOV  	bEPPflags,A
; }
			; SOURCE LINE # 291
	RET  	
; END OF fn_usb_isr

	END

⌨️ 快捷键说明

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