【发布时间】:2015-04-21 00:40:08
【问题描述】:
所以我正在创建一个需要二进制输出才能运行的项目。我有一系列 IF 语句来确定输出是什么,这里一切正常。问题是我正在使用 PIC 微控制器 16F877 并用 C 语言编程。 我正在使用 RS232 将信息直接发送到具有大约 8 个音符值和 8 个音量值(8x8 选项集)的 midi 控制器。
我也在用proteus和CCS编程。
我的问题是:如何以二进制创建 MIDI 输出? 我知道所有二进制值,但我不确定如何创建“midi 友好”输出。
编辑:根据要求添加示例代码:
#include <16F877.h>
TRISB=1; //sets all tris in portB to 1, to allow as inputs
TRISD=1; //sets all tris in portD to 1, to allow as inputs
TRISC.RC6=0; //sets trisC port 6 to 0, to allow as an output
#use rs232(baud=9600,parity=N,xmit=STDOUT,rcv=None,bits=8,stream=PORT1,float_high)
// initialises RS232 and configures for transmision
#use delay(crystal=4MHz)
// crystal at 4MHz is used (XT MODE)
#define X1 PIN_B0 //names pin B0 as X1
#define X2 PIN_B1 //names pin B1 as X2
#define X3 PIN_B2 //names pin B2 as X3
#define X4 PIN_B3 //names pin B3 as X4
#define X5 PIN_B4 //names pin B4 as X5
#define X6 PIN_B5 //names pin B5 as X6
#define X7 PIN_B6 //names pin B6 as X7
#define X8 PIN_B7 //names pin B7 as X8
#define STDOUT PIN_C6 // Names pin C6 as STDOUT
#define Y1 PIN_D0 //names pin D0 as Y1
#define Y2 PIN_D1 //names pin D1 as Y2
#define Y3 PIN_D2 //names pin D2 as Y3
#define Y4 PIN_D3 //names pin D3 as Y4
#define Y5 PIN_D4 //names pin D4 as Y5
#define Y6 PIN_D5 //names pin D5 as Y6
#define Y7 PIN_D6 //names pin D6 as Y7
#define Y8 PIN_D7 //names pin D7 as Y8
char xout;
char yout;
int main (void)
{
if(B0==1) //if B0 is 1, sets xout to "A"
{
xout='A';
}
if(B1==1) //if B1 is 1, sets xout to "B"
{
xout='B';
}
if(B2==1) //if B2 is 1, sets xout to "C"
{
xout='C';
}
if(B3==1) //if B3 is 1, sets xout to "D"
{
xout="D";
}
if(B4==1) //if B4 is 1, sets xout to "E"
{
xout='E';
}
if(B5==1) //if B5 is 1, sets xout to "F"
{
xout='F';
}
if(B6==1) //if B6 is 1, sets xout to "G"
{
xout='G';
}
if(B7==1) //if B7 is 1, sets xout to "H"
{
xout='H';
}
if(D0==1) //if D0 is 1, sets yout to "A"
{
yout='A';
}
if(D1==1) //if D1 is 1, sets yout to "B"
{
yout='B';
}
if(D2==1) //if D2 is 1, sets yout to "C"
{
yout='C';
}
if(D3=1) //if D3 is 1, sets yout to "D"
{
yout='D';
}
if(D4==1) //if D4 is 1, sets yout to "E"
{
yout='E';
}
if(D5==1) //if D5 is 1, sets yout to "F"
{
yout='F';
}
if(D6==1) //if D6 is 1, sets yout to "G"
{
yout='G';
}
if(D7==1) //if D7 is 1, sets yout to "H"
{
yout='H';
}
printf("%c,%c", xout yout); //outputs xout and yout for display on a screen
代替字母(它们只是为了演示一个实际的输出,以便我可以进入 midi)将是二进制代码,printf 将改为输出在 IF 语句中确定的 midi 值
编辑 2:进一步了解
我将基本上使用一个 8x8 的“开关”网格(使用可见光作为接口)x 轴控制音符,Y 轴控制音量。我只需要一个输出,它将通过 5 针 DIN 直接进入 midi 控制器
【问题讨论】:
-
您是要在线上的 midi 协议吗? ccrma.stanford.edu/~craig/articles/linuxmidi/misc/…
-
这肯定会有所帮助(因为我实际上并不处于那个阶段)但我要问的是我如何实际发送二进制格式的输出
-
请将实际代码添加到问题中。
-
“二进制 MIDI 输出”是什么意思?您正在通过端口串行发送字节。一个字节由一系列位组成。根据定义,它是二进制的。