soniczlg
驱动牛犊
驱动牛犊
  • 注册日期2003-07-02
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1337回复:8

D12入门的问题 会者不难 谢谢!

楼主#
更多 发布于:2003-07-03 16:17
我使用的是周立功D12.

C51 如何向 PC 发送数据呢?

谁给个例子给我呢?或者说说发送过程.

我改动了周立功控制信号灯例子里面的mainloop.c,
我调用了
D12_WriteEndpoint(3, 4, GenEpBuf); //往端点1写数据

可以成功写入,但是PC端没有看到数据啊.
PC端绝对没有问题的.单片机这方面我就不熟了.
谢谢!

您好。
xjLegend
驱动小牛
驱动小牛
  • 注册日期2002-11-04
  • 最后登录2005-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-03 16:26
你需要修改d12test工程里的InterruptIn()函数,对收到的数据进行处理。
我想要点分,这样才有成就感嘛!
soniczlg
驱动牛犊
驱动牛犊
  • 注册日期2003-07-02
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-03 16:32
xjLegend:
不对啊.如果我不改动C51原来的程序,
D12test这边我可以读到数据的啊.

我是要改动C51这边的程序不知道怎么改.让C51给PC发数据.
因为C51例子里只有接收PC的数据.

就是  \"周立功USB51S程序\"如何改动的问题.

不知道是不是我没有说清楚.

不过谢谢你的回答,你懂怎么改吗?我可以把程序发上去.
您好。
xjLegend
驱动小牛
驱动小牛
  • 注册日期2002-11-04
  • 最后登录2005-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-03 16:41
原来的固件程序在端点3只向上传输一个字节(信号灯的编码值).
如果这个值你改了,那么PC高层也要相应的修改(分析收到的值).
我想要点分,这样才有成就感嘛!
soniczlg
驱动牛犊
驱动牛犊
  • 注册日期2003-07-02
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-03 16:55
xjLegend:
    我不大明白.可以具体说说吗?
原来的程序是这样:
void check_key_LED(void)
{
static unsigned char c, last_key = 0xf;

c = MCU_SWM0 & MCU_SWM1;
c &= 0x0f;
if (c != last_key) {
D12_WriteEndpoint(3, 1, &c);//按键状态改变,发送信息给主机
}
last_key = c;

if(bEPPflags.bits.ep1_rxdone) {
DISABLE;//接收到主机发来的LED控制信息
bEPPflags.bits.ep1_rxdone = 0;
ENABLE;
MCU_LED0 = !(GenEpBuf[3] & 0x1);//控制LED状态
MCU_LED1 = !(GenEpBuf[3] & 0x2);
}
}

我要怎么改才能让C51发送一个数据让PC收到呢?
您好。
soniczlg
驱动牛犊
驱动牛犊
  • 注册日期2003-07-02
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-03 16:58
或者可能不在这里修改.

我真的不懂在哪里修改可以让c51发送数据给pc,
不是就调用D12_WriteEndpoint就可以吗?

非常感谢你的热心帮助.
您好。
xjLegend
驱动小牛
驱动小牛
  • 注册日期2002-11-04
  • 最后登录2005-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-03 17:04
xjLegend:
    我不大明白.可以具体说说吗?
原来的程序是这样:
void check_key_LED(void)
{
static unsigned char c, last_key = 0xf;

c = MCU_SWM0 & MCU_SWM1;
c &= 0x0f;
if (c != last_key) {
D12_WriteEndpoint(3, 1, &c);//按键状态改变,发送信息给主机
}
last_key = c;



if(bEPPflags.bits.ep1_rxdone) {
DISABLE;//接收到主机发来的LED控制信息
bEPPflags.bits.ep1_rxdone = 0;
ENABLE;
MCU_LED0 = !(GenEpBuf[3] & 0x1);//控制LED状态
MCU_LED1 = !(GenEpBuf[3] & 0x2);
}
}

我要怎么改才能让C51发送一个数据让PC收到呢?
 

前半段程序是判断按键状态改变与否,若改变则发送编码值,PC端在InterruptIn()线程中处理;
后半段则是接收PC端发来的按钮改变编码值,具体值可查看PC程序中的相应按钮响应函数。

你可在主程序的任意地方调用D12_WriteEndpoint(3,...) 发送数据,相应的PC端线程中也要判断处理收到的数据.
我想要点分,这样才有成就感嘛!
soniczlg
驱动牛犊
驱动牛犊
  • 注册日期2003-07-02
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-03 17:10
那个程序我是看懂了.

我大概明白你的意思了,发送数据没收到估计就是InterruptIn()没有修改.

我看到了:

//端点1输出中断操作
void ep1_txdone(void)
{
D12_ReadLastTransactionStatus(3);//复位中断寄存器
//可添加用户代码(进行检测端点号3IN令牌的操作)
}

可是怎么改呢?无从下手啊.
您好。
soniczlg
驱动牛犊
驱动牛犊
  • 注册日期2003-07-02
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-04 10:01
好了.

给分.
您好。
游客

返回顶部