CH375应用中的问题

我要实现的功能是:从计算机下传一个数据(我需要的数据只有八种000,001,010,011,100,101,110,111),单片机依据数据的不同作出不同的动作。 我仿照贵公司CH375DS1中的电路图进行了连接并作了如下修改将CS#与P2.7直接连接,A0#与P2.6直接连接,去掉了存储芯片62256和锁存器373、3-8译码器。 系统加电后375不工作。 程序是从贵公司网站上下载并进行删改而成的,以下只是51单片机与375通信程序。程序如下: 程序运行环境 ; ;CH375_CS_ BIT P2.7 ;MCS-51单片机的A15引脚,用于CH375片选,不必定义 ;CH375_A0 BIT P2.0 ;MCS-51单片机的A8引脚,用于CH375地址0,不必定义,也可用外部74373锁存的A0地址 ;CH375_INT_ BIT P3.2 ;MCS-51单片机的INT0引脚,用于CH375中断请求,无需定义 ;CH375_WR_ BIT P3.6 ;MCS-51单片机的RD引脚,用于CH375写选通,无需定义 ;CH375_RD_ BIT P3.7 ;MCS-51单片机的WR引脚,用于CH375读选通,无需定义 ; ; 本程序适用于时钟频率不高于24MHz的标准MCS-51单片机, 如果高于24MHz则应该适当增加延时, 如果低于24MHz则可以适当减少延时 ; ; 需要主程序定义的参数 CH375_CMD_PORT EQU 04000H ;CH375命令口的地址,地址译码后自动片选 CH375_DAT_PORT EQU 00000H ;CH375命令口的地址,地址译码后自动片选 RECV_LEN DATA 3FH ;刚接收到的数据的长度 RECV_BUFFER DATA 40H ;数据缓冲区,用于保存接收到的下传数据,长度为0到64字节 ; 由于MCS-51单片机存取外部RAM的读写速度低于内部RAM, 并且需要用到DPTR, 所以读写速度较慢, 其程序可以参考本程序修改 ; ; 定义位标志 FLAG_SEND_WAIT BIT 20H.1 ;发送等待标志,1指示有数据块正在CH375中等待发送 FLAG_INT_WAIT BIT 20H.2 ;中断数据等待发送标志,1指示有中断数据正在CH375中等待发送 ; ; $INCLUDE (CH375INC.ASM) ; ;**************************************************************************** ; ;对外接口子程序,仅供参考 ; ; 1. CH375_INIT 初始化子程序 ; USE: ACC, R7, DPTR ; ; 2. CH375_UPLOAD 上传数据块子程序(通过批量端点上传) ; ENTRY: R0 指向存放了准备上传数据的缓冲区, R7 准备上传的数据长度, 有效数值是0到64 ; USE: ACC, R0, R7, DPTR ; ; 3. CH375_UP_INT 上传中断数据子程序(通过中断端点上传),可选子程序 ; ENTRY: R0 指向存放了准备上传数据的缓冲区, R7 准备上传的数据长度, 有效数值是0到8 ; USE: ACC, R0, R7, DPTR ; ; 4. CH375_INTER 中断服务子程序 ; USE: 堆栈8字节 ; ;**************************************************************************** ;主程序的例子 ORG 0000H ;复位后单片机入口 LJMP START ORG 0003H ;CH375中断 LJMP CH375_INTER START: LCALL REST ;初始化 SETB EA ;允许中断 WAIT_REQUEST:NOP SJMP WAIT_REQUEST ;主循环

;**************************************************************************** ; ; 初始化子程序 ; USE: ACC, R7, DPTR REST: LCALL CH375_INIT RET CH375_INIT: MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_SET_USB_MODE MOVX @DPTR,A ;设置USB工作模式 nop ;如果时钟频率低于16MHz则无需该指令延时 MOV DPTR,#CH375_DAT_PORT ;数据口地址 MOV A,#02H MOVX @DPTR,A ;设置为使用内置固件的USB设备方式 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP ;如果时钟频率低于16MHz则无需该指令延时 CH375_INIT_WT: MOVX A,@DPTR ;返回操作状态 XRL A,#CMD_RET_ABORT mov XRL A,#CMD_RET_SUCCESS JNZ CH375_INIT_WT ;等待操作成功,通常需要等待10uS-20uS ; 下述三条指令用于启用中断 CLR IT0 ;置外部信号为低电平触发 SETB PX0 ;置高优先级 CLR IE0 ;清中断标志 SETB EX0 ;允许CH375中断 RET CH375_INTER:PUSH PSW ;现场保护 PUSH ACC PUSH DPL PUSH DPH PUSH 01H ;R1 PUSH 02H ;R2 MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_GET_STATUS MOVX @DPTR,A ;获取中断状态并取消中断请求 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP ;如果时钟频率低于16MHz则无需该指令延时 MOV DPTR,#CH375_DAT_PORT ;数据口地址 MOVX A,@DPTR ;返回操作状态 CLR IE0 ;清中断标志,对应于INT0中断 LJMP CH375_DOWN_OK ;USB批量数据接收成功,USB端点2的OUT

CH375_INT_4:MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_UNLOCK_USB MOVX @DPTR,A ;释放当前USB缓冲区 SJMP CH375_INT_RET CH375_INT_RET: POP 02H ;R2 POP 01H ;R1 POP DPH POP DPL POP ACC POP PSW ;恢复寄存器 RETI ;中断返回 ; USB批量数据接收成功 CH375_DOWN_OK: MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_RD_USB_DATA MOVX @DPTR,A ;从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP ;如果时钟频率低于16MHz则无需该指令延时 MOV DPTR,#CH375_DAT_PORT ;数据口地址 MOVX A,@DPTR ;首先读取后续数据长度 MOV R2,A JZ CH375_INT_RET ;长度为0,没有数据则直接退出 MOV RECV_LEN,A MOV R1,#RECV_BUFFER ;接收缓冲区 CH375_INT_RECV: MOVX A,@DPTR ;接收数据 MOV @R1,A INC R1 DJNZ R2,CH375_INT_RECV ;继续接收数据直至结束 ; CALL PROCESS ;分析下传数据并准备应答 LJMP CH375_INT_RET end

程序有误,重发如下 主程序的例子 ORG 0000H ;复位后单片机入口 LJMP START ORG 0003H ;CH375中断 LJMP CH375_INTER START: LCALL REST ;初始化 SETB EA ;允许中断 WAIT_REQUEST:NOP SJMP WAIT_REQUEST ;主循环

;**************************************************************************** ; ; 初始化子程序 ; USE: ACC, R7, DPTR REST: LCALL CH375_INIT RET CH375_INIT: MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_SET_USB_MODE MOVX @DPTR,A ;设置USB工作模式 nop ;如果时钟频率低于16MHz则无需该指令延时 MOV DPTR,#CH375_DAT_PORT ;数据口地址 MOV A,#02H MOVX @DPTR,A ;设置为使用内置固件的USB设备方式 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP ;如果时钟频率低于16MHz则无需该指令延时 CH375_INIT_WT: MOVX A,@DPTR XRL A,#CMD_RET_SUCCESS JNZ CH375_INIT_WT ;等待操作成功,通常需要等待10uS-20uS ; 下述三条指令用于启用中断 CLR IT0 ;置外部信号为低电平触发 SETB PX0 ;置高优先级 CLR IE0 ;清中断标志 SETB EX0 ;允许CH375中断 RET CH375_INTER:PUSH PSW ;现场保护 PUSH ACC PUSH DPL PUSH DPH PUSH 01H ;R1 PUSH 02H ;R2 MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_GET_STATUS MOVX @DPTR,A ;获取中断状态并取消中断请求 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP ;如果时钟频率低于16MHz则无需该指令延时 MOV DPTR,#CH375_DAT_PORT ;数据口地址 MOVX A,@DPTR ;返回操作状态 CLR IE0 ;清中断标志,对应于INT0中断 LJMP CH375_DOWN_OK ;USB批量数据接收成功,USB端点2的OUT

CH375_INT_4:MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_UNLOCK_USB MOVX @DPTR,A ;释放当前USB缓冲区 SJMP CH375_INT_RET CH375_INT_RET: POP 02H ;R2 POP 01H ;R1 POP DPH POP DPL POP ACC POP PSW ;恢复寄存器 RETI ;中断返回 ; USB批量数据接收成功 CH375_DOWN_OK: MOV DPTR,#CH375_CMD_PORT ;命令口地址 MOV A,#CMD_RD_USB_DATA MOVX @DPTR,A ;从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP ;如果时钟频率低于16MHz则无需该指令延时 MOV DPTR,#CH375_DAT_PORT ;数据口地址 MOVX A,@DPTR ;首先读取后续数据长度 MOV R2,A JZ CH375_INT_RET ;长度为0,没有数据则直接退出 MOV RECV_LEN,A MOV R1,#RECV_BUFFER ;接收缓冲区 CH375_INT_RECV: MOVX A,@DPTR ;接收数据 MOV @R1,A INC R1 DJNZ R2,CH375_INT_RECV ;继续接收数据直至结束 ; CALL PROCESS ;分析下传数据并准备应答 LJMP CH375_INT_RET end

;


你发下测试命令测试下看芯片有没有正常工作


如果设置模式2后PC没反应的话,你做一下测试命令~


CH375 固化程序是什么 难道还要给375下载程序不成


不需要下载程序。固化了USB底层传输的相关固件。


只有登录才能回复,可以选择微信账号登录