📄 ch372
字号:
※ [原创]CH372汇编程序
DEF_USBCMD_RST EQU 05H
DEF_USBCMD_CHKEXT EQU 06H
DEF_USBCMD_SETID EQU 12H
DEF_USBCMD_SETMOD EQU 15H
DEF_USBCMD_SETENDP6 EQU 1cH
DEF_USBCMD_SETENDP7 EQU 1dH
DEF_USBCMD_UNLOCK EQU 23H
DEF_USBCMD_GETSTA EQU 22H
DEF_USBCMD_RD EQU 28H
DEF_USBCMD_WR7 EQU 2bH
DEF_USBCMD_WR5 EQU 2aH
DEF_USBCMD_ENTSLE EQU 03H
DEF_USBCMD_GETVER EQU 01H
DEF_USBCMD_CHKSUP EQU 0bH
DEF_USBCMD_RD0 EQU 27H
DEF_USBCMD_OK EQU 51H
DEF_USBCMD_ERR EQU 5fH
; 需要主程序定义的参数
CH375_CMD_PORT EQU 0FEFFH ;CH375命令口的地址,地址译码后自动片选
CH375_DAT_PORT EQU 0FCFFH ;CH375命令口的地址,地址译码后自动片选
RC500_CS BIT P2.7
CH372_CS BIT P2.0
ORG 0000H
LJMP MIAN
ORG 0013H
LJMP CH372INT1
ORG 0030H
;此程序用高的(也就是地址大128)RAM来做发送接收缓冲区
MIAN:
MOV SP,#30H
SETB EA
LCALL CH372_INIT
SJMP $
CH372_CMD:
SETB RC500_CS
CLR CH372_CS
MOV DPTR,#CH375_CMD_PORT
MOVX @DPTR,A
RET
CH372_DATA:
SETB RC500_CS
CLR CH372_CS
MOV DPTR,#CH375_DAT_PORT
MOVX @DPTR,A
RET
CH372_READ:
CLR CH372_CS
MOV DPTR,#CH375_DAT_PORT
MOVX A,@DPTR
RET
CH372_INIT:
SETB RC500_CS
CLR CH372_CS
MOV A,#DEF_USBCMD_RST
LCALL CH372_CMD
LCALL DEL50MS
MOV A,#DEF_USBCMD_SETMOD
LCALL CH372_CMD
MOV A,#02H
LCALL CH372_DATA
LCALL DEL10
LOOP:LCALL CH372_READ
;CJNE A,#DEF_USBCMD_OK,LOOP
XRL A,#DEF_USBCMD_OK
;CJNE A,#00H,LOOP
JNZ LOOP
CLR IE1
CLR IT1
SETB EX1
RET
CH372INT1:
PUSH ACC ;保护现场
PUSH PSW
PUSH DPL
PUSH DPH
CLR EA ;关中断
SETB RC500_CS
CLR CH372_CS
MOV A,#DEF_USBCMD_GETSTA
LCALL CH372_CMD
LCALL CH372_READ
CJNE A,#02H,LULI_1
MOV A,#DEF_USBCMD_RD
LCALL CH372_CMD
LCALL CH372_READ
MOV R2,A
MOV R3,A
MOV R0,#80H
READ:LCALL CH372_READ
MOV @R0,A
INC R0
DJNZ R2,READ
MOV A,#2BH
LCALL CH372_CMD
MOV A,R3
LCALL CH372_DATA
MOV R1,#80H
WRITE:MOV A,@R1
LCALL CH372_DATA
INC R1
DJNZ R3,WRITE
LULI_1:CJNE A,#0AH,LULI_2
MOV A,#DEF_USBCMD_UNLOCK
LCALL CH372_CMD
LULI_2:MOV A,#DEF_USBCMD_UNLOCK
LCALL CH372_CMD
POP DPH ;恢复现场
POP DPL
POP PSW
POP ACC
SETB EA ;KAI中断
RETI
;******延时10us子程序: T=两个机器周期(2*1us)*R5(4)*R6(256)*R7(256)us=0.524288s
DEL10:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
DEL100:
LCALL DEL10
LCALL DEL10
LCALL DEL10
LCALL DEL10
LCALL DEL10
LCALL DEL10
LCALL DEL10
LCALL DEL10
LCALL DEL10
LCALL DEL10
RET
DEL1MS:
LCALL DEL100
LCALL DEL100
LCALL DEL100
LCALL DEL100
LCALL DEL100
LCALL DEL100
LCALL DEL100
LCALL DEL100
LCALL DEL100
LCALL DEL100
RET
DEL10MS:
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
LCALL DEL1MS
RET
DEL50MS:
LCALL DEL10MS
LCALL DEL10MS
LCALL DEL10MS
LCALL DEL10MS
LCALL DEL10MS
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -