[求助]CH375初始化失败

写0X06返回的都是0XFA void CH375_WR_CMD( uchar cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ A0 = 1 ; WR = 0 ; RD = 1 ; CS = 0 ; DATA_PORT = cmd ; delayus(10) ; WR = 1 ; CS = 1 ; delayms(1); }

void CH375_WR_DAT( uchar dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ A0 = 0 ; WR = 0 ; RD = 1 ; CS = 0 ; DATA_PORT = dat ; delayus(10) ; WR = 1 ; CS = 1 ; delayms(1); }

uchar CH375_RD_DAT(void) { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ uchar dat = 0 ; A0 = 0 ; WR = 1 ; RD = 0 ; P0 = 0XFF ; CS = 0 ; dat = DATA_PORT ; delayus(10) ; RD = 1 ; CS = 1 ; delayms(1); return(dat) ; } void main(void) { uchar status = 0 ; Uart0_Init(57600) ; P0 = 0XFF ; P1 = 0XFF ; P2 = 0XFF ; P3 = 0XFF ; EA = 1 ; Send_Uart0(0x55) ; while(1) { CH375_WR_CMD(CMD_CHECK_EXIST); CH375_WR_DAT(0X55) ; status = CH375_RD_DAT() ; Send_Uart0(status) ; delayms(1000) ; } }

软件上电之后先延时50ms,51单片机的P0口在作为IO口使用的时候需要外接上拉电阻。


STC12LE5A32S2,18.432M,电路如下


201011231541479.jpg


uchar CH375_RD_DAT(void) { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ uchar dat = 0 P0 = 0XFF A0 = 0 WR = 1 RD = 0 CS = 0 dat = DATA_PORT delayus(10) RD = 1 CS = 1 delayms(1); return(dat) } 这样实验一下


还是返回FA


void main(void) { uchar status = 0 delayms(1000); Uart0_Init(57600) P0 = 0XFF P1 = 0XFF P2 = 0XFF P3 = 0XFF EA = 1 Send_Uart0(0x55) while(1) { CH375_WR_CMD(CMD_CHECK_EXIST); CH375_WR_DAT(0X55) status = CH375_RD_DAT() Send_Uart0(status) delayms(1000) } } 提一个问题,你的C语言连分号都没有,怎么编译通过的?


有分号,复制时不知道怎么就没了,复位状态都正常,不能初始化


按照楼上的测试的话,返回的数据是多少?


换了芯片可以了,但是上位机端点2给375发数据,中断状态返回的是82而不是02


按照楼上所说的测试命令通过了吗?好像硬件上面还有问题啊


硬件没问题了,可以发现设备了,也能产生中断,就是中断状态不对,返回PC端点2传数据返回0X82


发现硬件并不能说明单片机和并口的连线无问题,建议你先做测试命令,等测试命令成功之后后面的中断状态才是正确的。


现在可以传数了,就是速度慢,每次64字节,速度大约3KB/S,怎样才能把速度提高呢?


这个和你上位机和下位机程序有关系,下位机部分主要你往CH372写64字节的时候的速度有多快。上位机在取数据的时候,一次取数据部要取64字节,建议你取4096字节,这样速度就会提高点。


你好,还有个问题,现在用I/O模拟时序可以,但是到总线上就不行了,感觉是总线的WR/RD宽度不够,模拟时序加NOP了,现在模拟时序WR/RD大约6uS宽,可以初始化成功,总线一直不成功.单片机STC89LE52RC,18.43M主频,我用的是CH375B


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