- 打卡等级:偶尔看看III
- 打卡总天数:55
- 最近打卡:2025-05-02 08:32:59
管理员
- 积分
- 15617
|
发表于 2023-10-20 11:26:56
|
显示全部楼层
//STC8H8K64U汇编程序调用USB-CDC库产生USB-CDC虚拟串口通信程序, 主程序
$INCLUDE(STC8H.INC)
;************************************************
DEVSTATE_ATTACHED EQU 0
DEVSTATE_POWERED EQU 1
DEVSTATE_DEFAULT EQU 2
DEVSTATE_ADDRESS EQU 3
DEVSTATE_CONFIGURED EQU 4
DEVSTATE_SUSPENDED EQU 5
EXTRN CODE(USB_INIT)
EXTRN CODE(USB_OUT_DONE)
EXTRN CODE(_USB_SENDDATA)
EXTRN XDATA(DEVICESTATE)
EXTRN XDATA(OUTNUMBER)
EXTRN BIT(BUSBFEATUREREADY)
EXTRN BIT(BUSBINBUSY)
EXTRN BIT(BUSBOUTREADY)
EXTRN XDATA(USBFEATUREBUFFER)
EXTRN XDATA(USBINBUFFER)
EXTRN XDATA(USBOUTBUFFER)
PUBLIC USER_DEVICEDESC
PUBLIC USER_PRODUCTDESC
PUBLIC USER_STCISPCMD
PUBLIC USB_OUT_CALLBACK
;************************************************
?XD?MAIN SEGMENT XDATA ;定义数据段
RSEG ?XD?MAIN
USER_DEVICEDESC:
DS 3
USER_PRODUCTDESC:
DS 3
USER_STCISPCMD:
DS 3
;************************************************
CSEG AT 0000H
LJMP RESET ;复位跳转
;************************************************
?PR?MAIN SEGMENT CODE ;定义代码段
RSEG ?PR?MAIN
RESET:
MOV R0,#7FH
CLR A
CLEARRAM:
MOV @R0,A
DJNZ R0,CLEARRAM
MOV SP,#7FH
ORL P_SW2,#80H
CLR A
MOV P0M0,A
MOV P0M1,A
MOV P1M0,A
MOV P1M1,A
MOV P2M0,A
MOV P2M1,A
MOV P3M0,A
MOV P3M1,A
MOV P4M0,A
MOV P4M1,A
MOV P5M0,A
MOV P5M1,A
MOV P6M0,A
MOV P6M1,A
MOV P7M0,A
MOV P7M1,A
MOV DPTR,#USER_DEVICEDESC
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV DPTR,#USER_PRODUCTDESC
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV DPTR,#USER_STCISPCMD ;初始化不停电下载复位命令
MOV A,#0FFH
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH TAB_STCISPCMD
MOVX @DPTR,A
INC DPTR
MOV A,#LOW TAB_STCISPCMD
MOVX @DPTR,A
ANL P3M0,#NOT 03H ;设置P3.0/P3.1为高阻输入模式
ORL P3M1,#03H
MOV DPTR,#IRC48MCR ;启动IRC48M时钟
MOV A,#80H
MOVX @DPTR,A
WAITIRC48:
MOVX A,@DPTR
JNB ACC.0,WAITIRC48
MOV USBCLK,#00H ;USB相关寄存器初始化
MOV USBCON,#90H
LCALL USB_INIT ;初始化USB模块
ORL IE2,#80H ;使能USB中断
SETB EA
MOV DPTR,#DEVICESTATE
WAITUSBCFG:
MOVX A,@DPTR ;等待USB配置完成
CJNE A,#DEVSTATE_CONFIGURED,WAITUSBCFG
MAIN:
JMP MAIN
;************************************************
;函数功能:USB-CDC串口接收数据的回调函数
;函数描述:回调函数由USB中断在接收到串口数据时自动调用
; 回调函数处理完成串口数据后需要返回1
;函数返回:返回1:USB中断服务程序自动完成后续的收尾工作
; 返回0:USB会暂停接收串口数据,直到用户自行调用
; usb_OUT_done()函数后USB才会重新恢复接收数据
;注意事项:当函数返回1时用户无需调用usb_OUT_done()
; 只有返回0时才需要调用usb_OUT_done()进行手动收尾
; 强烈建议usb_OUT_callback返回1
;************************************************
USB_OUT_CALLBACK: ;实现USB回调函数
MOV R3,#01H
MOV R2,#HIGH USBOUTBUFFER
MOV R1,#LOW USBOUTBUFFER
MOV DPTR,#OUTNUMBER
MOVX A,@DPTR
MOV R5,A
MOV R4,#00H
LCALL _USB_SENDDATA ;数据原路返回
SETB C ;返回1
RET
;************************************************
TAB_STCISPCMD:
DB "@STCISP#",0
;************************************************
END
|
|