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

📄 usbex.asm

📁 ch372 hid通讯代码 包含 pc机和设备的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
CH375_REQ_SEL_02:
				CJNE A,#DEF_USB_SET_ADDRESS,CH375_REQ_SEL_03				
				LJMP CH375_USB_SET_ADDRES
CH375_REQ_SEL_03:
				CJNE A,#DEF_USB_GET_DESCR,CH375_REQ_SEL_04					;
				LJMP CH375_USB_GET_DESCR
CH375_REQ_SEL_04:
				CJNE A,#DEF_USB_GET_CONFIG,CH375_REQ_SEL_05				
				LJMP CH375_USB_GET_CONFIG
CH375_REQ_SEL_05:
				CJNE A,#DEF_USB_SET_CONFIG,CH375_REQ_SEL_06				
				LJMP  CH375_USB_SET_CONFIG
CH375_REQ_SEL_06:
				CJNE A,#DEF_USB_GET_INTERF,CH375_REQ_SEL_07			
				LJMP CH375_USB_GET_INTERF
CH375_REQ_SEL_07:
                LJMP CH375_SETUP_RET_ERR


;*************************************************************************************************
;USB GET STATUS   得到状态
CH375_USB_GET_STATUS:		MOV 	@R0,#00H
				INC 	R0
				MOV    @R0,#00H
				LCALL    CH375_EP0_UPLOAD		;调用端点0上传
				LJMP   	 CH375_SETUP_RET		;中断返回
CH375_SETUP_RET_ERR_1:		LJMP    CH375_SETUP_RET_ERR
;************************************************************************************************
;USB  CLR  FEATURE  清除特性
CH375_USB_CLR_FEATURE:         	MOV   	A,CMD_BUFFER		;取请求码
				ANL  	A,#1FH
				CJNE  	A,#02H,CH375_SETUP_RET_ERR_1	;不是端点则不支持
				MOV  	A,CMD_BUFFER+4

				CJNE    A,#82H,CH375_USB_CLR_FEA_0
											;端点2上传
				MOV     A,#CMD_SET_ENDP7				;清除端点2上传
				CALL  WR_CMD_TO_375
				MOV     A,#8EH
				MOVX 	@DPTR,A
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP   CH375_SETUP_RET
						;
CH375_USB_CLR_FEA_0:		CJNE    A,#02H,CH375_USB_CLR_FEA_1
				MOV     A,#CMD_SET_ENDP6	;清除端点2下传
				CALL  WR_CMD_TO_375
				MOV     A,#80H
				MOVX @DPTR,A
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包							;端点2下传
				LJMP   CH375_SETUP_RET

CH375_USB_CLR_FEA_1:				CJNE    A,#81H,CH375_USB_CLR_FEA_2
				MOV     A,#CMD_SET_ENDP5	;清除端点1上传
				CALL  WR_CMD_TO_375
				MOV     A,#8EH							;端点1上传
				MOVX @DPTR,A
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP   CH375_SETUP_RET

CH375_USB_CLR_FEA_2:				CJNE    A,#01H,CH375_USB_CLR_FEA_3
				MOV     A,#CMD_SET_ENDP4	;清除端点1下传
				CALL    WR_CMD_TO_375
				MOV     A,#80H							;端点1下传
				MOVX    @DPTR,A
				LCALL   CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP	 CH375_SETUP_RET
CH375_USB_CLR_FEA_3:
				LJMP   CH375_SETUP_RET_ERR	;;不支持
;****************************************************************************************
;USB  AET ADDRESS
CH375_USB_SET_ADDRES:		
				MOV A,CMD_BUFFER+2			;取出地址
				MOV VAR_USB_ADDRESS,A			;暂存地址
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP CH375_SETUP_RET			;先退出,到发出状态后才能反改变

;*****************************************************************************************
;USB  GET  DESCR 获得描述符
CH375_USB_GET_DESCR: 		
				MOV  A,CMD_BUFFER+3
				CJNE A,#1H,CH375_GET_DESCR_1	;获取设备描述符
				MOV  A,#00H
				MOV  VAR_SETUP_DESCR,A		;描述符偏移量=0
				LCALL CH375_DES_UPLOAD
				LJMP CH375_SETUP_RET
CH375_GET_DESCR_1:
				CJNE A,#2H,CH375_GET_DESCR_2 ;获取配置描述符
				MOV  A,#USB_CFG_DESCR_TAB-USB_DEV_DESCR_TAB
				MOV  VAR_SETUP_DESCR,A		;描述符偏移量
				LCALL CH375_DES_UPLOAD
				LJMP CH375_SETUP_RET
CH375_GET_DESCR_2:
				CJNE A,#22H,CH375_GET_DESCR_3
				MOV  A,#USB_REP_DESCR_TAB-USB_DEV_DESCR_TAB
				MOV  VAR_SETUP_DESCR,A		;描述符偏移量
				LCALL CH375_DES_UPLOAD
				LJMP CH375_SETUP_RET
CH375_GET_DESCR_3: 		LJMP   CH375_SETUP_RET_ERR	;不支持退出

;*******************************************************************************************
;USB  GET CONFIG
CH375_USB_GET_CONFIG:		MOV  @R0,#01H			;配置值为01H,在描述符里指定的
				JB   CH375_CON_FLAG,CH375_CON_CON
				MOV  @R1,#00H			;CH375没有配置返回00
CH375_CON_CON:			LCALL CH375_EP0_UPLOAD		;调用端点0上传
				LJMP  CH375_SETUP_RET

;********************************************************************************************
;USB SET  CONFIG
CH375_USB_SET_CONFIG:	MOV  A,CMD_BUFFER+2
				CLR  CH375_CON_FLAG		;取消配置
				SETB  CH375_CON_ACT
				JZ    CH375_USB_SET_CFG1
				SETB  CH375_CON_FLAG		;设置配置
				CLR   CH375_CON_ACT		;输出低电平指示完成标志
CH375_USB_SET_CFG1:
				LCALL CH375_EP0_IN_ZERO		;上传0长读的信息包
				LJMP  CH375_SETUP_RET
;*********************************************************************************************
;USB  GET INTER
CH375_USB_GET_INTERF:	  MOV   @R0,#01H			;返回一个接口
				LCALL CH375_EP0_UPLOAD		;因为在这里我们指定一个接口
				LJMP  CH375_SETUP_RET
;*********************************************************************************************
CH375_EP0_UPLOAD:		
				MOV  A,VAR_SETUP_LENGTH		;取出长度
				MOV R5,#08H
				CLR C
				SUBB A,R5
				MOV R5,VAR_SETUP_LENGTH		;上传长度小于8
				JC  CH375_EP0_UP_LEN
				MOV  VAR_SETUP_LENGTH,A		;重新给出长度
				MOV R5,#08H
CH375_EP0_UP_LEN:
				MOV R0,#CMD_BUFFER		;上传缓冲区送R0
				MOV A,#CMD_WR_USB_DATA3		;命令口送入,写端点0
				CALL  WR_CMD_TO_375
				MOV  A,R5			;首先上传长度
				MOVX @DPTR,A			;数据长度送375
CH375_EP0_UP_LOOP2:		MOV A,@R0			;数据取出,			;
				MOVX @DPTR,A			;数据送入CH375
				INC R0				;缓冲区地址加一
				DJNZ  R5,CH375_EP0_UP_LOOP2 	;缓冲区不满则继续
CH375_EP0_UP_LOOPRET:
				RET
;********************************************************************************************
CH375_DES_UPLOAD:		
				MOV R0,#CMD_BUFFER		;缓冲区首地址送间接寻址
				MOV R5,#08H
				MOV DPTR,#USB_DEV_DESCR_TAB	;
CH375_DES_UPLOOP:
				MOV  A,VAR_SETUP_DESCR
				LCALL CH375_TAB_TAB
				MOV @R0,A
				INC VAR_SETUP_DESCR
				INC R0
				DJNZ R5,CH375_DES_UPLOOP
				LCALL CH375_EP0_UPLOAD
				RET
;RERUEST OVER

CH375_EP0_IN_ZERO:
				MOV A,#CMD_WR_USB_DATA3  ;上传0长度的联络信息包
				CALL  WR_CMD_TO_375
				MOV A,#00H
				MOVX @DPTR,A
				RET
;串口初始化程序



;********************************************************************************************


; 以毫秒为单位延时
; ENTRY: R7 延时毫秒数
; USE:   ACC, R7
DELAY_MS:		MOV   A,#0FAH				;250*(1*6+2)*0.5=1000uS
DELAY_1MS:		NOP
				NOP
				NOP
				NOP
				NOP
				NOP
				DJNZ  ACC,DELAY_1MS			;每周期延时1毫秒
				DJNZ  R7,DELAY_MS
				RET
;
;*********************************************************************************************************************
;
CH375_TAB_TAB:			MOVC A,@A+DPTR
				RET

USB_DEV_DESCR_TAB:	DB   12H							;USB设备描述符
					DB   01H
					DB   10H
					DB   01H
					DB   00H							;04H, DeviceClass
					DB   00H							;05H, DeviceSubClass
					DB   00H							;06H, DeviceProtocol
					DB   08H							;端点0最大包长度8字节
					DB   31H				            ;08H, VendorId-L
					DB   51H				            ;09H, VendorId-H
					DB   07H				            ;0AH, ProductId-L
					DB   20H				            ;0BH, ProductId-H
					DB   00H							;0CH, ReleaseId-L
					DB   03H							;0DH, ReleaseId-H
					DB   01H
					DB   02H
					DB   00H							;10H, IndexSerialNumber
					DB   00H
					
USB_CFG_DESCR_TAB:	DB   09H							;USB配置描述符
					DB   02H
					DB   29H							;02H, TotalLength-L
					DB   00H
					DB   01H
					DB   01H							;配置值
					DB   04H
					DB   0A0H							;07H, Attributes
					DB   23H
					
					DB   09H							;USB接口描述符
					DB   04H
					DB   00H
					DB   00H
					DB   02H						;0DH, NumberEndpoints
					DB   03H							;0EH, InterfaceClass
					DB   01H							;0FH, InterfaceSubClass
					DB   01H							;10H, InterfaceProtocol
					DB   05H
					
					DB	 09H
					DB	 21H
					DB   00H
					DB	 01H
					DB   00H
					DB	 01H
					DB   22H
					DB	 4BH
					DB   00H
					
					DB   07H
					DB   05H
					DB   81H							;端点82H发送/上传
					DB   03H							;批量端点
					DB   08H							;最大包长度32字节
					DB   00H
					DB   18H
					
					DB   07H
					DB   05H
					DB   01H							;端点01H接收/下传
					DB   03H							;批量端点
					DB   08H							;最大包长度32字节
					DB   00H
					DB   18H
														 ;报表描述符
USB_REP_DESCR_TAB: DB    05H
				   DB    00H
				   DB	 09H
				   DB    01H
				   DB    0A1H
				   DB	 01H
				   DB    85H
				   DB    01H
				   DB    09H
				   DB    01H
				   DB    15H
				   DB    00H
				   DB    25H
				   DB    0FFH
				   DB    75H
				   DB    08H
				   DB    95H
				   DB    07H
				   DB    81H
				   DB    06H
				   DB    09H
				   DB    01H
				   DB    0B1H
				   DB    06H
				   DB    85H
				   DB    03H
				   DB    09H
				   DB    01H
				   DB    15H
				   DB    00H
				   DB	 25H
				   DB	 08H
				   DB	 75H
				   DB	 08H
				   DB	 95H
				   DB	 01H
				   DB	 09H
				   DB	 01H
				   DB	 0B1H
				   DB	 06H
				   DB    85H
				   DB    02H
				   DB    09H
				   DB    02H
				   DB    15H
				   DB    00H
				   DB    25H
				   DB    0FFH
				   DB    75H
				   DB    08H
				   DB    95H
				   DB    07H
				   DB    91H
				   DB    06H
				   DB    09H
				   DB    02H
				   DB    0B1H
				   DB    06H
				   DB    85H
				   DB    04H
				   DB    09H
				   DB    02H
				   DB    15H
				   DB    00H
				   DB    25H
				   DB    08H
				   DB    75H
				   DB    08H
				   DB    95H
				   DB    01H
				   DB    09H
				   DB    02H
				   DB    0B1H
				   DB    06H
				   DB    0C0H	
END
;

⌨️ 快捷键说明

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