5471|1

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机用串口送MIDI信号给PC机? [复制链接]

硬件实验设计板是这样的:
一个独立按键和4X3距阵键盘(共13个按键),用中断扫描键盘是否被按下,如一个按键被按下就向PC机发送一个单音的MIDI信号音符。我只知道用单片机向PC机发送MIDI信号的协议是这样的
//这是发送函数
void send(uchar cc,kk,vv)//cc是命令+通道号,kk是音符号,vv是力度
{  
TR1=1;
SBUF=cc;
while(TI==0);
TI=0;
SBUF=kk;
while(TI==0);
TI=0;
SBUF=vv;
while(TI==0);

   TI=0;
   TR1=0;
}
在MIDI协议中,通道号是0-16,音符号是0-127,力度是0-127
但我在按下按键的时候应该怎样去调用那个发送函数来发送MIDI信号呢?
因为我这里只需要用来的是13个按键,所以通道号我用的是1就够啦!力度用同一力度就可以,但那音符应该怎样算出来呢?发送到PC机时,PC机又怎么会知道单片机发送的数据是MIDI信号数据呢?

在MIDI协议里,数据传输的波特率是为31.25k吗?如果我是用12MHZ的晶振,那应该怎样计算出31.25k呢?

跪求简单实例源码或详细解说!!
谢谢各位大哥大姐

最新回复

void send(uchar *cc ,uchar length)//cc是命令+通道号,kk是音符号,vv是力度 {   //TR1=1;   定时器一直跑的,不需要重开。   uchar i =0;    send('#');    while(length--)    {        SBUF =cc[i++];        while(!TI);        TI =0;    }    send('@'); } 定义好发送协议,接收端也就按照协议的顺序取数就可以了,波特率自己算,这也问。     详情 回复 发表于 2009-12-17 13:07
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
void send(uchar *cc ,uchar length)//cc是命令+通道号,kk是音符号,vv是力度
{  
//TR1=1;   定时器一直跑的,不需要重开。

  uchar i =0;
   send('#');
   while(length--)
   {
       SBUF =cc[i++];
       while(!TI);
       TI =0;
   }
   send('@');
}

定义好发送协议,接收端也就按照协议的顺序取数就可以了,波特率自己算,这也问。

  
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表