CH375串口在19200波特率时不稳呀。。。

CH375 HOST串口在19200波特率时就不稳定呀,通信时数据丢失或错误。 ch375 晶振12M,8051晶振11.0592M。 设置为9600时没有问题,但为了速度要求,设置为19200时就不对了。初始化都完成不了,什么意思?

程序如下:

MAIN: NOP MOV TCON,#00H MOV SP,#0CFH MOV IE,#098H INIT_COM: MOV SCON,#0D0H ;串口方式1工作,8位数据位,1位停止位,有奇偶校验 ORL PCON,#080H ;SMOD=1,波特率增倍 ORL TMOD,#020H ;波特率设置,fOSC=11.0592MHz,波特率=9600,N=0FDH MOV TH1,#0FAH ;先用CH375的默认波特率进行工作 MOV TL1,#0FAH SETB TR1 ;启动定时器T1

MOV DATAIN_OUT,#CMD_SET_BAUDRATE CALL WRITEADDRESS NOP MOV DATAIN_OUT,#002H ;写入分频系数 CALL WRITEDATA MOV DATAIN_OUT,#0D9H ;写入分频常数 CALL WRITEDATA NOP CLR TR1 MOV TH1,#0FDH ;更改CH375的波特率 MOV TL1,#0FDH SETB TR1 CALL DELAY2 CH375_BAUD_WT: CALL READDATA ;返回操作状态 MOV A,DATAIN_OUT XRL A,#CMD_RET_SUCCESS JNZ CH375_BAUD_WT ;等待操作成功,通常需要等待10uS-20uS

CALL CH375_INIT

。。。。。。。

;********初始化子程序**********

CH375_INIT: MOV DATAIN_OUT,#CMD_RESET_ALL CALL WRITEADDRESS CALL DELAY3 ;测试CH375是否正常工作,可选操作 MOV DATAIN_OUT,#CMD_CHECK_EXIST CALL WRITEADDRESS MOV DATAIN_OUT,#055H ;写入测试数据 CALL WRITEDATA MOV A,DATAIN_OUT CPL A MOV R0,A ;取反数据 CALL READDATA MOV A,DATAIN_OUT ;返回数据应该是测试数据取反 XRL A,R0 JZ CH375_INIT_OK ;测试通过 MOV DATAIN_OUT,#CMD_RESET_ALL MOV R1,#050H ;多次重复发命令 CH375_INIT_HR: CALL WRITEADDRESS DJNZ R1,CH375_INIT_HR MOV R1,#0A0H ;160*256uS=40mS CH375_INIT_D2: CLR A CH375_INIT_D1: DJNZ ACC,CH375_INIT_D1 ;延时1uS DJNZ R1,CH375_INIT_D2 ;延时256uS SJMP CH375_INIT ;再次测试 CH375_INIT_OK: ;设置外部自定义的USB设备VID和PID,可选操作,不执行该命令则使用默认的VID和PID MOV DATAIN_OUT,#CMD_SET_USB_ID CALL WRITEADDRESS MOV DATAIN_OUT,#USB_VENDOR_ID_L CALL WRITEDATA MOV DATAIN_OUT,#USB_VENDOR_ID_H CALL WRITEDATA MOV DATAIN_OUT,#USB_PRODUCT_ID_L CALL WRITEDATA MOV DATAIN_OUT,#USB_PRODUCT_ID_H CALL WRITEDATA MOV DATAIN_OUT,#CMD_SET_USB_MODE CALL WRITEADDRESS MOV DATAIN_OUT,#06H ;设置为使用外部固件的USB设备方式 CALL WRITEDATA NOP NOP CH375_INIT_WT: CALL READDATA ;返回操作状态 MOV A,DATAIN_OUT XRL A,#CMD_RET_SUCCESS JNZ CH375_INIT_WT ;等待操作成功,通常需要等待10uS-20uS RET RET

;*********写指令子程序*********

WRITEADDRESS: SETB TB8 MOV SBUF,DATAIN_OUT JNB TI,$ CLR TI RET

;*********写数据子程序*********

WRITEDATA: CLR TB8 MOV SBUF,DATAIN_OUT JNB TI,$ CLR TI RET

;*********读数据子程序*********

READDATA: JNB RI,$ MOV DATAIN_OUT,SBUF CLR RI RET

[Emot]27[/Emot][Emot]27[/Emot][Emot]27[/Emot][Emot]27[/Emot][Emot]27[/Emot]

不同晶振,计算出的波特率会有误差,如果这个误差叠加了,那有可能就波特率不匹配了,导致出错。 不过19200不是很高,应该不会这样,


80C51上11.0592M晶振,就是标准的可产生准确19200的晶振呀。怎么还不行呢?难道是小了,换22.1184M的???

谢谢


不是波特率问题,工控机U盘串口卡上115200bps都很稳定,可能是延时DELAY3等延时不足,另代码中不需要设置PID、VID以及RST复位,尤其是CMD-RESET,因为RST命令会将CH375波特率恢复为9600bps


店小二利害,一语道破天机,我忘了,不应当复位的。我回去试。向您表示感谢。


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