请问:我用串口和375通讯,用375的测试命令#06H,单片机给375发FFH,但不能接受到00。为什么呢?
我的也是 而且我都能看到返回的数据到了单片机的rxd端了呢,就是单片机进不了终端,谁给个解释吧
我还想问一下,375的A0脚与单片机的哪个脚连接呢?怎么控制A0?
CH375HM_STA# 这与375的哪个管脚有关系,怎么控制它?
A0是用来控制是命令口还是数据口的,随便你接单片机的通用I/O引脚。 CH375HM_STA#是U盘读写模块上定义的引脚,与375的管脚无关。可以用来通知模块,说明命令包已经写入,请求开始执行命;或是中断应答,取消来自模块的中断请求,具体你可以看例子程序。
谢谢。但我对CH375HM_STA#的理解还不是很清楚。 另外,A0的功能我是明白了,但我用并口通讯方式时,D0~D7与单片机的P0.0~0.7连接。可是调试的时候,我怎么也不能控制单片机的P0口,我用的是汇编程序,但程序一旦进入主程序,P0口的地址就自动跳到03,无论我用什么指令都不能控制PO口,不知道是为什么?
你的串口调好了???
串口没有调好!因为我的并口不能用,我才用的串口,我是问问为什么并口不能用!
请问你用的是模块还是375芯片,如果是375芯片的话,就不会有#STA引脚,如果是使用并口的话,只要你用普通的I/O口来模拟出INTER时序就可以了,如果是总线的话,也要符合INTER时序,如果不是就用I/O口来模拟就可以了,还有就是如果是串口通信的话,那么你用的是什么单片机,375工作在串口的话,一般第9位为校验位
我串口是调通了,就是并口调不通,我用的是51单片机,是375芯片!
你用51的话,可以直接挂在总线上的。大体按说明书上的电路接,用总线方式的话,命令口地址和数据口地址得按你的接线来设定,一定不能设错。在进行其他操作之前,先做测试命令。 还有一点,用并口的话,TXD要接地,用来在375复位时选择并口方式。
那你测试命令发送的时候返回什么数据啊??
我说四个问题: 第一:我的接法是 D0~D7接单片机的P1~P7 ,A0接单片机的P3.4。CS#接地。 不知道这样接对不对
第二:请问375模块上的CH375HM_STA 怎么控制?我用的不是模块是375芯片!这个触发信号怎么给?
第三:比如我用串口发数,一个起始位,8个数据位,1个验证位,1个终止位。但我收回来的数应该是什么格式的,也是和我发的数一样的11位么?
第四:我用并口发数,随便一个数,它正常情况下应该收到什么格式的数? 谢谢!
1、你将D0~D7接单片机的P1~P7 ,没选择总线方式的话,应该选用模拟并口,也就是得把WR#、RD#接到单片机的I/O口,以控制读写信号,以模拟并口来写三个读写子程序; 2、模块上的CH375HM_STA并不是375的引脚,你直接用375的话,和CH375HM_STA无关; 3、串口才用9位数据方式的话,收到的也是9位的数据(8个数据位,1个验证位); 4、并口的话当然是8位的数据了。
哦明白了,不过我现在又遇到一个问题,下面是我的一段测试程序,让375返回版本号的程序,可是怎么也不能返回正确的数,每次都是01H,请帮我看下! INCLUDE "CH375HM.INC" ;=============================================================== ORG 0000H LJMP MAIN
;================================================================= CH375HM_INDEX XDATA 0BCF0H CH375HM_DATA XDATA 0BDF1H CH375HM_RD EQU 0B7H CH375HM_WR EQU 0B6H CH375HM_INT EQU INT0 CH375HM_A0 EQU 0B4H CH375HM_CS EQU 0B5H DATA_BUF XDATA 00000H MCMDPARAM DATA 20H SECTOR_COUNT DATA 1DH NEW_SIZE_HIGH DATA 1EH NEW_SIZE_LOW DATA 1FH CH375_CHECK EQU 00H P11 EQU 091H P14 EQU 094H ;======================================================================================= MDELAY100MS: MOV R7,#0C8H MDELAY100MS_1: MOV R6,#0C8H MDELAY100MS_2: NOP NOP NOP DJNZ R6,MDELAY100MS_2 DJNZ R7,MDELAY100MS_1 RET
;================================================================================== MAIN: CLR A MOV PSW,A MOV IE,A MOV SP,#60H MOV A,#0FFH MOV P0,A MOV P1,A MOV P2,A MOV P3,A MOV A,#20H MOV TMOD,A MOV SCON,#0D0H MOV TH1,#0FDH MOV TL1,#0FDH CLR PSW.5 SETB ET0 SETB PT0 SETB SM2 SETB EA SETB ES SETB TR1 NOP MAIN_LOOP: CLR EA CLR ES MOV A,#01H MOV P1,A NOP SETB CH375HM_RD SETB CH375HM_A0 CLR CH375HM_WR CLR CH375HM_CS NOP MOV P1,#0FFH SETB CH375HM_CS NOP CLR CH375HM_RD CLR CH375HM_A0 SETB CH375HM_WR CLR CH375HM_CS NOP NOP MOV A,P1 NOP LCALL MDELAY100MS NOP END1: END MAIN END
你的程序有问题啊,测试命令应该是这样做: MOV P1,#0FFH SETB CH375HM_RD SETB CH375HM_WR CLR CH375HM_A0 SETB CH375HM_CS;初始化I/O口 MOV P1,#06H SETB CH375HM_A0 CLR CH375HM_CS CLR CH375HM_WR NOP SETB CH375HM_WR SETB CH375HM_CS;写命令 CLR CH375HM_A0 MOV P1;#0FFH; NOP MOV P1;#55H; 写数据 CLR CH375HM_A0 CLR CH375HM_CS CLR CH375HM_WR NOP NOP SETB CH375HM_WR SETB CH375HM_CS MOV P1,#0FF;写数据 NOP NOP CLR CH375HM_A0 CLR CH375HM_CS CLR CH375HM_RD MOV A,P1 NOP NOP SETB CH375HM_RD SETB CH375HM_CS MOV A,#0FFH;读数据 这个是一个测试命令的流程,你可以参考,中间有部分延时需要根据你的单片机的速度来调整