我用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; }