ch372数据一定要一边发一边收吗?

我用C8051f040的芯片,用T2中断随时发送数据,用INT0收数据,如果收发中断都打开的人话,收发是正常的,但是如果T2中断不进去,也就是说不写T2中断不发数据给上位机,下位机这是也不能接收数据了(进不去中断了)为什么 下面是我的一点程序 void t2() interrupt 5 //定时器T2中断 { uchar i; EA =0; //关闭中断,防止对ch375中断产生干扰 TMR2CN = TMR2CN & 0X7F; number++;

sendbuffer[0] = number/256; //先读取高位 sendbuffer[1] = number%256;

ch375_cmd=CMD_WR_USB_DATA7; // 向USB端点2的发送缓冲区写入数据块 ch375_dat = 2; // 首先写入后续数据长度 for (i=0;i<2;i++) ch375_dat=sendbuffer[i]; if(number == 50) { number =0; L1 =~L1; }

EA =1; }

/* CH375中断服务程序,INT0 */ void ch375Interrupt() interrupt 0 { uchar InterruptStatus,i, length=0; ch375_cmd=CMD_GET_STATUS; /* 获取中断状态并取消中断请求 */ delay2us(); InterruptStatus = ch375_rd_dat( ); /* 获取中断状态 */ EA =0; switch ( InterruptStatus ) /* 分析中断状态处理 */ { case USB_INT_EP2_OUT: /* 批量端点下传成功 */ { ch375_cmd= CMD_RD_USB_DATA ; // 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区, 数据长度0~64字节 */ delay2us(); length = ch375_rd_dat( ); /* 首先读取后续数据长度 */ for ( i=0; i { receivebuffer[i] = ch375_rd_dat( ); // 接收数据包 */ delay2us(); } cc=receivebuffer[0]*256+receivebuffer[1]; flag = 1; L2 =~L2; ch375_cmd=CMD_UNLOCK_USB; /* 释放当前USB缓冲区 */ break; }

case USB_INT_EP2_IN: /* 批量数据发送成功 */ { ch375_cmd=CMD_UNLOCK_USB; /* 释放当前USB缓冲区 */ break; }

default: /* 其它中断,未用到,解锁后退出即可 */ { ch375_cmd= CMD_UNLOCK_USB ; ///* 释放当前USB缓冲区 */ break; } } EA =1; }

这个是你通信协议的问题,可能你计算机取到数据之后在发送数据。按照你给的程序,是完全可以实现下传,但是上传需要你自己写程序。


我没有定协议,上位机用CH372自带的C++的DEBUG372.EXE测试程序也不能发出去,就算把下位机发送程序放在主程序的while中,外部中断也进不去


你这样,在你设置好模式之后,加上这段代码之后在往计算机上面发数据,你看下可以不可以: void sent_data(){ unsigned char i; for(i=0;i!=64;i++)buf[i]=i; CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); CH375_WR_DAT_PORT(64); for(i=0;i!=64;i++) CH375_WR_DAT_PORT(buf[i]); }

main( ) { unsigned char c; Delay50ms( ); /* 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时 */ CH375_Init( ); /* 初始化CH375 */ mInitSTDIO( ); while(1){ /*用来确定主机是否准备好*/ Delay50ms(); CH375_WR_CMD_PORT(0x0a);//GET_TOGGLE命令 CH375_WR_DAT_PORT(0x20); c=CH375_RD_DAT_PORT(); if((c&0x20)==0x20)break; } Delay50ms(); sent_data();/*发送数据*/ while(1){ if(CH375_WIRE==0){ mCh375Interrupt(); sent_data(); } } }


不行啊,T2中断发数据怎么跟INT0发数据有关系呢?


你按照我上面的程序来发数据可以发吗?肯定是你软件的问题,上面给你的代码我们进行实际测试的


哦,,唉,是我的初始化程序错了,顺序反了,把设置速度放在最后面


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