USB总线接口芯片CH371及其应用
INC DPL
DJNZ R7,CH371_UPLOAD-1;继续读取上传数据直至结束
CH371_UPLOAD_0:MOV DPL,#CH371_LENGTH;CH371数据长度寄存器的地址偏移
MOV A,B
MOVX @DPTR,A;将本次数据的长度置入上传数据长度寄存器
RET
;中断服务子程序
;USE:堆栈6字节,工作寄存器组1的RO,R7
CH371_INTER:PUSH PSW;现场保护
CLR IEO;清中断标志,防止重复执行,对应于INTO中断
PUSH ACC
PUSH DPL
PUSH DPH
SETB RSO;PSW.3,切换至工作寄存器组1
MOV DPH,#CH371_PAGE;CH371所在的页面地址,地址译码后自动片选
MOV DPL,#CH371_STATUS;CH371传输状态信息寄存器的地址偏移
MOVX A,@DPTR;读取传输状态信息寄存器
MOV SAVE-STATUS,A;保存传输状态
MOV DPL,#CH371_LENGTH;CH371数据长度寄存器的地址偏移
JB ACC.0,CH371_INT_UP;传输状态信息寄存器位0为1,则指示上传完成
;是数据下传完成中断
MOVX A,@DPTR;读取下传数据长度寄存器
MOV SAVE_LENGTH,A;保持下传数据长度
JZ CH371_INT_RET ;下传数据长度为0,则直接退出中断
MOV DPL,#CH371_BUFFER;CH371数据缓冲区的起始地址偏移
MOV RO,#SAVE-BUFFER;单片机内部的数据缓冲区,用于存放下传数据
MOV R7,A ;用于读取数据的计数
CH371_INT_DOWN:MOVX A,@DPTR;读取一字节的下传数据
INC DPL ;指向下一个数据的地址
MOV @RO,A;保存到数据缓冲区
INC RO
DJNZ R7,CH371_INT_DOWN;继续读取下传数据直至结束
SJMP CH371_INT_RET ;接收完下传数据,退出中断
;是数据上传完成中断
CH371_INT_UP:MOV A,#0FH;15
MOVX @DPTR,A ;置上传数据长度寄存器为15,暂时没有后续数据
CH371_INT_RET: ;中断返回
POP DPH
《USB总线接口芯片CH371及其应用(第4页)》